diff --git a/person_detection/mqtt.py b/person_detection/action.py
similarity index 82%
rename from person_detection/mqtt.py
rename to person_detection/action.py
index ce40411..5cd241f 100644
--- a/person_detection/mqtt.py
+++ b/person_detection/action.py
@@ -5,6 +5,8 @@
 import threading
 import logging as log
 
+import roc
+
 mqttBroker ="localhost"
 
 resolution = {}
@@ -16,7 +18,7 @@
     timestamp[device] = time.time()
     if device in resolution and resolution[device] == "high":
         return
-    set_resolution(device, "high")
+    set_resolution_high(device)
 
 
 def start_timer(device):
@@ -29,6 +31,16 @@
     del timer[device]
 
 
+def set_resolution_high(device):
+    set_resolution(device, "high")
+    roc.set_uplink_mbr_high()
+
+
+def set_resolution_low(device):
+    set_resolution(device, "low")
+    roc.set_uplink_mbr_low()
+
+
 def set_resolution(device, level):
     log.info("Setting camera {} resolution to {}".format(device, level))
     resolution[device] = level
@@ -44,7 +56,7 @@
     diff = now - timestamp[device]
     # log.info("timer_expiry() - now:{}, timestamp:{}".format(now, timestamp[device]))
     if diff > 5.0:
-        set_resolution(device, "low")
+        set_resolution_low(device)
         remove_timer(device)
     else:
         start_timer(device)
diff --git a/person_detection/app.py b/person_detection/app.py
index 1386d63..87a2cd9 100644
--- a/person_detection/app.py
+++ b/person_detection/app.py
@@ -8,15 +8,8 @@
 from flask import Flask, render_template, Response
 from argparse import ArgumentParser, SUPPRESS
 
-# import camera driver
-if os.environ.get('CAMERA'):
-    Camera = import_module('camera_' + os.environ['CAMERA']).Camera
-else:
-    # from camera import Camera
-    from person_detection import Camera
+from person_detection import Camera
 
-# Raspberry Pi camera module (requires picamera package)
-# from camera_pi import Camera
 
 app = Flask(__name__)
 
diff --git a/person_detection/person_detection.py b/person_detection/person_detection.py
index 92a5e4a..47a3fcf 100644
--- a/person_detection/person_detection.py
+++ b/person_detection/person_detection.py
@@ -17,15 +17,11 @@
 
 from base_camera import BaseCamera
 
-import mqtt
+import action
 
 Shape = namedtuple('Shape', ['n','c','h','w'])
 
 class Camera(BaseCamera):
-    model = None
-    prob_threshold = 0.0
-    input = None
-    device = None
 
     def __init__(self, device, args):
         log.basicConfig(format="[ %(levelname)s ] %(message)s", level=log.INFO, stream=sys.stdout)
@@ -33,9 +29,7 @@
         self.model_xml = args.model
         self.input = args.input
         self.prob_threshold = args.prob_threshold
-
         self.is_async_mode = True
-
         self.device = device
 
         super(Camera, self).__init__(device, args.idle)
@@ -148,7 +142,7 @@
                         cv2.FONT_HERSHEY_COMPLEX, 0.6, black, 1)
 
                 if obj_count > 0:
-                    mqtt.person_detected(self.device, obj_count)
+                    action.person_detected(self.device, obj_count)
 
             yield cv2.imencode('.jpg', frame)[1].tobytes()
 
diff --git a/person_detection/roc.py b/person_detection/roc.py
index ecf7e77..96d4ac5 100644
--- a/person_detection/roc.py
+++ b/person_detection/roc.py
@@ -8,7 +8,8 @@
 from requests.structures import CaseInsensitiveDict
 
 
-TOKEN = "### A VALID TOKEN ###"
+TOKEN = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjU0MzE3MDI4ZWJjNGZjNzFkNGUyZDdlODQwN2M2NTI4MWU5ZmYzYTgifQ.eyJpc3MiOiJodHRwczovL2RleC5hZXRoZXJwcm9qZWN0Lm9yZy9kZXgiLCJzdWIiOiJDaXN4TmpNNE5ERTZPRGMxWlRNeU5qY3RZakkwT1MwME9XTXdMV0V5TW1ZdE1qUmlaalUyWXprNVpEazFFZ1ZqY205M1pBIiwiYXVkIjoiYWV0aGVyLXJvYy1ndWkiLCJleHAiOjE2Mzg2MzkwNTQsImlhdCI6MTYzODU1MjY1NCwibm9uY2UiOiJkemw0TkZGb1RDMDBjVWxyVlRsMmJVTTVRekJvY3pCRVQzZEVWbWxKVlU5UVZXVlBjSFpoTm14NU1ERnIiLCJhdF9oYXNoIjoiWElONGprZzdyeWRzVVRROVBjekVZZyIsImNfaGFzaCI6IlZuSng4cklpSGRYeWFjSi0yaVgyaEEiLCJlbWFpbCI6InNoYWRAb3Blbm5ldHdvcmtpbmcub3JnIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImdyb3VwcyI6WyJBZXRoZXJST0NBZG1pbiIsIk9ORlN0YWZmIl0sIm5hbWUiOiJzaGFkIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2hhZCJ9.F6v3q5RuJVUm-4BPcj02IOoDL5grsmjlYzGJSvuM7R9lCIWXI-Qi6Xb-rgLtCBH3qGhWHuk8abd7ud2ipYDnpLybavJOB8iPr_I-lBy6MFxriTxp6OipeZ5nxAXyt9iyslNcLTTmzapsV5Blzl5xvzwOqCItV9dIRVtDNYPiU5CYEA69Eu8Gy8d_0URmI5re26LaBzJ8EHu1KHuhTh3RoExZUHyCagrTmtUnLkep9jXOTszGoKW2Qw7p2H3d-vHIAVGCx2JBERQC8zAalIaajTZ_gc8lqgzsYauSbHIVdm7o5AesL_dCOJQF1E-FTXDOdVMHVmos7BDchr9jui5_Dg"
+### A VALID TOKEN ###"
 
 URL = "https://roc.menlo.aetherproject.org/aether-roc-api/aether/v4.0.0/connectivity-service-v4/"
 #URL = "https://roc.staging.aether.onlab.us/aether-roc-api/aether/v4.0.0/connectivity-service-v4/"
@@ -16,8 +17,8 @@
 cameras = "menlo-4g-cameras"
 #cameras = "cameras-4g"
 
-MBR_HIGH = 4000000
-MBR_LOW = 2000000
+MBR_HIGH = 5000000
+MBR_LOW  = 2000000
 
 roc_headers = CaseInsensitiveDict()
 roc_headers["Content-Type"] = "application/json"
@@ -26,7 +27,9 @@
 def get_mbr(device_group):
     url = URL + "vcs/vcs/vcs-{}/slice/mbr".format(device_group)
     response = requests.get(url, headers=roc_headers)
-    assert response.status_code == 200, "Failed to get mbr"
+    if response.status_code != 200:
+        print("Failed to get mbr, status_code: {}".format(response.status_code))
+        return None
     mbr = json.loads(response.text)
     return mbr
 
@@ -34,6 +37,8 @@
     url = URL + "vcs/vcs/vcs-{}/slice/mbr".format(device_group)
     response = requests.post(url, headers=roc_headers, json=mbr)
     assert response.status_code == 201, "Failed to set mbr"
+    if response.status_code != 201:
+        print("Failed to set mbr, device_group:{}, mbr:{}, status_code: {}".format(device_group, mbr, response.status_code))
 
 def set_uplink_mbr_high():
     mbr = {'uplink' : MBR_HIGH}
diff --git a/requirements.txt b/requirements.txt
index 4258352..e822bda 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,6 +1,9 @@
+certifi==2021.10.8
+charset-normalizer==2.0.8
 click==8.0.1
 dataclasses==0.8
 Flask==2.0.1
+idna==3.3
 importlib-metadata==4.8.1
 imutils==0.5.4
 itsdangerous==2.0.1
@@ -8,6 +11,8 @@
 MarkupSafe==2.0.1
 numpy==1.19.5
 paho-mqtt==1.6.1
+requests==2.26.0
 typing-extensions==3.10.0.2
+urllib3==1.26.7
 Werkzeug==2.0.1
 zipp==3.6.0
