diff --git a/django/website/tabbed_page/templates/tabbed_page/tabbed_page.html b/django/website/tabbed_page/templates/tabbed_page/tabbed_page.html
index c377259ca168c2b448b3cd925ea7f04f7cb29dfb..0e67aa8d761c1c8d02679a327385f83b9419eb99 100644
--- a/django/website/tabbed_page/templates/tabbed_page/tabbed_page.html
+++ b/django/website/tabbed_page/templates/tabbed_page/tabbed_page.html
@@ -5,6 +5,11 @@
 
 {% block maincontent %}
     <h1 class="page-header"><span class="fa fa-tabbed-page fa-fw"></span>{% trans "Tabbed Page" %}</h1>
-    <h2>{{ view }}</h2>
-    <h3>{{ view.name }}</h3>
+    <h2>Page = {{ view.page }}</h2>
+
+    <ul>
+    {% for tab in view.tabs %}
+    <li>{{ tab }}</li>
+    {% endfor %}
+    </ul>
 {% endblock maincontent %}
diff --git a/django/website/tabbed_page/tests/factories.py b/django/website/tabbed_page/tests/factories.py
index 9c18dae0bd6b8bac7d8a1546ac19fe4becd09fce..4ae233e4497e4c657586de4355d231af85114637 100644
--- a/django/website/tabbed_page/tests/factories.py
+++ b/django/website/tabbed_page/tests/factories.py
@@ -1,7 +1,7 @@
 from factory.django import DjangoModelFactory
 from factory import fuzzy
 
-from ..models import TabbedPage
+from ..models import TabbedPage, Tab
 
 
 class TabbedPageFactory(DjangoModelFactory):
@@ -9,3 +9,11 @@ class TabbedPageFactory(DjangoModelFactory):
         model = TabbedPage
 
     name = fuzzy.FuzzyText()
+
+
+class TabFactory(DjangoModelFactory):
+    class Meta:
+        model = Tab
+
+    name = fuzzy.FuzzyText()
+    label = fuzzy.FuzzyText()
diff --git a/django/website/tabbed_page/tests/view_tests.py b/django/website/tabbed_page/tests/view_tests.py
index a18132958ddf9f8514c792f71fc169518127d2f7..6adbd83320a4235befe2ff99c2ee61bc4cb35620 100644
--- a/django/website/tabbed_page/tests/view_tests.py
+++ b/django/website/tabbed_page/tests/view_tests.py
@@ -1,41 +1,52 @@
 from __future__ import unicode_literals, absolute_import
-
 import pytest
 
-from django.core.urlresolvers import reverse
-from django.test import RequestFactory
-
-
-from django.core.urlresolvers import RegexURLResolver, NoReverseMatch
-
 from ..views import TabbedPageView
 
-from .factories import TabbedPageFactory
+from .factories import TabbedPageFactory, TabFactory
 
 
 @pytest.mark.django_db
-def test_name_is_name_of_page():
+def test_page_stored_on_view():
     page = TabbedPageFactory()
+    TabbedPageFactory()
 
     view = TabbedPageView()
     view.kwargs = {'name': page.name}
 
-    assert view.page_name == page.name
+    assert view.page == page
 
 
 @pytest.mark.django_db
-def test_name_defaults_to_main_when_not_set():
+def test_page_defaults_to_main_when_not_set():
+    page = TabbedPageFactory(name='main')
+    TabbedPageFactory(name='other')
 
     view = TabbedPageView()
     view.kwargs = {}
 
-    assert view.page_name == 'main'
+    assert view.page == page
 
 
 @pytest.mark.django_db
-def test_name_defaults_to_main_when_not_empty():
+def test_name_defaults_to_main_when_empty():
+    page = TabbedPageFactory(name='main')
+    TabbedPageFactory(name='other')
 
     view = TabbedPageView()
     view.kwargs = {'name': ''}
 
-    assert view.page_name == 'main'
+    assert view.page == page
+
+
+@pytest.mark.django_db
+def test_widgets_stored_on_view_in_position_order():
+    page = TabbedPageFactory()
+    tab3 = TabFactory(page=page, position=3)
+    tab1 = TabFactory(page=page, position=1)
+    tab2 = TabFactory(page=page, position=2)
+
+    view = TabbedPageView()
+    view.kwargs = {'name': page.name}
+
+    assert list(view.tabs) == [tab1, tab2, tab3]
diff --git a/django/website/tabbed_page/views.py b/django/website/tabbed_page/views.py
index b5f5bd3e0faf9fe32be87a0dc5faf987c5013e86..59206fc92633578dda2ce5146def693d6d978864 100644
--- a/django/website/tabbed_page/views.py
+++ b/django/website/tabbed_page/views.py
@@ -5,13 +5,22 @@ from .models import TabbedPage
 
 class TabbedPageView(TemplateView):
     template_name = "tabbed_page/tabbed_page.html"
+    _page = None
 
     @property
-    def page_name(self):
-        name = self.kwargs.get('name')
+    def tabs(self):
+        return self.page.tab_set.all().order_by('position')
 
-        if name:
-            page = TabbedPage.objects.get(name=name)
-            return page.name
+    @property
+    def page(self):
+        if self._page is None:
+            name = self.kwargs.get('name')
+
+            # TODO: check if name can ever be empty string
+            # if not, can just put default in get() above
+            if not name:
+                name = 'main'
+
+            self._page = TabbedPage.objects.get(name=name)
 
-        return 'main'
+        return self._page