diff --git a/src/emuvim/api/rest/compute.py b/src/emuvim/api/rest/compute.py
index b935af8..f8da428 100755
--- a/src/emuvim/api/rest/compute.py
+++ b/src/emuvim/api/rest/compute.py
@@ -50,18 +50,42 @@
     def put(self, dc_label, compute_name):
         logging.debug("API CALL: compute start")
         try:
+            #check if json data is a dict
+            data = request.json
+            if type(data) is not dict:
+                data = json.loads(request.json)
 
-            image = json.loads(request.json).get("image")
-            network = json.loads(request.json).get("network")
-            command = json.loads(request.json).get("docker_command")
+            network = data.get("network")
+            nw_list = self._parse_network(network)
+            image = data.get("image")
+            command = data.get("docker_command")
+
             c = dcs.get(dc_label).startCompute(
-                compute_name, image= image, command= command, network= network)
+                compute_name, image= image, command= command, network= nw_list)
             # return docker inspect dict
             return c.getStatus(), 200
         except Exception as ex:
             logging.exception("API error.")
             return ex.message, 500
 
+    def _parse_network(self, network_str):
+        '''
+        parse the options for all network interfaces of the vnf
+        :param network_str: (id=x,ip=x.x.x.x/x), ...
+        :return: list of dicts [{"id":x,"ip":"x.x.x.x/x"}, ...]
+        '''
+        nw_list = list()
+
+        if network_str is None or '),(' not in network_str :
+            return nw_list
+
+        networks = network_str[1:-1].split('),(')
+        for nw in networks:
+            nw_dict = dict(tuple(e.split('=')) for e in nw.split(','))
+            nw_list.append(nw_dict)
+
+        return nw_list
+
 class ComputeStop(Resource):
 
     global dcs
@@ -134,3 +158,5 @@
         except Exception as ex:
             logging.exception("API error.")
             return ex.message, 500
+
+
diff --git a/src/emuvim/api/rest/network.py b/src/emuvim/api/rest/network.py
index ee0c389..68256f5 100755
--- a/src/emuvim/api/rest/network.py
+++ b/src/emuvim/api/rest/network.py
@@ -72,12 +72,17 @@
         # call DCNetwork method, not really datacenter specific API for now...
         # no check if vnfs are really connected to this datacenter...
         try:
-            vnf_src_interface = json.loads(request.json).get("vnf_src_interface")
-            vnf_dst_interface = json.loads(request.json).get("vnf_dst_interface")
-            weight = json.loads(request.json).get("weight")
-            match = json.loads(request.json).get("match")
-            bidirectional = json.loads(request.json).get("bidirectional")
-            cookie = json.loads(request.json).get("cookie")
+            # check if json data is a dict
+            data = request.json
+            if type(data) is not dict:
+                data = json.loads(request.json)
+
+            vnf_src_interface = data.get("vnf_src_interface")
+            vnf_dst_interface = data.get("vnf_dst_interface")
+            weight = data.get("weight")
+            match = data.get("match")
+            bidirectional = data.get("bidirectional")
+            cookie = data.get("cookie")
             c = net.setChain(
                 vnf_src_name, vnf_dst_name,
                 vnf_src_interface=vnf_src_interface,
