diff --git a/ungleich_page/cms_plugins.py b/ungleich_page/cms_plugins.py
index 9d5cfda0..1b10375a 100644
--- a/ungleich_page/cms_plugins.py
+++ b/ungleich_page/cms_plugins.py
@@ -4,7 +4,7 @@ from cms.plugin_pool import plugin_pool
 from .models import (
     UngelichContactUsSection, UngelichTextSection, Service, ServiceItem,
     About, AboutItem, SectionWithImage, UngleichServiceItem, UngleichHeader,
-    UngleichHeaderItem
+    UngleichHeaderItem, UngleichProductItem, UngleichProduct
 )
 
 
@@ -208,4 +208,36 @@ class UngleichHeaderItemPlugin(CMSPluginBase):
             context, instance, placeholder
         )
         context['instance'] = instance
-        return context
\ No newline at end of file
+        return context
+
+
+@plugin_pool.register_plugin
+class UngleichProductsPlugin(CMSPluginBase):
+    name = "ungleich Products Plugin"
+    model = UngleichProduct
+    render_template = "ungleich_page/ungleich/section_products.html"
+    cache = False
+    allow_children = True
+    child_classes = ['UngleichProductsItemPlugin']
+
+    def render(self, context, instance, placeholder):
+        context['product_instance'] = instance
+        context['section_id'] = get_section_id(instance, 'products')
+        return context
+
+
+@plugin_pool.register_plugin
+class UngleichProductsItemPlugin(CMSPluginBase):
+    name = "ungleich Product Item Plugin"
+    model = UngleichProductItem
+    render_template = "ungleich_page/ungleich/_products_item.html"
+    cache = False
+    require_parent = True
+    parent_classes = ['UngleichProductsPlugin']
+
+    def render(self, context, instance, placeholder):
+        context = super(UngleichProductsItemPlugin, self).render(
+            context, instance, placeholder
+        )
+        context['instance'] = instance
+        return context
diff --git a/ungleich_page/migrations/0011_ungleichproduct_ungleichproductitem.py b/ungleich_page/migrations/0011_ungleichproduct_ungleichproductitem.py
new file mode 100644
index 00000000..c4984f5a
--- /dev/null
+++ b/ungleich_page/migrations/0011_ungleichproduct_ungleichproductitem.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.4 on 2017-11-21 19:04
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('ungleich_page', '0010_auto_20171119_1404'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='UngleichProduct',
+            fields=[
+                ('service_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ungleich_page.Service')),
+                ('section_class', models.CharField(blank=True, default='', max_length=100)),
+            ],
+            options={
+                'abstract': False,
+            },
+            bases=('ungleich_page.service',),
+        ),
+        migrations.CreateModel(
+            name='UngleichProductItem',
+            fields=[
+                ('serviceitem_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='ungleich_page.ServiceItem')),
+                ('url', models.URLField(blank=True, default='', max_length=300)),
+            ],
+            options={
+                'abstract': False,
+            },
+            bases=('ungleich_page.serviceitem',),
+        ),
+    ]
diff --git a/ungleich_page/models.py b/ungleich_page/models.py
index d1e0199b..f936f23b 100644
--- a/ungleich_page/models.py
+++ b/ungleich_page/models.py
@@ -115,4 +115,12 @@ class UngleichHeaderItem(CMSPlugin):
         related_name="ungleich_header_item_image",
         on_delete=models.SET_NULL
     )
-    description = HTMLField()
\ No newline at end of file
+    description = HTMLField()
+
+
+class UngleichProductItem(ServiceItem):
+    url = models.URLField(max_length=300, default="", blank=True)
+
+
+class UngleichProduct(Service):
+    section_class = models.CharField(max_length=100, default="", blank=True)
\ No newline at end of file