diff --git a/shared/models.py b/shared/models.py
index 316316f19e20030b64079d2a79264d96135cd5ec..7ec838f036968bc05d29715aa7f9eaadfa882c53 100644
--- a/shared/models.py
+++ b/shared/models.py
@@ -35,14 +35,14 @@ class ArticleTag(TaggedItemBase):
     content_object = ParentalKey("shared.Article", on_delete=models.CASCADE)
 
 
-class Article(SharedSubpageMixin, MetadataPageMixin, Page):
-    """ Univerzalni clanek pro vsechny weby """
-
-    ### FIELDS
+class ArticleMixin(models.Model):
+    """ Spolecna pole vsech clanku """
 
     perex = models.CharField("perex", max_length=250, blank=True)
     text = models.TextField("text článku", blank=True)
     date = models.DateField("datum článku", blank=False, default=datetime.datetime.now)
+
+    tags = ClusterTaggableManager(through=ArticleTag, blank=True)
     image = models.ForeignKey(
         "wagtailimages.Image",
         on_delete=models.PROTECT,
@@ -50,7 +50,6 @@ class Article(SharedSubpageMixin, MetadataPageMixin, Page):
         null=True,
         verbose_name="obrázek",
     )
-    tags = ClusterTaggableManager(through=ArticleTag, blank=True)
     author = models.ForeignKey(
         "shared.PersonPage",
         verbose_name="Autor článku",
@@ -59,7 +58,13 @@ class Article(SharedSubpageMixin, MetadataPageMixin, Page):
         blank=True,
     )
 
-    ### PANELS
+    class Meta:
+        abstract = True
+        verbose_name = "Článek"
+
+
+class Article(ArticleMixin, Page, SharedSubpageMixin, MetadataPageMixin):
+    """ Univerzalni clanek pro vsechny weby """
 
     content_panels = Page.content_panels + [
         FieldPanel("perex"),
@@ -73,9 +78,6 @@ class Article(SharedSubpageMixin, MetadataPageMixin, Page):
         FieldPanel("tags"),
     ]
 
-    class Meta:
-        verbose_name = "Článek"
-
 
 class PersonPage(SharedSubpageMixin, MetadataPageMixin, Page):
     """ Stranka Pirata.