diff --git a/djangoldp/__init__.py b/djangoldp/__init__.py
index 7deb3ab1dd665f79a867616966d6046d03968cad..0416a0bec7c1ef4e126ee732fc84c64aeaf1d6b9 100644
--- a/djangoldp/__init__.py
+++ b/djangoldp/__init__.py
@@ -1,4 +1,4 @@
 from django.db.models import options
 
 __version__ = '0.0.0'
-options.DEFAULT_NAMES += ('lookup_field', 'rdf_type', 'rdf_context', 'auto_author', 'view_set', 'container_path', 'permission_classes', 'serializer_fields', 'nested_fields', 'depth', 'many_depth')
\ No newline at end of file
+options.DEFAULT_NAMES += ('lookup_field', 'rdf_type', 'rdf_context', 'auto_author', 'view_set', 'container_path', 'permission_classes', 'serializer_fields', 'nested_fields', 'depth')
diff --git a/djangoldp/models.py b/djangoldp/models.py
index a3fe37c6d74021e40a343bbf66ae8748446d47b6..7ab277f0bb5083e246067cf2f62392a66912bc0c 100644
--- a/djangoldp/models.py
+++ b/djangoldp/models.py
@@ -66,7 +66,6 @@ class Model(models.Model):
         default_permissions = ('add', 'change', 'delete', 'view', 'control')
         abstract = True
         depth = 1
-        many_depth = 0
 
     @classonlymethod
     def resolve_id(cls, id):
diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py
index 91972b0ba290f30f1c883556db0197d042721b55..4f806051b487b80df977cc50d867be5801f2638f 100644
--- a/djangoldp/serializers.py
+++ b/djangoldp/serializers.py
@@ -258,8 +258,7 @@ class LDPSerializer(HyperlinkedModelSerializer):
                                                       nested_fields=Model.get_meta(model_class, 'nested_fields', []))
                     parent_depth = max(getattr(self.parent.Meta, "depth", 0) - 1, 0)
                     serializer_generator.depth = parent_depth
-                    serializer_generator.many_depth = max(getattr(self.parent.Meta, "many_depth", 0) - 1, 0)
-                    serializer = serializer_generator.build_serializer()(context=self.parent.context)
+                    serializer = serializer_generator.build_read_serializer()(context=self.parent.context)
                     if parent_depth is 0:
                         serializer.Meta.fields = ["@id"]
                     return {'@id': '{}{}{}/'.format(settings.SITE_URL, '{}{}/', self.source),
@@ -405,7 +404,7 @@ class LDPSerializer(HyperlinkedModelSerializer):
     def many_init(cls, *args, **kwargs):
         kwargs['child'] = cls(**kwargs)
         try:
-            cls.Meta.depth = cls.compute_depth(kwargs['context']['view'].many_depth, cls.Meta.model, 'many_depth')
+            cls.Meta.depth = cls.compute_depth(kwargs['context']['view'].depth, cls.Meta.model, 'depth')
         except KeyError:
             pass
         return ContainerSerializer(*args, **kwargs)
diff --git a/djangoldp/tests/runner.py b/djangoldp/tests/runner.py
index 296716a1aeb175693462c90389eaa903b5905796..230740f0dba6112096b801764f661d46a2d675f9 100644
--- a/djangoldp/tests/runner.py
+++ b/djangoldp/tests/runner.py
@@ -63,7 +63,7 @@ failures = test_runner.run_tests([
     'djangoldp.tests.tests_auto_author',
     'djangoldp.tests.tests_get',
     'djangoldp.tests.tests_delete',
-    # 'djangoldp.tests.tests_temp'
+    'djangoldp.tests.tests_temp'
 
 ])
 if failures:
diff --git a/djangoldp/tests/tests_temp.py b/djangoldp/tests/tests_temp.py
index 1864f386b785ba0ca266a74422bd152cb91c1533..e7a80ca51919425c49f72202bab53c1ab76835a8 100644
--- a/djangoldp/tests/tests_temp.py
+++ b/djangoldp/tests/tests_temp.py
@@ -18,3 +18,4 @@ class TestTemp(TestCase):
         pass
 
 
+
diff --git a/djangoldp/tests/tests_update.py b/djangoldp/tests/tests_update.py
index c14589889694f5b719e5e5019200885c677977c8..292b0bafbb1ad3b8c17abd7e4b4e189b9a5c8dfc 100644
--- a/djangoldp/tests/tests_update.py
+++ b/djangoldp/tests/tests_update.py
@@ -281,8 +281,8 @@ class Update(TestCase):
             {
                 '@id': "_:b975",
                 'http://happy-dev.fr/owl/#description': "user description",
-                'http://happy-dev.fr/owl/#dummy':  {
-                    '@id' : './'
+                'http://happy-dev.fr/owl/#dummy': {
+                    '@id': './'
                 }
             },
             {
@@ -366,7 +366,8 @@ class Update(TestCase):
     def test_missing_field_should_not_be_removed_with_fk_relation(self):
         user = User.objects.create(username="alex", password="test")
         peer = User.objects.create(username="sylvain", password="test2")
-        conversation = Conversation.objects.create(author_user=user, peer_user=peer, description="conversation description")
+        conversation = Conversation.objects.create(author_user=user, peer_user=peer,
+                                                   description="conversation description")
         body = [
             {
                 '@id': "/conversations/{}/".format(conversation.pk),
@@ -381,7 +382,8 @@ class Update(TestCase):
     def test_empty_field_should_be_removed_with_fk_relation(self):
         user = User.objects.create(username="alex", password="test")
         peer = User.objects.create(username="sylvain", password="test2")
-        conversation = Conversation.objects.create(author_user=user, peer_user=peer, description="conversation description")
+        conversation = Conversation.objects.create(author_user=user, peer_user=peer,
+                                                   description="conversation description")
         body = [
             {
                 '@id': "/conversations/{}/".format(conversation.pk),
@@ -393,4 +395,3 @@ class Update(TestCase):
                                    content_type='application/ld+json')
         self.assertEqual(response.status_code, 200)
         self.assertEqual(response.data['peer_user'], None)
-
diff --git a/djangoldp/views.py b/djangoldp/views.py
index b20cd12c3c11fc4ff84afd9dd8fd9f51a5f761a9..a6e342c21707aafdbb880e44f9ff3298b324e332 100644
--- a/djangoldp/views.py
+++ b/djangoldp/views.py
@@ -9,10 +9,13 @@ from django.shortcuts import get_object_or_404
 from django.utils.decorators import classonlymethod
 from guardian.shortcuts import get_objects_for_user
 from pyld import jsonld
+from rest_framework import status
 from rest_framework.authentication import SessionAuthentication
 from rest_framework.parsers import JSONParser
 from rest_framework.renderers import JSONRenderer
 from rest_framework.viewsets import ModelViewSet
+from rest_framework.response import Response
+
 
 from djangoldp.models import LDPSource, Model
 
@@ -90,8 +93,7 @@ class LDPViewSet(LDPViewSetGenerator):
     """An automatically generated viewset that serves models following the Linked Data Platform convention"""
     fields = None
     exclude = None
-    depth = 2
-    many_depth = 1
+    depth = 1
     renderer_classes = (JSONLDRenderer,)
     parser_classes = (JSONLDParser,)
     authentication_classes = (NoCSRFAuthentication,)
@@ -103,22 +105,69 @@ class LDPViewSet(LDPViewSetGenerator):
                 if hasattr(p, 'filter_class') and p.filter_class:
                     self.filter_backends = p.filter_class
 
-        self.serializer_class = self.build_serializer()
+        self.serializer_class = self.build_read_serializer()
+        self.write_serializer_class = self.build_write_serializer()
 
-    def build_serializer(self):
+    def build_read_serializer(self):
         model_name = self.model._meta.object_name.lower()
         lookup_field = get_resolver().reverse_dict[model_name + '-detail'][0][0][1][0]
         meta_args = {'model': self.model, 'extra_kwargs': {
             '@id': {'lookup_field': lookup_field}},
                      'depth': self.depth,
                      'extra_fields': self.nested_fields}
+        return self.build_serializer(meta_args, 'Read')
+
+    def build_write_serializer(self):
+        model_name = self.model._meta.object_name.lower()
+        lookup_field = get_resolver().reverse_dict[model_name + '-detail'][0][0][1][0]
+        meta_args = {'model': self.model, 'extra_kwargs': {
+            '@id': {'lookup_field': lookup_field}},
+                     'depth': 10,
+                     'extra_fields': self.nested_fields}
+        return self.build_serializer(meta_args, 'Write')
+
+    def build_serializer(self, meta_args, name_prefix):
         if self.fields:
             meta_args['fields'] = self.fields
         else:
             meta_args['exclude'] = self.exclude or ()
         meta_class = type('Meta', (), meta_args)
         from djangoldp.serializers import LDPSerializer
-        return type(LDPSerializer)(model_name + 'Serializer', (LDPSerializer,), {'Meta': meta_class})
+        return type(LDPSerializer)(self.model._meta.object_name.lower() + name_prefix + 'Serializer', (LDPSerializer,), {'Meta': meta_class})
+
+    def create(self, request, *args, **kwargs):
+        serializer = self.get_write_serializer(data=request.data)
+        serializer.is_valid(raise_exception=True)
+        self.perform_create(serializer)
+        headers = self.get_success_headers(serializer.data)
+        return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
+
+    def get_write_serializer(self, *args, **kwargs):
+        """
+        Return the serializer instance that should be used for validating and
+        deserializing input, and for serializing output.
+        """
+        serializer_class = self.get_write_serializer_class()
+        kwargs['context'] = self.get_serializer_context()
+        return serializer_class(*args, **kwargs)
+
+    def get_write_serializer_class(self):
+        """
+        Return the class to use for the serializer.
+        Defaults to using `self.write_serializer_class`.
+
+        You may want to override this if you need to provide different
+        serializations depending on the incoming request.
+
+        (Eg. admins get full serialization, others get basic serialization)
+        """
+        assert self.write_serializer_class is not None, (
+                "'%s' should either include a `write_serializer_class` attribute, "
+                "or override the `get_write_serializer_class()` method."
+                % self.__class__.__name__
+        )
+
+        return self.write_serializer_class
 
     def perform_create(self, serializer, **kwargs):
         if hasattr(self.model._meta, 'auto_author') and isinstance(self.request.user, get_user_model()):