diff --git a/warpshop_server/warpshop_server/artikel/admin.py b/warpshop_server/warpshop_server/artikel/admin.py
index 8ce9b720526916ed1148c234f886aa1862bdca19..87a851a2cd0fcec32d509f14cd44ebe3a6cb35da 100644
--- a/warpshop_server/warpshop_server/artikel/admin.py
+++ b/warpshop_server/warpshop_server/artikel/admin.py
@@ -1,6 +1,7 @@
 from __future__ import absolute_import
 from django.contrib import admin
 
+
 from .models import Artikel
 
 admin.site.register(Artikel)
diff --git a/warpshop_server/warpshop_server/artikel/migrations/0001_initial.py b/warpshop_server/warpshop_server/artikel/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..8eeddb76d14a9e62c1165e1d21bf17968b301289
--- /dev/null
+++ b/warpshop_server/warpshop_server/artikel/migrations/0001_initial.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Artikel',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('aktiv', models.BooleanField(default=True)),
+                ('barcode', models.CharField(max_length=200)),
+                ('name', models.CharField(max_length=200)),
+                ('ek', models.DecimalField(max_digits=8, decimal_places=2)),
+                ('vk', models.DecimalField(max_digits=8, decimal_places=2)),
+                ('bestand', models.IntegerField(default=0)),
+            ],
+            options={
+                'db_table': b'artikel',
+                'verbose_name': b'Artikel',
+                'verbose_name_plural': b'Artikel',
+            },
+            bases=(models.Model,),
+        ),
+    ]
diff --git a/warpshop_server/warpshop_server/artikel/models.py b/warpshop_server/warpshop_server/artikel/models.py
index 25b4629534970b14b3800230571883ecfaa5b1d7..119cea5ae3f907ec38a65584080aeeba062990af 100644
--- a/warpshop_server/warpshop_server/artikel/models.py
+++ b/warpshop_server/warpshop_server/artikel/models.py
@@ -1,7 +1,9 @@
+from __future__ import absolute_import
 from django.db import models
 
+
 class Artikel(models.Model):
-    aktiv = models.BooleanField()
+    aktiv = models.BooleanField(default=True)
     barcode = models.CharField(max_length=200)
     name = models.CharField(max_length=200)
     ek = models.DecimalField(max_digits=8, decimal_places=2)
@@ -10,3 +12,11 @@ class Artikel(models.Model):
 
     def __str__(self):
         return '%s [%s]' % (self.name, self.barcode)
+
+    def __unicode__(self):
+        return u'%s [%s]' % (self.name, self.barcode)
+
+    class Meta:
+        db_table = "artikel"
+        verbose_name = "Artikel"
+        verbose_name_plural = "Artikel"
diff --git a/warpshop_server/warpshop_server/artikel/templates/artikel/detail.html b/warpshop_server/warpshop_server/artikel/templates/artikel/detail.html
new file mode 100644
index 0000000000000000000000000000000000000000..1774b59d3f6e5803793e476384444e2d99a6ba33
--- /dev/null
+++ b/warpshop_server/warpshop_server/artikel/templates/artikel/detail.html
@@ -0,0 +1 @@
+{{ artikel }}
diff --git a/warpshop_server/warpshop_server/artikel/templates/artikel/index.html b/warpshop_server/warpshop_server/artikel/templates/artikel/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..a6827968365b9cb7608ca5af43a5b2ce6975e623
--- /dev/null
+++ b/warpshop_server/warpshop_server/artikel/templates/artikel/index.html
@@ -0,0 +1,9 @@
+{% if artikel_list %}
+    <ul>
+    {% for artikel in artikel_list %}
+        <li><a href="{% url 'artikel:detail' artikel.id %}">{{ artikel.name }} [{{ artikel.barcode }}]</a></li>
+    {% endfor %}
+    </ul>
+{% else %}
+    <p>Keine Artikel vorhanden.</p>
+{% endif %}
diff --git a/warpshop_server/warpshop_server/artikel/urls.py b/warpshop_server/warpshop_server/artikel/urls.py
new file mode 100644
index 0000000000000000000000000000000000000000..d64812ed096231f2273794f9b8eeb505ff83882c
--- /dev/null
+++ b/warpshop_server/warpshop_server/artikel/urls.py
@@ -0,0 +1,12 @@
+from __future__ import absolute_import
+from django.conf.urls import patterns, url
+
+from . import views
+
+
+urlpatterns = patterns('',
+    url(r'^$', views.IndexView.as_view(), name='index'),
+    url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail'),
+    url(r'^(?P<pk>\d+)/results/$', views.ResultsView.as_view(), name='results'),
+    url(r'^barcode/(?P<barcode>\w+)/$', views.barcode, name='barcode'),
+)
diff --git a/warpshop_server/warpshop_server/artikel/views.py b/warpshop_server/warpshop_server/artikel/views.py
index 91ea44a218fbd2f408430959283f0419c921093e..0c1014502d3fdea2d5bf610b687d6b867bba3fcf 100644
--- a/warpshop_server/warpshop_server/artikel/views.py
+++ b/warpshop_server/warpshop_server/artikel/views.py
@@ -1,3 +1,33 @@
-from django.shortcuts import render
+from django.shortcuts import get_object_or_404, render
+from django.http import HttpResponseRedirect, HttpResponse
+from django.core.urlresolvers import reverse
+from django.views import generic
 
-# Create your views here.
+from . models import Artikel
+
+
+class IndexView(generic.ListView):
+    template_name = 'artikel/index.html'
+    context_object_name = 'artikel_list'
+
+    def get_queryset(self):
+        return Artikel.objects.order_by('name')
+
+
+class DetailView(generic.DetailView):
+    model = Artikel
+    template_name = 'artikel/detail.html'
+
+
+class ResultsView(generic.DetailView):
+    model = Artikel
+    template_name = 'artikel/results.html'
+
+
+def barcode(request, barcode):
+    try:
+        a = Artikel.objects.get(barcode=barcode)
+    except Artikel.DoesNotExist:
+        a = Artikel(aktiv=False, barcode=barcode, name=barcode, ek=0.0, vk=0.0)
+        a.save()
+    return HttpResponseRedirect(reverse('artikel:detail', args=(a.id,)))
diff --git a/warpshop_server/warpshop_server/benutzer/migrations/0001_initial.py b/warpshop_server/warpshop_server/benutzer/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..425f8f70c1ebc3eebd1522eb6483c42e356d5f1d
--- /dev/null
+++ b/warpshop_server/warpshop_server/benutzer/migrations/0001_initial.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Benutzer',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('aktiv', models.BooleanField(default=True)),
+                ('barcode', models.CharField(max_length=200)),
+                ('name', models.CharField(max_length=200)),
+                ('saldo', models.DecimalField(max_digits=8, decimal_places=2)),
+            ],
+            options={
+                'db_table': b'benutzer',
+                'verbose_name': b'Benutzer',
+                'verbose_name_plural': b'Benutzer',
+            },
+            bases=(models.Model,),
+        ),
+    ]
diff --git a/warpshop_server/warpshop_server/benutzer/models.py b/warpshop_server/warpshop_server/benutzer/models.py
index 2987fa7d6ea9a7fd3054af685ffa4b76068dd225..5dd54dd74619d2be3b21f90ba89197de8e5c3fd0 100644
--- a/warpshop_server/warpshop_server/benutzer/models.py
+++ b/warpshop_server/warpshop_server/benutzer/models.py
@@ -1,10 +1,17 @@
+from __future__ import absolute_import
 from django.db import models
 
+
 class Benutzer(models.Model):
-    aktiv = models.BooleanField()
+    aktiv = models.BooleanField(default=True)
     barcode = models.CharField(max_length=200)
     name = models.CharField(max_length=200)
     saldo = models.DecimalField(max_digits=8, decimal_places=2)
 
     def __str__(self):
         return '%s [%s]' % (self.name, self.barcode)
+
+    class Meta:
+        db_table = "benutzer"
+        verbose_name = "Benutzer"
+        verbose_name_plural = "Benutzer"
diff --git a/warpshop_server/warpshop_server/benutzer/urls.py b/warpshop_server/warpshop_server/benutzer/urls.py
new file mode 100644
index 0000000000000000000000000000000000000000..72e50247b8172f59424447b35765d4a13de549fa
--- /dev/null
+++ b/warpshop_server/warpshop_server/benutzer/urls.py
@@ -0,0 +1,9 @@
+from __future__ import absolute_import
+from django.conf.urls import url
+
+from . import views
+
+
+urlpatterns = [
+    url(r'^$', views.index, name='index'),
+]
diff --git a/warpshop_server/warpshop_server/benutzer/views.py b/warpshop_server/warpshop_server/benutzer/views.py
index 91ea44a218fbd2f408430959283f0419c921093e..6bed9f35d6c21b1c760fea634acd7c7624b08ac3 100644
--- a/warpshop_server/warpshop_server/benutzer/views.py
+++ b/warpshop_server/warpshop_server/benutzer/views.py
@@ -1,3 +1,6 @@
 from django.shortcuts import render
+from django.http import HttpResponse
 
-# Create your views here.
+
+def index(request):
+    return HttpResponse("Benutzer index.")
diff --git a/warpshop_server/warpshop_server/transaktion/__init__.py b/warpshop_server/warpshop_server/transaktion/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/warpshop_server/warpshop_server/transaktion/admin.py b/warpshop_server/warpshop_server/transaktion/admin.py
new file mode 100644
index 0000000000000000000000000000000000000000..8109771b703f1c8ce804a372fbebe0d29f9146ba
--- /dev/null
+++ b/warpshop_server/warpshop_server/transaktion/admin.py
@@ -0,0 +1,20 @@
+from __future__ import absolute_import
+from django.contrib import admin
+
+from .models import Transaktion, Position
+
+
+class PositionInline(admin.StackedInline):
+    model = Position
+    extra = 3
+
+
+class TransaktionAdmin(admin.ModelAdmin):
+#    fieldsets = [
+#        (None,               {'fields': ['question_text']}),
+#        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
+#    ]
+    inlines = [PositionInline]
+
+admin.site.register(Transaktion, TransaktionAdmin)
+#admin.site.register(Position)
diff --git a/warpshop_server/warpshop_server/transaktion/migrations/0001_initial.py b/warpshop_server/warpshop_server/transaktion/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..d4fb860ddce7fbdeb4259d1e005f3add2128dc43
--- /dev/null
+++ b/warpshop_server/warpshop_server/transaktion/migrations/0001_initial.py
@@ -0,0 +1,51 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('benutzer', '0001_initial'),
+        ('artikel', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Position',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('anzahl', models.IntegerField(default=0)),
+                ('ek', models.DecimalField(max_digits=8, decimal_places=2)),
+                ('vk', models.DecimalField(max_digits=8, decimal_places=2)),
+                ('artikel', models.ForeignKey(to='artikel.Artikel')),
+            ],
+            options={
+                'db_table': b'position',
+                'verbose_name': b'Position',
+                'verbose_name_plural': b'Positionen',
+            },
+            bases=(models.Model,),
+        ),
+        migrations.CreateModel(
+            name='Transaktion',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('timestamp', models.DateTimeField(auto_now_add=True)),
+                ('benutzer', models.ForeignKey(to='benutzer.Benutzer')),
+            ],
+            options={
+                'db_table': b'transaktion',
+                'verbose_name': b'Transaktion',
+                'verbose_name_plural': b'Transaktionen',
+            },
+            bases=(models.Model,),
+        ),
+        migrations.AddField(
+            model_name='position',
+            name='transaktion',
+            field=models.ForeignKey(to='transaktion.Transaktion'),
+            preserve_default=True,
+        ),
+    ]
diff --git a/warpshop_server/warpshop_server/transaktion/migrations/__init__.py b/warpshop_server/warpshop_server/transaktion/migrations/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/warpshop_server/warpshop_server/transaktion/models.py b/warpshop_server/warpshop_server/transaktion/models.py
new file mode 100644
index 0000000000000000000000000000000000000000..0f59e27ef581488f4d101da54588a6cb69aecac7
--- /dev/null
+++ b/warpshop_server/warpshop_server/transaktion/models.py
@@ -0,0 +1,34 @@
+from __future__ import absolute_import
+from django.db import models
+
+from artikel.models import Artikel
+from benutzer.models import Benutzer
+
+
+class Transaktion(models.Model):
+    timestamp = models.DateTimeField(auto_now_add=True)
+    benutzer = models.ForeignKey(Benutzer)
+
+    def __str__(self):
+        return '%s [%s] [%s]' % (self.id, self.timestamp, self.benutzer)
+
+    class Meta:
+        db_table = "transaktion"
+        verbose_name = "Transaktion"
+        verbose_name_plural = "Transaktionen"
+
+
+class Position(models.Model):
+    transaktion = models.ForeignKey(Transaktion)
+    artikel = models.ForeignKey(Artikel)
+    anzahl = models.IntegerField(default=0)
+    ek = models.DecimalField(max_digits=8, decimal_places=2)
+    vk = models.DecimalField(max_digits=8, decimal_places=2)
+
+    def __str__(self):
+        return '%d-%08d: %s * %s' % (self.transaktion.id, self.id, self.anzahl, self.artikel)
+
+    class Meta:
+        db_table = "position"
+        verbose_name = "Position"
+        verbose_name_plural = "Positionen"
diff --git a/warpshop_server/warpshop_server/transaktion/tests.py b/warpshop_server/warpshop_server/transaktion/tests.py
new file mode 100644
index 0000000000000000000000000000000000000000..7ce503c2dd97ba78597f6ff6e4393132753573f6
--- /dev/null
+++ b/warpshop_server/warpshop_server/transaktion/tests.py
@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/warpshop_server/warpshop_server/transaktion/urls.py b/warpshop_server/warpshop_server/transaktion/urls.py
new file mode 100644
index 0000000000000000000000000000000000000000..72e50247b8172f59424447b35765d4a13de549fa
--- /dev/null
+++ b/warpshop_server/warpshop_server/transaktion/urls.py
@@ -0,0 +1,9 @@
+from __future__ import absolute_import
+from django.conf.urls import url
+
+from . import views
+
+
+urlpatterns = [
+    url(r'^$', views.index, name='index'),
+]
diff --git a/warpshop_server/warpshop_server/transaktion/views.py b/warpshop_server/warpshop_server/transaktion/views.py
new file mode 100644
index 0000000000000000000000000000000000000000..6d332804332c6a9532a31e42cd12744d1e25124b
--- /dev/null
+++ b/warpshop_server/warpshop_server/transaktion/views.py
@@ -0,0 +1,6 @@
+from django.shortcuts import render
+from django.http import HttpResponse
+
+
+def index(request):
+    return HttpResponse("Transaktion index.")
diff --git a/warpshop_server/warpshop_server/warpshop_server/settings/base.py b/warpshop_server/warpshop_server/warpshop_server/settings/base.py
index 27177d78462e4cce68792f1025af7b506a29c52f..d24fdcc4233d1372b5f5b48bf6587e42c0c40ab0 100644
--- a/warpshop_server/warpshop_server/warpshop_server/settings/base.py
+++ b/warpshop_server/warpshop_server/warpshop_server/settings/base.py
@@ -194,6 +194,9 @@ DJANGO_APPS = (
 
 # Apps specific for this project go here.
 LOCAL_APPS = (
+    'artikel',
+    'benutzer',
+    'transaktion',
 )
 
 # See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps
diff --git a/warpshop_server/warpshop_server/warpshop_server/urls.py b/warpshop_server/warpshop_server/warpshop_server/urls.py
index 4373c19aeecfc2a07553c1f9932e528935f4148a..d88758cc5fcdebcdb01e0c0d08a3c7ba4974dcfd 100644
--- a/warpshop_server/warpshop_server/warpshop_server/urls.py
+++ b/warpshop_server/warpshop_server/warpshop_server/urls.py
@@ -19,6 +19,10 @@ urlpatterns = patterns('',
 
     # Uncomment the next line to enable the admin:
     url(r'^admin/', include(admin.site.urls)),
+
+    url(r'^artikel/', include('artikel.urls', namespace='artikel')),
+    url(r'^benutzer/', include('benutzer.urls', namespace='benutzer')),
+    url(r'^transaktion/', include('transaktion.urls', namespace='transaktion')),
 )
 
 # Uncomment the next line to serve media files in dev.