diff --git a/src/mesh/SubItemValuePerItem.hpp b/src/mesh/SubItemValuePerItem.hpp
index c2669e95b647f8f57c2ae498d61ed2020504675f..7b1cddd143fcb85876007650080473a5aeee2d30 100644
--- a/src/mesh/SubItemValuePerItem.hpp
+++ b/src/mesh/SubItemValuePerItem.hpp
@@ -10,15 +10,27 @@
 #include <ConnectivityUtils.hpp>
 
 template <typename DataType,
-          ItemType SubItemType,
-          ItemType ItemType>
-class SubItemValuePerItem
+          ItemType sub_item_type,
+          ItemType item_type,
+          typename Allowed=void>
+class SubItemValuePerItem;
+
+template <typename DataType,
+          ItemType sub_item_type,
+          ItemType item_type>
+class SubItemValuePerItem<DataType,
+                          sub_item_type,
+                          item_type,
+                          std::enable_if_t<sub_item_type != item_type>>
 {
  private:
   ConnectivityMatrix::HostRowType m_host_row_map;
   Kokkos::View<DataType*> m_values;
 
-  friend SubItemValuePerItem<std::add_const_t<DataType>, SubItemType, ItemType>;
+  // Allows const version to access our data
+  friend SubItemValuePerItem<std::add_const_t<DataType>,
+                             sub_item_type,
+                             item_type>;
 
  public:
   class SubView
@@ -132,7 +144,7 @@ class SubItemValuePerItem
   template <typename DataType2>
   KOKKOS_INLINE_FUNCTION
   SubItemValuePerItem&
-  operator=(const SubItemValuePerItem<DataType2, SubItemType, ItemType>& sub_item_value_per_item)
+  operator=(const SubItemValuePerItem<DataType2, sub_item_type, item_type>& sub_item_value_per_item)
   {
     // ensures that DataType is the same as source DataType2
     static_assert(std::is_same<std::remove_const_t<DataType>, std::remove_const_t<DataType2>>(),
@@ -148,7 +160,7 @@ class SubItemValuePerItem
 
   template <typename DataType2>
   KOKKOS_INLINE_FUNCTION
-  SubItemValuePerItem(const SubItemValuePerItem<DataType2, SubItemType, ItemType>& sub_item_value_per_item)
+  SubItemValuePerItem(const SubItemValuePerItem<DataType2, sub_item_type, item_type>& sub_item_value_per_item)
   {
     this->operator=(sub_item_value_per_item);
   }
@@ -158,7 +170,7 @@ class SubItemValuePerItem
   SubItemValuePerItem(const IConnectivity& connectivity)
   {
     ConnectivityMatrix connectivity_matrix
-        = connectivity.getMatrix(ItemType,SubItemType);
+        = connectivity.getMatrix(item_type, sub_item_type);
 
     m_host_row_map = connectivity_matrix.rowsMap();
     m_values = Kokkos::View<DataType*>("values", connectivity_matrix.numEntries());