diff --git a/VERSIONS_WIP/140256 b/VERSIONS_WIP/140256
new file mode 100644
index 0000000000000000000000000000000000000000..2a166cba7138798d3ac1487a8f511394af320b69
--- /dev/null
+++ b/VERSIONS_WIP/140256
@@ -0,0 +1 @@
+ - ticket #140256 : Agenda externe : correction de la duplication des horaires à l'import
\ No newline at end of file
diff --git a/library/Class/ExternalAgenda.php b/library/Class/ExternalAgenda.php
index 6780dc2a719f08a58249bdb832b546ec79eaeff3..ffa01cc69189a4a92d0ac263ff1eb80140742ab4 100644
--- a/library/Class/ExternalAgenda.php
+++ b/library/Class/ExternalAgenda.php
@@ -84,22 +84,40 @@ class Class_ExternalAgenda extends Storm_Model_Abstract {
     $created = $events->select('isNew');
     $updated = $events->reject('isNew');
 
-    // must be after updated detection
-    $created->eachDo(function($model)
+    $this
+      ->_saveCreatedEvents($created)
+      ->_saveUpdatedEvents($updated)
+      ->_deleteOrphanEvents($events);
+
+    if ($after_import)
+      $after_import($created, $updated);
+
+    return $this;
+  }
+
+
+  protected function _saveCreatedEvents($created) {
+    $created->eachDo(function($article)
                      {
-                       $model
-                         ->setDateCreation(date('Y-m-d H:i:s', $this->getCurrentTime()))
+                       $article
+                         ->setDateCreation(date('Y-m-d H:i:s',
+                                                $this->getCurrentTime()))
                          ->save();
                      });
+    return $this;
+  }
 
-    if (!Class_AdminVar::get('AGENDA_KEEP_LOCAL_CONTENT'))
-      $updated->eachDo(function ($model) { $model->updateDateMaj()->save(); });
 
-    if ($this->getDeleteOrphanEvents())
-      $this->_deleteOrphanEvents($events);
+  protected function _saveUpdatedEvents($updated) {
+    if (Class_AdminVar::get('AGENDA_KEEP_LOCAL_CONTENT'))
+      return $this;
 
-    if ($after_import)
-      $after_import($created, $updated);
+    $updated->eachDo(function($article)
+                     {
+                       Class_Article_EventTiming::basicDeleteBy(['article_id' => $article->getId()]);
+                       $article->updateDateMaj()->save();
+                     });
+    return $this;
   }
 
 
@@ -116,8 +134,9 @@ class Class_ExternalAgenda extends Storm_Model_Abstract {
 
 
   public function deduplicateEvent($event){
-    if ($existing_event = $this->findEventByUID($event->getIdOrigine()))
+    if ($existing_event = $this->findEventByUID($event->getIdOrigine())) {
       $event->setId($existing_event->getId());
+    }
   }
 
 
@@ -132,12 +151,16 @@ class Class_ExternalAgenda extends Storm_Model_Abstract {
 
 
   protected function _deleteOrphanEvents($updated_events) {
+    if (!$this->getDeleteOrphanEvents())
+      return $this;
+
     $delete_params = ['repository_origine' => $this->getRepositoryKey()];
 
     if (!$updated_events->isEmpty())
       $delete_params['ID_ARTICLE not'] = $updated_events->collect('id')->getArrayCopy();
 
     Class_Article::deleteBy($delete_params);
+    return $this;
   }
 
 
diff --git a/tests/scenarios/ArticlesMultipleTimings/ArticlesMultipleTimingsOpenAgendaImportTest.php b/tests/scenarios/ArticlesMultipleTimings/ArticlesMultipleTimingsOpenAgendaImportTest.php
index 9263b16681a3b32566f0ba70c672d472aab12b92..a815a5fea87cb2b605529d9db8eafa878263fcb9 100644
--- a/tests/scenarios/ArticlesMultipleTimings/ArticlesMultipleTimingsOpenAgendaImportTest.php
+++ b/tests/scenarios/ArticlesMultipleTimings/ArticlesMultipleTimingsOpenAgendaImportTest.php
@@ -72,10 +72,14 @@ class ArticlesMultipleTimingsOpenAgendaImportTest extends ExternalAgendasOpenAge
   }
 
 
+  protected function _dumpArticleTimings($id) {
+    return array_map(function($timing) { return $timing->getRawAttributes(); },
+                     Class_Article::find($id)->getEventTimings());
+  }
+
+
   /** @test */
   public function firstArticleShouldHaveThreeTimings() {
-    $timings = array_map(function($timing) { return $timing->getRawAttributes(); },
-                         Class_Article::find(1)->getEventTimings());
     $this->assertEquals([
                          ['start' => '2019-11-25 09:30',
                           'end' => '2019-11-25 11:30',
@@ -92,7 +96,31 @@ class ArticlesMultipleTimingsOpenAgendaImportTest extends ExternalAgendasOpenAge
                           'article_id' => 1,
                           'id' => 3]],
 
-                        $timings);
+                        $this->_dumpArticleTimings(1));
+
+  }
+
+
+  /** @test */
+  public function onSecondImportArticleShouldStillHaveThreeTimings() {
+    Class_ExternalAgenda::find(12)->import();
+    $this->assertEquals([
+                         ['start' => '2019-11-25 09:30',
+                          'end' => '2019-11-25 11:30',
+                          'article_id' => 1,
+                          'id' => 9],
+
+                         ['start' => '2019-11-29 09:00',
+                          'end' => '2019-11-29 11:00',
+                          'article_id' => 1,
+                          'id' => 10],
+
+                         ['start' => '2019-12-01 09:30',
+                          'end' => '2019-12-01 10:30',
+                          'article_id' => 1,
+                          'id' => 11]],
+
+                        $this->_dumpArticleTimings(1));
 
   }
 
@@ -105,8 +133,6 @@ class ArticlesMultipleTimingsOpenAgendaImportTest extends ExternalAgendasOpenAge
 
   /** @test */
   public function articleTwoShouldHaveTimingsSameAsOrigine() {
-    $timings = array_map(function($timing) { return $timing->getRawAttributes(); },
-                         Class_Article::find(2)->getEventTimings());
     $this->assertEquals([
                          ['start' => '2019-11-25 10:00',
                           'end' => '2019-11-25 10:30',
@@ -117,7 +143,7 @@ class ArticlesMultipleTimingsOpenAgendaImportTest extends ExternalAgendasOpenAge
                           'article_id' => 2,
                           'id' => 5]
                          ],
-                        $timings);
+                        $this->_dumpArticleTimings(2));
 
   }
 }