diff --git a/core/Archive/Single.php b/core/Archive/Single.php
index ff7b411de8039468258727fbf903dd98f2c6130c..2b668bc90958c65a93a27f003067d2788907f8be 100644
--- a/core/Archive/Single.php
+++ b/core/Archive/Single.php
@@ -158,7 +158,8 @@ class Piwik_Archive_Single extends Piwik_Archive
 		$archiveJustProcessed = false;
 
 		$plugin = Piwik_ArchiveProcessing::getPluginBeingProcessed($this->getRequestedReport());
-		if(!isset($this->alreadyChecked[$plugin]))
+		if(!isset($this->alreadyChecked[$plugin])
+			)
 		{
 			$this->isThereSomeVisits = false;
 			$this->alreadyChecked[$plugin] = true;
@@ -166,7 +167,6 @@ class Piwik_Archive_Single extends Piwik_Archive
 			$dayString = $this->period->getPrettyString();
 			$periodString = $this->period->getLabel();
 			$logMessage = "Preparing archive: " . $periodString . "(" . $dayString . ")";
-			
 			// if the END of the period is BEFORE the website creation date
 			// we already know there are no stats for this period
 			// we add one day to make sure we don't miss the day of the website creation
@@ -219,7 +219,6 @@ class Piwik_Archive_Single extends Piwik_Archive
 			}
 			$this->isThereSomeVisits = !$archivingDisabledArchiveNotProcessed
 										&& $this->archiveProcessing->isThereSomeVisits();
-										
 			$this->idArchive = $idArchive;
 		}
 		return $archiveJustProcessed;
@@ -530,6 +529,7 @@ class Piwik_Archive_Single extends Piwik_Archive
 		$this->preFetchBlob($name);
 		$dataTableToLoad = $this->getDataTable($name, $idSubTable);
 		$this->loadSubDataTables($name, $dataTableToLoad, $addMetadataSubtableId = true);
+		$dataTableToLoad->enableRecursiveFilters();
 		$this->freeBlob($name);
 		return $dataTableToLoad;		
 	}
diff --git a/core/ArchiveProcessing.php b/core/ArchiveProcessing.php
index 30d8d6adf4adc2bbd66fb759effd5978fbaba922..c05a9907453bbd8531ad66a1ca267f8e4c023cf8 100644
--- a/core/ArchiveProcessing.php
+++ b/core/ArchiveProcessing.php
@@ -527,7 +527,6 @@ abstract class Piwik_ArchiveProcessing
 			$flag = Piwik_ArchiveProcessing::DONE_OK_TEMPORARY;
 		}
 		$this->insertNumericRecord($done, $flag);
-		//Piwik_DataTable_Manager::getInstance()->deleteAll();
 	}
 	
 	/**
diff --git a/core/ArchiveProcessing/Period.php b/core/ArchiveProcessing/Period.php
index 508582ca738d1edf0a98882c1ddda8d9ed1aec0e..d6488c9d3ca384ffd498e48f7eea5120953d4230 100644
--- a/core/ArchiveProcessing/Period.php
+++ b/core/ArchiveProcessing/Period.php
@@ -86,6 +86,8 @@ class Piwik_ArchiveProcessing_Period extends Piwik_ArchiveProcessing
 				{
 					$results[$name] = 0;
 				}
+				if($name == 'nb_uniq_visitors') continue;
+				
 				$valueToSum = $archive->getNumeric($name);
 				
 				if($valueToSum !== false)
@@ -303,24 +305,20 @@ class Piwik_ArchiveProcessing_Period extends Piwik_ArchiveProcessing
 			$archive->setSite( $this->site );
 			$archive->setPeriod( $this->period );
 			$archive->setSegment( $this->getSegment() );
-			$archive->setRequestedReport( 'VisitsSummary' );
+			$archive->setRequestedReport( 'nb_visits' );
 			
 			$nbVisits = $archive->getNumeric('nb_visits');
+			$nbVisitsConverted = 0;
 			if($nbVisits > 0)
 			{
 				$nbVisitsConverted = $archive->getNumeric('nb_visits_converted');
 			}
 		}
 		
-		$this->isThereSomeVisits = ($nbVisits > 0);
-		if($this->isThereSomeVisits === false)
-		{
-			return false;
-		}
-		
 		$this->setNumberOfVisits($nbVisits);
 		$this->setNumberOfVisitsConverted($nbVisitsConverted);
-		return true;
+		$this->isThereSomeVisits = ($nbVisits > 0);
+		return $this->isThereSomeVisits;
 	}
 	
 	/**
diff --git a/core/DataTable.php b/core/DataTable.php
index 30542ec999ed25fd19bf6cc32d2d3b276666095e..e76d38720882f2fbb35839c6036e46650548ef79 100644
--- a/core/DataTable.php
+++ b/core/DataTable.php
@@ -205,6 +205,13 @@ class Piwik_DataTable
 	 */
 	protected $enableRecursiveSort = false;
 
+	/**
+	 * When the table and all subtables are loaded, this flag will be set to true to ensure filters are applied to all subtables
+	 * 
+	 * @var bool
+	 */
+	protected $enableRecursiveFilters = false;
+	
 	/*
 	 * @var Piwik_DataTable_Row
 	 */
@@ -288,6 +295,11 @@ class Piwik_DataTable
 	{
 		$this->enableRecursiveSort = true;
 	}
+	
+	public function enableRecursiveFilters()
+	{
+		$this->enableRecursiveFilters = true;
+	}
 
 	/**
 	 * Returns the number of rows before we applied the limit filter
@@ -331,6 +343,10 @@ class Piwik_DataTable
 		$parameters = array_merge(array($this), $parameters);
 		
 		$filter = $reflectionObj->newInstanceArgs($parameters); 
+		
+		$filter->enableRecursive( $this->enableRecursiveFilters );
+		
+		$filter->filter($this);
 	}
 	
 	/**
@@ -816,7 +832,7 @@ class Piwik_DataTable
 	 */
 	public function __toString()
 	{
-		$renderer = new Piwik_DataTable_Renderer_Console();
+		$renderer = new Piwik_DataTable_Renderer_Html();
 		$renderer->setTable($this);
 		return (string)$renderer;
 	}
diff --git a/core/DataTable/Filter.php b/core/DataTable/Filter.php
index 19db5e93764477b8222a7ed6840c4fde5520540f..95beee04eac3814742e78cc0cef047e90dac426a 100644
--- a/core/DataTable/Filter.php
+++ b/core/DataTable/Filter.php
@@ -34,10 +34,21 @@ abstract class Piwik_DataTable_Filter
 		}
 	}
 	
-	abstract protected function filter($table);
+	abstract public function filter($table);
+	
+	protected $enableRecursive = false;
+	
+	public function enableRecursive($bool)
+	{
+		$this->enableRecursive = (bool)$bool;
+	}
 	
 	public function filterSubTable(Piwik_DataTable_Row $row)
 	{
+		if(!$this->enableRecursive)
+		{
+			return;
+		}
 		try {
 			$subTable = Piwik_DataTable_Manager::getInstance()->getTable( $row->getIdSubDataTable() );
 			$this->filter($subTable);
diff --git a/core/DataTable/Filter/AddColumnsProcessedMetrics.php b/core/DataTable/Filter/AddColumnsProcessedMetrics.php
index 7e5080715343bf161724ac4e835a3f25f5bd11ec..e8e8e6003700fa92c9cce8386e6621189a0b0d47 100644
--- a/core/DataTable/Filter/AddColumnsProcessedMetrics.php
+++ b/core/DataTable/Filter/AddColumnsProcessedMetrics.php
@@ -27,10 +27,9 @@ class Piwik_DataTable_Filter_AddColumnsProcessedMetrics extends Piwik_DataTable_
 	public function __construct( $table, $enable = true )
 	{
 		parent::__construct($table);
-		$this->filter($table);
 	}
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		$rowsIdToDelete = array();	
 		$bounceRateColumnWasSet = false;	
diff --git a/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php b/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php
index 4fcc27231094c6004fba59ed8ebf4a82fb9ba27e..c7f027197d468a1a52a67374813c493b33ca150d 100644
--- a/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php
+++ b/core/DataTable/Filter/AddColumnsProcessedMetricsGoal.php
@@ -53,7 +53,7 @@ class Piwik_DataTable_Filter_AddColumnsProcessedMetricsGoal extends Piwik_DataTa
 		parent::__construct($table);
 	}
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		// Add standard processed metrics
 		parent::filter($table);
diff --git a/core/DataTable/Filter/AddConstantMetadata.php b/core/DataTable/Filter/AddConstantMetadata.php
index 0ea064e37f4776c7527e1cb135685e43cfb01fb8..3ef80dd40e30695c0210facf32c31504f80a5220 100644
--- a/core/DataTable/Filter/AddConstantMetadata.php
+++ b/core/DataTable/Filter/AddConstantMetadata.php
@@ -30,10 +30,9 @@ class Piwik_DataTable_Filter_AddConstantMetadata extends Piwik_DataTable_Filter
 		parent::__construct($table);
 		$this->name = $metadataName;
 		$this->value = $metadataValue;
-		$this->filter($table);
 	}
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		foreach($table->getRows() as $row)
 		{
diff --git a/core/DataTable/Filter/AddSummaryRow.php b/core/DataTable/Filter/AddSummaryRow.php
index 21698edbd8f797c6f0ffc1f443aa311b62992d77..0059428a831a9a0e4a762cb645ff76b90ea91670 100644
--- a/core/DataTable/Filter/AddSummaryRow.php
+++ b/core/DataTable/Filter/AddSummaryRow.php
@@ -37,15 +37,14 @@ class Piwik_DataTable_Filter_AddSummaryRow extends Piwik_DataTable_Filter
 		$this->startRowToSummarize = $startRowToSummarize;
 		$this->labelSummaryRow = $labelSummaryRow;
 		$this->columnToSortByBeforeTruncating = $columnToSortByBeforeTruncating;
-
-		if($table->getRowsCount() > $startRowToSummarize + 1)
-		{
-			$this->filter($table);
-		}
 	}
 
-	protected function filter($table)
+	public function filter($table)
 	{
+		if($table->getRowsCount() <= $this->startRowToSummarize + 1)
+		{
+			return;
+		}
 		$table->filter('Sort', 
 							array( $this->columnToSortByBeforeTruncating, 'desc'));
 		
diff --git a/core/DataTable/Filter/ColumnCallbackAddColumnQuotient.php b/core/DataTable/Filter/ColumnCallbackAddColumnQuotient.php
index 337f6e8aa1af2a110ca4cf97915312cf6422ba1f..3bfe42b87d5c3e08418c353f6b85e536775f2c39 100644
--- a/core/DataTable/Filter/ColumnCallbackAddColumnQuotient.php
+++ b/core/DataTable/Filter/ColumnCallbackAddColumnQuotient.php
@@ -48,10 +48,9 @@ class Piwik_DataTable_Filter_ColumnCallbackAddColumnQuotient extends Piwik_DataT
 			$this->columnNameUsedAsDivisor = $divisorValueOrDivisorColumnName;
 		}
 		$this->quotientPrecision = $quotientPrecision;
-		$this->filter($table);
 	}
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		foreach($table->getRows() as $key => $row)
 		{
diff --git a/core/DataTable/Filter/ColumnCallbackAddMetadata.php b/core/DataTable/Filter/ColumnCallbackAddMetadata.php
index b47da433ad3bea5488da82596a844833b053b1c9..cbb7a82cf9dd3527403de877237829cfa54336fd 100644
--- a/core/DataTable/Filter/ColumnCallbackAddMetadata.php
+++ b/core/DataTable/Filter/ColumnCallbackAddMetadata.php
@@ -34,10 +34,9 @@ class Piwik_DataTable_Filter_ColumnCallbackAddMetadata extends Piwik_DataTable_F
 		$this->functionParameters = $functionParameters;
 		$this->columnToRead = $columnToRead;
 		$this->metadataToAdd = $metadataToAdd;
-		$this->filter($table);
 	}
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		foreach($table->getRows() as $key => $row)
 		{
diff --git a/core/DataTable/Filter/ColumnCallbackDeleteRow.php b/core/DataTable/Filter/ColumnCallbackDeleteRow.php
index 4d47d6da89a12957e6543b802aa76d7b79a0eb26..7a12e6573acdf42b2487ea02eea9fcdcc076d084 100644
--- a/core/DataTable/Filter/ColumnCallbackDeleteRow.php
+++ b/core/DataTable/Filter/ColumnCallbackDeleteRow.php
@@ -26,10 +26,9 @@ class Piwik_DataTable_Filter_ColumnCallbackDeleteRow extends Piwik_DataTable_Fil
 		parent::__construct($table);
 		$this->function = $function;
 		$this->columnToFilter = $columnToFilter;
-		$this->filter($table);
 	}
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		foreach($table->getRows() as $key => $row)
 		{
diff --git a/core/DataTable/Filter/ColumnCallbackReplace.php b/core/DataTable/Filter/ColumnCallbackReplace.php
index 652e3bc9b582b60b4a5d3b11f7ddc9ba27287684..310cfdfde2642f7b5c39f7066fc3740544b7f879 100644
--- a/core/DataTable/Filter/ColumnCallbackReplace.php
+++ b/core/DataTable/Filter/ColumnCallbackReplace.php
@@ -28,10 +28,9 @@ class Piwik_DataTable_Filter_ColumnCallbackReplace extends Piwik_DataTable_Filte
 		$this->functionToApply = $functionToApply;
 		$this->functionParameters = $functionParameters;
 		$this->columnToFilter = $columnToFilter;
-		$this->filter($table);
 	}
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		foreach($table->getRows() as $key => $row)
 		{
diff --git a/core/DataTable/Filter/ColumnDelete.php b/core/DataTable/Filter/ColumnDelete.php
index b28b1ccdb1c8ac870ade2d3e13b72fc96603429e..de3d5e177df1e83c37567f895ad99ac2291d3078 100644
--- a/core/DataTable/Filter/ColumnDelete.php
+++ b/core/DataTable/Filter/ColumnDelete.php
@@ -25,10 +25,9 @@ class Piwik_DataTable_Filter_ColumnDelete extends Piwik_DataTable_Filter
 	{
 		parent::__construct($table);
 		$this->columnToDelete = $columnToDelete;
-		$this->filter($table);
 	}
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		$table->deleteColumn($this->columnToDelete);
 	}
diff --git a/core/DataTable/Filter/ExcludeLowPopulation.php b/core/DataTable/Filter/ExcludeLowPopulation.php
index aca427f3be0ce5d1a92ac66f3deb211df77e42d0..4d2ece04a164181cfe81a15ce78bedc7f329474a 100644
--- a/core/DataTable/Filter/ExcludeLowPopulation.php
+++ b/core/DataTable/Filter/ExcludeLowPopulation.php
@@ -40,7 +40,6 @@ class Piwik_DataTable_Filter_ExcludeLowPopulation extends Piwik_DataTable_Filter
 			$minimumValue = $sumValues * $minimumPercentageThreshold;
 		}
 		self::$minimumValue = $minimumValue;
-		$this->filter($table);
 	}
 	
 	function filter($table)
diff --git a/core/DataTable/Filter/Limit.php b/core/DataTable/Filter/Limit.php
index 80ae82b3587129449067273c9069a249694c34a4..baa98d634fa74fee5d44204d956f4dae9f5cae83 100644
--- a/core/DataTable/Filter/Limit.php
+++ b/core/DataTable/Filter/Limit.php
@@ -35,10 +35,9 @@ class Piwik_DataTable_Filter_Limit extends Piwik_DataTable_Filter
 			$limit = -1;
 		}
 		$this->limit = $limit;
-		$this->filter($table);
 	}	
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		$table = $table;
 		$table->setRowsCountBeforeLimitFilter();
diff --git a/core/DataTable/Filter/MetadataCallbackAddMetadata.php b/core/DataTable/Filter/MetadataCallbackAddMetadata.php
index 34a300b5a3161f04ac07c65629d182ce9ab6b4bd..c53a1b9d6c915738989c86adc0d092c485c75b9b 100644
--- a/core/DataTable/Filter/MetadataCallbackAddMetadata.php
+++ b/core/DataTable/Filter/MetadataCallbackAddMetadata.php
@@ -33,10 +33,9 @@ class Piwik_DataTable_Filter_MetadataCallbackAddMetadata extends Piwik_DataTable
 		$this->functionToApply = $functionToApply;
 		$this->metadataToRead = $metadataToRead;
 		$this->metadataToAdd = $metadataToAdd;
-		$this->filter($table);
 	}
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		foreach($table->getRows() as $key => $row)
 		{
diff --git a/core/DataTable/Filter/Null.php b/core/DataTable/Filter/Null.php
index 8d499c8e1275fceff9689ee4f2edec46ca3ed053..deb260c32b06e162db884dbffd2c4bb652a791ba 100644
--- a/core/DataTable/Filter/Null.php
+++ b/core/DataTable/Filter/Null.php
@@ -23,10 +23,9 @@ class Piwik_DataTable_Filter_Null extends Piwik_DataTable_Filter
 	public function __construct( $table )
 	{
 		parent::__construct($table);
-		$this->filter($table);
 	}
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		foreach($table->getRows() as $key => $row)
 		{
diff --git a/core/DataTable/Filter/Pattern.php b/core/DataTable/Filter/Pattern.php
index 22702d83aedb2a52b07422928380c659460a5c14..ac59e70941e10bb573218f2a0c1bf0b75a919e16 100644
--- a/core/DataTable/Filter/Pattern.php
+++ b/core/DataTable/Filter/Pattern.php
@@ -32,7 +32,6 @@ class Piwik_DataTable_Filter_Pattern extends Piwik_DataTable_Filter
 		$this->patternToSearchQuoted = self::getPatternQuoted($patternToSearch);
 		$this->columnToFilter = $columnToFilter;
         $this->invertedMatch = $invertedMatch;
-		$this->filter($table);
 	}
 	
 	static public function getPatternQuoted( $pattern )
@@ -48,7 +47,7 @@ class Piwik_DataTable_Filter_Pattern extends Piwik_DataTable_Filter
 		return @preg_match($patternQuoted . "i",  $string) == 1 ^ $invertedMatch;
 	}
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		foreach($table->getRows() as $key => $row)
 		{
diff --git a/core/DataTable/Filter/PatternRecursive.php b/core/DataTable/Filter/PatternRecursive.php
index 542fe72eed14213860681d8e7792998ae55b6a77..af35c3edea03d9a069c55b6fb0e801eae10fcf9b 100644
--- a/core/DataTable/Filter/PatternRecursive.php
+++ b/core/DataTable/Filter/PatternRecursive.php
@@ -34,10 +34,9 @@ class Piwik_DataTable_Filter_PatternRecursive extends Piwik_DataTable_Filter
 		$this->patternToSearchQuoted = Piwik_DataTable_Filter_Pattern::getPatternQuoted($patternToSearch);
 		$this->patternToSearch = $patternToSearch;//preg_quote($patternToSearch);
 		$this->columnToFilter = $columnToFilter;
-		$this->filter($table);
 	}
 	
-	protected function filter( $table )
+	public function filter( $table )
 	{
 		$rows = $table->getRows();
 		
diff --git a/core/DataTable/Filter/ReplaceColumnNames.php b/core/DataTable/Filter/ReplaceColumnNames.php
index 5213dba3f881544784d58f76262d096694084461..2d22de7046b69853296feae7631df556116dc347 100644
--- a/core/DataTable/Filter/ReplaceColumnNames.php
+++ b/core/DataTable/Filter/ReplaceColumnNames.php
@@ -36,29 +36,24 @@ class Piwik_DataTable_Filter_ReplaceColumnNames extends Piwik_DataTable_Filter
 	 * 						OLD_COLUMN_NAME2 => NEW_COLUMN NAME2,
 	 * 					)
 	 */
-	public function __construct( $table, $recursive = false, $mappingToApply = null )
+	public function __construct( $table, $mappingToApply = null )
 	{
 		parent::__construct($table);
 		$this->mappingToApply = Piwik_Archive::$mappingFromIdToName;
-		$this->applyFilterRecursively = $recursive;
 		if(!is_null($mappingToApply))
 		{
 			$this->mappingToApply = $mappingToApply;
 		}
-		$this->filter($table);
 	}
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		foreach($table->getRows() as $key => $row)
 		{
 			$oldColumns = $row->getColumns();
 			$newColumns = $this->getRenamedColumns($oldColumns);
 			$row->setColumns( $newColumns );
-			if($this->applyFilterRecursively)
-			{
-				$this->filterSubTable($row);
-			}
+			$this->filterSubTable($row);
 		}
 	}
 	
diff --git a/core/DataTable/Filter/ReplaceSummaryRowLabel.php b/core/DataTable/Filter/ReplaceSummaryRowLabel.php
index 01539dfff800cab1c36cc220c725c5d827ca33e7..7d02f98bba638e4e2ea53bc63f4fa9f45dfb6836 100644
--- a/core/DataTable/Filter/ReplaceSummaryRowLabel.php
+++ b/core/DataTable/Filter/ReplaceSummaryRowLabel.php
@@ -25,10 +25,9 @@ class Piwik_DataTable_Filter_ReplaceSummaryRowLabel extends Piwik_DataTable_Filt
 			$newLabel = Piwik_Translate('General_Others');
 		}
 		$this->newLabel = $newLabel;
-		$this->filter($table);
 	}
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		$rows = $table->getRows();
 		foreach($rows as $row)
diff --git a/core/DataTable/Filter/SafeDecodeLabel.php b/core/DataTable/Filter/SafeDecodeLabel.php
index 00cfdf0336ae5e4ba881575ab8ad49c12ef645ab..128a14d894ecf6f860af9b54309398c431413e2c 100644
--- a/core/DataTable/Filter/SafeDecodeLabel.php
+++ b/core/DataTable/Filter/SafeDecodeLabel.php
@@ -18,15 +18,14 @@ class Piwik_DataTable_Filter_SafeDecodeLabel extends Piwik_DataTable_Filter
 {
 	private $columnToDecode;
 	private $outputHtml;
-	public function __construct( $table, $outputHTML = true )
+	public function __construct( $table )
 	{
 		parent::__construct($table);
 		$this->columnToDecode = 'label';
-		$this->outputHtml = (bool)$outputHTML;
-		$this->filter($table);
+		$this->outputHtml = true;
 	}
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		foreach($table->getRows() as $row)
 		{
diff --git a/core/DataTable/Filter/Sort.php b/core/DataTable/Filter/Sort.php
index ac6da629907700a564628b581437263077297d79..03ce146dfc1ae7629187dcdab90e5e7a67601cd9 100644
--- a/core/DataTable/Filter/Sort.php
+++ b/core/DataTable/Filter/Sort.php
@@ -25,10 +25,6 @@ class Piwik_DataTable_Filter_Sort extends Piwik_DataTable_Filter
 	public function __construct( $table, $columnToSort, $order = 'desc', $naturalSort = true, $recursiveSort = false )
 	{
 		parent::__construct($table);
-		if(empty($columnToSort))
-		{
-			return;
-		}
 		if($recursiveSort)
 		{
 			$table->enableRecursiveSort();
@@ -36,7 +32,6 @@ class Piwik_DataTable_Filter_Sort extends Piwik_DataTable_Filter
 		$this->columnToSort = $columnToSort;
 		$this->naturalSort = $naturalSort;
 		$this->setOrder($order);
-		$this->filter($table);
 	}
 	
 	function setOrder($order)
@@ -149,12 +144,16 @@ class Piwik_DataTable_Filter_Sort extends Piwik_DataTable_Filter
 		return $this->columnToSort;
 	}
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		if($table instanceof Piwik_DataTable_Simple)
 		{
 			return;
 		}
+		if(empty($this->columnToSort))
+		{
+			return;
+		}
 		$rows = $table->getRows();
 		if(count($rows) == 0)
 		{
diff --git a/core/DataTable/Filter/Truncate.php b/core/DataTable/Filter/Truncate.php
index 5f2f0f66043be44385282f8007e2400f9d90a1b6..42a8a4e9d008f273c7307c96312f9e5edce1aeab 100644
--- a/core/DataTable/Filter/Truncate.php
+++ b/core/DataTable/Filter/Truncate.php
@@ -20,10 +20,9 @@ class Piwik_DataTable_Filter_Truncate extends Piwik_DataTable_Filter
 	{
 		parent::__construct($table);
 		$this->truncateAfter = $truncateAfter;
-		$this->filter($table);
 	}	
 	
-	protected function filter($table)
+	public function filter($table)
 	{
 		$table->filter('AddSummaryRow', array($this->truncateAfter));
 		$table->filter('ReplaceSummaryRowLabel');
diff --git a/core/DataTable/Row.php b/core/DataTable/Row.php
index 45415aeccf5b7b92a194a4d8a95db1c3c9aa7f43..77bd749d79368659b2cdfc2a9f6215f19bae72f8 100644
--- a/core/DataTable/Row.php
+++ b/core/DataTable/Row.php
@@ -310,6 +310,7 @@ class Piwik_DataTable_Row
 	{
 		if(isset($this->c[self::COLUMNS][$name]))
 		{
+			debug_print_backtrace();
 			throw new Exception("Column $name already in the array!");
 		}
 		$this->c[self::COLUMNS][$name] = $value;
diff --git a/plugins/Actions/API.php b/plugins/Actions/API.php
index 72a61e823dcdffca9f8a4f4f27049569360b2166..7b9b169954633d9ae19a5012a0cb2986a0d23390 100644
--- a/plugins/Actions/API.php
+++ b/plugins/Actions/API.php
@@ -189,7 +189,7 @@ class Piwik_Actions_API
 	{
 		// Must be applied before Sort in this case, since the DataTable can contain both int and strings indexes 
 		// (in the transition period between pre 1.2 and post 1.2 datatable structure)
-		$dataTable->filter('ReplaceColumnNames', array($recursive = true));
+		$dataTable->filter('ReplaceColumnNames');
 		$dataTable->filter('Sort', array('nb_visits', 'desc', $naturalSort = false, $expanded));
 		
 		$dataTable->queueFilter('ReplaceSummaryRowLabel');
diff --git a/plugins/CustomVariables/API.php b/plugins/CustomVariables/API.php
index 5fb3debcf9f4dc5e0a82411a50b4bad498502f86..5bb639eae754af72d446ec22685db7fcc5023c0c 100644
--- a/plugins/CustomVariables/API.php
+++ b/plugins/CustomVariables/API.php
@@ -31,7 +31,7 @@ class Piwik_CustomVariables_API
 	{
 	    $dataTable = Piwik_Archive::getDataTableFromArchive('CustomVariables_valueByName', $idSite, $period, $date, $segment, $expanded, $idSubtable);
 		$dataTable->filter('Sort', array(Piwik_Archive::INDEX_NB_VISITS, 'desc', $naturalSort = false, $expanded));
-		$dataTable->queueFilter('ReplaceColumnNames', array($expanded));
+		$dataTable->queueFilter('ReplaceColumnNames');
 	    return $dataTable;
 	}
 
diff --git a/plugins/Referers/API.php b/plugins/Referers/API.php
index 552bcc26744d349fb00ed32d5cb4a6fce96250dc..32e68548e5d164fc46c88b06db56bbe5b9f229b7 100644
--- a/plugins/Referers/API.php
+++ b/plugins/Referers/API.php
@@ -33,7 +33,7 @@ class Piwik_Referers_API
 	{
 	    $dataTable = Piwik_Archive::getDataTableFromArchive($name, $idSite, $period, $date, $segment, $expanded, $idSubtable);
 	    $dataTable->filter('Sort', array(Piwik_Archive::INDEX_NB_VISITS, 'desc', $naturalSort = false, $expanded));
-		$dataTable->queueFilter('ReplaceColumnNames', array($expanded));
+		$dataTable->queueFilter('ReplaceColumnNames');
 		return $dataTable;
 	}
 	
diff --git a/tests/core/DataTable/Filter/AddSummaryRow.test.php b/tests/core/DataTable/Filter/AddSummaryRow.test.php
index 151fa9902e8390c55bc977fad8d1371ce132b934..b0589a7ab1e39ab82bc0829cf0f279b8b2632005 100644
--- a/tests/core/DataTable/Filter/AddSummaryRow.test.php
+++ b/tests/core/DataTable/Filter/AddSummaryRow.test.php
@@ -11,6 +11,7 @@ class Test_Piwik_DataTable_Filter_AddSummaryRow extends UnitTestCase
 	{
 		$table = $this->getDataTableCount5();
 		$filter = new Piwik_DataTable_Filter_AddSummaryRow($table, 5);
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 5);
 		$this->assertTrue(Piwik_DataTable_Row::isEqual($table->getLastRow(), $this->getRow4()));
 	}
@@ -19,6 +20,7 @@ class Test_Piwik_DataTable_Filter_AddSummaryRow extends UnitTestCase
 	{
 		$table = $this->getDataTableCount5();
 		$filter = new Piwik_DataTable_Filter_AddSummaryRow($table, 2);
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 3);
 		$expectedRow = new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'nb' => 111)));
 		$this->assertTrue(Piwik_DataTable_Row::isEqual($table->getLastRow(), $expectedRow));
@@ -30,6 +32,7 @@ class Test_Piwik_DataTable_Filter_AddSummaryRow extends UnitTestCase
 	{
 		$table = $this->getDataTableCount5();
 		$filter = new Piwik_DataTable_Filter_AddSummaryRow($table, 6);
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 5);
 		$this->assertTrue(Piwik_DataTable_Row::isEqual($table->getLastRow(), $this->getRow4()));
 	}
@@ -38,7 +41,9 @@ class Test_Piwik_DataTable_Filter_AddSummaryRow extends UnitTestCase
 	{
 		$table = $this->getDataTableCount5();
 		$filter1 = new Piwik_DataTable_Filter_AddSummaryRow($table, 3);
+		$filter1->filter($table);
 		$filter2 = new Piwik_DataTable_Filter_AddSummaryRow($table, 2);
+		$filter2->filter($table);
 		$this->assertEqual($table->getRowsCount(), 3);
 		$expectedRow = new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'nb' => 111)));
 		$this->assertTrue(Piwik_DataTable_Row::isEqual($table->getLastRow(), $expectedRow));
@@ -49,10 +54,12 @@ class Test_Piwik_DataTable_Filter_AddSummaryRow extends UnitTestCase
 		// row0, row1, row2, rowSummary1
 		$table1 = $this->getDataTableCount5();
 		$filter = new Piwik_DataTable_Filter_AddSummaryRow($table1, 3);
+		$filter->filter($table1);
 		
 		// row0, row1, rowSummary2
 		$table2 = $this->getDataTableCount5();
 		$filter = new Piwik_DataTable_Filter_AddSummaryRow($table2, 2);
+		$filter->filter($table2);
 		
 		// we expect row0+row0, row1+row1, row2, rowSummary1+rowSummary2
 		$expectedTable = new Piwik_DataTable;
@@ -70,6 +77,7 @@ class Test_Piwik_DataTable_Filter_AddSummaryRow extends UnitTestCase
 		// row0, row1, row2, rowSummary1
 		$table1 = $this->getDataTableCount5();
 		$filter = new Piwik_DataTable_Filter_AddSummaryRow($table1, 3);
+		$filter->filter($table1);
 		
 		// row0, row1, row2, row3, row4
 		$table2 = $this->getDataTableCount5();
@@ -98,6 +106,7 @@ class Test_Piwik_DataTable_Filter_AddSummaryRow extends UnitTestCase
 		$table->addRow( $this->getRow0() );
 		
 		$filter = new Piwik_DataTable_Filter_AddSummaryRow($table, 2, Piwik_DataTable::LABEL_SUMMARY_ROW, $columnToSortBy = 'nb');
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 3);
 		$expectedRow = new Piwik_DataTable_Row(array( Piwik_DataTable_Row::COLUMNS => array('label'=>Piwik_DataTable::LABEL_SUMMARY_ROW, 'nb' => 111)));
 		$this->assertTrue(Piwik_DataTable_Row::isEqual($table->getLastRow(), $expectedRow));
diff --git a/tests/core/DataTable/Filter/ExcludeLowPopulation.test.php b/tests/core/DataTable/Filter/ExcludeLowPopulation.test.php
index 4ae7c0c2e29f319b2f7c6f6309cfd1f0c7664e36..7485d7659cf6d0bee151ed1d2fbde8761a8f8916 100644
--- a/tests/core/DataTable/Filter/ExcludeLowPopulation.test.php
+++ b/tests/core/DataTable/Filter/ExcludeLowPopulation.test.php
@@ -26,6 +26,7 @@ class Test_Piwik_DataTable_Filter_ExcludeLowPopulation extends UnitTestCase
 	{
 		$table = $this->getTestDataTable();	
 		$filter = new Piwik_DataTable_Filter_ExcludeLowPopulation($table, 'count', 1.1);
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 4);
 		$this->assertEqual($table->getColumn('count'), array(1.5, 10, 90, 100));
 	}
@@ -33,12 +34,14 @@ class Test_Piwik_DataTable_Filter_ExcludeLowPopulation extends UnitTestCase
 	{
 		$table = $this->getTestDataTable();	
 		$filter = new Piwik_DataTable_Filter_ExcludeLowPopulation($table, 'count', 1);
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 5);
 	}
 	public function test_filterEqualZero_doesFilter()
 	{
 		$table = $this->getTestDataTable();	
 		$filter = new Piwik_DataTable_Filter_ExcludeLowPopulation($table, 'count', 0);
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 3);
 		$this->assertEqual($table->getColumn('count'), array(10, 90, 100));
 	}
@@ -46,6 +49,7 @@ class Test_Piwik_DataTable_Filter_ExcludeLowPopulation extends UnitTestCase
 	{
 		$table = $this->getTestDataTable();	
 		$filter = new Piwik_DataTable_Filter_ExcludeLowPopulation($table, 'count', 0, 0.4); //40%
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 2);
 		$this->assertEqual($table->getColumn('count'), array(90, 100));
 	}
@@ -85,6 +89,7 @@ class Test_Piwik_DataTable_Filter_ExcludeLowPopulation extends UnitTestCase
 	  	$expectedtable->addRowsFromArray( $rows );
 	  	
 	 	$filter = new Piwik_DataTable_Filter_ExcludeLowPopulation($table, 'nb_visits', 1.4);
+		$filter->filter($table);
 
 	  	$this->assertTrue(Piwik_DataTable::isEqual($table, $expectedtable));
 	 }
diff --git a/tests/core/DataTable/Filter/Limit.test.php b/tests/core/DataTable/Filter/Limit.test.php
index 0ef577430d0938f777a51df95f02b0be8c866ed2..789eb5cdf992c47b91a3fb428a79bdc40f554518 100644
--- a/tests/core/DataTable/Filter/Limit.test.php
+++ b/tests/core/DataTable/Filter/Limit.test.php
@@ -38,6 +38,7 @@ class Test_Piwik_DataTable_Filter_Limit extends UnitTestCase
 		$limit = 3;
 		$table = $this->getDataTableCount10();
 		$filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 3);
 		$this->assertEqual($table->getFirstRow()->getColumn('idRow'), 2);
 		$this->assertEqual($table->getLastRow()->getColumn('idRow'), 4);
@@ -50,6 +51,7 @@ class Test_Piwik_DataTable_Filter_Limit extends UnitTestCase
 		$limit = 7;
 		$table = $this->getDataTableCount10();
 		$filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 7);
 		$this->assertEqual($table->getFirstRow()->getColumn('idRow'), 2);
 		$this->assertEqual($table->getLastRow()->getColumn('idRow'), 8);
@@ -63,6 +65,7 @@ class Test_Piwik_DataTable_Filter_Limit extends UnitTestCase
 		$table = $this->getDataTableCount10();
 		$this->assertEqual($table->getRowsCountBeforeLimitFilter(), 10);
 		$filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 10);
 		$this->assertEqual($table->getFirstRow()->getColumn('idRow'), 0);
 		$this->assertEqual($table->getLastRow()->getColumn('idRow'), 9);
@@ -76,6 +79,7 @@ class Test_Piwik_DataTable_Filter_Limit extends UnitTestCase
 		$table = $this->getDataTableCount10();
 		$this->assertEqual($table->getRowsCountBeforeLimitFilter(), 10);
 		$filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 5);
 		$this->assertEqual($table->getFirstRow()->getColumn('idRow'), 5);
 		$this->assertEqual($table->getLastRow()->getColumn('idRow'), 9);
@@ -87,6 +91,7 @@ class Test_Piwik_DataTable_Filter_Limit extends UnitTestCase
 		$offset = 1;
 		$table = $this->getDataTableCount10();
 		$filter = new Piwik_DataTable_Filter_Limit($table, $offset);
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 9);
 		$this->assertEqual($table->getFirstRow()->getColumn('idRow'), 1);
 		$this->assertEqual($table->getLastRow()->getColumn('idRow'), 9);
@@ -99,6 +104,7 @@ class Test_Piwik_DataTable_Filter_Limit extends UnitTestCase
 		$limit = 1;
 		$table = $this->getDataTableCount10();
 		$filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 1);
 		$this->assertEqual($table->getFirstRow()->getColumn('idRow'), 9);
 		$this->assertEqual($table->getLastRow()->getColumn('idRow'), 9);
@@ -111,6 +117,7 @@ class Test_Piwik_DataTable_Filter_Limit extends UnitTestCase
 		$limit = 100;
 		$table = $this->getDataTableCount10();
 		$filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 1);
 		$this->assertEqual($table->getFirstRow()->getColumn('idRow'), 9);
 		$this->assertEqual($table->getLastRow()->getColumn('idRow'), 9);
@@ -123,6 +130,7 @@ class Test_Piwik_DataTable_Filter_Limit extends UnitTestCase
 		$limit = 3;
 		$table = $this->getDataTableCount10();
 		$filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 2);
 		$this->assertEqual($table->getFirstRow()->getColumn('idRow'), 8);
 		$this->assertEqual($table->getLastRow()->getColumn('idRow'), 9);
@@ -135,6 +143,7 @@ class Test_Piwik_DataTable_Filter_Limit extends UnitTestCase
 		$limit = 10;
 		$table = $this->getDataTableCount10();
 		$filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 0);
 		$this->assertEqual($table->getRowsCountBeforeLimitFilter(), 10);
 	}
@@ -145,6 +154,7 @@ class Test_Piwik_DataTable_Filter_Limit extends UnitTestCase
 		$limit = 0;
 		$table = $this->getDataTableCount10();
 		$filter = new Piwik_DataTable_Filter_Limit($table, $offset, $limit);
+		$filter->filter($table);
 		$this->assertEqual($table->getRowsCount(), 0);
 		$this->assertEqual($table->getRowsCountBeforeLimitFilter(), 10);
 	}
@@ -174,6 +184,7 @@ class Test_Piwik_DataTable_Filter_Limit extends UnitTestCase
 	 	$expectedtable->deleteRows(array(0,1,6));
 	  	
 	  	$filter = new Piwik_DataTable_Filter_Limit($table, 2, 4);
+		$filter->filter($table);
 	  	
 	  	$colAfter=$colExpected=array();
 	  	foreach($table->getRows() as $row) $colAfter[] = $row->getColumn('label');
@@ -207,6 +218,7 @@ class Test_Piwik_DataTable_Filter_Limit extends UnitTestCase
 	 	$expectedtable->deleteRows(array(0,1,3,4,5,6));
 	  	
 	  	$filter = new Piwik_DataTable_Filter_Limit($table, 2, 1);
+		$filter->filter($table);
 	  	
 	  	$colAfter=$colExpected=array();
 	  	foreach($table->getRows() as $row) $colAfter[] = $row->getColumn('label');
@@ -238,6 +250,7 @@ class Test_Piwik_DataTable_Filter_Limit extends UnitTestCase
 	 	$expectedtable = clone $table;
 	  	
 	  	$filter = new Piwik_DataTable_Filter_Limit($table, 0, 15);
+		$filter->filter($table);
 	  	
 	  	$colAfter=$colExpected=array();
 	  	foreach($table->getRows() as $row) $colAfter[] = $row->getColumn('label');
@@ -270,6 +283,7 @@ class Test_Piwik_DataTable_Filter_Limit extends UnitTestCase
 	 	$expectedtable = new Piwik_DataTable;
 	  	
 	  	$filter = new Piwik_DataTable_Filter_Limit($table, 8, 15);
+		$filter->filter($table);
 	  	
 	  	$colAfter=$colExpected=array();
 	  	foreach($table->getRows() as $row) $colAfter[] = $row->getColumn('label');
diff --git a/tests/core/DataTable/Filter/Sort.test.php b/tests/core/DataTable/Filter/Sort.test.php
index 8b889fd2f6ed7104833ada15ae81c139d6c5cd76..7f1c070bd77a985dc893dfa48be63e9c7ea83ab8 100644
--- a/tests/core/DataTable/Filter/Sort.test.php
+++ b/tests/core/DataTable/Filter/Sort.test.php
@@ -18,6 +18,7 @@ class Test_Piwik_DataTable_Filter_Sort extends UnitTestCase
 				)
 			);
 		$filter = new Piwik_DataTable_Filter_Sort($table, 'count', 'desc');
+		$filter->filter($table);
 		$expectedOrder = array('ask', 'yahoo', 'nintendo');
 		$this->assertEqual($table->getColumn('label'), $expectedOrder);
 	}
@@ -33,6 +34,7 @@ class Test_Piwik_DataTable_Filter_Sort extends UnitTestCase
 				)
 			);
 		$filter = new Piwik_DataTable_Filter_Sort($table, 'count', 'asc');
+		$filter->filter($table);
 		$expectedOrder = array('nintendo', 'yahoo', 'ask');
 		$this->assertEqual($table->getColumn('label'), $expectedOrder);
 	}
@@ -53,6 +55,7 @@ class Test_Piwik_DataTable_Filter_Sort extends UnitTestCase
 //		echo $table;
 //		echo "<hr>";
 		$filter = new Piwik_DataTable_Filter_Sort($table, 'count', 'asc');
+		$filter->filter($table);
 //		echo $table;
 //		echo "<hr>";
 		$expectedOrder = array('nintendo', 'ask', 'amazing', 'nocolumnbis', 'nocolumn', 'summary');
@@ -71,6 +74,7 @@ class Test_Piwik_DataTable_Filter_Sort extends UnitTestCase
 				)
 			);
 		$filter = new Piwik_DataTable_Filter_Sort($table, 'count', 'desc');
+		$filter->filter($table);
 		$expectedOrder = array('ask', 'nintendo', 'amazing', 'summary');
 		$this->assertEqual($table->getColumn('label'), $expectedOrder);
 	}
@@ -112,9 +116,11 @@ class Test_Piwik_DataTable_Filter_Sort extends UnitTestCase
 	  	$expectedtableReverse->addRowsFromArray(array_reverse($rows));
 	  		  	
 	 	$filter = new Piwik_DataTable_Filter_Sort($table, 'label', 'asc');
+		$filter->filter($table);
 	 	$this->assertTrue(Piwik_DataTable::isEqual($expectedtable,$table));
 	  	
 	  	$filter = new Piwik_DataTable_Filter_Sort($table, 'label', 'desc');
+		$filter->filter($table);
 	  	$this->assertTrue(Piwik_DataTable::isEqual($table, $expectedtableReverse));
 	 
 	 }
@@ -156,9 +162,11 @@ class Test_Piwik_DataTable_Filter_Sort extends UnitTestCase
 	  	$expectedtableReverse->addRowsFromArray(array_reverse($rows));
 	  		  	
 	 	$filter = new Piwik_DataTable_Filter_Sort($table, 'nb_visits', 'asc');
+		$filter->filter($table);
 	  	$this->assertTrue(Piwik_DataTable::isEqual($table, $expectedtable));
 	  	
 	  	$filter = new Piwik_DataTable_Filter_Sort($table, 'nb_visits', 'desc');
+		$filter->filter($table);
 	  	$this->assertTrue(Piwik_DataTable::isEqual($table, $expectedtableReverse));
 	 }
 }