diff --git a/src/emuvim/api/rest/compute.py b/src/emuvim/api/rest/compute.py
index dc2b611..2ffa3e8 100755
--- a/src/emuvim/api/rest/compute.py
+++ b/src/emuvim/api/rest/compute.py
@@ -29,6 +29,7 @@
 from flask_restful import Resource
 from flask import request
 import json
+from copy import deepcopy
 
 logging.basicConfig(level=logging.INFO)
 
@@ -51,10 +52,6 @@
     global dcs
 
     def put(self, dc_label, compute_name, resource=None, value=None):
-        # check if resource update
-        if resource and value:
-           c = self._update_resource(dc_label, compute_name, resource, value)
-           return c.getStatus(), 200
 
         # deploy new container
         # check if json data is a dict
@@ -79,20 +76,6 @@
             logging.exception("API error.")
             return ex.message, 500, CORS_HEADER
 
-    def _update_resource(self, dc_label, compute_name, resource, value):
-        #check if container exists
-        d = dcs.get(dc_label).net.getNodeByName(compute_name)
-        if resource == 'cpu':
-            cpu_period = int(dcs.get(dc_label).net.cpu_period)
-            cpu_quota = int(cpu_period * float(value))
-            #put default values back
-            if float(value) <= 0:
-                cpu_period = 100000
-                cpu_quota = -1
-            d.updateCpuLimit(cpu_period=cpu_period, cpu_quota=cpu_quota)
-        return d
-
-
     def get(self, dc_label, compute_name):
 
         logging.debug("API CALL: compute status")
@@ -151,6 +134,74 @@
             logging.exception("API error.")
             return ex.message, 500, CORS_HEADER
 
+class ComputeResources(Resource):
+    """
+    Update the container's resources using the docker.update function
+    re-using the same parameters:
+        url params:
+           blkio_weight
+           cpu_period, cpu_quota, cpu_shares
+           cpuset_cpus
+           cpuset_mems
+           mem_limit
+           mem_reservation
+           memswap_limit
+           kernel_memory
+           restart_policy
+    see https://docs.docker.com/engine/reference/commandline/update/
+    or API docs: https://docker-py.readthedocs.io/en/stable/api.html#module-docker.api.container
+    :param dc_label: name of the DC
+    :param compute_name: compute container name
+
+    :return: docker inspect dict of deployed docker
+    """
+    global dcs
+
+    def put(self, dc_label, compute_name):
+        logging.debug("REST CALL: update container resources")
+
+        try:
+            c = self._update_resources(dc_label, compute_name)
+            return c.getStatus(), 200, CORS_HEADER
+        except Exception as ex:
+            logging.exception("API error.")
+            return ex.message, 500, CORS_HEADER
+
+    def _update_resources(self, dc_label, compute_name):
+
+        # get URL parameters
+        params = request.args
+        # then no data
+        if params is None:
+            params = {}
+        logging.info("REST CALL: update container resources {0}".format(params))
+        #check if container exists
+        d = dcs.get(dc_label).net.getNodeByName(compute_name)
+
+        # general request of cpu percentage
+        # create a mutable copy
+        params = params.to_dict()
+        if 'cpu' in params:
+            cpu_period = int(dcs.get(dc_label).net.cpu_period)
+            value = params.get('cpu')
+            cpu_quota = int(cpu_period * float(value))
+            #put default values back
+            if float(value) <= 0:
+                cpu_period = 100000
+                cpu_quota = -1
+            params['cpu_period'] = cpu_period
+            params['cpu_quota'] = cpu_quota
+            #d.updateCpuLimit(cpu_period=cpu_period, cpu_quota=cpu_quota)
+
+        # only pass allowed keys to docker
+        allowed_keys = ['blkio_weight', 'cpu_period', 'cpu_quota', 'cpu_shares', 'cpuset_cpus',
+                        'cpuset_mems', 'mem_limit', 'mem_reservation', 'memswap_limit',
+                        'kernel_memory', 'restart_policy']
+        filtered_params = {key:params[key] for key in allowed_keys if key in params}
+
+        d.update_resources(**filtered_params)
+
+        return d
 
 class DatacenterList(Resource):
     global dcs
diff --git a/src/emuvim/api/rest/rest_api_endpoint.py b/src/emuvim/api/rest/rest_api_endpoint.py
index 0ecf548..fc48a33 100755
--- a/src/emuvim/api/rest/rest_api_endpoint.py
+++ b/src/emuvim/api/rest/rest_api_endpoint.py
@@ -32,7 +32,7 @@
 
 # need to import total module to set its global variable dcs
 import compute
-from compute import dcs, ComputeList, Compute, DatacenterList, DatacenterStatus
+from compute import dcs, ComputeList, Compute, ComputeResources, DatacenterList, DatacenterStatus
 
 # need to import total module to set its global variable net
 import network
@@ -62,12 +62,11 @@
         # setup endpoints
 
         # compute related actions (start/stop VNFs, get info)
-        self.api.add_resource(Compute,
-                              "/restapi/compute/<dc_label>/<compute_name>",
-                              "/restapi/compute/<dc_label>/<compute_name>/<resource>/<value>")
+        self.api.add_resource(Compute, "/restapi/compute/<dc_label>/<compute_name>")
         self.api.add_resource(ComputeList,
                       "/restapi/compute",
                       "/restapi/compute/<dc_label>")
+        self.api.add_resource(ComputeResources, "/restapi/compute/resources/<dc_label>/<compute_name>")
 
         self.api.add_resource(DatacenterStatus, "/restapi/datacenter/<dc_label>")
         self.api.add_resource(DatacenterList, "/restapi/datacenter")
