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,
diff --git a/src/emuvim/cli/rest/compute.py b/src/emuvim/cli/rest/compute.py
index 2a055a3..3a719cc 100755
--- a/src/emuvim/cli/rest/compute.py
+++ b/src/emuvim/cli/rest/compute.py
@@ -47,18 +47,16 @@
 
     def start(self, args):
 
-        nw_list = list()
-        if args.get("network") is not None:
-            nw_list = self._parse_network(args.get("network"))
         req = {'image':args.get("image"),
                'command':args.get("docker_command"),
-               'network':nw_list}
+               'network':args.get("network")}
 
         response = put("%s/restapi/compute/%s/%s/start" %
                        (args.get("endpoint"),
                         args.get("datacenter"),
                         args.get("name")),
-                       json = json.dumps(req))
+                        json = req)
+
         pp.pprint(response.json())
 
     def stop(self, args):
@@ -109,22 +107,6 @@
         pp.pprint(list)
 
 
-
-    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()
-        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
-
-
 parser = argparse.ArgumentParser(description='son-emu datacenter')
 parser.add_argument(
     "command",
diff --git a/src/emuvim/cli/rest/network.py b/src/emuvim/cli/rest/network.py
index c87a924..c6e1dcc 100755
--- a/src/emuvim/cli/rest/network.py
+++ b/src/emuvim/cli/rest/network.py
@@ -61,7 +61,7 @@
                        (args.get("endpoint"),
                         vnf_src_name,
                         vnf_dst_name),
-                       json=json.dumps(params))
+                       json=params)
         pp.pprint(response.json())
 
     def remove(self, args):
@@ -80,7 +80,7 @@
                        (args.get("endpoint"),
                         vnf_src_name,
                         vnf_dst_name),
-                       json=json.dumps(params))
+                       json=params)
         pp.pprint(response.json())
 
     def _parse_vnf_name(self, vnf_name_str):
