diff --git a/src/emuvim/dcemulator/resourcemodel/upb/simple.py b/src/emuvim/dcemulator/resourcemodel/upb/simple.py
index 1d30733..da76b96 100644
--- a/src/emuvim/dcemulator/resourcemodel/upb/simple.py
+++ b/src/emuvim/dcemulator/resourcemodel/upb/simple.py
@@ -9,6 +9,8 @@
 LOG = logging.getLogger("rm.upb.simple")
 LOG.setLevel(logging.DEBUG)
 
+CPU_PERIOD = 1000000
+
 
 class UpbSimpleCloudDcRM(BaseResourceModel):
     """
@@ -129,22 +131,31 @@
         # calculate cpu time fraction of a single compute unit
         self.single_cu = float(e_cpu) / sum([rm.dc_max_cu for rm in list(self.registrar.resource_models)])
         # calculate cpu time fraction for container with given flavor
-        cpu_time_percentage = single_cu * number_cu
-        # calculate cpu period and quota for CFS
-        # (see: https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt)
-        # Attention minimum cpu_quota is 1ms (micro)
-        cpu_period = 1000000  # lets consider a fixed period of 1000000 microseconds for now
-        cpu_quota = cpu_period * cpu_time_percentage  # calculate the fraction of cpu time for this container
-        # ATTENTION >= 1000 to avoid a invalid argument system error ... no idea why
-        if cpu_quota < 1000:
-            cpu_quota = 1000
-            LOG.warning("Increased CPU quota for %r to avoid system error." % d.name)
-        # apply to container if changed
+        cpu_time_percentage = self.single_cu * number_cu
+        # calculate input values for CFS scheduler bandwidth limitation
+        cpu_period, cpu_quota = self._calculate_cpu_cfs_values(cpu_time_percentage)
+        # apply limits to container if changed
         if d.cpu_period != cpu_period or d.cpu_quota != cpu_quota:
             LOG.debug("Setting CPU limit for %r: cpu_quota = cpu_period * limit = %f * %f = %f" % (
                       d.name, cpu_period, cpu_time_percentage, cpu_quota))
             d.updateCpuLimit(cpu_period=int(cpu_period), cpu_quota=int(cpu_quota))
 
+    def _calculate_cpu_cfs_values(self, cpu_time_percentage):
+        """
+        Calculate cpu period and quota for CFS
+        :param cpu_time_percentage: percentage of overall CPU to be used
+        :return: cpu_period, cpu_quota
+        """
+        # (see: https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt)
+        # Attention minimum cpu_quota is 1ms (micro)
+        cpu_period = CPU_PERIOD  # lets consider a fixed period of 1000000 microseconds for now
+        cpu_quota = cpu_period * cpu_time_percentage  # calculate the fraction of cpu time for this container
+        # ATTENTION >= 1000 to avoid a invalid argument system error ... no idea why
+        if cpu_quota < 1000:
+            cpu_quota = 1000
+            LOG.warning("Increased CPU quota to avoid system error.")
+        return cpu_period, cpu_quota
+
     def _apply_mem_limits(self, d):
         """
         Calculate real mem limit and apply.
@@ -157,18 +168,26 @@
         # calculate amount of memory for a single mu
         self.single_mu = float(e_mem) / sum([rm.dc_max_mu for rm in list(self.registrar.resource_models)])
         # calculate mem for given flavor
-        mem_limit = single_mu * number_mu
-        # ATTENTION minimum mem_limit per container is 4MB
-        if mem_limit < 4:
-            mem_limit = 4
-            LOG.warning("Increased MEM limit for %r because it was less than 4.0 MB." % d.name)
-        # to byte!
-        mem_limit = int(mem_limit*1024*1024)
+        mem_limit = self.single_mu * number_mu
+        mem_limit = self._calculate_mem_limit_value(mem_limit)
         # apply to container if changed
         if d.mem_limit != mem_limit:
             LOG.debug("Setting MEM limit for %r: mem_limit = %f MB" % (d.name, mem_limit/1024/1024))
             d.updateMemoryLimit(mem_limit=mem_limit)
 
+    def _calculate_mem_limit_value(self, mem_limit):
+        """
+        Calculate actual mem limit as input for cgroup API
+        :param mem_limit: abstract mem limit
+        :return: concrete mem limit
+        """
+        # ATTENTION minimum mem_limit per container is 4MB
+        if mem_limit < 4:
+            mem_limit = 4
+            LOG.warning("Increased MEM limit because it was less than 4.0 MB.")
+        # to byte!
+        return int(mem_limit*1024*1024)
+
     def get_state_dict(self):
         """
         Return the state of the resource model as simple dict.
