diff --git a/sensors/ps_mem.py b/sensors/ps_mem.py
index 2e0fed8..dc5088b 100644
--- a/sensors/ps_mem.py
+++ b/sensors/ps_mem.py
@@ -6,91 +6,35 @@
 # Source:  http://www.pixelbeat.org/scripts/ps_mem.py
 #   http://github.com/pixelb/scripts/commits/master/scripts/ps_mem.py
 
-import errno
-import os
-import sys
 
+# Note shared is always a subset of rss (trs is not always)
+def get_mem_stats(pid):
+    """ Return memory data of pid in format (private, shared) """
 
+    fname = '/proc/{0}/{1}'.format(pid, "smaps")
+    lines = open(fname).readlines()
 
-class Proc:
-    def __init__(self):
-        uname = os.uname()
-        if uname[0] == "FreeBSD":
-            self.proc = '/compat/linux/proc'
-        else:
-            self.proc = '/proc'
+    shared = 0
+    private = 0
+    pss = 0
 
-    def path(self, *args):
-        return os.path.join(self.proc, *(str(a) for a in args))
+    # add 0.5KiB as this avg error due to trunctation
+    pss_adjust = 0.5
 
-    def open(self, *args):
-        try:
-            return open(self.path(*args))
-        except (IOError, OSError):
-            val = sys.exc_info()[1]
-            if (val.errno == errno.ENOENT or # kernel thread or process gone
-                val.errno == errno.EPERM):
-                raise LookupError
-            raise
+    for line in lines:
+        if line.startswith("Shared"):
+            shared += int(line.split()[1])
 
+        if line.startswith("Private"):
+            private += int(line.split()[1])
 
-def kernel_ver():
-    """ Return (major,minor,release)"""
-    proc = Proc()
-    kv = proc.open('sys/kernel/osrelease').readline().split(".")[:3]
-    last = len(kv)
-    if last == 2:
-        kv.append('0')
-    last -= 1
-    while last > 0:
-        for char in "-_":
-            kv[last] = kv[last].split(char)[0]
-        try:
-            int(kv[last])
-        except:
-            kv[last] = 0
-        last -= 1
-    return (int(kv[0]), int(kv[1]), int(kv[2]))
+        if line.startswith("Pss"):
+            pss += float(line.split()[1]) + pss_adjust
 
+    # Note Shared + Private = Rss above
+    # The Rss in smaps includes video card mem etc.
 
-#Note shared is always a subset of rss (trs is not always)
-def getMemStats(pid):
-    """ Return memory data of pid in format (Private, Shared) """
+    if pss != 0:
+        shared = int(pss - private)
 
-    PAGESIZE = os.sysconf("SC_PAGE_SIZE") / 1024 #KiB
-    proc = Proc()
-
-    Private_lines = []
-    Shared_lines = []
-    Pss_lines = []
-
-    Rss = (int(proc.open(pid, 'statm').readline().split()[1])
-           * PAGESIZE)
-
-    if os.path.exists(proc.path(pid, 'smaps')): #stat
-        for line in proc.open(pid, 'smaps').readlines(): #open
-            # Note we checksum smaps as maps is usually but
-            # not always different for separate processes.
-            if line.startswith("Shared"):
-                Shared_lines.append(line)
-            elif line.startswith("Private"):
-                Private_lines.append(line)
-            elif line.startswith("Pss"):
-                have_pss = 1
-                Pss_lines.append(line)
-        Shared = sum([int(line.split()[1]) for line in Shared_lines])
-        Private = sum([int(line.split()[1]) for line in Private_lines])
-        #Note Shared + Private = Rss above
-        #The Rss in smaps includes video card mem etc.
-        if have_pss:
-            pss_adjust = 0.5 # add 0.5KiB as this avg error due to trunctation
-            Pss = sum([float(line.split()[1])+pss_adjust for line in Pss_lines])
-            Shared = Pss - Private
-    elif (2, 6, 1) <= kernel_ver() <= (2, 6, 9):
-        Shared = 0 #lots of overestimation, but what can we do?
-        Private = Rss
-    else:
-        Shared = int(proc.open(pid, 'statm').readline().split()[2])
-        Shared *= PAGESIZE
-        Private = Rss - Shared
-    return (Private, Shared)
+    return (private, shared)
diff --git a/sensors/psram_sensors.py b/sensors/psram_sensors.py
index ba3da4a..6517520 100644
--- a/sensors/psram_sensors.py
+++ b/sensors/psram_sensors.py
@@ -1,10 +1,8 @@
-from ps_mem import getMemStats
+from ps_mem import get_mem_stats
 
 from discover import provides
 from utils import SensorInfo, get_pid_name, get_pid_list
 
-
-
 @provides("perprocess-ram")
 def psram_stat(disallowed_prefixes=None, allowed_prefixes=None):
     results = {}
@@ -14,7 +12,7 @@
         try:
             dev_name = get_pid_name(pid)
 
-            private, shared = getMemStats(pid)
+            private, shared = get_mem_stats(pid)
             total = private + shared
             sys_total = get_ram_size()
             usage = float(total) / float(sys_total)
@@ -24,7 +22,8 @@
             results[sensor_name + ".private_mem"] = SensorInfo(private, False)
             results[sensor_name + ".shared_mem"] = SensorInfo(shared, False)
             results[sensor_name + ".used_mem"] = SensorInfo(total, False)
-            results[sensor_name + ".mem_usage_percent"] = SensorInfo(usage*100, False)
+            name = sensor_name + ".mem_usage_percent"
+            results[name] = SensorInfo(usage * 100, False)
         except IOError:
             # permission denied or proc die
             continue
