diff --git a/core/DataTable.php b/core/DataTable.php
index d4c1976d60c520a89066f65de906c3dceb842e8c..3049dbf9669f97584edeef12a96ed76eec16df95 100644
--- a/core/DataTable.php
+++ b/core/DataTable.php
@@ -165,7 +165,7 @@ require_once PIWIK_INCLUDE_PATH . '/core/Common.php';
  *
  * @api
  */
-class DataTable implements DataTableInterface, \IteratorAggregate
+class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess
 {
     const MAX_DEPTH_DEFAULT = 15;
 
@@ -1640,4 +1640,26 @@ class DataTable implements DataTableInterface, \IteratorAggregate
     public function getIterator() {
         return new \ArrayIterator($this->getRows());
     }
+
+    public function offsetExists($offset)
+    {
+        $row = $this->getRowFromId($offset);
+
+        return false !== $row;
+    }
+
+    public function offsetGet($offset)
+    {
+        return $this->getRowFromId($offset);
+    }
+
+    public function offsetSet($offset, $value)
+    {
+        $this->rows[$offset] = $value;
+    }
+
+    public function offsetUnset($offset)
+    {
+        $this->deleteRow($offset);
+    }
 }
\ No newline at end of file
diff --git a/core/DataTable/Filter/ColumnDelete.php b/core/DataTable/Filter/ColumnDelete.php
index 532cd5c644685e7ef9acfcefb5b33dc2753b7d3a..5aac6d44a63e54ebbca7797c3457cdc391ace6f1 100644
--- a/core/DataTable/Filter/ColumnDelete.php
+++ b/core/DataTable/Filter/ColumnDelete.php
@@ -100,7 +100,7 @@ class ColumnDelete extends BaseFilter
 
         // remove columns specified in $this->columnsToRemove
         if (!empty($this->columnsToRemove)) {
-            foreach ($table as &$row) {
+            foreach ($table as $index => $row) {
                 foreach ($this->columnsToRemove as $column) {
                     if ($this->deleteIfZeroOnly) {
                         $value = $row[$column];
@@ -109,7 +109,7 @@ class ColumnDelete extends BaseFilter
                         }
                     }
 
-                    unset($row[$column]);
+                    unset($table[$index][$column]);
                 }
             }
 
@@ -118,7 +118,7 @@ class ColumnDelete extends BaseFilter
 
         // remove columns not specified in $columnsToKeep
         if (!empty($this->columnsToKeep)) {
-            foreach ($table as &$row) {
+            foreach ($table as $index => $row) {
                 foreach ($row as $name => $value) {
 
                     $keep = false;
@@ -133,7 +133,7 @@ class ColumnDelete extends BaseFilter
                         && $name != 'label' // label cannot be removed via whitelisting
                         && !isset($this->columnsToKeep[$name])
                     ) {
-                        unset($row[$name]);
+                        unset($table[$index][$name]);
                     }
                 }
             }