diff --git a/djangoldp/migrations/0002_auto_20190905_1542.py b/djangoldp/migrations/0002_auto_20190905_1542.py
new file mode 100644
index 0000000000000000000000000000000000000000..ff3b2dc14e84c5e2037fbd444450f3f668d86c29
--- /dev/null
+++ b/djangoldp/migrations/0002_auto_20190905_1542.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11 on 2019-09-05 15:42
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('djangoldp', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='ldpsource',
+            name='container',
+        ),
+        migrations.AlterField(
+            model_name='ldpsource',
+            name='id',
+            field=models.URLField(primary_key=True, serialize=False),
+        ),
+    ]
diff --git a/djangoldp/models.py b/djangoldp/models.py
index 716688eaf13cc9a5bf05a456fa5abf8e142ee1ec..73c1c17d9a7f9d23061cf51ae222e1d9006b3ab0 100644
--- a/djangoldp/models.py
+++ b/djangoldp/models.py
@@ -135,18 +135,18 @@ class Model(models.Model):
 
 
 class LDPSource(Model):
-    container = models.URLField()
+    id = models.URLField(primary_key=True)
     federation = models.CharField(max_length=255)
 
     class Meta:
-        rdf_type = 'sib:source'
+        rdf_type = 'ldp:Container'
         ordering = ('federation',)
         container_path = 'sources'
-        lookup_field = 'federation'
+        lookup_field = 'id'
         permissions = (
             ('view_source', 'acl:Read'),
             ('control_source', 'acl:Control'),
         )
 
     def __str__(self):
-        return "{}: {}".format(self.federation, self.container)
+        return "{}: {}".format(self.federation, self.id)
diff --git a/djangoldp/serializers.py b/djangoldp/serializers.py
index c55ad66948dd734271b6454e5443d25e82a5be83..28d1d9b230206945905c8e1e064f96ea25b826a3 100644
--- a/djangoldp/serializers.py
+++ b/djangoldp/serializers.py
@@ -254,8 +254,10 @@ class LDPSerializer(HyperlinkedModelSerializer):
         for field in data:
             if isinstance(data[field], dict) and '@id' in data[field]:
                 data[field]['@id'] = data[field]['@id'].format(Model.container_id(obj), str(getattr(obj, slug_field)))
-        if not '@id' in data:
+        if not ('@id' in data or 'id' in data):
             data['@id'] = '{}{}'.format(settings.SITE_URL, Model.resource(obj))
+        if 'id' in data:
+            data['@id'] = data.pop('id')
         rdf_type = Model.get_meta(obj, 'rdf_type', None)
         rdf_context = Model.get_meta(obj, 'rdf_context', None)
         if rdf_type is not None:
diff --git a/djangoldp/tests/tests_sources.py b/djangoldp/tests/tests_sources.py
index 9720db2a8b8886a4fa41c201c879e9dc45abccb8..a68327f56c190503210d48870be5a95f1bb3c786 100644
--- a/djangoldp/tests/tests_sources.py
+++ b/djangoldp/tests/tests_sources.py
@@ -13,6 +13,6 @@ class TestSource(APITestCase):
         pass
 
     def test_get_resource(self):
-        source = LDPSource.objects.create(federation="source_name", container="http://bar.foo/")
+        source = LDPSource.objects.create(federation="source_name", id="http://bar.foo/")
         response = self.client.get('/sources/{}/'.format(source.federation), content_type='application/ld+json')
         self.assertEqual(response.status_code, 200)
diff --git a/djangoldp/urls.py b/djangoldp/urls.py
index 4fd8d7f4b758d2278e4cdfedce953803f8a7b40e..f92a2ab43590fc8c27da7ae3b5e387e36cad273e 100644
--- a/djangoldp/urls.py
+++ b/djangoldp/urls.py
@@ -17,7 +17,7 @@ def __clean_path(path):
 
 
 urlpatterns = [
-    url(r'^sources/(?P<federation>\w+)/', LDPSourceViewSet.urls(model=LDPSource, fields=['federation', 'container'],
+    url(r'^sources/(?P<federation>\w+)/', LDPSourceViewSet.urls(model=LDPSource, fields=['federation', 'id'],
                                                                 permission_classes=[LDPPermissions], )),
     url(r'^\.well-known/webfinger/?$', WebFingerView.as_view()),
 ]