diff --git a/LTA/LTAIngest/LTAIngestClient/lib/rpc.py b/LTA/LTAIngest/LTAIngestClient/lib/rpc.py
index 30ed8a2a8e352788ef9c8779f844794665157e16..d9fd669a7a0a0024e840e802295fa373694c0a6f 100644
--- a/LTA/LTAIngest/LTAIngestClient/lib/rpc.py
+++ b/LTA/LTAIngest/LTAIngestClient/lib/rpc.py
@@ -11,6 +11,19 @@ class IngestRPC():
     def __init__(self, service_name=DEFAULT_INGEST_SERVICENAME, exchange=DEFAULT_BUSNAME, broker=DEFAULT_BROKER):
         self.rpc = RPC(service_name=service_name, exchange=exchange, broker=broker, timeout=5*60)
 
+    def open(self):
+        self.rpc.open()
+
+    def close(self):
+        self.rpc.close()
+
+    def __enter__(self):
+        self.open()
+        return self
+
+    def __exit__(self, exc_type, exc_val, exc_tb):
+        self.close()
+
     def removeExportJob(self, export_group_id):
         return self.rpc.execute('RemoveExportJob', export_group_id=export_group_id)
 
diff --git a/MAC/Services/TaskManagement/Client/lib/taskmanagement_rpc.py b/MAC/Services/TaskManagement/Client/lib/taskmanagement_rpc.py
index 0f5372103511cda4857fa202d5a980a37f02fac1..cf64a573d7b82f1154723b5568e75de519967e14 100644
--- a/MAC/Services/TaskManagement/Client/lib/taskmanagement_rpc.py
+++ b/MAC/Services/TaskManagement/Client/lib/taskmanagement_rpc.py
@@ -10,6 +10,19 @@ class TaskManagementRPC():
         self.rpc = RPC(exchange=exchange, service_name=DEFAULT_SERVICENAME, broker=broker,
                        timeout=timeout)
 
+    def open(self):
+        self.rpc.open()
+
+    def close(self):
+        self.rpc.close()
+
+    def __enter__(self):
+        self.open()
+        return self
+
+    def __exit__(self, exc_type, exc_val, exc_tb):
+        self.close()
+
     def abort_task(self, otdb_id):
         result = self.rpc.execute('AbortTask', otdb_id=otdb_id)
         return result
diff --git a/MAC/Services/src/observation_control_rpc.py b/MAC/Services/src/observation_control_rpc.py
index b55510048886d9133307b43d328be527ffeff520..8935cc3ac008b3810c9fb497efb6b19651128f5b 100644
--- a/MAC/Services/src/observation_control_rpc.py
+++ b/MAC/Services/src/observation_control_rpc.py
@@ -38,5 +38,18 @@ class ObservationControlRPCClient():
                  timeout=120):
         self.rpc = RPC(service_name=servicename, exchange=exchange, broker=broker, timeout=timeout)
 
+    def open(self):
+        self.rpc.open()
+
+    def close(self):
+        self.rpc.close()
+
+    def __enter__(self):
+        self.open()
+        return self
+
+    def __exit__(self, exc_type, exc_val, exc_tb):
+        self.close()
+
     def abort_observation(self, sas_id):
         return self.rpc.execute('AbortObservation', sas_id=sas_id)
diff --git a/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py b/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py
index 138f548fbeed8e080caab55755656967d120cf6e..8c2759af65b31a4377dd8c8fa603fb4512486b9b 100644
--- a/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py
+++ b/SAS/ResourceAssignment/ResourceAssignmentService/rpc.py
@@ -44,6 +44,19 @@ class RARPC():
         self.rpc = RPC(service_name=DEFAULT_SERVICENAME, exchange=exchange, broker=broker,
                        timeout=timeout)
 
+    def open(self):
+        self.rpc.open()
+
+    def close(self):
+        self.rpc.close()
+
+    def __enter__(self):
+        self.open()
+        return self
+
+    def __exit__(self, exc_type, exc_val, exc_tb):
+        self.close()
+
     def getResourceClaimStatuses(self):
         return self.rpc.execute('GetResourceClaimStatuses')