diff --git a/modules/io/src/mol/mmcif_writer.cc b/modules/io/src/mol/mmcif_writer.cc
index 4ad71c449f333093d7261adc55b395378741e4b1..1b3bcf5489461a0c139bc1112dc6cd368ba184b7 100644
--- a/modules/io/src/mol/mmcif_writer.cc
+++ b/modules/io/src/mol/mmcif_writer.cc
@@ -199,9 +199,7 @@ namespace {
     // - polymer
     // - water
 
-    // this function is overly simplistic and won't identify macrolid or
-    // branched => explicitely checks for water, everything else is either
-    // non-polymer or polymer depending on number of residues
+    // this function is overly simplistic and won't identify macrolid
 
     std::set<char> chem_classes;
     for(auto res: res_list) {
@@ -221,6 +219,15 @@ namespace {
       return "non-polymer";
     }
 
+    std::set<char> branched_set;
+    branched_set.insert(ost::mol::ChemClass::L_SACCHARIDE);
+    branched_set.insert(ost::mol::ChemClass::D_SACCHARIDE);
+    branched_set.insert(ost::mol::ChemClass::SACCHARIDE);
+    branched_set.insert(chem_classes.begin(), chem_classes.end());
+    if(branched_set.size() == 3) {
+      return "branched";
+    }
+
     return "polymer";
   }