diff --git a/modules/mol/base/pymod/export_chain.cc b/modules/mol/base/pymod/export_chain.cc
index de8e693029106d8f09fce71a6b85ca115e793a3e..e81d6e1594171011792023f07ab4b59813d31332 100644
--- a/modules/mol/base/pymod/export_chain.cc
+++ b/modules/mol/base/pymod/export_chain.cc
@@ -137,6 +137,7 @@ void export_Chain()
       .value("CHAINTYPE_MACROLIDE",             CHAINTYPE_MACROLIDE)
       .value("CHAINTYPE_CYCLIC_PSEUDO_PEPTIDE", CHAINTYPE_CYCLIC_PSEUDO_PEPTIDE)
       .value("CHAINTYPE_POLY_PEPTIDE_DN_RN",    CHAINTYPE_POLY_PEPTIDE_DN_RN)
+      .value("CHAINTYPE_BRANCHED",              CHAINTYPE_BRANCHED)
       .value("CHAINTYPE_N_CHAINTYPES",          CHAINTYPE_N_CHAINTYPES)
       .export_values()
     ;
diff --git a/modules/mol/base/src/chain_type.cc b/modules/mol/base/src/chain_type.cc
index 2e553cff8d33428180afffb6edcccb947a762a55..5b2fb1350466b127391dc55d266adbea9713361c 100644
--- a/modules/mol/base/src/chain_type.cc
+++ b/modules/mol/base/src/chain_type.cc
@@ -54,6 +54,8 @@ ChainType ChainTypeFromString(StringRef identifier)
     return CHAINTYPE_CYCLIC_PSEUDO_PEPTIDE;
   } else if (StringRef("peptide nucleic acid", 20) == identifier) {
     return CHAINTYPE_POLY_PEPTIDE_DN_RN;
+  } else if (StringRef("branched", 8) == identifier) {
+    return CHAINTYPE_BRANCHED;
   } else if (StringRef("other", 5) == identifier) {
     return CHAINTYPE_UNKNOWN;
   }
@@ -98,6 +100,8 @@ String StringFromChainType(ChainType type)
     return "cyclic-pseudo-peptide";
   } else if (CHAINTYPE_POLY_PEPTIDE_DN_RN == type) {
     return "peptide nucleic acid";
+  } else if (CHAINTYPE_BRANCHED == type) {
+    return "branched";
   } else if (CHAINTYPE_UNKNOWN == type) {
     return "other";
   }
diff --git a/modules/mol/base/src/chain_type.hh b/modules/mol/base/src/chain_type.hh
index 3338db7fe16a87641b86f0bef3bc00f1b0f701aa..bfc664758b2c2f1c863aa6402bf9322f0ffbf8b4 100644
--- a/modules/mol/base/src/chain_type.hh
+++ b/modules/mol/base/src/chain_type.hh
@@ -44,6 +44,7 @@ typedef enum {
   CHAINTYPE_MACROLIDE,              ///< macrolide
   CHAINTYPE_CYCLIC_PSEUDO_PEPTIDE,  ///< cyclic-pseudo-peptide
   CHAINTYPE_POLY_PEPTIDE_DN_RN,     ///< peptide nucleic acid
+  CHAINTYPE_BRANCHED,               ///< carbohydrate
   CHAINTYPE_N_CHAINTYPES    ///< no. of chain types
 } ChainType;
 
diff --git a/modules/mol/base/tests/test_chain.cc b/modules/mol/base/tests/test_chain.cc
index 3fca04ca0c3505922531bc44ed1b60e00fc6f505..15838c9f0cf9223ba90504c889893ba911bd5765 100644
--- a/modules/mol/base/tests/test_chain.cc
+++ b/modules/mol/base/tests/test_chain.cc
@@ -320,6 +320,13 @@ BOOST_AUTO_TEST_CASE(chain_type)
    BOOST_CHECK(!ch1.IsPolypeptide());
    BOOST_CHECK(!ch1.IsPolynucleotide());
 
+   e.SetChainType(ch1, CHAINTYPE_BRANCHED);
+   BOOST_CHECK(ch1.GetType() == CHAINTYPE_BRANCHED);
+   BOOST_CHECK(!ch1.IsPolymer());
+   BOOST_CHECK(!ch1.IsPolysaccharide());
+   BOOST_CHECK(!ch1.IsPolypeptide());
+   BOOST_CHECK(!ch1.IsPolynucleotide());
+
    // string -> chain type
    BOOST_CHECK(ChainTypeFromString("polymer") == CHAINTYPE_POLY);
    BOOST_CHECK(ChainTypeFromString("non-polymer") == CHAINTYPE_NON_POLY);
@@ -345,6 +352,7 @@ BOOST_AUTO_TEST_CASE(chain_type)
                CHAINTYPE_CYCLIC_PSEUDO_PEPTIDE);
    BOOST_CHECK(ChainTypeFromString("peptide nucleic acid") ==
                CHAINTYPE_POLY_PEPTIDE_DN_RN);
+   BOOST_CHECK(ChainTypeFromString("branched") == CHAINTYPE_BRANCHED);
    BOOST_CHECK_THROW(ChainTypeFromString("supposed to fail"),
                      Error);
 
@@ -371,6 +379,7 @@ BOOST_AUTO_TEST_CASE(chain_type)
                "cyclic-pseudo-peptide");
    BOOST_CHECK(StringFromChainType(CHAINTYPE_POLY_PEPTIDE_DN_RN) ==
                "peptide nucleic acid");
+   BOOST_CHECK(StringFromChainType(CHAINTYPE_BRANCHED) == "branched");
    BOOST_CHECK_THROW(StringFromChainType(CHAINTYPE_N_CHAINTYPES),
                      Error);
 }