diff --git a/snf-astakos-app/astakos/im/functions.py b/snf-astakos-app/astakos/im/functions.py
index 5bc3f2a12cec1267bda525a4d9b7c8004515ea66..f993ec46d0f45202707ca2adcd3190664036c6b8 100644
--- a/snf-astakos-app/astakos/im/functions.py
+++ b/snf-astakos-app/astakos/im/functions.py
@@ -42,7 +42,6 @@ from django.contrib.auth import login as auth_login, logout as auth_logout
 from django.db.models import Q
 
 from synnefo_branding.utils import render_to_string
-from synnefo.util.keypath import set_path
 
 from synnefo.lib import join_urls
 from astakos.im.models import AstakosUser, Invitation, ProjectMembership, \
@@ -1179,12 +1178,11 @@ def count_pending_app(users):
                                              owner__in=users)
     apps_d = _partition_by(lambda a: a.owner.uuid, apps)
 
-    usage = {}
+    usage = quotas.QuotaDict()
     for user in users:
         uuid = user.uuid
-        set_path(usage,
-                 [uuid, user.base_project.uuid, quotas.PENDING_APP_RESOURCE],
-                 len(apps_d.get(uuid, [])), createpath=True)
+        usage[uuid][user.base_project.uuid][quotas.PENDING_APP_RESOURCE] = \
+            len(apps_d.get(uuid, []))
     return usage
 
 
diff --git a/snf-astakos-app/astakos/im/quotas.py b/snf-astakos-app/astakos/im/quotas.py
index 77ff802053a8819d4d0dfcce3da41d298d19ab46..ede66d361d08fb8912b92d2f040ad63e8de2a0a9 100644
--- a/snf-astakos-app/astakos/im/quotas.py
+++ b/snf-astakos-app/astakos/im/quotas.py
@@ -37,9 +37,11 @@ from astakos.im.models import (
 import astakos.quotaholder_app.callpoint as qh
 from astakos.quotaholder_app.exception import NoCapacityError
 from django.db.models import Q
-from synnefo.util.keypath import set_path
+from collections import defaultdict
 
 
+QuotaDict = lambda: defaultdict(lambda: defaultdict(dict))
+
 PROJECT_TAG = "project:"
 USER_TAG = "user:"
 
@@ -104,13 +106,12 @@ def get_related_sources(counters):
 
 
 def mk_quota_dict(users_counters, project_counters):
-    quota = {}
+    quota = QuotaDict()
     for (holder, source, resource), u_value in users_counters.iteritems():
         p_value = project_counters[(source, None, resource)]
         values_dict = from_holding(u_value)
         values_dict.update(from_holding(p_value, is_project=True))
-        set_path(quota, [holder, source, resource], values_dict,
-                 createpath=True)
+        quota[holder][source][resource] = values_dict
     return quota
 
 
@@ -144,19 +145,17 @@ def service_get_quotas(component, users=None):
 
 
 def mk_limits_dict(counters):
-    quota = {}
-    for key, (limit, _, _) in counters.iteritems():
-        path = list(key)
-        set_path(quota, path, limit, createpath=True)
+    quota = QuotaDict()
+    for (holder, source, resource), (limit, _, _) in counters.iteritems():
+        quota[holder][source][resource] = limit
     return quota
 
 
 def mk_project_quota_dict(project_counters):
-    quota = {}
+    quota = QuotaDict()
     for (holder, _, resource), p_value in project_counters.iteritems():
         values_dict = from_holding(p_value, is_project=True)
-        set_path(quota, [holder, resource], values_dict,
-                 createpath=True)
+        quota[holder][resource] = values_dict
     return quota
 
 
@@ -263,8 +262,8 @@ def astakos_project_quotas(projects, resource=None):
         "person", "project")
     memberships_d = _partition_by(lambda m: m.project_id, memberships)
 
-    user_quota = {}
-    project_quota = {}
+    user_quota = QuotaDict()
+    project_quota = QuotaDict()
 
     for project in projects:
         pr_ref = get_project_ref(project)
@@ -276,14 +275,12 @@ def astakos_project_quotas(projects, resource=None):
         project_memberships = memberships_d.get(project.id, [])
         for grant in project_grants:
             resource = grant.resource.name
-            path = [pr_ref, None, resource]
             val = grant.project_capacity if state == Project.NORMAL else 0
-            set_path(project_quota, path, val, createpath=True)
+            project_quota[pr_ref][None][resource] = val
             for membership in project_memberships:
                 u_ref = get_user_ref(membership.person)
-                path = [u_ref, pr_ref, resource]
                 val = grant.member_capacity if membership.is_active() else 0
-                set_path(user_quota, path, val, createpath=True)
+                user_quota[u_ref][pr_ref][resource] = val
 
     return project_quota, user_quota
 
@@ -309,13 +306,12 @@ def membership_quota(membership):
     u_ref = get_user_ref(membership.person)
     objs = ProjectResourceQuota.objects.select_related()
     grants = objs.filter(project=project)
-    user_quota = {}
+    user_quota = QuotaDict()
     is_active = membership.is_active()
     for grant in grants:
         resource = grant.resource.name
-        path = [u_ref, pr_ref, resource]
         value = grant.member_capacity if is_active else 0
-        set_path(user_quota, path, value, createpath=True)
+        user_quota[u_ref][pr_ref][resource] = value
     return user_quota
 
 
diff --git a/snf-cyclades-app/synnefo/quotas/util.py b/snf-cyclades-app/synnefo/quotas/util.py
index 415d0d1c2f91de3b109d5c518c736145fa7e633b..28fe32dda8e943043337d0503d1b784c1c68390c 100644
--- a/snf-cyclades-app/synnefo/quotas/util.py
+++ b/snf-cyclades-app/synnefo/quotas/util.py
@@ -35,8 +35,9 @@ from django.db.models import Sum, Count, Q
 
 from synnefo.db.models import VirtualMachine, Network, IPAddress
 from synnefo.quotas import Quotaholder
-from synnefo.util.keypath import set_path
+from collections import defaultdict
 
+QuotaDict = lambda: defaultdict(lambda: defaultdict(dict))
 
 MiB = 2 ** 20
 GiB = 2 ** 30
@@ -44,7 +45,7 @@ GiB = 2 ** 30
 
 def get_db_holdings(user=None, project=None):
     """Get holdings from Cyclades DB."""
-    holdings = {}
+    holdings = QuotaDict()
 
     vms = VirtualMachine.objects.filter(deleted=False)
     networks = Network.objects.filter(deleted=False)
@@ -74,7 +75,7 @@ def get_db_holdings(user=None, project=None):
                "cyclades.total_cpu": vm_res["total_cpu"],
                "cyclades.disk": vm_res["disk"] * GiB,
                "cyclades.total_ram": vm_res["total_ram"] * MiB}
-        set_path(holdings, [user, project], res, createpath=True)
+        holdings[user][project] = res
 
     vm_active_resources = vms.values("userid", "project")\
         .filter(Q(operstate="STARTED") | Q(operstate="BUILD") |
@@ -85,10 +86,8 @@ def get_db_holdings(user=None, project=None):
     for vm_res in vm_active_resources.iterator():
         user = vm_res['userid']
         project = vm_res['project']
-        set_path(holdings, [user, project, "cyclades.cpu"], vm_res["cpu"],
-                 createpath=True)
-        set_path(holdings, [user, project, "cyclades.ram"],
-                 vm_res["ram"] * MiB, createpath=True)
+        holdings[user][project]["cyclades.cpu"] = vm_res["cpu"]
+        holdings[user][project]["cyclades.ram"] = vm_res["ram"] * MiB
 
     # Get resources related with networks
     net_resources = networks.values("userid", "project")\
@@ -99,8 +98,7 @@ def get_db_holdings(user=None, project=None):
         if user is None:
             continue
         project = net_res['project']
-        set_path(holdings, [user, project, "cyclades.network.private"],
-                 net_res["num"], createpath=True)
+        holdings[user][project]["cyclades.network.private"] = net_res["num"]
 
     floating_ips_resources = floating_ips.values("userid", "project")\
                                          .annotate(num=Count("id"))
@@ -108,15 +106,15 @@ def get_db_holdings(user=None, project=None):
     for floating_ip_res in floating_ips_resources.iterator():
         user = floating_ip_res["userid"]
         project = floating_ip_res["project"]
-        set_path(holdings, [user, project, "cyclades.floating_ip"],
-                 floating_ip_res["num"], createpath=True)
+        holdings[user][project]["cyclades.floating_ip"] = \
+            floating_ip_res["num"]
 
     return holdings
 
 
 def get_db_project_holdings(project=None):
     """Get holdings from Cyclades DB."""
-    holdings = {}
+    holdings = QuotaDict()
 
     vms = VirtualMachine.objects.filter(deleted=False)
     networks = Network.objects.filter(deleted=False)
@@ -140,7 +138,7 @@ def get_db_project_holdings(project=None):
                "cyclades.total_cpu": vm_res["total_cpu"],
                "cyclades.disk": vm_res["disk"] * GiB,
                "cyclades.total_ram": vm_res["total_ram"] * MiB}
-        set_path(holdings, [project], res, createpath=True)
+        holdings[project] = res
 
     vm_active_resources = vms.values("project")\
         .filter(Q(operstate="STARTED") | Q(operstate="BUILD") |
@@ -150,10 +148,8 @@ def get_db_project_holdings(project=None):
 
     for vm_res in vm_active_resources.iterator():
         project = vm_res['project']
-        set_path(holdings, [project, "cyclades.cpu"], vm_res["cpu"],
-                 createpath=True)
-        set_path(holdings, [project, "cyclades.ram"],
-                 vm_res["ram"] * MiB, createpath=True)
+        holdings[project]["cyclades.cpu"] = vm_res["cpu"]
+        holdings[project]["cyclades.ram"] = vm_res["ram"] * MiB
 
     # Get resources related with networks
     net_resources = networks.values("project").annotate(num=Count("id"))
@@ -162,16 +158,14 @@ def get_db_project_holdings(project=None):
         project = net_res['project']
         if project is None:
             continue
-        set_path(holdings, [project, "cyclades.network.private"],
-                 net_res["num"], createpath=True)
+        holdings[project]["cyclades.network.private"] = net_res["num"]
 
     floating_ips_resources = floating_ips.values("project")\
         .annotate(num=Count("id"))
 
     for floating_ip_res in floating_ips_resources.iterator():
         project = floating_ip_res["project"]
-        set_path(holdings, [project, "cyclades.floating_ip"],
-                 floating_ip_res["num"], createpath=True)
+        holdings[project]["cyclades.floating_ip"] = floating_ip_res["num"]
 
     return holdings