diff --git a/wally/sensors_utils.py b/wally/sensors_utils.py
index e5b4347..1e9e898 100644
--- a/wally/sensors_utils.py
+++ b/wally/sensors_utils.py
@@ -1,5 +1,4 @@
 import time
-import array
 import Queue
 import logging
 import threading
@@ -11,92 +10,14 @@
                                SensorConfig,
                                stop_and_remove_sensors)
 
-
 logger = logging.getLogger("wally.sensors")
 DEFAULT_RECEIVER_URL = "udp://{ip}:5699"
 
 
-class SensorDatastore(object):
-    def __init__(self, stime=None):
-        self.lock = threading.Lock()
-        self.stime = stime
-
-        self.min_size = 60 * 60
-        self.max_size = 60 * 61
-
-        self.data = {
-            'testnodes:io': array.array("B"),
-            'testnodes:cpu': array.array("B"),
-        }
-
-    def get_values(self, name, start, end):
-        assert end >= start
-        if end == start:
-            return []
-
-        with self.lock:
-            curr_arr = self.data[name]
-            if self.stime is None:
-                return []
-
-            sidx = start - self.stime
-            eidx = end - self.stime
-
-            if sidx < 0 and eidx < 0:
-                return [0] * (end - start)
-            elif sidx < 0:
-                return [0] * (-sidx) + curr_arr[:eidx]
-            return curr_arr[sidx:eidx]
-
-    def set_values(self, start_time, vals):
-        with self.lock:
-            return self.add_values_l(start_time, vals)
-
-    def set_values_l(self, start_time, vals):
-        max_cut = 0
-        for name, values in vals.items():
-            curr_arr = self.data.setdefault(name, array.array("H"))
-
-            if self.stime is None:
-                self.stime = start_time
-
-            curr_end_time = len(curr_arr) + self.stime
-
-            if curr_end_time < start_time:
-                curr_arr.extend([0] * (start_time - curr_end_time))
-                curr_arr.extend(values)
-            elif curr_end_time > start_time:
-                logger.warning("Duplicated sensors data")
-                sindex = len(curr_arr) + (start_time - curr_end_time)
-
-                if sindex < 0:
-                    values = values[-sindex:]
-                    sindex = 0
-                    logger.warning("Some data with timestamp before"
-                                   " beginning of measurememts. Skip them")
-
-                curr_arr[sindex:sindex + len(values)] = values
-            else:
-                curr_arr.extend(values)
-
-            if len(curr_arr) > self.max_size:
-                max_cut = max(len(curr_arr) - self.min_size, max_cut)
-
-        if max_cut > 0:
-            self.start_time += max_cut
-            for val in vals.values():
-                del val[:max_cut]
-
-
 def save_sensors_data(data_q, mon_q, fd, data_store, source2roles_map):
     fd.write("\n")
 
-    BUFFER = 3
     observed_nodes = set()
-    testnodes_data = {
-        'io': {},
-        'cpu': {},
-    }
 
     try:
         while True:
@@ -114,23 +35,12 @@
 
             source_id = data.pop('source_id')
             rep_time = data.pop('time')
+
             if 'testnode' in source2roles_map.get(source_id, []):
-                vl = testnodes_data['io'].get(rep_time, 0)
-                sum_io_q = vl
-                testnodes_data['io'][rep_time] = sum_io_q
-
-            etime = time.time() - BUFFER
-            for name, vals in testnodes_data.items():
-                new_vals = {}
-                for rtime, value in vals.items():
-                    if rtime < etime:
-                        data_store.set_values("testnodes:io", rtime, [value])
-                    else:
-                        new_vals[rtime] = value
-
-                vals.clear()
-                vals.update(new_vals)
-
+                sum_io_q = 0
+                data_store.update(rep_time,
+                                  {"testnodes:io": sum_io_q},
+                                  add=True)
     except Exception:
         logger.exception("Error in sensors thread")
     logger.info("Sensors thread exits")
