diff --git a/prule/db/__init__.py b/prule/db/__init__.py
index bec05ea69ac5e266c42432ffb605b07b80a0e29a..8ed43c41189d1ee22031bf5d1e9328f74e88e2d3 100644
--- a/prule/db/__init__.py
+++ b/prule/db/__init__.py
@@ -7,7 +7,8 @@ import sqlite3
 
 class ResultsDB:
     def __init__(self, path):
-        self.con = sqlite3.connect(path)
+        self.path      = path
+        self.con       = sqlite3.connect(path)
         self.rule_dict = None
     def close(self):
         if self.con != None:
@@ -121,7 +122,8 @@ rulename    TEXT
         res = cur.execute('SELECT DISTINCT cluster from jobs;')
         clusters = []
         for c in res.fetchall():
-            clusters.append(c[0])
+            if c[0] != None:
+                clusters.append(c[0])
         return clusters
 
     def db_get_users(self, cluster=None):
@@ -132,7 +134,8 @@ rulename    TEXT
             res = cur.execute('SELECT DISTINCT user FROM jobs WHERE cluster = ?;', [cluster])
         users = []
         for u in res.fetchall():
-            users.append(u[0])
+            if u[0] != None:
+                users.append(u[0])
         return users
 
     def db_get_projects(self, cluster=None):
@@ -143,26 +146,27 @@ rulename    TEXT
             res = cur.execute('SELECT DISTINCT project FROM jobs WHERE cluster = ?;', [cluster])
         projects = []
         for p in res.fetchall():
-            projects.append(p[0])
+            if p[0] != None:
+                projects.append(p[0])
         return projects
 
     def db_get_result(self, ccid):
         cur = self.con.cursor()
         cur.execute("SELECT * FROM jobs WHERE ccid = ?", [ccid])
         res = cur.fetchall()
-        return res
+        return self.db_rows_to_dicts(res, 'jobs')
 
     def db_get_result_slurm(self, slurmid, cluster):
         cur = self.con.cursor()
         cur.execute("SELECT * FROM jobs WHERE jobid = ? AND cluster = ?", [slurmid, cluster])
         res = cur.fetchall()
-        return res
+        return self.db_rows_to_dicts(res, 'jobs')
 
     def db_get_all_results(self):
         cur = self.con.cursor()
         cur.execute("SELECT * FROM jobs")
         res = cur.fetchall()
-        return res
+        return self.db_rows_to_dicts(res, 'jobs')
 
     def db_insert_failure(self, ccjobid):
         res = self.db_get_result(ccjobid)
@@ -288,12 +292,17 @@ rulename    TEXT
         res = cur.fetchall()
         return self.db_rows_to_dicts(res, 'jobs')
 
-    def __db_last_result(self):
+    def db_last_result(self):
         cur = self.con.cursor()
         cur.execute("SELECT * FROM jobs ORDER BY rowid DESC LIMIT 1;")
         res = cur.fetchall()
         return self.db_rows_to_dicts(res, 'jobs')
 
+    def db_first_result(self):
+        cur = self.con.cursor()
+        cur.execute("SELECT * FROM jobs ORDER BY rowid ASC LIMIT 1;")
+        res = cur.fetchall()
+        return self.db_rows_to_dicts(res, 'jobs')
 
 
     def db_rule_stats(self, cluster):