diff --git a/backend/metagenedb/api/catalog/views/taxonomy.py b/backend/metagenedb/api/catalog/views/taxonomy.py
index 9b6f92ec0d64c057f3137a074ec2fe3acc5ba203..2f9b484955a375405b72a94d9eea86665e4bf1f0 100644
--- a/backend/metagenedb/api/catalog/views/taxonomy.py
+++ b/backend/metagenedb/api/catalog/views/taxonomy.py
@@ -15,6 +15,6 @@ class TaxonomyViewSet(BulkViewSet):
 
     def retrieve(self, request, *args, **kwargs):
         instance = self.get_object()
-        instance.build_parental_hierarchy()
+        hierarchy = instance.parental_hierarchy  # noqa
         serializer = self.get_serializer(instance)
         return Response(serializer.data)
diff --git a/backend/metagenedb/apps/catalog/models/taxonomy.py b/backend/metagenedb/apps/catalog/models/taxonomy.py
index bc3498db2dfa975726ce66941aa9ba127f23340d..13c5c010a5757b0ef950c149488f5f5638ab8710 100644
--- a/backend/metagenedb/apps/catalog/models/taxonomy.py
+++ b/backend/metagenedb/apps/catalog/models/taxonomy.py
@@ -97,11 +97,33 @@ class Taxonomy(models.Model):
     def __str__(self):
         return f"{self.name}"
 
-    def build_parental_hierarchy(self):
+    @property
+    def parental_hierarchy(self):
+        if self.kingdom is None and self.superkingdom is None:
+            return self._build_parental_hierarchy()
+        return self._dict_parental_hierarchy()
+
+    def _dict_parental_hierarchy(self):
+        """
+        Return parental hierarchy from
+        """
+        ranks = [
+            "superkingdom", "kingdom", "phylum", "class_rank", "order", "family", "genus", "species"
+        ]
+        hierarchy = {}
+        for rank in ranks:
+            if getattr(self, rank, None) is not None:
+                hierarchy[rank] = getattr(self, rank)
+        return hierarchy
+
+    def _build_parental_hierarchy(self):
+        """
+        Build and save parental hierarchy for an entry
+        """
         hierarchy = {}
         if self.name != 'root' and self.parent is not None:
             hierarchy[self.rank] = self
-            hierarchy = {**hierarchy, **self.parent.build_parental_hierarchy()}
+            hierarchy = {**hierarchy, **self.parent.parental_hierarchy}
         for level, value in hierarchy.items():
             setattr(self, level, value)
         self.save()
diff --git a/backend/metagenedb/apps/catalog/models/test_taxonomy.py b/backend/metagenedb/apps/catalog/models/test_taxonomy.py
index a9e8cad224396a3d208a226ece1082de537592c4..3263bd61acbf1f92b1907622621a77785e3e5472 100644
--- a/backend/metagenedb/apps/catalog/models/test_taxonomy.py
+++ b/backend/metagenedb/apps/catalog/models/test_taxonomy.py
@@ -33,6 +33,9 @@ class TestBuildHierarchy(APITestCase):
             'kingdom': self.kingdom
         }
         self.assertNotEqual(getattr(self.phylum, 'kingdom', None), self.kingdom)
-        test_dict = self.phylum.build_parental_hierarchy()
+        test_dict = self.phylum.parental_hierarchy
         self.assertDictEqual(test_dict, expected_dict)
         self.assertEqual(getattr(self.phylum, 'kingdom', None), self.kingdom)
+        # Now try a second time from saved information
+        test_dict = self.phylum.parental_hierarchy
+        self.assertDictEqual(test_dict, expected_dict)