diff --git a/sensors/host1_config.json b/sensors/host1_config.json
index 7e81125..450db06 100644
--- a/sensors/host1_config.json
+++ b/sensors/host1_config.json
@@ -4,5 +4,10 @@
 	},
 	"net-io": {
 		"allowed_prefixes": ["eth0"]
-	}
-}
\ No newline at end of file
+	},
+    "system-cpu": {
+        "allowed_prefixes": ["cpu"]
+    },
+    "system-ram": {
+    }
+}
diff --git a/sensors/main.py b/sensors/main.py
index 07a1dce..8668518 100644
--- a/sensors/main.py
+++ b/sensors/main.py
@@ -8,6 +8,8 @@
 
 import io_sensors
 import net_sensors
+import syscpu_sensors
+import sysram_sensors
 
 from utils import SensorInfo
 from daemonize import Daemonize
diff --git a/sensors/syscpu_sensors.py b/sensors/syscpu_sensors.py
new file mode 100644
index 0000000..e2f53b7
--- /dev/null
+++ b/sensors/syscpu_sensors.py
@@ -0,0 +1,67 @@
+import time
+
+from discover import provides
+from utils import SensorInfo, is_dev_accepted
+
+# 0 - cpu name
+# 1 - user: normal processes executing in user mode
+# 2 - nice: niced processes executing in user mode
+# 3 - system: processes executing in kernel mode
+# 4 - idle: twiddling thumbs
+# 5 - iowait: waiting for I/O to complete
+# 6 - irq: servicing interrupts
+# 7 - softirq: servicing softirqs
+
+io_values_pos = [
+    (1, 'user_processes', False),
+    (2, 'nice_processes', False),
+    (3, 'system_processes', False),
+    (4, 'idle_time', True),
+]
+
+
+@provides("system-cpu")
+def syscpu_stat(disallowed_prefixes=('intr', 'ctxt', 'btime', 'processes',
+                                 'procs_running', 'procs_blocked', 'softirq'),
+            allowed_prefixes=None):
+    results = {}
+    usage_sum = {}
+    usage_with_idle = {}
+    for line in open('/proc/stat'):
+        vals = line.split()
+        dev_name = vals[0]
+
+        dev_ok = is_dev_accepted(dev_name,
+                                 disallowed_prefixes,
+                                 allowed_prefixes)
+
+        if dev_ok:
+            usage_sum[dev_name] = float(int(vals[1]) + int(vals[2]) + int(vals[3]))
+            usage_with_idle[dev_name] = usage_sum[dev_name] + int(vals[4])
+    # wait for average CPU utilization calc
+    time.sleep(1)
+
+    for line in open('/proc/stat'):
+        vals = line.split()
+        dev_name = vals[0]
+
+        dev_ok = is_dev_accepted(dev_name,
+                                 disallowed_prefixes,
+                                 allowed_prefixes)
+
+        if dev_ok:
+            for pos, name, accum_val in io_values_pos:
+                sensor_name = "{0}.{1}".format(dev_name, name)
+                results[sensor_name] = SensorInfo(int(vals[pos]), accum_val)
+            # utilization calc
+            sensor_name = "{0}.{1}".format(dev_name, "usage_percent")
+
+            usage_sum_last = float(int(vals[1]) + int(vals[2]) + int(vals[3]))
+            usage_with_idle_last = usage_sum_last + int(vals[4])
+            proc = usage_sum_last - usage_sum[dev_name]
+            idle = usage_with_idle_last - usage_with_idle[dev_name]
+            usage = proc / idle
+
+            results[sensor_name] = SensorInfo(usage*100, False)
+    return results
+
diff --git a/sensors/sysram_sensors.py b/sensors/sysram_sensors.py
new file mode 100644
index 0000000..fa0c409
--- /dev/null
+++ b/sensors/sysram_sensors.py
@@ -0,0 +1,34 @@
+from discover import provides
+from utils import SensorInfo, is_dev_accepted
+
+
+# return this values or setted in allowed
+ram_fields = [
+    'MemTotal',
+    'MemFree',
+    'Buffers',
+    'Cached',
+    'SwapCached',
+    'Dirty',
+    'Writeback',
+    'SwapTotal',
+    'SwapFree'
+]
+
+
+@provides("system-ram")
+def sysram_stat(disallowed_prefixes=None, allowed_prefixes=None):
+    if allowed_prefixes is None:
+        allowed_prefixes = ram_fields
+    results = {}
+    for line in open('/proc/meminfo'):
+        vals = line.split()
+        dev_name = vals[0]
+
+        dev_ok = is_dev_accepted(dev_name,
+                                 disallowed_prefixes,
+                                 allowed_prefixes)
+
+        if dev_ok:
+            results[dev_name] = SensorInfo(int(vals[1]), False)
+    return results
