diff --git a/core/DataAccess/Model.php b/core/DataAccess/Model.php
index ba04962ff48c8ed14ab1f863ea5efa77e54ed64a..d5da1e33edf73d75df7b5da6b69235dcde113042 100644
--- a/core/DataAccess/Model.php
+++ b/core/DataAccess/Model.php
@@ -304,11 +304,12 @@ class Model
     {
         // duplicate idarchives are Ignored, see https://github.com/piwik/piwik/issues/987
         $query = "INSERT IGNORE INTO " . $tableName . " (" . implode(", ", $fields) . ")
-                  VALUES (?,?,?,?,?,?,?,?)";
+                  VALUES (?,?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE " . end($fields) . " = ?";
 
         $bindSql   = $record;
         $bindSql[] = $name;
         $bindSql[] = $value;
+        $bindSql[] = $value;
 
         Db::query($query, $bindSql);
 
diff --git a/tests/PHPUnit/Integration/ArchiveTest.php b/tests/PHPUnit/Integration/ArchiveTest.php
index 906cfe40c986bee9ce79ec92c60cd1aa4be4c0af..df8ef4021ceeae0fe1584ab901f263d5bbe1d296 100644
--- a/tests/PHPUnit/Integration/ArchiveTest.php
+++ b/tests/PHPUnit/Integration/ArchiveTest.php
@@ -7,16 +7,21 @@
  */
 namespace Piwik\Tests\Integration;
 
+use Piwik\API\Proxy;
 use Piwik\Archive as PiwikArchive;
+use Piwik\ArchiveProcessor;
 use Piwik\ArchiveProcessor\Parameters;
 use Piwik\ArchiveProcessor\Rules;
 use Piwik\Common;
 use Piwik\Config;
+use Piwik\DataAccess\ArchiveSelector;
 use Piwik\DataAccess\ArchiveTableCreator;
 use Piwik\DataAccess\ArchiveWriter;
+use Piwik\DataAccess\LogAggregator;
 use Piwik\Date;
 use Piwik\Db;
 use Piwik\Piwik;
+use Piwik\Plugins\UserLanguage;
 use Piwik\Segment;
 use Piwik\Site;
 use Piwik\Tests\Fixtures\OneVisitorTwoVisits;
@@ -229,6 +234,65 @@ class ArchiveTest extends IntegrationTestCase
         );
     }
 
+    public function testExistingArchivesAreReplaced()
+    {
+        $date = self::$fixture->dateTime;
+        $period = PeriodFactory::makePeriodFromQueryParams('UTC', 'day', $date);
+
+        // request an report to trigger archiving
+        $userLanguageReport = Proxy::getInstance()->call('\\Piwik\\Plugins\\UserLanguage\\API', 'getLanguage', array(
+            'idSite' => 1,
+            'period' => 'day',
+            'date' => $date
+        ));
+
+        $this->assertEquals(1, $userLanguageReport->getRowsCount());
+        $this->assertEquals('UserLanguage_LanguageCode fr', $userLanguageReport->getFirstRow()->getColumn('label'));
+        $this->assertEquals('UserLanguage_LanguageCode fr', $userLanguageReport->getLastRow()->getColumn('label'));
+
+        $parameters = new Parameters(new Site(1), $period, new Segment('', ''));
+        $parameters->setRequestedPlugin('UserLanguage');
+
+        $result    = ArchiveSelector::getArchiveIdAndVisits($parameters, $period->getDateStart()->getDateStartUTC());
+        $idArchive = $result ? array_shift($result) : null;
+
+        if (empty($idArchive)) {
+            $this->fail('Archive should be available');
+        }
+
+        // track a new visits now
+        $fixture = self::$fixture;
+        $t = $fixture::getTracker(1, $date, $defaultInit = true);
+        $t->setForceVisitDateTime(Date::factory($date)->addHour(1)->getDatetime());
+        $t->setUrl('http://example.org/index.htm');
+        $t->setBrowserLanguage('pt-br');
+        $fixture::checkResponse($t->doTrackPageView('my site'));
+
+        $archiveWriter            = new ArchiveWriter($parameters, !!$idArchive);
+        $archiveWriter->idArchive = $idArchive;
+
+        $archiveProcessor = new ArchiveProcessor($parameters, $archiveWriter,
+            new LogAggregator($parameters));
+
+        $archiveProcessor->setNumberOfVisits(1, 1);
+
+        // directly trigger specific archiver for existing archive
+        $archiver = new UserLanguage\Archiver($archiveProcessor);
+        $archiver->aggregateDayReport();
+
+        // report should be updated
+        $userLanguageReport = Proxy::getInstance()->call('\\Piwik\\Plugins\\UserLanguage\\API', 'getLanguage', array(
+            'idSite' => 1,
+            'period' => 'day',
+            'date' => $date
+        ));
+
+        $this->assertEquals(2, $userLanguageReport->getRowsCount());
+        $this->assertEquals('UserLanguage_LanguageCode fr', $userLanguageReport->getFirstRow()->getColumn('label'));
+        $this->assertEquals('UserLanguage_LanguageCode pt', $userLanguageReport->getLastRow()->getColumn('label'));
+    }
+
+
     private function createManyDifferentArchiveBlobs()
     {
         $recordName1 = 'Actions_Actions';