diff --git a/djangoldp/models.py b/djangoldp/models.py
index 50b31c6c8181e7642d9c5dcc11ac1df41b1490d9..bcb62f61d233e3e87cb4bd20e4718be78852a27d 100644
--- a/djangoldp/models.py
+++ b/djangoldp/models.py
@@ -1,6 +1,19 @@
 from django.conf import settings
 from django.db import models
 
+
+class LDPModel(models.Model):
+    ldp_path = None
+
+    def full_path(self):
+        return "{}/{}".format(self.container_path(), self.pk)
+
+    def container_path(self):
+        return self.ldp_path
+
+    class Meta:
+        abstract = True
+
 class LDPSource(models.Model):
     container = models.URLField()
     federation = models.CharField(max_length=255)
diff --git a/djangoldp/resolver.py b/djangoldp/resolver.py
new file mode 100644
index 0000000000000000000000000000000000000000..949ae3f142dc975cb6c4518c2823d2db71a4b5ef
--- /dev/null
+++ b/djangoldp/resolver.py
@@ -0,0 +1,17 @@
+class LDPResolver:
+
+    @classmethod
+    def resource_url(cls, dummy):
+        pass
+
+    @classmethod
+    def container_url(cls, dummy):
+        pass
+
+    @classmethod
+    def resource_path(cls, dummy):
+        pass
+
+    @classmethod
+    def container_path(cls, dummy):
+        pass
diff --git a/djangoldp/tests/models.py b/djangoldp/tests/models.py
index 13a0aedf31da3efac36fd9c00bb64b4d73923119..29b0a5211140c5ace8305c8c09d6690dd7cbd87c 100644
--- a/djangoldp/tests/models.py
+++ b/djangoldp/tests/models.py
@@ -1,6 +1,8 @@
 from django.conf import settings
 from django.db import models
 
+from djangoldp.models import LDPModel
+
 
 class Skill(models.Model):
     title = models.CharField(max_length=255, blank=True, null=True)
@@ -23,3 +25,11 @@ class Message(models.Model):
     author_user = models.ForeignKey(settings.AUTH_USER_MODEL)
 
 
+class Dummy(models.Model):
+    some = models.CharField(max_length=255, blank=True, null=True)
+
+
+class LDPDummy(LDPModel):
+    some = models.CharField(max_length=255, blank=True, null=True)
+    ldp_path = "ldp-dummys"
+
diff --git a/djangoldp/tests/runner.py b/djangoldp/tests/runner.py
index 1cf8604dbae8eda88317a21cac92b33636febbb5..17419667e78c5a00b4e1f71dba2c0b47f5aaa88f 100644
--- a/djangoldp/tests/runner.py
+++ b/djangoldp/tests/runner.py
@@ -25,6 +25,7 @@ from django.test.runner import DiscoverRunner
 test_runner = DiscoverRunner(verbosity=1)
 
 failures = test_runner.run_tests([
+    'djangoldp.tests.tests_resolver',
     'djangoldp.tests.tests_save',
     'djangoldp.tests.tests_update'])
 if failures:
diff --git a/djangoldp/tests/tests_resolver.py b/djangoldp/tests/tests_resolver.py
new file mode 100644
index 0000000000000000000000000000000000000000..55818f6da074717fafb82a0f2de9507353294e23
--- /dev/null
+++ b/djangoldp/tests/tests_resolver.py
@@ -0,0 +1,25 @@
+from django.test import TestCase
+
+from djangoldp.resolver import LDPResolver
+from djangoldp.tests.models import Dummy, LDPDummy
+
+
+class UrlUtils(TestCase):
+
+    def test_class_not_inheriting_ldp_model(self):
+        dummy = Dummy.objects.create(some="text")
+        self.assertEquals("http://localhost/dummys/{}".format(dummy.pk), LDPResolver.resource_url(dummy))
+        self.assertEquals("/dummys/{}".format(dummy.pk), LDPResolver.resource_path(dummy))
+        self.assertEquals("http://localhost/dummys", LDPResolver.container_url(dummy))
+        self.assertEquals("/dummys", LDPResolver.container_path(dummy))
+
+    def test_class_inheriting_ldp_model(self):
+        dummy = LDPDummy.objects.create(some="text")
+        self.assertEquals("http://localhost/ldp-dummys/{}".format(dummy.pk), LDPResolver.resource_url(dummy))
+        self.assertEquals("/ldp-dummys/{}".format(dummy.pk), LDPResolver.resource_path(dummy))
+        self.assertEquals("http://localhost/ldp-dummys/{}".format(dummy.pk), dummy.resource_url())
+        self.assertEquals("/ldp-dummys/{}".format(dummy.pk), dummy.resource_path())
+        self.assertEquals("http://localhost/ldp-dummys", LDPResolver.container_url(dummy))
+        self.assertEquals("/ldp-dummys", LDPResolver.container_path(dummy))
+        self.assertEquals("http://localhost/dummys/", dummy.container_url())
+        self.assertEquals("/ldp-dummys", dummy.container_path())
diff --git a/djangoldp/tests/tests_save.py b/djangoldp/tests/tests_save.py
index 1117c928eb4d5f7908c942666a8a718d87b2c79e..7e05496ab21ab8aff4e639bd6d80dcc5c8873ae5 100644
--- a/djangoldp/tests/tests_save.py
+++ b/djangoldp/tests/tests_save.py
@@ -4,7 +4,7 @@ from djangoldp.serializers import LDPSerializer
 from djangoldp.tests.models import Skill, JobOffer
 
 
-class Serializer(TestCase):
+class Save(TestCase):
 
     def test_save_m2m(self):
         skill1 = Skill.objects.create(title="skill1", obligatoire="obligatoire")
diff --git a/djangoldp/tests/tests_update.py b/djangoldp/tests/tests_update.py
index 7b232b4455e057d97544dac01999657d2d104ca4..622b55ef6c6b2374b5650dbbfa994b400ca96853 100644
--- a/djangoldp/tests/tests_update.py
+++ b/djangoldp/tests/tests_update.py
@@ -5,7 +5,7 @@ from djangoldp.serializers import LDPSerializer
 from djangoldp.tests.models import Skill, JobOffer, Thread, Message
 
 
-class Serializer(TestCase):
+class Update(TestCase):
 
     def test_update(self):
         skill = Skill.objects.create(title="to drop", obligatoire="obligatoire")
diff --git a/djangoldp/tests/urls.py b/djangoldp/tests/urls.py
index 0066129ba1d57ef46610773bbcc237d840232f30..8e1cbc863bfce95dfd9160eb6461bb862d4e87ef 100644
--- a/djangoldp/tests/urls.py
+++ b/djangoldp/tests/urls.py
@@ -1,6 +1,6 @@
 from django.conf import settings
 
-from djangoldp.tests.models import Skill, JobOffer, Message, Thread
+from djangoldp.tests.models import Skill, JobOffer, Message, Thread, Dummy
 from djangoldp.views import LDPViewSet
 from django.conf.urls import url
 
@@ -11,4 +11,5 @@ urlpatterns = [
     url(r'^messages/', LDPViewSet.urls(model=Message, permission_classes=[], fields=["@id", "text"], nested_fields=[])),
     url(r'^threads/', LDPViewSet.urls(model=Thread, nested_fields=["message_set"], permission_classes=())),
     url(r'^users/', LDPViewSet.urls(model=settings.AUTH_USER_MODEL, permission_classes=[])),
+    url(r'^dummys/', LDPViewSet.urls(model=Dummy, permission_classes=[])),
 ]
\ No newline at end of file