diff --git a/fgs/datatypes.py b/fgs/datatypes.py
index 994977403e568e824ac2583192c9fd4b5f147e74..de7c6637d71889147a895d378caa0d785aa781cf 100644
--- a/fgs/datatypes.py
+++ b/fgs/datatypes.py
@@ -218,7 +218,14 @@ class Page:
         return res
 
 
-    def __lt__(self, other):
+    def get_prio(self):
+        if 'prio' in self.metadata:
+            return self.metadata['prio']
+        else:
+            return 0
+    prio = property(get_prio, None, None)
+
+    def __lt__(self, other): # for sorting by date modified (default)
         if not self.initialized:
             raise Exception("Page not initialized.")
         return self.date_modified < other.date_modified
@@ -245,10 +252,11 @@ class Tag:
         self.name = name
         self.lang = lang
         self._config = None
-        self.pages = set()
+        self.pages_tuple = []
         self.is_category = False
         self._link = None
         self._factories = factories
+        self._pages_cache = []
 
 
     def get_config(self):
@@ -291,11 +299,23 @@ class Tag:
             return
         if page.lang != self.lang:
             raise Exception("Page has different lang than Tag.", page.lang, tag.lang)
-        self.pages.add(page)
+        if page not in self.pages:
+            self.pages_tuple.append((page.prio, page))
+            self.pages_tuple.sort(key=lambda x: x[0])
+            self.pages_tuple.reverse()
         if is_category:
             self.is_category = is_category
 
 
+    def get_pages(self):
+        if len(self._pages_cache) != len(self.pages_tuple):
+            res = []
+            for prio, page in self.pages_tuple:
+                res.append(page)
+            self._pages_cache = res
+        return self._pages_cache
+    pages = property(get_pages, None, None)
+
 class Date:
     def __init__(self, dt, config):
         if isinstance(dt, str):