diff --git a/core/DataTable.php b/core/DataTable.php
index e9f3cd2c201836ac7f2427d5a758ca946f82917f..370dc8b35dca72a1b6116c60ca4269c1be58a731 100644
--- a/core/DataTable.php
+++ b/core/DataTable.php
@@ -694,6 +694,23 @@ class Piwik_DataTable
         }
         return $columnValues;
     }
+    
+    /**
+     * Returns the list of columns the rows in this datatable contain. This will return the
+     * columns of the first row with data and assume they occur in every other row as well.
+     * 
+     * @return array
+     */
+    public function getColumns()
+    {
+        foreach ($this->getRows() as $row) {
+            $columns = $row->getColumns();
+            if (!empty($columns)) {
+                return array_keys($columns);
+            }
+        }
+        return array();
+    }
 
     /**
      * Returns an array containing the rows Metadata values
diff --git a/core/ViewDataTable.php b/core/ViewDataTable.php
index 7700de9dcf5b876f1bf6f98d587441408d180fa7..32f6a4c2d26acc5e04fcf7e328893605875d1369 100644
--- a/core/ViewDataTable.php
+++ b/core/ViewDataTable.php
@@ -173,17 +173,12 @@ abstract class Piwik_ViewDataTable
             Piwik_Metrics::getDefaultMetrics(),
             Piwik_Metrics::getDefaultProcessedMetrics()
         );
+        $this->viewProperties['columns_to_display'] = array();
 
-        $this->viewProperties['columns_to_display'][] = 'label';
-        
         $columns = Piwik_Common::getRequestVar('columns', false);
         if ($columns !== false) {
-            $this->viewProperties['columns_to_display'] = array_merge(
-                $this->viewProperties['columns_to_display'], Piwik::getArrayFromApiParameter($columns));
-        } else if (Piwik_Common::getRequestVar('period', false) == 'day') {
-            $this->viewProperties['columns_to_display'][] = 'nb_uniq_visitors';
-        } else {
-            $this->viewProperties['columns_to_display'][] = 'nb_visits';
+            $this->viewProperties['columns_to_display'] = Piwik::getArrayFromApiParameter($columns);
+            array_unshift($this->viewProperties['columns_to_display'], 'label');
         }
     }
 
@@ -616,6 +611,27 @@ abstract class Piwik_ViewDataTable
                 $this->dataTable->filter($filterName, $filterParameters);
             }
         }
+        
+        // default columns_to_display to label, nb_uniq_visitors/nb_visits if those columns exist in the
+        // dataset
+        if ($this->dataTable instanceof Piwik_DataTable) {
+            $columns = $this->dataTable->getColumns();
+            if (empty($this->viewProperties['columns_to_display'])
+                && $this->dataTableColumnsContains($columns, array('nb_visits', 'nb_uniq_visitors'))
+            ) {
+                $columnsToDisplay = array('label');
+                
+                // if unique visitors data is available, show it, otherwise just visits
+                if ($this->dataTableColumnsContains($columns, 'nb_uniq_visitors')) {
+                    $columnsToDisplay[] = 'nb_uniq_visitors';
+                } else {
+                    $columnsToDisplay[] = 'nb_visits';
+                }
+                
+                $this->viewProperties['columns_to_display'] = $columnsToDisplay;
+            }
+        }
+        
         return true;
     }
 
@@ -1610,4 +1626,33 @@ abstract class Piwik_ViewDataTable
              && Piwik_Common::getRequestVar('filter_pattern_recursive', false) !== false
              && Piwik_Common::getRequestVar('flat', false) === false;
     }
+    
+    /**
+     * Returns true if the first array contains one or more of the specified
+     * column names or their associated integer INDEX_ value.
+     * 
+     * @param array $columns Piwik_DataTable_Row columns.
+     * @param array|string $columnsToCheckFor eg, array('nb_visits', 'nb_uniq_visitors')
+     * @return bool
+     */
+    private function dataTableColumnsContains($columns, $columnsToCheckFor)
+    {
+        if (!is_array($columnsToCheckFor)) {
+            $columnsToCheckFor = array($columnsToCheckFor);
+        }
+        
+        foreach ($columnsToCheckFor as $columnToCheckFor) {
+            foreach ($columns as $column) {
+                // check for the column name and its associated integer INDEX_ value
+                if ($column == $columnToCheckFor
+                    || (isset(Piwik_Metrics::$mappingFromNameToId[$columnToCheckFor])
+                        && $column == Piwik_Metrics::$mappingFromNameToId[$columnToCheckFor])
+                ) {
+                    return true;
+                }
+            }
+        }
+        
+        return false;
+    }
 }
diff --git a/core/ViewDataTable/HtmlTable.php b/core/ViewDataTable/HtmlTable.php
index 2d6505db852686a11d35608c189de1851eaba6ce..f0a9131b0963e04686579965da1c1c16b12176ba 100644
--- a/core/ViewDataTable/HtmlTable.php
+++ b/core/ViewDataTable/HtmlTable.php
@@ -132,7 +132,7 @@ class Piwik_ViewDataTable_HtmlTable extends Piwik_ViewDataTable
             $nbColumns = count($columns);
             // case no data in the array we use the number of columns set to be displayed
             if ($nbColumns == 0) {
-                $nbColumns = count($this->columnsToDisplay);
+                $nbColumns = count($this->viewProperties['columns_to_display']);
             }
 
             $view->dataTable = $this->dataTable;