diff --git a/master/bt5/vifib_slapos_capacity/SkinTemplateItem/portal_skins/vifib_slapos_capacity/Computer_checkAndDesactivatePartitionList.xml b/master/bt5/vifib_slapos_capacity/SkinTemplateItem/portal_skins/vifib_slapos_capacity/Computer_checkAndDesactivatePartitionList.xml
index 901a5d09cebcb70a283bd008ac3c56cca97f4156..eab23bb59342b6acfa5827f83303eaadde250ad7 100644
--- a/master/bt5/vifib_slapos_capacity/SkinTemplateItem/portal_skins/vifib_slapos_capacity/Computer_checkAndDesactivatePartitionList.xml
+++ b/master/bt5/vifib_slapos_capacity/SkinTemplateItem/portal_skins/vifib_slapos_capacity/Computer_checkAndDesactivatePartitionList.xml
@@ -55,13 +55,81 @@
 computer = context\n
 portal = context.getPortalObject()\n
 \n
+if computer.getAllocationScope() != \'open/public\':\n
+  # Don\'t update non public computer\n
+  return\n
+\n
+can_allocate = True\n
+comment = \'\'\n
+\n
+# First and simple way to see if computer is dead\n
 modification_date = portal.portal_workflow.getInfoFor(computer, \'time\', wf_id=\'edit_workflow\')\n
 if (DateTime() - modification_date) > 1:\n
   # Computer didn\'t talk to vifib for 1 days, do not consider it as a trustable public server for now\n
-  for partition in computer.contentValues(portal_type="Computer Partition"):\n
-    if partition.getSlapState() == \'free\':\n
-      # Desactivate partition. A new partition will be created if the computer runs slapformat\n
-      partition.markInactive()\n
+  # slapformat is supposed to run at least once per day\n
+  can_allocate = False\n
+  comment = "Computer didn\'t contact the server for more than one day"\n
+\n
+if can_allocate:\n
+  # Check if computer has error reported\n
+  memcached_dict = portal.portal_memcached.getMemcachedDict(\n
+    key_prefix=\'slap_tool\',\n
+    plugin_path=\'portal_memcached/default_memcached_plugin\')\n
+  try:\n
+    d = memcached_dict[computer.getReference()]\n
+  except KeyError:\n
+    can_allocate = False\n
+    comment = "Computer didn\'t contact the server"\n
+  else:\n
+    log_dict = json.loads(d)\n
+    if \'#error\' in log_dict.get(\'text\', \'#error\'):\n
+      can_allocate = False\n
+      comment = \'Computer reported an error\'\n
+    # XXX TODO: compare creation date of #ok message\n
+\n
+if can_allocate:\n
+  # Check the computer capacity.\n
+  # there is a arbitrary hardcoded default value: not more than 20 instances on\n
+  # a computer\n
+  computer_capacity_quantity = computer.getCapacityQuantity(20)\n
+  software_release_capacity_dict = {}\n
+  consumed_capacity = 0\n
+\n
+  for instance in portal.portal_catalog.portal_catalog(\n
+      default_aggregate_uid=computer.getUid(),\n
+      portal_type=[\'Software Instance\', \'Slave Instance\'],\n
+      validation_state=\'validated\'):\n
+\n
+    instance = instance.getObject()\n
+\n
+    software_release_url = instance.getRootSoftwareReleaseUrl()\n
+    if software_release_url in software_release_capacity_dict:\n
+      software_release_capacity = software_release_capacity_dict[software_release_url]\n
+    else:\n
+      delivery_line = instance.getCausalityValue().getMovementList[0]\n
+      software_release = delivery_line.getAggregateValue(portal_type=\'Software Release\')\n
+      if software_release:\n
+        software_release_capacity = software_release.getCapacityQuantity(1)\n
+        software_release_capacity_dict[software_release_url] = software_release_capacity\n
+\n
+    consumed_capacity += software_release_capacity\n
+    if consumed_capacity >= computer_capacity_quantity:\n
+      can_allocate = False\n
+      comment = \'Computer capacity limit exceded\'\n
+      break\n
+\n
+new_value = None\n
+if can_allocate:\n
+  if computer.getCapacityScope() == \'closed\':\n
+    new_value = \'open\'\n
+else:\n
+  if computer.getCapacityScope() == \'open\':\n
+    new_value = \'closed\'\n
+\n
+if new_value is not None:\n
+  computer.edit(capacity_scope=new_value)\n
+  if comment:\n
+    portal.portal_workflow.doActionFor(computer, \'edit_action\', comment=comment)\n
 
 
 ]]></string> </value>
diff --git a/master/bt5/vifib_slapos_capacity/bt/revision b/master/bt5/vifib_slapos_capacity/bt/revision
index e440e5c842586965a7fb77deda2eca68612b1f53..bf0d87ab1b2b0ec1a11a3973d2845b42413d9767 100644
--- a/master/bt5/vifib_slapos_capacity/bt/revision
+++ b/master/bt5/vifib_slapos_capacity/bt/revision
@@ -1 +1 @@
-3
\ No newline at end of file
+4
\ No newline at end of file