diff --git a/src/mesh/Connectivity.cpp b/src/mesh/Connectivity.cpp
index fe84284a210aa2d3e297fd8ce4c23591d47daa36..5622294b2af633f38b1cc283eaf0b1576498f0d4 100644
--- a/src/mesh/Connectivity.cpp
+++ b/src/mesh/Connectivity.cpp
@@ -274,7 +274,7 @@ Connectivity<Dimension>::_buildIsBoundaryNode() const
 
 template <ItemType item_type, size_t Dimension>
 inline void
-_printReference(std::ostream& os, const Connectivity<Dimension>& connectivity)
+_printReference(std::ostream& os, const Connectivity<Dimension>& connectivity, std::set<std::string>& already_printed)
 {
   auto count_all_items = [](const auto& item_is_owned) -> size_t {
     using ItemId  = typename std::decay_t<decltype(item_is_owned)>::index_type;
@@ -295,10 +295,20 @@ _printReference(std::ostream& os, const Connectivity<Dimension>& connectivity)
 
   os << "- number of " << itemName(item_type) << "s: " << rang::fgB::yellow
      << count_all_items(connectivity.template isOwned<item_type>()) << rang::style::reset << '\n';
-  os << "  " << rang::fgB::yellow << connectivity.template numberOfRefItemList<item_type>() << rang::style::reset
-     << " references\n";
-  if (connectivity.template numberOfRefItemList<item_type>() > 0) {
-    for (size_t i_ref_item = 0; i_ref_item < connectivity.template numberOfRefItemList<item_type>(); ++i_ref_item) {
+
+  // This is done to avoid printing deduced references on subitems
+  std::vector<size_t> to_print_list;
+  for (size_t i_ref_item = 0; i_ref_item < connectivity.template numberOfRefItemList<item_type>(); ++i_ref_item) {
+    auto ref_item_list = connectivity.template refItemList<item_type>(i_ref_item);
+    if (already_printed.find(ref_item_list.refId().tagName()) == already_printed.end()) {
+      to_print_list.push_back(i_ref_item);
+      already_printed.insert(ref_item_list.refId().tagName());
+    }
+  }
+
+  os << "  " << rang::fgB::yellow << to_print_list.size() << rang::style::reset << " references\n";
+  if (to_print_list.size() > 0) {
+    for (size_t i_ref_item : to_print_list) {
       auto ref_item_list = connectivity.template refItemList<item_type>(i_ref_item);
       os << "  - " << rang::fgB::green << ref_item_list.refId().tagName() << rang::style::reset << " ("
          << rang::fgB::green << ref_item_list.refId().tagNumber() << rang::style::reset << ") number "
@@ -312,15 +322,17 @@ template <size_t Dimension>
 std::ostream&
 Connectivity<Dimension>::_write(std::ostream& os) const
 {
+  std::set<std::string> already_printed;
+
   os << "connectivity of dimension " << Dimension << '\n';
-  _printReference<ItemType::cell>(os, *this);
+  _printReference<ItemType::cell>(os, *this, already_printed);
   if constexpr (Dimension > 1) {
-    _printReference<ItemType::face>(os, *this);
+    _printReference<ItemType::face>(os, *this, already_printed);
   }
   if constexpr (Dimension > 2) {
-    _printReference<ItemType::edge>(os, *this);
+    _printReference<ItemType::edge>(os, *this, already_printed);
   }
-  _printReference<ItemType::node>(os, *this);
+  _printReference<ItemType::node>(os, *this, already_printed);
 
   return os;
 }