--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-23 15:40
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import mezzanine.core.fields
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('shop', '0008_auto_20160907_1726'),
+        ('organization-pages', '0002_auto_20160914_1838'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='PageProductBlock',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='product_blocks', to='organization-pages.CustomPage', verbose_name='page')),
+            ],
+            options={
+                'verbose_name': 'product block',
+                'verbose_name_plural': 'product blocks',
+            },
+        ),
+        migrations.CreateModel(
+            name='ProductBlock',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('title', models.CharField(max_length=1024, verbose_name='title')),
+                ('title_fr', models.CharField(max_length=1024, null=True, verbose_name='title')),
+                ('title_en', models.CharField(max_length=1024, null=True, verbose_name='title')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+                ('style', models.CharField(choices=[('square', 'square'), ('circle', 'circle')], max_length=16, verbose_name='style')),
+            ],
+            options={
+                'verbose_name': 'product block',
+                'verbose_name_plural': 'product blocks',
+            },
+        ),
+        migrations.CreateModel(
+            name='ProductBlockProduct',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')),
+                ('product', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='blocks', to='shop.Product', verbose_name='product')),
+                ('product_block', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='products', to='organization-shop.ProductBlock', verbose_name='product block')),
+            ],
+            options={
+                'verbose_name': 'product',
+                'verbose_name_plural': 'products',
+                'ordering': ('_order',),
+            },
+        ),
+        migrations.AddField(
+            model_name='pageproductblock',
+            name='product_block',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='pages', to='organization-shop.ProductBlock', verbose_name='product block'),
+        ),
+    ]
 
 from django.utils.translation import ugettext_lazy as _
 
 from mezzanine.core.models import RichText, Displayable, Slugged, Orderable
+from cartridge.shop.models import Product
 
 from organization.core.models import *
-from organization.pages.models import *
+
+
+PRODUCT_LIST_STYLE_CHOICES = [
+    ('square', _('square')),
+    ('circle', _('circle')),
+]
+
+
+class ProductBlock(Titled):
+
+    style = models.CharField(_('style'), max_length=16, choices=PRODUCT_LIST_STYLE_CHOICES)
+
+    class Meta:
+        verbose_name = _("product block")
+        verbose_name_plural = _("product blocks")
+
+    def __str__(self):
+        return self.title
+
+
+class ProductBlockProduct(Orderable):
+
+    product_block = models.ForeignKey(ProductBlock, verbose_name=_('product block'), related_name='products', blank=True, null=True, on_delete=models.SET_NULL)
+    product = models.ForeignKey(Product, verbose_name=_('product'), related_name='blocks', blank=True, null=True, on_delete=models.SET_NULL)
+
+    class Meta:
+        verbose_name = _("product")
+        verbose_name_plural = _("products")
+
+
+
+class PageProductBlock(models.Model):
+
+    page = models.ForeignKey('organization-pages.CustomPage', verbose_name=_('page'), related_name='product_blocks', blank=True, null=True, on_delete=models.SET_NULL)
+    product_block = models.ForeignKey('organization-shop.ProductBlock', verbose_name=_('product block'), related_name='pages', blank=True, null=True, on_delete=models.SET_NULL)
+
+    class Meta:
+        verbose_name = _("product block")
+        verbose_name_plural = _("product blocks")