diff --git a/core/Archive.php b/core/Archive.php
index 097ed9024d907218fefd0a8dde536a4b7cd15374..54133939724fc1917868e2060e48f75390282bba 100644
--- a/core/Archive.php
+++ b/core/Archive.php
@@ -554,7 +554,7 @@ class Archive
             }
 
             try {
-                $invalidator->markArchivesAsInvalidated($siteIdsToActuallyInvalidate, $date, false);
+                $invalidator->markArchivesAsInvalidated($siteIdsToActuallyInvalidate, array(Date::factory($date)), false);
             } catch (\Exception $e) {
                 Site::clearCache();
                 throw $e;
diff --git a/core/Archive/ArchiveInvalidator.php b/core/Archive/ArchiveInvalidator.php
index f3e1a250a0968346a3135a8bb67a20675bbd7f9d..e686a0b847967939f58af9a393163f2b8c024c1e 100644
--- a/core/Archive/ArchiveInvalidator.php
+++ b/core/Archive/ArchiveInvalidator.php
@@ -47,7 +47,6 @@ class ArchiveInvalidator
     private $warningDates = array();
     private $processedDates = array();
     private $minimumDateWithLogs = false;
-    private $invalidDates = array();
 
     private $rememberArchivedReportIdStart = 'report_to_invalidate_';
 
@@ -117,8 +116,8 @@ class ArchiveInvalidator
     }
 
     /**
-     * @param $idSites array
-     * @param $dates string
+     * @param $idSites int[]
+     * @param $dates Date[]
      * @param $period string
      * @return array
      * @throws \Exception
@@ -126,15 +125,14 @@ class ArchiveInvalidator
     public function markArchivesAsInvalidated(array $idSites, $dates, $period)
     {
         $this->findOlderDateWithLogs();
-        $datesToInvalidate = $this->getDatesToInvalidateFromString($dates);
 
-        $datesByMonth = $this->getDatesByYearMonth($datesToInvalidate);
+        $datesByMonth = $this->getDatesByYearMonth($dates);
         $this->markArchivesInvalidatedFor($idSites, $period, $datesByMonth);
 
         $this->persistInvalidatedArchives($idSites, $datesByMonth);
 
         foreach ($idSites as $idSite) {
-            foreach ($datesToInvalidate as $date) {
+            foreach ($dates as $date) {
                 $this->forgetRememberedArchivedReportsToInvalidate($idSite, $date);
             }
         }
@@ -171,37 +169,6 @@ class ArchiveInvalidator
         }
     }
 
-    /**
-     * Ensure the specified dates are valid.
-     * Store invalid date so we can log them
-     * @param array $dates
-     * @return Date[]
-     */
-    private function getDatesToInvalidateFromString($dates)
-    {
-        $toInvalidate = array();
-
-        $dates = explode(',', trim($dates));
-        $dates = array_unique($dates);
-
-        foreach ($dates as $theDate) {
-            $theDate = trim($theDate);
-            try {
-                $date = Date::factory($theDate);
-            } catch (\Exception $e) {
-                $this->invalidDates[] = $theDate;
-                continue;
-            }
-            if ($date->toString() == $theDate) {
-                $toInvalidate[] = $date;
-            } else {
-                $this->invalidDates[] = $theDate;
-            }
-        }
-
-        return $toInvalidate;
-    }
-
     private function findOlderDateWithLogs()
     {
         // If using the feature "Delete logs older than N days"...
@@ -222,7 +189,7 @@ class ArchiveInvalidator
      * @param $datesToInvalidate Date[]
      * @return array
      */
-    private function getDatesByYearMonth($datesToInvalidate)
+    private function getDatesByYearMonth(array $datesToInvalidate)
     {
         $datesByMonth = array();
         foreach ($datesToInvalidate as $date) {
@@ -265,10 +232,6 @@ class ArchiveInvalidator
                 "\n The last day with logs is " . $this->minimumDateWithLogs . ". " .
                 "\n Please disable 'Delete old Logs' or set it to a higher deletion threshold (eg. 180 days or 365 years).'.";
         }
-        if ($this->invalidDates) {
-            $output[] = 'Warning: some of the Dates to invalidate were invalid: ' .
-                implode(", ", $this->invalidDates) . ". Piwik simply ignored those and proceeded with the others.";
-        }
 
         $output[] = "Success. The following dates were invalidated successfully: " . implode(", ", $this->processedDates);
         return $output;
diff --git a/plugins/CoreAdminHome/API.php b/plugins/CoreAdminHome/API.php
index dc7d25f494375fdccb0c395f0d5bf7e6e26d080e..119d56d74f92b2a22da0349d7e68ad2b4e1c0039 100644
--- a/plugins/CoreAdminHome/API.php
+++ b/plugins/CoreAdminHome/API.php
@@ -14,6 +14,7 @@ use Monolog\Logger;
 use Piwik\Container\StaticContainer;
 use Piwik\Archive\ArchiveInvalidator;
 use Piwik\CronArchive;
+use Piwik\Date;
 use Piwik\Db;
 use Piwik\Piwik;
 use Piwik\Scheduler\Scheduler;
@@ -73,15 +74,21 @@ class API extends \Piwik\Plugin\API
     public function invalidateArchivedReports($idSites, $dates, $period = false)
     {
         $idSites = Site::getIdSitesFromIdSitesString($idSites);
-
         if (empty($idSites)) {
             throw new Exception("Specify a value for &idSites= as a comma separated list of website IDs, for which your token_auth has 'admin' permission");
         }
 
         Piwik::checkUserHasAdminAccess($idSites);
 
+        list($dateObjects, $invalidDates) = $this->getDatesToInvalidateFromString($dates);
+
         $invalidator = new ArchiveInvalidator();
-        $output = $invalidator->markArchivesAsInvalidated($idSites, $dates, $period);
+        $output = $invalidator->markArchivesAsInvalidated($idSites, $dateObjects, $period);
+
+        if ($invalidDates) {
+            $output[] = 'Warning: some of the Dates to invalidate were invalid: ' .
+                implode(", ", $invalidDates) . ". Piwik simply ignored those and proceeded with the others.";
+        }
 
         Site::clearCache();
 
@@ -107,4 +114,37 @@ class API extends \Piwik\Plugin\API
         $archiver = new CronArchive();
         $archiver->main();
     }
+
+    /**
+     * Ensure the specified dates are valid.
+     * Store invalid date so we can log them
+     * @param array $dates
+     * @return Date[]
+     */
+    private function getDatesToInvalidateFromString($dates)
+    {
+        $toInvalidate = array();
+        $invalidDates = array();
+
+        $dates = explode(',', trim($dates));
+        $dates = array_unique($dates);
+
+        foreach ($dates as $theDate) {
+            $theDate = trim($theDate);
+            try {
+                $date = Date::factory($theDate);
+            } catch (\Exception $e) {
+                $invalidDates[] = $theDate;
+                continue;
+            }
+
+            if ($date->toString() == $theDate) {
+                $toInvalidate[] = $date;
+            } else {
+                $invalidDates[] = $theDate;
+            }
+        }
+
+        return array($toInvalidate, $invalidDates);
+    }
 }
\ No newline at end of file
diff --git a/plugins/CoreAdminHome/Commands/FixDuplicateLogActions.php b/plugins/CoreAdminHome/Commands/FixDuplicateLogActions.php
index be9c74a1527db0e1da2dffabec7834447837c63d..fbfbcf1df05fc979da95578114d756636366ae85 100644
--- a/plugins/CoreAdminHome/Commands/FixDuplicateLogActions.php
+++ b/plugins/CoreAdminHome/Commands/FixDuplicateLogActions.php
@@ -12,6 +12,7 @@ use Piwik\Common;
 use Piwik\Container\StaticContainer;
 use Piwik\DataAccess\Actions;
 use Piwik\Archive\ArchiveInvalidator;
+use Piwik\Date;
 use Piwik\Plugin\ConsoleCommand;
 use Piwik\Plugins\CoreAdminHome\Model\DuplicateActionRemover;
 use Piwik\Timer;
@@ -126,8 +127,8 @@ class FixDuplicateLogActions extends ConsoleCommand
     {
         $output->write("Invalidating archives affected by duplicates fixed...");
         foreach ($archivesAffected as $archiveInfo) {
-            $this->archiveInvalidator->markArchivesAsInvalidated(
-                array($archiveInfo['idsite']), $archiveInfo['server_time'], $period = false);
+            $dates = array(Date::factory($archiveInfo['server_time']));
+            $this->archiveInvalidator->markArchivesAsInvalidated(array($archiveInfo['idsite']), $dates, $period = false);
         }
         $output->writeln("Done.");
     }
diff --git a/tests/PHPUnit/Integration/DataAccess/ArchiveInvalidatorTest.php b/tests/PHPUnit/Integration/DataAccess/ArchiveInvalidatorTest.php
index 7847abc202a400088c0357fb819c102637e4e352..6c1ff8cd8839da35b3e8d1974fd842adb9c6da1c 100644
--- a/tests/PHPUnit/Integration/DataAccess/ArchiveInvalidatorTest.php
+++ b/tests/PHPUnit/Integration/DataAccess/ArchiveInvalidatorTest.php
@@ -135,7 +135,12 @@ class ArchiveInvalidatorTest extends IntegrationTestCase
         $this->rememberReportsForManySitesAndDates();
 
         $idSites = array(2, 10, 7, 5);
-        $dates   = '2014-04-05,2014-04-08,2010-10-10';
+        $dates = array(
+            Date::factory('2014-04-05'),
+            Date::factory('2014-04-08'),
+            Date::factory('2010-10-10'),
+        );
+
         $this->invalidator->markArchivesAsInvalidated($idSites, $dates, false);
         $reports = $this->invalidator->getRememberedArchivedReportsThatShouldBeInvalidated();