diff --git a/include/entity.h b/include/entity.h
index 17aaa5dc2281e353b0b25bbf7d6e7938e11414bf..20d70b3deee341c1641304cf668e5ea44aacdf55 100644
--- a/include/entity.h
+++ b/include/entity.h
@@ -24,6 +24,8 @@ class entity
     int     elemType_2D;
     int     g_order;
     int     a_order;
+    int     parent_dim;
+    int     parent_tag;
 
     size_t                              m_dof_base;
     size_t                              m_flux_base;
@@ -103,6 +105,7 @@ public:
     void                        sort_by_orientation(void);
     void                        sort_by_gmsh(void);
 
+    int                         material_tag(void) const;
     int                         gmsh_tag(void) const;
     int                         gmsh_elem_type(void) const;
     entity_ordering             current_elem_ordering(void) const;
diff --git a/src/entity.cpp b/src/entity.cpp
index 39cb7bf39c9f11cf1bd966ac6eb63551b05b4b38..52e86df42ff6f0dbffe268cee912be858025f988 100644
--- a/src/entity.cpp
+++ b/src/entity.cpp
@@ -42,6 +42,8 @@ entity::entity(const entity_params& ep)
 
     assert(physical_faces.size() == 4*physical_cells.size());
     assert(faceTags.size() == 4*physical_cells.size());
+
+    gm::getParent(dim, tag, parent_dim, parent_tag);
 }
 
 std::vector<size_t>
@@ -500,6 +502,15 @@ entity::sort_by_gmsh(void)
 }
 #endif
 
+int
+entity::material_tag(void) const
+{
+    if (parent_tag == -1)
+        return tag;
+
+    return parent_tag;
+}
+
 int
 entity::gmsh_tag(void) const
 {