diff --git a/core/Tracker/Request.php b/core/Tracker/Request.php
index e714ecded7b02a6ea8bd5247a003d488ad2b214e..b6f316304652830a49b280e196ba5c0e361376c9 100644
--- a/core/Tracker/Request.php
+++ b/core/Tracker/Request.php
@@ -407,6 +407,10 @@ class Request
     {
         $this->params[$name] = $value;
         unset($this->paramsCache[$name]);
+
+        if ($name === 'cdt') {
+            $this->cdtCache = null;
+        }
     }
 
     private function hasParam($name)
diff --git a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml
index bed8ee84d615bcb1e57f9d2ffbef59e0d7577c66..38f9ab1424f1d38e09fd59a5c89a2d92d272a0f3 100644
--- a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml
+++ b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_day.xml
@@ -14,8 +14,8 @@
 				
 				<pageId>1</pageId>
 				<generationTime>0.33s</generationTime>
-				<timeSpent>270</timeSpent>
-				<timeSpentPretty>4 min 30s</timeSpentPretty>
+				<timeSpent>271</timeSpent>
+				<timeSpentPretty>4 min 31s</timeSpentPretty>
 				<icon />
 				
 			</row>
@@ -117,8 +117,8 @@
 				
 				<pageId>13</pageId>
 				<generationTime>0.33s</generationTime>
-				<timeSpent>270</timeSpent>
-				<timeSpentPretty>4 min 30s</timeSpentPretty>
+				<timeSpent>271</timeSpent>
+				<timeSpentPretty>4 min 31s</timeSpentPretty>
 				<icon />
 				
 			</row>
diff --git a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml
index bed8ee84d615bcb1e57f9d2ffbef59e0d7577c66..38f9ab1424f1d38e09fd59a5c89a2d92d272a0f3 100644
--- a/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml
+++ b/plugins/Contents/tests/System/expected/test_Contents__Live.getLastVisitsDetails_month.xml
@@ -14,8 +14,8 @@
 				
 				<pageId>1</pageId>
 				<generationTime>0.33s</generationTime>
-				<timeSpent>270</timeSpent>
-				<timeSpentPretty>4 min 30s</timeSpentPretty>
+				<timeSpent>271</timeSpent>
+				<timeSpentPretty>4 min 31s</timeSpentPretty>
 				<icon />
 				
 			</row>
@@ -117,8 +117,8 @@
 				
 				<pageId>13</pageId>
 				<generationTime>0.33s</generationTime>
-				<timeSpent>270</timeSpent>
-				<timeSpentPretty>4 min 30s</timeSpentPretty>
+				<timeSpent>271</timeSpent>
+				<timeSpentPretty>4 min 31s</timeSpentPretty>
 				<icon />
 				
 			</row>
diff --git a/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml
index bed8ee84d615bcb1e57f9d2ffbef59e0d7577c66..38f9ab1424f1d38e09fd59a5c89a2d92d272a0f3 100644
--- a/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml
+++ b/plugins/Contents/tests/System/expected/test_Contents_contentInteractionMatch__Live.getLastVisitsDetails_day.xml
@@ -14,8 +14,8 @@
 				
 				<pageId>1</pageId>
 				<generationTime>0.33s</generationTime>
-				<timeSpent>270</timeSpent>
-				<timeSpentPretty>4 min 30s</timeSpentPretty>
+				<timeSpent>271</timeSpent>
+				<timeSpentPretty>4 min 31s</timeSpentPretty>
 				<icon />
 				
 			</row>
@@ -117,8 +117,8 @@
 				
 				<pageId>13</pageId>
 				<generationTime>0.33s</generationTime>
-				<timeSpent>270</timeSpent>
-				<timeSpentPretty>4 min 30s</timeSpentPretty>
+				<timeSpent>271</timeSpent>
+				<timeSpentPretty>4 min 31s</timeSpentPretty>
 				<icon />
 				
 			</row>
diff --git a/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml
index bed8ee84d615bcb1e57f9d2ffbef59e0d7577c66..38f9ab1424f1d38e09fd59a5c89a2d92d272a0f3 100644
--- a/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml
+++ b/plugins/Contents/tests/System/expected/test_Contents_contentTargetMatch__Live.getLastVisitsDetails_day.xml
@@ -14,8 +14,8 @@
 				
 				<pageId>1</pageId>
 				<generationTime>0.33s</generationTime>
-				<timeSpent>270</timeSpent>
-				<timeSpentPretty>4 min 30s</timeSpentPretty>
+				<timeSpent>271</timeSpent>
+				<timeSpentPretty>4 min 31s</timeSpentPretty>
 				<icon />
 				
 			</row>
@@ -117,8 +117,8 @@
 				
 				<pageId>13</pageId>
 				<generationTime>0.33s</generationTime>
-				<timeSpent>270</timeSpent>
-				<timeSpentPretty>4 min 30s</timeSpentPretty>
+				<timeSpent>271</timeSpent>
+				<timeSpentPretty>4 min 31s</timeSpentPretty>
 				<icon />
 				
 			</row>
diff --git a/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml b/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml
index bed8ee84d615bcb1e57f9d2ffbef59e0d7577c66..38f9ab1424f1d38e09fd59a5c89a2d92d272a0f3 100644
--- a/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml
+++ b/plugins/Contents/tests/System/expected/test_ContentscontentNameOrPieceMatch__Live.getLastVisitsDetails_day.xml
@@ -14,8 +14,8 @@
 				
 				<pageId>1</pageId>
 				<generationTime>0.33s</generationTime>
-				<timeSpent>270</timeSpent>
-				<timeSpentPretty>4 min 30s</timeSpentPretty>
+				<timeSpent>271</timeSpent>
+				<timeSpentPretty>4 min 31s</timeSpentPretty>
 				<icon />
 				
 			</row>
@@ -117,8 +117,8 @@
 				
 				<pageId>13</pageId>
 				<generationTime>0.33s</generationTime>
-				<timeSpent>270</timeSpent>
-				<timeSpentPretty>4 min 30s</timeSpentPretty>
+				<timeSpent>271</timeSpent>
+				<timeSpentPretty>4 min 31s</timeSpentPretty>
 				<icon />
 				
 			</row>
diff --git a/plugins/CoreHome/Columns/VisitLastActionTime.php b/plugins/CoreHome/Columns/VisitLastActionTime.php
index 15e6ea88674346a686f056bce41f79a0c545228f..4ba0761c2a5fb3c90e6adf995583a1bc5d4f7aef 100644
--- a/plugins/CoreHome/Columns/VisitLastActionTime.php
+++ b/plugins/CoreHome/Columns/VisitLastActionTime.php
@@ -51,6 +51,10 @@ class VisitLastActionTime extends VisitDimension
      */
     public function onExistingVisit(Request $request, Visitor $visitor, $action)
     {
+        if ($request->getParam('ping') == 1) {
+            return false;
+        }
+        
         return $this->onNewVisit($request, $visitor, $action);
     }
 }
\ No newline at end of file
diff --git a/plugins/Live/Visitor.php b/plugins/Live/Visitor.php
index 1525bfa5cff006cd8d4a702b16c416eb2f9ee379..4d15d5d3f6ed057ef96ed9e6c01e206a5fcc5025 100644
--- a/plugins/Live/Visitor.php
+++ b/plugins/Live/Visitor.php
@@ -359,6 +359,8 @@ class Visitor implements VisitorInterface
             $ecommerceConversion['itemDetails'] = $itemsDetails;
         }
 
+        $actionDetails = array_values($actionDetails);
+
         // Enrich with time spent per action
         foreach($actionDetails as $actionIdx => &$actionDetail) {
 
@@ -367,22 +369,24 @@ class Visitor implements VisitorInterface
             if ($nextActionFound) {
                 $actionDetail['timeSpent'] = $actionDetails[$actionIdx + 1]['timeSpentRef'];
             } else {
+
                 // Last action of a visit.
                 // By default, Piwik does not know how long the user stayed on the page
                 // If enableHeartBeatTimer() is used in piwik.js then we can find the accurate time on page for the last pageview
-                $timeOfLastActionOrPingInVisitRow = $visitorDetailsArray['lastActionTimestamp'];
-
+                $visitTotalTime = $visitorDetailsArray['visitDuration'];
                 $timeOfLastAction = Date::factory($actionDetail['serverTimePretty'])->getTimestamp();
 
-                $timeSpentOnPage = $timeOfLastActionOrPingInVisitRow - $timeOfLastAction;
+                $timeSpentOnAllActionsApartFromLastOne = ($timeOfLastAction - $visitorDetailsArray['firstActionTimestamp']);
+                $timeSpentOnPage = $visitTotalTime - $timeSpentOnAllActionsApartFromLastOne;
 
                 // Safe net, we assume the time is correct when it's more than 10 seconds
-                if($timeSpentOnPage > 10) {
+                if ($timeSpentOnPage > 10) {
                     $actionDetail['timeSpent'] = $timeSpentOnPage;
                 }
+
             }
 
-            if(isset($actionDetail['timeSpent'])) {
+            if (isset($actionDetail['timeSpent'])) {
                 $actionDetail['timeSpentPretty'] = $formatter->getPrettyTimeFromSeconds($actionDetail['timeSpent'], true);
             }
 
diff --git a/tests/PHPUnit/Integration/Tracker/PingRequestTest.php b/tests/PHPUnit/Integration/Tracker/PingRequestTest.php
index 75e8c10c1a8b5a57c01f538fa4f799472a87a700..586283d9bf2d37ac7ad852eb8fc4b51fa525278c 100644
--- a/tests/PHPUnit/Integration/Tracker/PingRequestTest.php
+++ b/tests/PHPUnit/Integration/Tracker/PingRequestTest.php
@@ -47,7 +47,7 @@ class PingRequestTest extends IntegrationTestCase
         $pingTime = '2012-01-05 00:20:00';
         $this->doPingRequest($tracker, $pingTime, $setNewDimensionValues = false);
 
-        $this->assertInitialVisitIsExtended($pingTime, self::FIRST_VISIT_TIME, $checkModifiedDimensions = false);
+        $this->assertInitialVisitIsNotExtended(self::FIRST_VISIT_TIME, $checkModifiedDimensions = false, 1201);
     }
 
     public function test_PingWithinThirtyMinutes_AndChangedDimensionValues_ExtendsExistingVisit_AndChangesAppropriateDimensions()
@@ -63,7 +63,7 @@ class PingRequestTest extends IntegrationTestCase
         $pingTime = '2012-01-05 00:20:00';
         $this->doPingRequest($tracker, $pingTime, $setNewDimensionValues = true);
 
-        $this->assertInitialVisitIsExtended($pingTime, self::FIRST_VISIT_TIME, $checkModifiedDimensions = true);
+        $this->assertInitialVisitIsNotExtended(self::FIRST_VISIT_TIME, $checkModifiedDimensions = true, 1201);
     }
 
     public function test_PingWithinThirtyMinutes_DoesNotTriggerGoalConversion()
@@ -82,7 +82,7 @@ class PingRequestTest extends IntegrationTestCase
         $tracker->setDebugStringAppend('&idgoal=1');
         $this->doPingRequest($tracker, $pingTime, $setNewDimensionValues = true);
 
-        $this->assertInitialVisitIsExtended($pingTime, self::FIRST_VISIT_TIME, $checkModifiedDimensions = true);
+        $this->assertInitialVisitIsNotExtended(self::FIRST_VISIT_TIME, $checkModifiedDimensions = true, 1201);
         $this->assertGoalConversionCount(1);
     }
 
@@ -163,11 +163,17 @@ class PingRequestTest extends IntegrationTestCase
         return Db::fetchOne("SELECT MAX(server_time) FROM " . Common::prefixTable('log_link_visit_action') . " WHERE idvisit = ?", array($idVisit));
     }
 
+    private function getVisitTotalTime($idVisit)
+    {
+        return Db::fetchOne("SELECT MAX(visit_total_time) FROM " . Common::prefixTable('log_visit') . " WHERE idvisit = ?", array($idVisit));
+    }
+
     private function assertInitialVisitIsCorrect()
     {
         $this->assertVisitCount(1);
         $this->assertActionCount(1);
         $this->assertGoalConversionCount(1);
+        $this->assertEquals(0, $this->getVisitTotalTime($idVisit= 1));
 
         $this->assertVisitPropertiesAreUnchanged($idVisit = 1);
     }
@@ -192,17 +198,20 @@ class PingRequestTest extends IntegrationTestCase
         return $response;
     }
 
-    private function assertInitialVisitIsExtended($newEndTime, $lastActionTime, $checkPropertiesModified)
+    private function assertInitialVisitIsNotExtended($firstActionTime, $checkPropertiesModified, $expectedTotalTime)
     {
         $this->assertVisitCount(1);
         $this->assertActionCount(1);
         $this->assertGoalConversionCount(1);
 
         $visitEndTime = $this->getVisitLastActionTime($idVisit = 1);
-        $this->assertEquals($newEndTime, $visitEndTime);
+        $this->assertEquals($firstActionTime, $visitEndTime);
 
         $actionTime = $this->getLatestActionTime($idVisit = 1);
-        $this->assertEquals($lastActionTime, $actionTime);
+        $this->assertEquals($firstActionTime, $actionTime);
+
+        $visitTotalTime = $this->getVisitTotalTime($idVisit = 1);
+        $this->assertEquals($expectedTotalTime, $visitTotalTime);
 
         if ($checkPropertiesModified) {
             $this->assertVisitPropertiesAreChanged($idVisit = 1, $checkUnchangeable = false);
diff --git a/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml
index e00992d683a09fa362817af837d4a5e567390dda..8d118edb9a1c5c75f5a99da879c1c400d1bc3d0f 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitor_NoKeywordSpecified__Live.getLastVisitsDetails_day.xml
@@ -113,8 +113,8 @@
 				<pageIdAction>2</pageIdAction>
 				
 				<pageId>1</pageId>
-				<timeSpent>1080</timeSpent>
-				<timeSpentPretty>18 min 0s</timeSpentPretty>
+				<timeSpent>1084</timeSpent>
+				<timeSpentPretty>18 min 4s</timeSpentPretty>
 				<icon />
 				
 			</row>
diff --git a/tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml b/tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml
index b83a3d071dca1b71f038f9c788871ca8b02fa37a..ed2500e1255dbe39c177bbdd72f87cefa446e9ed 100644
--- a/tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml
+++ b/tests/PHPUnit/System/expected/test_UserId_VisitorId__Live.getLastVisitsDetails_month.xml
@@ -154,8 +154,8 @@
 				<pageIdAction>10</pageIdAction>
 				<serverTimePretty>Mar 6, 2010 16:28:33</serverTimePretty>
 				<pageId>9</pageId>
-				<timeSpent>720</timeSpent>
-				<timeSpentPretty>12 min 0s</timeSpentPretty>
+				<timeSpent>721</timeSpent>
+				<timeSpentPretty>12 min 1s</timeSpentPretty>
 				<icon />
 				<timestamp>1267892913</timestamp>
 			</row>
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml
index f6d30fd9ba7e6569086ad54d19737a96f77ca637..5b19eea90fa7b84bede6e944afb9142585238a2a 100755
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_LiveEcommerceStatusOrdered__Live.getLastVisitsDetails_day.xml
@@ -226,8 +226,8 @@
 						<customVariablePageValue5>Category TWO LEFT in cart</customVariablePageValue5>
 					</row>
 				</customVariables>
-				<timeSpent>360</timeSpent>
-				<timeSpentPretty>6 min 0s</timeSpentPretty>
+				<timeSpent>361</timeSpent>
+				<timeSpentPretty>6 min 1s</timeSpentPretty>
 				<icon />
 				
 			</row>
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml
index 730c0fc1a4449bd9c4c1e6183aa2279002611a65..d391947a564fc13c240d83463cbed1993c706b6c 100755
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems__Live.getLastVisitsDetails_day.xml
@@ -87,8 +87,8 @@
 						<customVariablePageValue5>Category TWO LEFT in cart</customVariablePageValue5>
 					</row>
 				</customVariables>
-				<timeSpent>360</timeSpent>
-				<timeSpentPretty>6 min 0s</timeSpentPretty>
+				<timeSpent>361</timeSpent>
+				<timeSpentPretty>6 min 1s</timeSpentPretty>
 				<icon />
 				
 			</row>
@@ -430,8 +430,8 @@
 						<customVariablePageValue5>Category TWO LEFT in cart</customVariablePageValue5>
 					</row>
 				</customVariables>
-				<timeSpent>360</timeSpent>
-				<timeSpentPretty>6 min 0s</timeSpentPretty>
+				<timeSpent>361</timeSpent>
+				<timeSpentPretty>6 min 1s</timeSpentPretty>
 				<icon />
 				
 			</row>