diff --git a/snf-astakos-app/astakos/im/tests/api.py b/snf-astakos-app/astakos/im/tests/api.py
index 8b32d8f4aeee7e4d7e97e943bada8833813464a6..5e33343a123bb23e335922af1ca46fb856fd47dd 100644
--- a/snf-astakos-app/astakos/im/tests/api.py
+++ b/snf-astakos-app/astakos/im/tests/api.py
@@ -66,14 +66,14 @@ class QuotaAPITest(TestCase):
                       "service_origin": "service1",
                       "ui_visible": True}
         r, _ = register.add_resource(resource11)
-        register.update_resources([(r, 100)])
+        register.update_base_default(r, 100)
         resource12 = {"name": "service1.resource12",
                       "desc": "resource11 desc",
                       "service_type": "type1",
                       "service_origin": "service1",
                       "unit": "bytes"}
         r, _ = register.add_resource(resource12)
-        register.update_resources([(r, 1024)])
+        register.update_base_default(r, 1024)
 
         # create user
         user = get_local_user('test@grnet.gr')
@@ -93,7 +93,7 @@ class QuotaAPITest(TestCase):
                       "service_origin": "service2",
                       "ui_visible": False}
         r, _ = register.add_resource(resource21)
-        register.update_resources([(r, 3)])
+        register.update_base_default(r, 3)
 
         resource_names = [r['name'] for r in
                           [resource11, resource12, resource21]]
@@ -113,10 +113,10 @@ class QuotaAPITest(TestCase):
         r = client.get(u('quotas/'), **headers)
         self.assertEqual(r.status_code, 200)
         body = json.loads(r.content)
-        system_quota = body['system']
-        assertIn('system', body)
+        assertIn(user.uuid, body)
+        base_quota = body[user.uuid]
         for name in resource_names:
-            assertIn(name, system_quota)
+            assertIn(name, base_quota)
 
         nmheaders = {'HTTP_X_AUTH_TOKEN': non_moderated_user.auth_token}
         r = client.get(u('quotas/'), **nmheaders)
@@ -149,14 +149,14 @@ class QuotaAPITest(TestCase):
             "name": "my commission",
             "provisions": [
                 {
-                    "holder": user.uuid,
-                    "source": "system",
+                    "holder": "user:" + user.uuid,
+                    "source": "project:" + user.uuid,
                     "resource": resource11['name'],
                     "quantity": 1
                 },
                 {
-                    "holder": user.uuid,
-                    "source": "system",
+                    "holder": "user:" + user.uuid,
+                    "source": "project:" + user.uuid,
                     "resource": resource12['name'],
                     "quantity": 30000
                 }]}
@@ -172,14 +172,14 @@ class QuotaAPITest(TestCase):
             "name": "my commission",
             "provisions": [
                 {
-                    "holder": user.uuid,
-                    "source": "system",
+                    "holder": "user:" + user.uuid,
+                    "source": "project:" + user.uuid,
                     "resource": resource11['name'],
                     "quantity": 1
                 },
                 {
-                    "holder": user.uuid,
-                    "source": "system",
+                    "holder": "user:" + user.uuid,
+                    "source": "project:" + user.uuid,
                     "resource": resource12['name'],
                     "quantity": 100
                 }]}
@@ -226,11 +226,16 @@ class QuotaAPITest(TestCase):
         self.assertEqual(r.status_code, 200)
         body = json.loads(r.content)
         user_quota = body[user.uuid]
-        system_quota = user_quota['system']
-        r11 = system_quota[resource11['name']]
+        base_quota = user_quota[user.uuid]
+        r11 = base_quota[resource11['name']]
         self.assertEqual(r11['usage'], 3)
         self.assertEqual(r11['pending'], 3)
 
+        r = client.get(u('service_project_quotas'), **s1_headers)
+        self.assertEqual(r.status_code, 200)
+        body = json.loads(r.content)
+        assertIn(user.uuid, body)
+
         # resolve pending commissions
         resolve_data = {
             "accept": [serial1, serial3],
@@ -256,14 +261,14 @@ class QuotaAPITest(TestCase):
             "name": "my commission",
             "provisions": [
                 {
-                    "holder": user.uuid,
-                    "source": "system",
+                    "holder": "user:" + user.uuid,
+                    "source": "project:" + user.uuid,
                     "resource": resource11['name'],
                     "quantity": 1
                 },
                 {
-                    "holder": user.uuid,
-                    "source": "system",
+                    "holder": "user:" + user.uuid,
+                    "source": "project:" + user.uuid,
                     "resource": resource12['name'],
                     "quantity": 100
                 }]}
@@ -285,8 +290,8 @@ class QuotaAPITest(TestCase):
             "name": "my commission",
             "provisions": [
                 {
-                    "holder": user.uuid,
-                    "source": "system",
+                    "holder": "user:" + user.uuid,
+                    "source": "project:" + user.uuid,
                     "resource": resource11['name'],
                 }
             ]}
@@ -316,14 +321,14 @@ class QuotaAPITest(TestCase):
             "name": "my commission",
             "provisions": [
                 {
-                    "holder": user.uuid,
-                    "source": "system",
+                    "holder": "user:" + user.uuid,
+                    "source": "project:" + user.uuid,
                     "resource": "non existent",
                     "quantity": 1
                 },
                 {
-                    "holder": user.uuid,
-                    "source": "system",
+                    "holder": "user:" + user.uuid,
+                    "source": "project:" + user.uuid,
                     "resource": resource12['name'],
                     "quantity": 100
                 }]}
@@ -337,8 +342,8 @@ class QuotaAPITest(TestCase):
         commission_request = {
             "provisions": [
                 {
-                    "holder": user.uuid,
-                    "source": "system",
+                    "holder": "user:" + user.uuid,
+                    "source": "project:" + user.uuid,
                     "resource": resource11['name'],
                     "quantity": -1
                 }
@@ -368,8 +373,8 @@ class QuotaAPITest(TestCase):
             "force": True,
             "provisions": [
                 {
-                    "holder": user.uuid,
-                    "source": "system",
+                    "holder": "user:" + user.uuid,
+                    "source": "project:" + user.uuid,
                     "resource": resource11['name'],
                     "quantity": 100
                 }]}
@@ -383,8 +388,8 @@ class QuotaAPITest(TestCase):
             "force": True,
             "provisions": [
                 {
-                    "holder": user.uuid,
-                    "source": "system",
+                    "holder": "user:" + user.uuid,
+                    "source": "project:" + user.uuid,
                     "resource": resource11['name'],
                     "quantity": -200
                 }]}
@@ -397,8 +402,8 @@ class QuotaAPITest(TestCase):
         r = client.get(u('quotas'), **headers)
         self.assertEqual(r.status_code, 200)
         body = json.loads(r.content)
-        system_quota = body['system']
-        r11 = system_quota[resource11['name']]
+        base_quota = body[user.uuid]
+        r11 = base_quota[resource11['name']]
         self.assertEqual(r11['usage'], 102)
         self.assertEqual(r11['pending'], 101)
 
@@ -753,7 +758,7 @@ class WrongPathAPITest(TestCase):
 class ValidateAccessToken(TestCase):
     def setUp(self):
         self.oa2_backend = DjangoBackend()
-        self.user = AstakosUser.objects.create(username="user@synnefo.org")
+        self.user = get_local_user("user@synnefo.org")
         self.token = self.oa2_backend.token_model.create(
             code='12345',
             expires_at=datetime.now() + timedelta(seconds=5),
diff --git a/snf-astakos-app/astakos/im/tests/projects.py b/snf-astakos-app/astakos/im/tests/projects.py
index 4fb7237a69062e0585e538b1c0709f70c05c1c7a..f310221544271dda9569bf6365fea5c7ac28d781 100644
--- a/snf-astakos-app/astakos/im/tests/projects.py
+++ b/snf-astakos-app/astakos/im/tests/projects.py
@@ -34,6 +34,16 @@
 from astakos.im.tests.common import *
 
 
+NotFound = type('NotFound', (), {})
+
+
+def find(f, seq):
+    for item in seq:
+        if f(item):
+            return item
+    return NotFound
+
+
 class ProjectAPITest(TestCase):
 
     def setUp(self):
@@ -47,14 +57,14 @@ class ProjectAPITest(TestCase):
                       "service_origin": "service1",
                       "ui_visible": True}
         r, _ = register.add_resource(resource11)
-        register.update_resources([(r, 100)])
+        register.update_base_default(r, 100)
         resource12 = {"name": "service1.resource12",
                       "desc": "resource11 desc",
                       "service_type": "type1",
                       "service_origin": "service1",
                       "unit": "bytes"}
         r, _ = register.add_resource(resource12)
-        register.update_resources([(r, 1024)])
+        register.update_base_default(r, 1024)
 
         # create user
         self.user1 = get_local_user("test@grnet.gr")
@@ -73,9 +83,10 @@ class ProjectAPITest(TestCase):
                        "ui_visible": False,
                        "api_visible": False}
         r, _ = register.add_resource(pending_app)
-        register.update_resources([(r, 3)])
-        accepted = AstakosUser.objects.accepted()
-        quotas.update_base_quota(accepted, r.name, 3)
+        register.update_base_default(r, 3)
+        request = {"resources": {r.name: {"member_capacity": 3,
+                                          "project_capacity": 3}}}
+        functions.modify_projects_in_bulk(Q(is_base=True), request)
 
     def create(self, app, headers):
         dump = json.dumps(app)
@@ -92,22 +103,17 @@ class ProjectAPITest(TestCase):
         body = json.loads(r.content)
         return r.status_code, body
 
-    def project_action(self, project_id, action, headers):
-        action = json.dumps({action: "reason"})
+    def project_action(self, project_id, action, app_id=None, headers=None):
+        action_data = {"reason": ""}
+        if app_id is not None:
+            action_data["app_id"] = app_id
+        action = json.dumps({action: action_data})
         r = self.client.post(reverse("api_project_action",
                                      kwargs={"project_id": project_id}),
                              action, content_type="application/json",
                              **headers)
         return r.status_code
 
-    def app_action(self, app_id, action, headers):
-        action = json.dumps({action: "reason"})
-        r = self.client.post(reverse("api_application_action",
-                                     kwargs={"app_id": app_id}),
-                             action, content_type="application/json",
-                             **headers)
-        return r.status_code
-
     def memb_action(self, memb_id, action, headers):
         action = json.dumps({action: "reason"})
         r = self.client.post(reverse("api_membership_action",
@@ -148,25 +154,23 @@ class ProjectAPITest(TestCase):
         r = client.get(reverse("api_project", kwargs={"project_id": 1}),
                        **h_owner)
         self.assertEqual(r.status_code, 404)
-        r = client.get(reverse("api_application", kwargs={"app_id": 1}),
-                       **h_owner)
-        self.assertEqual(r.status_code, 404)
-        r = client.get(reverse("api_membership", kwargs={"memb_id": 1}),
+        r = client.get(reverse("api_membership", kwargs={"memb_id": 100}),
                        **h_owner)
         self.assertEqual(r.status_code, 404)
 
         status = self.memb_action(1, "accept", h_admin)
-        self.assertEqual(status, 404)
+        self.assertEqual(status, 409)
 
         app1 = {"name": "test.pr",
                 "end_date": "2013-5-5T20:20:20Z",
                 "join_policy": "auto",
                 "max_members": 5,
                 "resources": {"service1.resource11": {
+                    "project_capacity": 1024,
                     "member_capacity": 512}}
                 }
 
-        status, body = self.modify(app1, 1, h_owner)
+        status, body = self.modify(app1, 100, h_owner)
         self.assertEqual(status, 404)
 
         # Create
@@ -182,12 +186,14 @@ class ProjectAPITest(TestCase):
         self.assertEqual(r.status_code, 200)
         body = json.loads(r.content)
         self.assertEqual(body["id"], project_id)
-        self.assertEqual(body["application"], app_id)
-        self.assertEqual(body["state"], "pending")
+        self.assertEqual(body["last_application"]["id"], app_id)
+        self.assertEqual(body["last_application"]["state"], "pending")
+        self.assertEqual(body["state"], "uninitialized")
         self.assertEqual(body["owner"], self.user1.uuid)
 
         # Approve forbidden
-        status = self.app_action(app_id, "approve", h_owner)
+        status = self.project_action(project_id, "approve", app_id=app_id,
+                                     headers=h_owner)
         self.assertEqual(status, 403)
 
         # Create another with the same name
@@ -201,6 +207,7 @@ class ProjectAPITest(TestCase):
         app_p3["name"] = "new.pr"
         status, body = self.create(app_p3, h_owner)
         self.assertEqual(status, 201)
+        project3_id = body["id"]
         project3_app_id = body["application"]
 
         # No more pending allowed
@@ -208,10 +215,18 @@ class ProjectAPITest(TestCase):
         self.assertEqual(status, 409)
 
         # Cancel
-        status = self.app_action(project3_app_id, "cancel", h_owner)
+        status = self.project_action(project3_id, "cancel",
+                                     app_id=project3_app_id, headers=h_owner)
         self.assertEqual(status, 200)
 
-        # Modify
+        # Get project
+        r = client.get(reverse("api_project",
+                               kwargs={"project_id": project3_id}),
+                       **h_owner)
+        body = json.loads(r.content)
+        self.assertEqual(body["state"], "deleted")
+
+        # Modify of uninitialized failed
         app2 = {"name": "test.pr",
                 "start_date": "2013-5-5T20:20:20Z",
                 "end_date": "2013-7-5T20:20:20Z",
@@ -219,59 +234,77 @@ class ProjectAPITest(TestCase):
                 "leave_policy": "auto",
                 "max_members": 3,
                 "resources": {"service1.resource11": {
+                    "project_capacity": 1024,
                     "member_capacity": 1024}}
                 }
-
         status, body = self.modify(app2, project_id, h_owner)
+        self.assertEqual(status, 409)
+
+        # Create the project again
+        status, body = self.create(app2, h_owner)
         self.assertEqual(status, 201)
-        self.assertEqual(project_id, body["id"])
-        app2_id = body["application"]
-        assertGreater(app2_id, app_id)
+        project_id = body["id"]
+        app_id = body["application"]
 
         # Dismiss failed
-        status = self.app_action(app2_id, "dismiss", h_owner)
+        status = self.project_action(project_id, "dismiss", app_id,
+                                     headers=h_owner)
         self.assertEqual(status, 409)
 
         # Deny
-        status = self.app_action(app2_id, "deny", h_admin)
+        status = self.project_action(project_id, "deny", app_id,
+                                     headers=h_admin)
         self.assertEqual(status, 200)
 
-        r = client.get(reverse("api_application", kwargs={"app_id": app2_id}),
+        # Get project
+        r = client.get(reverse("api_project",
+                               kwargs={"project_id": project_id}),
                        **h_owner)
         body = json.loads(r.content)
-        self.assertEqual(body["state"], "denied")
+        self.assertEqual(body["last_application"]["id"], app_id)
+        self.assertEqual(body["last_application"]["state"], "denied")
+        self.assertEqual(body["state"], "uninitialized")
 
         # Dismiss
-        status = self.app_action(app2_id, "dismiss", h_owner)
+        status = self.project_action(project_id, "dismiss", app_id,
+                                     headers=h_owner)
         self.assertEqual(status, 200)
 
-        # Resubmit
-        status, body = self.modify(app2, project_id, h_owner)
+        # Get project
+        r = client.get(reverse("api_project",
+                               kwargs={"project_id": project_id}),
+                       **h_owner)
+        body = json.loads(r.content)
+        self.assertEqual(body["last_application"]["id"], app_id)
+        self.assertEqual(body["last_application"]["state"], "dismissed")
+        self.assertEqual(body["state"], "deleted")
+
+        # Create the project again
+        status, body = self.create(app2, h_owner)
         self.assertEqual(status, 201)
-        app3_id = body["application"]
+        project_id = body["id"]
+        app_id = body["application"]
 
         # Approve
-        status = self.app_action(app3_id, "approve", h_admin)
+        status = self.project_action(project_id, "approve", app_id,
+                                     headers=h_admin)
         self.assertEqual(status, 200)
 
-        # Get related apps
-        req = {"body": json.dumps({"project": project_id})}
-        r = client.get(reverse("api_applications"), req, **h_owner)
-        self.assertEqual(r.status_code, 200)
-        body = json.loads(r.content)
-        self.assertEqual(len(body), 3)
-
-        # Get apps
-        r = client.get(reverse("api_applications"), **h_owner)
-        self.assertEqual(r.status_code, 200)
+        # Check memberships
+        r = client.get(reverse("api_memberships"), **h_plain)
         body = json.loads(r.content)
-        self.assertEqual(len(body), 5)
+        self.assertEqual(len(body), 1)
 
         # Enroll
         status, body = self.enroll(project_id, self.user3, h_owner)
         self.assertEqual(status, 200)
         m_plain_id = body["id"]
 
+        # Get project
+        r = client.get(reverse("api_project",
+                               kwargs={"project_id": project_id}),
+                       **h_owner)
+        body = json.loads(r.content)
         # Join
         status, body = self.join(project_id, h_owner)
         self.assertEqual(status, 200)
@@ -280,14 +313,15 @@ class ProjectAPITest(TestCase):
         # Check memberships
         r = client.get(reverse("api_memberships"), **h_plain)
         body = json.loads(r.content)
-        self.assertEqual(len(body), 1)
-        m = body[0]
+        self.assertEqual(len(body), 2)
+        m = find(lambda m: m["project"] == project_id, body)
+        self.assertNotEqual(m, NotFound)
         self.assertEqual(m["user"], self.user3.uuid)
         self.assertEqual(m["state"], "accepted")
 
         r = client.get(reverse("api_memberships"), **h_owner)
         body = json.loads(r.content)
-        self.assertEqual(len(body), 2)
+        self.assertEqual(len(body), 3)
 
         # Check membership
         r = client.get(reverse("api_membership", kwargs={"memb_id": memb_id}),
@@ -359,32 +393,32 @@ class ProjectAPITest(TestCase):
         ## Simple user mode
         r = client.get(reverse("api_projects"), **h_plain)
         body = json.loads(r.content)
-        self.assertEqual(len(body), 1)
+        self.assertEqual(len(body), 2)
         p = body[0]
         with assertRaises(KeyError):
             p["pending_application"]
 
         ## Owner mode
-        filters = {"filter": {"state": ["active", "cancelled"]}}
-        req = {"body": json.dumps(filters)}
-        r = client.get(reverse("api_projects"), req, **h_owner)
+        filters = {"state": "active"}
+        r = client.get(reverse("api_projects"), filters, **h_owner)
         body = json.loads(r.content)
         self.assertEqual(len(body), 2)
-        assertIn("pending_application", body[0])
 
-        filters = {"filter": {"state": "pending"}}
-        req = {"body": json.dumps(filters)}
-        r = client.get(reverse("api_projects"), req, **h_owner)
+        filters = {"state": "deleted"}
+        r = client.get(reverse("api_projects"), filters, **h_owner)
         body = json.loads(r.content)
-        self.assertEqual(len(body), 1)
-        self.assertEqual(body[0]["id"], project2_id)
+        self.assertEqual(len(body), 2)
 
-        filters = {"filter": {"name": "test.pr"}}
-        req = {"body": json.dumps(filters)}
-        r = client.get(reverse("api_projects"), req, **h_owner)
+        filters = {"state": "uninitialized"}
+        r = client.get(reverse("api_projects"), filters, **h_owner)
         body = json.loads(r.content)
         self.assertEqual(len(body), 2)
 
+        filters = {"name": "test.pr"}
+        r = client.get(reverse("api_projects"), filters, **h_owner)
+        body = json.loads(r.content)
+        self.assertEqual(len(body), 4)
+
         # Leave failed
         status = self.memb_action(m_plain_id, "leave", h_owner)
         self.assertEqual(status, 403)
@@ -394,15 +428,15 @@ class ProjectAPITest(TestCase):
         self.assertEqual(status, 200)
 
         # Suspend failed
-        status = self.project_action(project_id, "suspend", h_owner)
+        status = self.project_action(project_id, "suspend", headers=h_owner)
         self.assertEqual(status, 403)
 
         # Unsuspend failed
-        status = self.project_action(project_id, "unsuspend", h_admin)
+        status = self.project_action(project_id, "unsuspend", headers=h_admin)
         self.assertEqual(status, 409)
 
         # Suspend
-        status = self.project_action(project_id, "suspend", h_admin)
+        status = self.project_action(project_id, "suspend", headers=h_admin)
         self.assertEqual(status, 200)
 
         # Cannot view project
@@ -411,15 +445,16 @@ class ProjectAPITest(TestCase):
         self.assertEqual(r.status_code, 403)
 
         # Unsuspend
-        status = self.project_action(project_id, "unsuspend", h_admin)
+        status = self.project_action(project_id, "unsuspend", headers=h_admin)
         self.assertEqual(status, 200)
 
         # Cannot approve, project with same name exists
-        status = self.app_action(project2_app_id, "approve", h_admin)
+        status = self.project_action(project2_id, "approve", project2_app_id,
+                                     headers=h_admin)
         self.assertEqual(status, 409)
 
         # Terminate
-        status = self.project_action(project_id, "terminate", h_admin)
+        status = self.project_action(project_id, "terminate", headers=h_admin)
         self.assertEqual(status, 200)
 
         # Join failed
@@ -427,7 +462,8 @@ class ProjectAPITest(TestCase):
         self.assertEqual(status, 409)
 
         # Can approve now
-        status = self.app_action(project2_app_id, "approve", h_admin)
+        status = self.project_action(project2_id, "approve", project2_app_id,
+                                     headers=h_admin)
         self.assertEqual(status, 200)
 
         # Join new project
@@ -436,8 +472,8 @@ class ProjectAPITest(TestCase):
         m_project2 = body["id"]
 
         # Get memberships of project
-        body = {"body": json.dumps({"project": project2_id})}
-        r = client.get(reverse("api_memberships"), body, **h_owner)
+        filters = {"project": project2_id}
+        r = client.get(reverse("api_memberships"), filters, **h_owner)
         body = json.loads(r.content)
         self.assertEqual(len(body), 1)
         self.assertEqual(body[0]["id"], m_project2)
@@ -447,7 +483,7 @@ class ProjectAPITest(TestCase):
         self.assertEqual(status, 200)
 
         # Reinstate failed
-        status = self.project_action(project_id, "reinstate", h_admin)
+        status = self.project_action(project_id, "reinstate", headers=h_admin)
         self.assertEqual(status, 409)
 
         # Rename
@@ -461,29 +497,33 @@ class ProjectAPITest(TestCase):
         r = client.get(reverse("api_project",
                                kwargs={"project_id": project_id}), **h_owner)
         body = json.loads(r.content)
-        self.assertEqual(body["application"], app3_id)
-        self.assertEqual(body["pending_application"], app2_renamed_id)
+        self.assertEqual(body["last_application"]["id"], app2_renamed_id)
         self.assertEqual(body["state"], "terminated")
         assertIn("deactivation_date", body)
+        self.assertEqual(body["last_application"]["state"], "pending")
+        self.assertEqual(body["last_application"]["name"], "new.name")
+        status = self.project_action(project_id, "approve", app2_renamed_id,
+                                     headers=h_admin)
+        self.assertEqual(r.status_code, 200)
 
-        # Get application
-        r = client.get(reverse("api_application",
-                               kwargs={"app_id": app2_renamed_id}), **h_plain)
-        self.assertEqual(r.status_code, 403)
+        # Change homepage
+        status, body = self.modify({"homepage": "new.page"},
+                                   project_id, h_owner)
+        self.assertEqual(status, 201)
 
-        r = client.get(reverse("api_application",
-                               kwargs={"app_id": app2_renamed_id}), **h_owner)
-        self.assertEqual(r.status_code, 200)
+        r = client.get(reverse("api_project",
+                               kwargs={"project_id": project_id}), **h_owner)
         body = json.loads(r.content)
-        self.assertEqual(body["state"], "pending")
-        self.assertEqual(body["name"], "new.name")
-
-        # Approve (automatically reinstates)
-        action = json.dumps({"approve": ""})
-        r = client.post(reverse("api_application_action",
-                                kwargs={"app_id": app2_renamed_id}),
-                        action, content_type="application/json", **h_admin)
+        self.assertEqual(body["homepage"], "")
+        self.assertEqual(body["last_application"]["homepage"], "new.page")
+        homepage_app = body["last_application"]["id"]
+        status = self.project_action(project_id, "approve", homepage_app,
+                                     headers=h_admin)
         self.assertEqual(r.status_code, 200)
+        r = client.get(reverse("api_project",
+                               kwargs={"project_id": project_id}), **h_owner)
+        body = json.loads(r.content)
+        self.assertEqual(body["homepage"], "new.page")
 
         # Bad requests
         r = client.head(reverse("api_projects"), **h_admin)
@@ -495,15 +535,11 @@ class ProjectAPITest(TestCase):
         self.assertEqual(r.status_code, 405)
         self.assertTrue('Allow' in r)
 
-        r = client.head(reverse("api_applications"), **h_admin)
-        self.assertEqual(r.status_code, 405)
-        self.assertTrue('Allow' in r)
-
         r = client.head(reverse("api_memberships"), **h_admin)
         self.assertEqual(r.status_code, 405)
         self.assertTrue('Allow' in r)
 
-        status = self.project_action(1, "nonex", h_owner)
+        status = self.project_action(1, "nonex", headers=h_owner)
         self.assertEqual(status, 400)
 
         action = json.dumps({"suspend": "", "unsuspend": ""})
@@ -561,7 +597,13 @@ class ProjectAPITest(TestCase):
         status, body = self.create(ap, h_owner)
         self.assertEqual(status, 400)
 
-        ap["resources"] = {"service1.resource11": {"member_capacity": 512}}
+        ap["resources"] = {"service1.resource11": {
+                "member_capacity": 512}}
+        status, body = self.create(ap, h_owner)
+        self.assertEqual(status, 400)
+
+        ap["resources"] = {"service1.resource11": {"member_capacity": 512,
+                                                   "project_capacity": 1024}}
         status, body = self.create(ap, h_owner)
         self.assertEqual(status, 201)
 
@@ -570,26 +612,9 @@ class ProjectAPITest(TestCase):
         self.assertEqual(status, 400)
 
         ap["name"] = "domain.name"
-        ap.pop("max_members")
-        status, body = self.create(ap, h_owner)
-        self.assertEqual(status, 400)
-
-        filters = {"filter": {"state": "nonex"}}
-        req = {"body": json.dumps(filters)}
-        r = client.get(reverse("api_projects"), req, **h_owner)
-        self.assertEqual(r.status_code, 400)
 
-        filters = {"filter": {"nonex": "nonex"}}
-        req = {"body": json.dumps(filters)}
-        r = client.get(reverse("api_projects"), req, **h_owner)
-        self.assertEqual(r.status_code, 400)
-
-        req = {"body": json.dumps({"project": "nonex"})}
-        r = client.get(reverse("api_applications"), req, **h_owner)
-        self.assertEqual(r.status_code, 400)
-
-        req = {"body": json.dumps({"project": "nonex"})}
-        r = client.get(reverse("api_memberships"), req, **h_owner)
+        filters = {"state": "nonex"}
+        r = client.get(reverse("api_projects"), filters, **h_owner)
         self.assertEqual(r.status_code, 400)
 
 
@@ -601,6 +626,7 @@ class TestProjects(TestCase):
         # astakos resources
         self.resource = Resource.objects.create(name="astakos.pending_app",
                                                 uplimit=0,
+                                                project_default=0,
                                                 ui_visible=False,
                                                 api_visible=False,
                                                 service_type="astakos")
@@ -608,6 +634,7 @@ class TestProjects(TestCase):
         # custom service resources
         self.resource = Resource.objects.create(name="service1.resource",
                                                 uplimit=100,
+                                                project_default=0,
                                                 service_type="service1")
         self.admin = get_local_user("projects-admin@synnefo.org")
         self.admin.uuid = 'uuid1'
@@ -673,7 +700,12 @@ class TestProjects(TestCase):
     @im_settings(PROJECT_ADMINS=['uuid1'])
     def test_applications(self):
         # let user have 2 pending applications
-        quotas.update_base_quota([self.user], 'astakos.pending_app', 2)
+
+        # TODO figure this out
+        request = {"resources": {"astakos.pending_app":
+                                     {"member_capacity": 3,
+                                      "project_capacity": 3}}}
+        functions.modify_project(self.user.uuid, request)
 
         r = self.user_client.get(reverse('project_add'), follow=True)
         self.assertRedirects(r, reverse('project_add'))
diff --git a/snf-astakos-app/astakos/test/views.py b/snf-astakos-app/astakos/test/views.py
index 549394556525129877d1be0c92f0047e09e4f886..cd0db0cffe98c40368ee1e75ff768232251f9a31 100644
--- a/snf-astakos-app/astakos/test/views.py
+++ b/snf-astakos-app/astakos/test/views.py
@@ -64,7 +64,8 @@ def submit(name, user_id, project_id=None):
     if not ok:
         raise ProjectForbidden('Limit %s reached', limit)
 
-    resource_policies = {'cyclades.network.private': {'member_capacity': 5}}
+    resource_policies = {'cyclades.network.private': {'member_capacity': 5,
+                                                      'project_capacity': 10}}
     data = {'owner': owner,
             'name': name,
             'project_id': project_id,