diff --git a/VERSION b/VERSION
index bcab45a..c08daab 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.0.3
+0.0.4-dev
diff --git a/app.py b/app.py
index e7ede6a..cc85ce4 100644
--- a/app.py
+++ b/app.py
@@ -80,7 +80,10 @@
 
 def update(roc, prom, old):
     new = roc.update_devices(old)
-    prom.update_devices(new)
+    if new is not None:
+        new = prom.update_devices(new)
+    else:
+        new = old
     return new
 
 def probe(devices):
diff --git a/prom.py b/prom.py
index 5c4668c..2a9f1ce 100644
--- a/prom.py
+++ b/prom.py
@@ -28,7 +28,11 @@
         params = (
             ('query', 'subscribers_info>0'),
         )
-        response = requests.get(PROMETHEUS, params=params, auth=(self.key, self.token))
+        try:
+            response = requests.get(PROMETHEUS, params=params, auth=(self.key, self.token), timeout=10)
+        except requests.ReadTimeout as e:
+            log.error("Rancher/Prometheus request timeout, error={}".format(e))
+            sys.exit()
         if response.status_code != 200:
             log.error("get_subscriberinfo() failed, status_code: {}".format(response.status_code))
             return None
@@ -44,7 +48,11 @@
             ('query', 'subscribers_info'),
         )
 
-        response = requests.get(PROMETHEUS, params=params, auth=(self.key, self.token))
+        try:
+            response = requests.get(PROMETHEUS, params=params, auth=(self.key, self.token), timeout=10)
+        except requests.ReadTimeout as e:
+            log.error("Rancher/Prometheus request timeout, error={}".format(e))
+            sys.exit()
         if response.status_code != 200:
             log.error("get_subscriberinfo() failed, status_code: {}".format(response.status_code))
             sys.exit()
@@ -64,6 +72,8 @@
             else:
                 log.error("Ignoring device as imsi or mobile-ip not found - {}".format(metric))
 
+        return devices
+
     def dump(self):
         print(pyaml.dump(self.get_ips()))
 
diff --git a/roc.py b/roc.py
index be609bf..87ba152 100644
--- a/roc.py
+++ b/roc.py
@@ -3,6 +3,7 @@
 SPDX-License-Identifier: LicenseRef-ONF-Member-1.01
 """
 
+import sys
 import requests
 import json
 # noinspection PyUnresolvedReferences
@@ -99,7 +100,11 @@
 
     def get_devicegroups(self):
         url = URL + "device-group"
-        response = requests.get(url, headers=self.headers())
+        try:
+            response = requests.get(url, headers=self.headers(), timeout=10)
+        except requests.ReadTimeout as e:
+            log.error("ROC request timeout, error={}".format(e))
+            sys.exit()
         if response.status_code != 200:
             log.error("get_devicegroups() failed, status_code: {}".format(response.status_code))
             return None
@@ -123,14 +128,15 @@
     def update_devices(self, devices):
         new = {}
         dgs = self.get_devicegroups()
-        for dg in dgs:
-            for d in dg['imsis']:
-                imsi_id = str(d['imsi-id'])
-                imsi = str(d['imsi-range-from'])
-                last_reachable = datetime.min
-                if imsi_id in devices:
-                    last_reachable = devices[imsi_id].last_reachable
-                new[imsi_id] = Device(imsi_id, imsi, last_reachable)
+        if dgs is not None:
+            for dg in dgs:
+                for d in dg['imsis']:
+                    imsi_id = str(d['imsi-id'])
+                    imsi = str(d['imsi-range-from'])
+                    last_reachable = datetime.min
+                    if imsi_id in devices:
+                        last_reachable = devices[imsi_id].last_reachable
+                    new[imsi_id] = Device(imsi_id, imsi, last_reachable)
         return new
 
     def get_subnet(self):
