diff --git a/modules/conop/pymod/export_compound.cc b/modules/conop/pymod/export_compound.cc
index 3a9e4e6118867027b04db2bbf3eb3031878c44ed..f14e90a37e634c5f34c728fc5b61287d518326a9 100644
--- a/modules/conop/pymod/export_compound.cc
+++ b/modules/conop/pymod/export_compound.cc
@@ -69,6 +69,17 @@ char get_chemtype(CompoundPtr compound)
   return char(compound->GetChemType());
 }
 
+int get_charge(CompoundPtr compound)
+{
+  return int(compound->GetCharge());
+}
+
+void set_charge(CompoundPtr compound, int c)
+{
+  compound->SetCharge(c);
+}
+
+
 CompoundPtr find_compound(CompoundLibPtr comp_lib, 
                           const String& tlc, const String& dialect)
 {
@@ -95,6 +106,9 @@ void export_Compound() {
          return_value_policy<copy_const_reference>())
     .def("SetOneLetterCode", &Compound::SetOneLetterCode)
     .def("GetOneLetterCode", &Compound::GetOneLetterCode)
+    
+    .def("GetCharge", &Compound::GetCharge)
+    .def("SetCharge", &Compound::SetCharge)
 
     .add_property("three_letter_code", make_function(&Compound::GetID, return_value_policy<copy_const_reference>()))
     .add_property("name", 
@@ -129,6 +143,7 @@ void export_Compound() {
     .def_readonly("is_leaving", &AtomSpec::is_leaving)
     .def_readonly("is_aromatic", &AtomSpec::is_aromatic)
     .def_readonly("ordinal", &AtomSpec::ordinal)
+    .def_readonly("charge", &AtomSpec::charge)
   ;
   
   class_<BondSpec>("BondSpec", no_init)
diff --git a/modules/conop/src/compound.hh b/modules/conop/src/compound.hh
index e06dde4c3b15964fd191c64de25a6f673dd19ad7..650271b5f0ac9a9448a5dcd598fa791191bba17a 100644
--- a/modules/conop/src/compound.hh
+++ b/modules/conop/src/compound.hh
@@ -76,17 +76,19 @@ struct DLLEXPORT_OST_CONOP AtomSpec {
     alt_name(),
     element(),
     is_leaving(false),
-    is_aromatic()
+    is_aromatic(),
+    charge()
   {
   }
   AtomSpec(int o, const String& n, const String& a, const String& e,
-           bool l, bool r):
+           bool l, bool r, int c):
     ordinal(o),
     name(n),
     alt_name(a),
     element(e),
     is_leaving(l),
-    is_aromatic(r)
+    is_aromatic(r),
+    charge(c)
   {}
   int    ordinal;
   String name;
@@ -94,10 +96,11 @@ struct DLLEXPORT_OST_CONOP AtomSpec {
   String element;
   bool   is_leaving;
   bool   is_aromatic;
+  int    charge;
   bool operator==(const AtomSpec& rhs) const {
     return ordinal==rhs.ordinal && name==rhs.name && alt_name==rhs.alt_name &&
            element==rhs.element && is_leaving==rhs.is_leaving && 
-           rhs.is_aromatic==rhs.is_aromatic;
+           rhs.is_aromatic==rhs.is_aromatic && charge==rhs.charge;
   }
   bool operator!=(const AtomSpec& rhs) const {
     return !this->operator==(rhs);
@@ -152,7 +155,8 @@ public:
     chem_type_(),
     dialect_(Compound::PDB),
     creation_date_(),
-    mod_date_()
+    mod_date_(),
+    charge_()
   {
   }
 
@@ -241,6 +245,10 @@ public:
 
   const String& GetFormula() { return formula_; }
   
+  void SetCharge(int charge) { charge_=charge; }
+  
+  int GetCharge() { return charge_; }
+  
   const BondSpecList& GetBondSpecs() const {
     return bond_specs_;
   }
@@ -275,6 +283,7 @@ private:
   Dialect                      dialect_;  
   Date                         creation_date_;
   Date                         mod_date_;
+  int                          charge_;
 };
 
 typedef std::map<String, CompoundPtr> CompoundMap;
diff --git a/modules/conop/src/compound_lib.cc b/modules/conop/src/compound_lib.cc
index 35c60e0c3fa133d9cc11165273d30e760dd77790..ba8ecc51d919b56843d6ccfa9952574301121a79 100644
--- a/modules/conop/src/compound_lib.cc
+++ b/modules/conop/src/compound_lib.cc
@@ -49,7 +49,8 @@ const char* CREATE_CMD[]={
 "  formula           VARCHAR(64) NOT NULL,                                      "
 "  pdb_initial       TIMESTAMP,                                                 "
 "  pdb_modified      TIMESTAMP,                                                 "
-"  name              VARCHAR(256)                                               " 
+"  name              VARCHAR(256),                                              " 
+"  charge            INT                                                        " 
 ");",
 " CREATE UNIQUE INDEX IF NOT EXISTS commpound_tlc_index ON chem_compounds       "
 "                                  (tlc, dialect)",
@@ -62,7 +63,8 @@ const char* CREATE_CMD[]={
 " is_aromatic        VARCHAR(1) NOT NULL,                                       "
 " stereo_conf        VARCHAR(1) NOT NULL,                                       "
 " is_leaving         VARCHAR(1) NOT NULL,                                       "
-" ordinal            INT                                                        "
+" ordinal            INT,                                                       "
+" charge             INT                                                        "
 ");",
 " CREATE INDEX IF NOT EXISTS atom_name_index ON atoms                           "
 "                                  (compound_id, name, alt_name)",
@@ -85,13 +87,13 @@ const char* CREATE_CMD[]={
 
 
 const char* INSERT_COMPOUND_STATEMENT="INSERT INTO chem_compounds               "
-"        (tlc, olc, dialect, chem_class, chem_type, formula, pdb_initial, pdb_modified, name) "
-" VALUES (?, ?, ?, ?, ?, ?, DATE(?), DATE(?), ?)";
+"        (tlc, olc, dialect, chem_class, chem_type, formula, pdb_initial, pdb_modified, name, charge) "
+" VALUES (?, ?, ?, ?, ?, ?, DATE(?), DATE(?), ?, ?)";
 
 const char* INSERT_ATOM_STATEMENT="INSERT INTO atoms                            "
 "        (compound_id, name, alt_name, element, is_aromatic, stereo_conf,       "
-"         is_leaving, ordinal)                                                  "
-" VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
+"         is_leaving, ordinal, charge)                                          "
+" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
 
 const char* INSERT_BOND_STATEMENT="insert into bonds                            "
 "        (compound_id, atom_one, atom_two, bond_order, stereo_conf)             "
@@ -222,6 +224,8 @@ void CompoundLib::AddCompound(const CompoundPtr& compound)
     modi_date_str=modi_date.ToString();
     sqlite3_bind_text(stmt, 7, crea_date_str.c_str(), crea_date_str.length(), NULL);
     sqlite3_bind_text(stmt, 8, modi_date_str.c_str(), modi_date_str.length(), NULL);
+    int charge=compound->GetCharge();
+    sqlite3_bind_int(stmt, 10, charge);
   } else {
     LOG_ERROR(sqlite3_errmsg(conn_));
     sqlite3_finalize(stmt);
@@ -255,6 +259,7 @@ void CompoundLib::AddCompound(const CompoundPtr& compound)
       sqlite3_bind_int(stmt, 6, 0);                  
       sqlite3_bind_int(stmt, 7, a.is_leaving);
       sqlite3_bind_int(stmt, 8, a.ordinal);
+      sqlite3_bind_int(stmt, 9, a.charge);
       retval=sqlite3_step(stmt);
       assert(retval==SQLITE_DONE);
       atom_ids[a.ordinal]=sqlite3_last_insert_rowid(conn_);
@@ -363,7 +368,7 @@ CompoundLibPtr CompoundLib::Load(const String& database, bool readonly)
 }
 
 void CompoundLib::LoadAtomsFromDB(CompoundPtr comp, int pk) const {
-  String aq=str(format("SELECT name, alt_name, element, ordinal, is_leaving "
+  String aq=str(format("SELECT name, alt_name, element, ordinal, is_leaving, charge "
                        "FROM atoms WHERE compound_id=%d "
                        "ORDER BY ordinal ASC") % pk);  
   sqlite3_stmt* stmt;
@@ -379,6 +384,7 @@ void CompoundLib::LoadAtomsFromDB(CompoundPtr comp, int pk) const {
         atom_sp.element=String(reinterpret_cast<const char*>(sqlite3_column_text(stmt, 2))); 
         atom_sp.ordinal=sqlite3_column_int(stmt, 3);  
         atom_sp.is_leaving=bool(sqlite3_column_int(stmt, 4)!=0);
+        atom_sp.charge=sqlite3_column_int(stmt, 5);  
         comp->AddAtom(atom_sp);
       }
   } else {
@@ -421,7 +427,7 @@ CompoundPtr CompoundLib::FindCompound(const String& id,
   if (i!=compound_cache_.end()) {
     return i->second;
   }
-  String query="SELECT id, tlc, olc, chem_class, dialect, formula";
+  String query="SELECT id, tlc, olc, chem_class, dialect, formula, charge";
   if(chem_type_available_) {
     query+=", chem_type";
     if(name_available_) {
@@ -450,11 +456,12 @@ CompoundPtr CompoundLib::FindCompound(const String& id,
       compound->SetDialect(Compound::Dialect(sqlite3_column_text(stmt, 4)[0]));
       const char* f=reinterpret_cast<const char*>(sqlite3_column_text(stmt, 5));
       compound->SetFormula(f);
+      compound->SetCharge(sqlite3_column_int(stmt, 6));
       if(chem_type_available_) {
-        compound->SetChemType(mol::ChemType(sqlite3_column_text(stmt, 6)[0]));
+        compound->SetChemType(mol::ChemType(sqlite3_column_text(stmt, 7)[0]));
       }
       if (name_available_) {
-        const char* name=reinterpret_cast<const char*>(sqlite3_column_text(stmt, 7));
+        const char* name=reinterpret_cast<const char*>(sqlite3_column_text(stmt, 8));
         if (name) {
           compound->SetName(name);
         }
diff --git a/modules/conop/src/standard_compounds.cc b/modules/conop/src/standard_compounds.cc
index 7ce7302ffcc4f90e37a1f59e80595e54efbb4f24..e9012a7c035adf5330504f8fb12f75287f9dfde2 100644
--- a/modules/conop/src/standard_compounds.cc
+++ b/modules/conop/src/standard_compounds.cc
@@ -5,19 +5,19 @@ CompoundPtr MakeALACompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C3 H7 N O2");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "OXT", "OXT", "O", true, true),
-    AtomSpec(6, "H", "H", "H", false, true),
-    AtomSpec(7, "H2", "HN2", "H", true, true),
-    AtomSpec(8, "HA", "HA", "H", false, true),
-    AtomSpec(9, "HB1", "1HB", "H", false, true),
-    AtomSpec(10, "HB2", "2HB", "H", false, true),
-    AtomSpec(11, "HB3", "3HB", "H", false, true),
-    AtomSpec(12, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(6, "H", "H", "H", false, true,0),
+    AtomSpec(7, "H2", "HN2", "H", true, true,0),
+    AtomSpec(8, "HA", "HA", "H", false, true,0),
+    AtomSpec(9, "HB1", "1HB", "H", false, true,0),
+    AtomSpec(10, "HB2", "2HB", "H", false, true,0),
+    AtomSpec(11, "HB3", "3HB", "H", false, true,0),
+    AtomSpec(12, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<13; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -44,20 +44,20 @@ CompoundPtr MakeCYSCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C3 H7 N O2 S");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "SG", "SG", "S", false, true),
-    AtomSpec(6, "OXT", "OXT", "O", true, true),
-    AtomSpec(7, "H", "H", "H", false, true),
-    AtomSpec(8, "H2", "HN2", "H", true, true),
-    AtomSpec(9, "HA", "HA", "H", false, true),
-    AtomSpec(10, "HB2", "1HB", "H", false, true),
-    AtomSpec(11, "HB3", "2HB", "H", false, true),
-    AtomSpec(12, "HG", "HG", "H", false, true),
-    AtomSpec(13, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "SG", "SG", "S", false, true,0),
+    AtomSpec(6, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(7, "H", "H", "H", false, true,0),
+    AtomSpec(8, "H2", "HN2", "H", true, true,0),
+    AtomSpec(9, "HA", "HA", "H", false, true,0),
+    AtomSpec(10, "HB2", "1HB", "H", false, true,0),
+    AtomSpec(11, "HB3", "2HB", "H", false, true,0),
+    AtomSpec(12, "HG", "HG", "H", false, true,0),
+    AtomSpec(13, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<14; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -85,22 +85,22 @@ CompoundPtr MakeASPCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C4 H7 N O4");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "CG", "CG", "C", false, true),
-    AtomSpec(6, "OD1", "OD1", "O", false, true),
-    AtomSpec(7, "OD2", "OD2", "O", false, true),
-    AtomSpec(8, "OXT", "OXT", "O", true, true),
-    AtomSpec(9, "H", "H", "H", false, true),
-    AtomSpec(10, "H2", "HN2", "H", true, true),
-    AtomSpec(11, "HA", "HA", "H", false, true),
-    AtomSpec(12, "HB2", "HB1", "H", false, true),
-    AtomSpec(13, "HB3", "HB2", "H", false, true),
-    AtomSpec(14, "HD2", "HD2", "H", false, true),
-    AtomSpec(15, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "CG", "CG", "C", false, true,0),
+    AtomSpec(6, "OD1", "OD1", "O", false, true,0),
+    AtomSpec(7, "OD2", "OD2", "O", false, true,0),
+    AtomSpec(8, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(9, "H", "H", "H", false, true,0),
+    AtomSpec(10, "H2", "HN2", "H", true, true,0),
+    AtomSpec(11, "HA", "HA", "H", false, true,0),
+    AtomSpec(12, "HB2", "HB1", "H", false, true,0),
+    AtomSpec(13, "HB3", "HB2", "H", false, true,0),
+    AtomSpec(14, "HD2", "HD2", "H", false, true,0),
+    AtomSpec(15, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<16; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -130,25 +130,25 @@ CompoundPtr MakeGLUCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C5 H9 N O4");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "CG", "CG", "C", false, true),
-    AtomSpec(6, "CD", "CD", "C", false, true),
-    AtomSpec(7, "OE1", "OE1", "O", false, true),
-    AtomSpec(8, "OE2", "OE2", "O", false, true),
-    AtomSpec(9, "OXT", "OXT", "O", true, true),
-    AtomSpec(10, "H", "H", "H", false, true),
-    AtomSpec(11, "H2", "HN2", "H", true, true),
-    AtomSpec(12, "HA", "HA", "H", false, true),
-    AtomSpec(13, "HB2", "HB1", "H", false, true),
-    AtomSpec(14, "HB3", "HB2", "H", false, true),
-    AtomSpec(15, "HG2", "HG1", "H", false, true),
-    AtomSpec(16, "HG3", "HG2", "H", false, true),
-    AtomSpec(17, "HE2", "HE2", "H", false, true),
-    AtomSpec(18, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "CG", "CG", "C", false, true,0),
+    AtomSpec(6, "CD", "CD", "C", false, true,0),
+    AtomSpec(7, "OE1", "OE1", "O", false, true,0),
+    AtomSpec(8, "OE2", "OE2", "O", false, true,0),
+    AtomSpec(9, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(10, "H", "H", "H", false, true,0),
+    AtomSpec(11, "H2", "HN2", "H", true, true,0),
+    AtomSpec(12, "HA", "HA", "H", false, true,0),
+    AtomSpec(13, "HB2", "HB1", "H", false, true,0),
+    AtomSpec(14, "HB3", "HB2", "H", false, true,0),
+    AtomSpec(15, "HG2", "HG1", "H", false, true,0),
+    AtomSpec(16, "HG3", "HG2", "H", false, true,0),
+    AtomSpec(17, "HE2", "HE2", "H", false, true,0),
+    AtomSpec(18, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<19; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -181,29 +181,29 @@ CompoundPtr MakePHECompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C9 H11 N O2");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "CG", "CG", "C", false, true),
-    AtomSpec(6, "CD1", "CD1", "C", false, true),
-    AtomSpec(7, "CD2", "CD2", "C", false, true),
-    AtomSpec(8, "CE1", "CE1", "C", false, true),
-    AtomSpec(9, "CE2", "CE2", "C", false, true),
-    AtomSpec(10, "CZ", "CZ", "C", false, true),
-    AtomSpec(11, "OXT", "OXT", "O", true, true),
-    AtomSpec(12, "H", "H", "H", false, true),
-    AtomSpec(13, "H2", "HN2", "H", true, true),
-    AtomSpec(14, "HA", "HA", "H", false, true),
-    AtomSpec(15, "HB2", "1HB", "H", false, true),
-    AtomSpec(16, "HB3", "2HB", "H", false, true),
-    AtomSpec(17, "HD1", "HD1", "H", false, true),
-    AtomSpec(18, "HD2", "HD2", "H", false, true),
-    AtomSpec(19, "HE1", "HE1", "H", false, true),
-    AtomSpec(20, "HE2", "HE2", "H", false, true),
-    AtomSpec(21, "HZ", "HZ", "H", false, true),
-    AtomSpec(22, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "CG", "CG", "C", false, true,0),
+    AtomSpec(6, "CD1", "CD1", "C", false, true,0),
+    AtomSpec(7, "CD2", "CD2", "C", false, true,0),
+    AtomSpec(8, "CE1", "CE1", "C", false, true,0),
+    AtomSpec(9, "CE2", "CE2", "C", false, true,0),
+    AtomSpec(10, "CZ", "CZ", "C", false, true,0),
+    AtomSpec(11, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(12, "H", "H", "H", false, true,0),
+    AtomSpec(13, "H2", "HN2", "H", true, true,0),
+    AtomSpec(14, "HA", "HA", "H", false, true,0),
+    AtomSpec(15, "HB2", "1HB", "H", false, true,0),
+    AtomSpec(16, "HB3", "2HB", "H", false, true,0),
+    AtomSpec(17, "HD1", "HD1", "H", false, true,0),
+    AtomSpec(18, "HD2", "HD2", "H", false, true,0),
+    AtomSpec(19, "HE1", "HE1", "H", false, true,0),
+    AtomSpec(20, "HE2", "HE2", "H", false, true,0),
+    AtomSpec(21, "HZ", "HZ", "H", false, true,0),
+    AtomSpec(22, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<23; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -241,16 +241,16 @@ CompoundPtr MakeGLYCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C2 H5 N O2");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "OXT", "OXT", "O", true, true),
-    AtomSpec(5, "H", "H", "H", false, true),
-    AtomSpec(6, "H2", "HN2", "H", true, true),
-    AtomSpec(7, "HA2", "HA1", "H", false, true),
-    AtomSpec(8, "HA3", "HA2", "H", false, true),
-    AtomSpec(9, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(5, "H", "H", "H", false, true,0),
+    AtomSpec(6, "H2", "HN2", "H", true, true,0),
+    AtomSpec(7, "HA2", "HA1", "H", false, true,0),
+    AtomSpec(8, "HA3", "HA2", "H", false, true,0),
+    AtomSpec(9, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<10; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -274,27 +274,27 @@ CompoundPtr MakeHISCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C6 H10 N3 O2");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "CG", "CG", "C", false, true),
-    AtomSpec(6, "ND1", "ND1", "N", false, true),
-    AtomSpec(7, "CD2", "CD2", "C", false, true),
-    AtomSpec(8, "CE1", "CE1", "C", false, true),
-    AtomSpec(9, "NE2", "NE2", "N", false, true),
-    AtomSpec(10, "OXT", "OXT", "O", true, true),
-    AtomSpec(11, "H", "H", "H", false, true),
-    AtomSpec(12, "H2", "HN2", "H", true, true),
-    AtomSpec(13, "HA", "HA", "H", false, true),
-    AtomSpec(14, "HB2", "1HB", "H", false, true),
-    AtomSpec(15, "HB3", "2HB", "H", false, true),
-    AtomSpec(16, "HD1", "HD1", "H", false, true),
-    AtomSpec(17, "HD2", "HD2", "H", false, true),
-    AtomSpec(18, "HE1", "HE1", "H", false, true),
-    AtomSpec(19, "HE2", "HE2", "H", false, true),
-    AtomSpec(20, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "CG", "CG", "C", false, true,0),
+    AtomSpec(6, "ND1", "ND1", "N", false, true,0),
+    AtomSpec(7, "CD2", "CD2", "C", false, true,0),
+    AtomSpec(8, "CE1", "CE1", "C", false, true,0),
+    AtomSpec(9, "NE2", "NE2", "N", false, true,0),
+    AtomSpec(10, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(11, "H", "H", "H", false, true,0),
+    AtomSpec(12, "H2", "HN2", "H", true, true,0),
+    AtomSpec(13, "HA", "HA", "H", false, true,0),
+    AtomSpec(14, "HB2", "1HB", "H", false, true,0),
+    AtomSpec(15, "HB3", "2HB", "H", false, true,0),
+    AtomSpec(16, "HD1", "HD1", "H", false, true,0),
+    AtomSpec(17, "HD2", "HD2", "H", false, true,0),
+    AtomSpec(18, "HE1", "HE1", "H", false, true,0),
+    AtomSpec(19, "HE2", "HE2", "H", false, true,0),
+    AtomSpec(20, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<21; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -330,28 +330,28 @@ CompoundPtr MakeILECompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C6 H13 N O2");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "CG1", "CG1", "C", false, true),
-    AtomSpec(6, "CG2", "CG2", "C", false, true),
-    AtomSpec(7, "CD1", "CD1", "C", false, true),
-    AtomSpec(8, "OXT", "OXT", "O", true, true),
-    AtomSpec(9, "H", "H", "H", false, true),
-    AtomSpec(10, "H2", "HN2", "H", true, true),
-    AtomSpec(11, "HA", "HA", "H", false, true),
-    AtomSpec(12, "HB", "HB", "H", false, true),
-    AtomSpec(13, "HG12", "1HG1", "H", false, true),
-    AtomSpec(14, "HG13", "2HG1", "H", false, true),
-    AtomSpec(15, "HG21", "1HG2", "H", false, true),
-    AtomSpec(16, "HG22", "2HG2", "H", false, true),
-    AtomSpec(17, "HG23", "3HG2", "H", false, true),
-    AtomSpec(18, "HD11", "1HD1", "H", false, true),
-    AtomSpec(19, "HD12", "2HD1", "H", false, true),
-    AtomSpec(20, "HD13", "3HD1", "H", false, true),
-    AtomSpec(21, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "CG1", "CG1", "C", false, true,0),
+    AtomSpec(6, "CG2", "CG2", "C", false, true,0),
+    AtomSpec(7, "CD1", "CD1", "C", false, true,0),
+    AtomSpec(8, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(9, "H", "H", "H", false, true,0),
+    AtomSpec(10, "H2", "HN2", "H", true, true,0),
+    AtomSpec(11, "HA", "HA", "H", false, true,0),
+    AtomSpec(12, "HB", "HB", "H", false, true,0),
+    AtomSpec(13, "HG12", "1HG1", "H", false, true,0),
+    AtomSpec(14, "HG13", "2HG1", "H", false, true,0),
+    AtomSpec(15, "HG21", "1HG2", "H", false, true,0),
+    AtomSpec(16, "HG22", "2HG2", "H", false, true,0),
+    AtomSpec(17, "HG23", "3HG2", "H", false, true,0),
+    AtomSpec(18, "HD11", "1HD1", "H", false, true,0),
+    AtomSpec(19, "HD12", "2HD1", "H", false, true,0),
+    AtomSpec(20, "HD13", "3HD1", "H", false, true,0),
+    AtomSpec(21, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<22; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -387,31 +387,31 @@ CompoundPtr MakeLYSCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C6 H15 N2 O2");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "CG", "CG", "C", false, true),
-    AtomSpec(6, "CD", "CD", "C", false, true),
-    AtomSpec(7, "CE", "CE", "C", false, true),
-    AtomSpec(8, "NZ", "NZ", "N", false, true),
-    AtomSpec(9, "OXT", "OXT", "O", true, true),
-    AtomSpec(10, "H", "H", "H", false, true),
-    AtomSpec(11, "H2", "HN2", "H", true, true),
-    AtomSpec(12, "HA", "HA", "H", false, true),
-    AtomSpec(13, "HB2", "1HB", "H", false, true),
-    AtomSpec(14, "HB3", "2HB", "H", false, true),
-    AtomSpec(15, "HG2", "1HG", "H", false, true),
-    AtomSpec(16, "HG3", "2HG", "H", false, true),
-    AtomSpec(17, "HD2", "1HD", "H", false, true),
-    AtomSpec(18, "HD3", "2HD", "H", false, true),
-    AtomSpec(19, "HE2", "1HE", "H", false, true),
-    AtomSpec(20, "HE3", "2HE", "H", false, true),
-    AtomSpec(21, "HZ1", "1HZ", "H", false, true),
-    AtomSpec(22, "HZ2", "2HZ", "H", false, true),
-    AtomSpec(23, "HZ3", "3HZ", "H", false, true),
-    AtomSpec(24, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "CG", "CG", "C", false, true,0),
+    AtomSpec(6, "CD", "CD", "C", false, true,0),
+    AtomSpec(7, "CE", "CE", "C", false, true,0),
+    AtomSpec(8, "NZ", "NZ", "N", false, true,0),
+    AtomSpec(9, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(10, "H", "H", "H", false, true,0),
+    AtomSpec(11, "H2", "HN2", "H", true, true,0),
+    AtomSpec(12, "HA", "HA", "H", false, true,0),
+    AtomSpec(13, "HB2", "1HB", "H", false, true,0),
+    AtomSpec(14, "HB3", "2HB", "H", false, true,0),
+    AtomSpec(15, "HG2", "1HG", "H", false, true,0),
+    AtomSpec(16, "HG3", "2HG", "H", false, true,0),
+    AtomSpec(17, "HD2", "1HD", "H", false, true,0),
+    AtomSpec(18, "HD3", "2HD", "H", false, true,0),
+    AtomSpec(19, "HE2", "1HE", "H", false, true,0),
+    AtomSpec(20, "HE3", "2HE", "H", false, true,0),
+    AtomSpec(21, "HZ1", "1HZ", "H", false, true,0),
+    AtomSpec(22, "HZ2", "2HZ", "H", false, true,0),
+    AtomSpec(23, "HZ3", "3HZ", "H", false, true,0),
+    AtomSpec(24, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<25; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -450,28 +450,28 @@ CompoundPtr MakeLEUCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C6 H13 N O2");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "CG", "CG", "C", false, true),
-    AtomSpec(6, "CD1", "CD1", "C", false, true),
-    AtomSpec(7, "CD2", "CD2", "C", false, true),
-    AtomSpec(8, "OXT", "OXT", "O", true, true),
-    AtomSpec(9, "H", "H", "H", false, true),
-    AtomSpec(10, "H2", "HN2", "H", true, true),
-    AtomSpec(11, "HA", "HA", "H", false, true),
-    AtomSpec(12, "HB2", "1HB", "H", false, true),
-    AtomSpec(13, "HB3", "2HB", "H", false, true),
-    AtomSpec(14, "HG", "HG", "H", false, true),
-    AtomSpec(15, "HD11", "1HD1", "H", false, true),
-    AtomSpec(16, "HD12", "2HD1", "H", false, true),
-    AtomSpec(17, "HD13", "3HD1", "H", false, true),
-    AtomSpec(18, "HD21", "1HD2", "H", false, true),
-    AtomSpec(19, "HD22", "2HD2", "H", false, true),
-    AtomSpec(20, "HD23", "3HD2", "H", false, true),
-    AtomSpec(21, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "CG", "CG", "C", false, true,0),
+    AtomSpec(6, "CD1", "CD1", "C", false, true,0),
+    AtomSpec(7, "CD2", "CD2", "C", false, true,0),
+    AtomSpec(8, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(9, "H", "H", "H", false, true,0),
+    AtomSpec(10, "H2", "HN2", "H", true, true,0),
+    AtomSpec(11, "HA", "HA", "H", false, true,0),
+    AtomSpec(12, "HB2", "1HB", "H", false, true,0),
+    AtomSpec(13, "HB3", "2HB", "H", false, true,0),
+    AtomSpec(14, "HG", "HG", "H", false, true,0),
+    AtomSpec(15, "HD11", "1HD1", "H", false, true,0),
+    AtomSpec(16, "HD12", "2HD1", "H", false, true,0),
+    AtomSpec(17, "HD13", "3HD1", "H", false, true,0),
+    AtomSpec(18, "HD21", "1HD2", "H", false, true,0),
+    AtomSpec(19, "HD22", "2HD2", "H", false, true,0),
+    AtomSpec(20, "HD23", "3HD2", "H", false, true,0),
+    AtomSpec(21, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<22; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -507,26 +507,26 @@ CompoundPtr MakeMETCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C5 H11 N O2 S");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "CG", "CG", "C", false, true),
-    AtomSpec(6, "SD", "SD", "S", false, true),
-    AtomSpec(7, "CE", "CE", "C", false, true),
-    AtomSpec(8, "OXT", "OXT", "O", true, true),
-    AtomSpec(9, "H", "H", "H", false, true),
-    AtomSpec(10, "H2", "HN2", "H", true, true),
-    AtomSpec(11, "HA", "HA", "H", false, true),
-    AtomSpec(12, "HB2", "1HB", "H", false, true),
-    AtomSpec(13, "HB3", "2HB", "H", false, true),
-    AtomSpec(14, "HG2", "1HG", "H", false, true),
-    AtomSpec(15, "HG3", "2HG", "H", false, true),
-    AtomSpec(16, "HE1", "1HE", "H", false, true),
-    AtomSpec(17, "HE2", "2HE", "H", false, true),
-    AtomSpec(18, "HE3", "3HE", "H", false, true),
-    AtomSpec(19, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "CG", "CG", "C", false, true,0),
+    AtomSpec(6, "SD", "SD", "S", false, true,0),
+    AtomSpec(7, "CE", "CE", "C", false, true,0),
+    AtomSpec(8, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(9, "H", "H", "H", false, true,0),
+    AtomSpec(10, "H2", "HN2", "H", true, true,0),
+    AtomSpec(11, "HA", "HA", "H", false, true,0),
+    AtomSpec(12, "HB2", "1HB", "H", false, true,0),
+    AtomSpec(13, "HB3", "2HB", "H", false, true,0),
+    AtomSpec(14, "HG2", "1HG", "H", false, true,0),
+    AtomSpec(15, "HG3", "2HG", "H", false, true,0),
+    AtomSpec(16, "HE1", "1HE", "H", false, true,0),
+    AtomSpec(17, "HE2", "2HE", "H", false, true,0),
+    AtomSpec(18, "HE3", "3HE", "H", false, true,0),
+    AtomSpec(19, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<20; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -560,23 +560,23 @@ CompoundPtr MakeASNCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C4 H8 N2 O3");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "CG", "CG", "C", false, true),
-    AtomSpec(6, "OD1", "OD1", "O", false, true),
-    AtomSpec(7, "ND2", "ND2", "N", true, true),
-    AtomSpec(8, "OXT", "OXT", "O", true, true),
-    AtomSpec(9, "H", "H", "H", false, true),
-    AtomSpec(10, "H2", "HN2", "H", true, true),
-    AtomSpec(11, "HA", "HA", "H", false, true),
-    AtomSpec(12, "HB2", "HB1", "H", false, true),
-    AtomSpec(13, "HB3", "HB2", "H", false, true),
-    AtomSpec(14, "HD21", "HD21", "H", true, true),
-    AtomSpec(15, "HD22", "HD22", "H", true, true),
-    AtomSpec(16, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "CG", "CG", "C", false, true,0),
+    AtomSpec(6, "OD1", "OD1", "O", false, true,0),
+    AtomSpec(7, "ND2", "ND2", "N", true, true,0),
+    AtomSpec(8, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(9, "H", "H", "H", false, true,0),
+    AtomSpec(10, "H2", "HN2", "H", true, true,0),
+    AtomSpec(11, "HA", "HA", "H", false, true,0),
+    AtomSpec(12, "HB2", "HB1", "H", false, true,0),
+    AtomSpec(13, "HB3", "HB2", "H", false, true,0),
+    AtomSpec(14, "HD21", "HD21", "H", true, true,0),
+    AtomSpec(15, "HD22", "HD22", "H", true, true,0),
+    AtomSpec(16, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<17; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -607,23 +607,23 @@ CompoundPtr MakePROCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C5 H9 N O2");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "CG", "CG", "C", false, true),
-    AtomSpec(6, "CD", "CD", "C", false, true),
-    AtomSpec(7, "OXT", "OXT", "O", true, true),
-    AtomSpec(8, "H", "HT1", "H", true, true),
-    AtomSpec(9, "HA", "HA", "H", false, true),
-    AtomSpec(10, "HB2", "1HB", "H", false, true),
-    AtomSpec(11, "HB3", "2HB", "H", false, true),
-    AtomSpec(12, "HG2", "1HG", "H", false, true),
-    AtomSpec(13, "HG3", "2HG", "H", false, true),
-    AtomSpec(14, "HD2", "1HD", "H", false, true),
-    AtomSpec(15, "HD3", "2HD", "H", false, true),
-    AtomSpec(16, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "CG", "CG", "C", false, true,0),
+    AtomSpec(6, "CD", "CD", "C", false, true,0),
+    AtomSpec(7, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(8, "H", "HT1", "H", true, true,0),
+    AtomSpec(9, "HA", "HA", "H", false, true,0),
+    AtomSpec(10, "HB2", "1HB", "H", false, true,0),
+    AtomSpec(11, "HB3", "2HB", "H", false, true,0),
+    AtomSpec(12, "HG2", "1HG", "H", false, true,0),
+    AtomSpec(13, "HG3", "2HG", "H", false, true,0),
+    AtomSpec(14, "HD2", "1HD", "H", false, true,0),
+    AtomSpec(15, "HD3", "2HD", "H", false, true,0),
+    AtomSpec(16, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<17; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -655,26 +655,26 @@ CompoundPtr MakeGLNCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C5 H10 N2 O3");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "CG", "CG", "C", false, true),
-    AtomSpec(6, "CD", "CD", "C", false, true),
-    AtomSpec(7, "OE1", "OE1", "O", false, true),
-    AtomSpec(8, "NE2", "NE2", "N", false, true),
-    AtomSpec(9, "OXT", "OXT", "O", true, true),
-    AtomSpec(10, "H", "H", "H", false, true),
-    AtomSpec(11, "H2", "HN2", "H", true, true),
-    AtomSpec(12, "HA", "HA", "H", false, true),
-    AtomSpec(13, "HB2", "1HB", "H", false, true),
-    AtomSpec(14, "HB3", "2HB", "H", false, true),
-    AtomSpec(15, "HG2", "1HG", "H", false, true),
-    AtomSpec(16, "HG3", "2HG", "H", false, true),
-    AtomSpec(17, "HE21", "1HE2", "H", false, true),
-    AtomSpec(18, "HE22", "2HE2", "H", false, true),
-    AtomSpec(19, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "CG", "CG", "C", false, true,0),
+    AtomSpec(6, "CD", "CD", "C", false, true,0),
+    AtomSpec(7, "OE1", "OE1", "O", false, true,0),
+    AtomSpec(8, "NE2", "NE2", "N", false, true,0),
+    AtomSpec(9, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(10, "H", "H", "H", false, true,0),
+    AtomSpec(11, "H2", "HN2", "H", true, true,0),
+    AtomSpec(12, "HA", "HA", "H", false, true,0),
+    AtomSpec(13, "HB2", "1HB", "H", false, true,0),
+    AtomSpec(14, "HB3", "2HB", "H", false, true,0),
+    AtomSpec(15, "HG2", "1HG", "H", false, true,0),
+    AtomSpec(16, "HG3", "2HG", "H", false, true,0),
+    AtomSpec(17, "HE21", "1HE2", "H", false, true,0),
+    AtomSpec(18, "HE22", "2HE2", "H", false, true,0),
+    AtomSpec(19, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<20; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -708,33 +708,33 @@ CompoundPtr MakeARGCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C6 H15 N4 O2");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "CG", "CG", "C", false, true),
-    AtomSpec(6, "CD", "CD", "C", false, true),
-    AtomSpec(7, "NE", "NE", "N", false, true),
-    AtomSpec(8, "CZ", "CZ", "C", false, true),
-    AtomSpec(9, "NH1", "NH1", "N", false, true),
-    AtomSpec(10, "NH2", "NH2", "N", false, true),
-    AtomSpec(11, "OXT", "OXT", "O", true, true),
-    AtomSpec(12, "H", "H", "H", false, true),
-    AtomSpec(13, "H2", "HN2", "H", true, true),
-    AtomSpec(14, "HA", "HA", "H", false, true),
-    AtomSpec(15, "HB2", "1HB", "H", false, true),
-    AtomSpec(16, "HB3", "2HB", "H", false, true),
-    AtomSpec(17, "HG2", "1HG", "H", false, true),
-    AtomSpec(18, "HG3", "2HG", "H", false, true),
-    AtomSpec(19, "HD2", "1HD", "H", false, true),
-    AtomSpec(20, "HD3", "2HD", "H", false, true),
-    AtomSpec(21, "HE", "HE", "H", false, true),
-    AtomSpec(22, "HH11", "1HH1", "H", false, true),
-    AtomSpec(23, "HH12", "2HH1", "H", false, true),
-    AtomSpec(24, "HH21", "1HH2", "H", false, true),
-    AtomSpec(25, "HH22", "2HH2", "H", false, true),
-    AtomSpec(26, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "CG", "CG", "C", false, true,0),
+    AtomSpec(6, "CD", "CD", "C", false, true,0),
+    AtomSpec(7, "NE", "NE", "N", false, true,0),
+    AtomSpec(8, "CZ", "CZ", "C", false, true,0),
+    AtomSpec(9, "NH1", "NH1", "N", false, true,0),
+    AtomSpec(10, "NH2", "NH2", "N", false, true,0),
+    AtomSpec(11, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(12, "H", "H", "H", false, true,0),
+    AtomSpec(13, "H2", "HN2", "H", true, true,0),
+    AtomSpec(14, "HA", "HA", "H", false, true,0),
+    AtomSpec(15, "HB2", "1HB", "H", false, true,0),
+    AtomSpec(16, "HB3", "2HB", "H", false, true,0),
+    AtomSpec(17, "HG2", "1HG", "H", false, true,0),
+    AtomSpec(18, "HG3", "2HG", "H", false, true,0),
+    AtomSpec(19, "HD2", "1HD", "H", false, true,0),
+    AtomSpec(20, "HD3", "2HD", "H", false, true,0),
+    AtomSpec(21, "HE", "HE", "H", false, true,0),
+    AtomSpec(22, "HH11", "1HH1", "H", false, true,0),
+    AtomSpec(23, "HH12", "2HH1", "H", false, true,0),
+    AtomSpec(24, "HH21", "1HH2", "H", false, true,0),
+    AtomSpec(25, "HH22", "2HH2", "H", false, true,0),
+    AtomSpec(26, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<27; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -775,20 +775,20 @@ CompoundPtr MakeSERCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C3 H7 N O3");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "OG", "OG", "O", false, true),
-    AtomSpec(6, "OXT", "OXT", "O", true, true),
-    AtomSpec(7, "H", "H", "H", false, true),
-    AtomSpec(8, "H2", "HN2", "H", true, true),
-    AtomSpec(9, "HA", "HA", "H", false, true),
-    AtomSpec(10, "HB2", "1HB", "H", false, true),
-    AtomSpec(11, "HB3", "2HB", "H", false, true),
-    AtomSpec(12, "HG", "HG", "H", false, true),
-    AtomSpec(13, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "OG", "OG", "O", false, true,0),
+    AtomSpec(6, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(7, "H", "H", "H", false, true,0),
+    AtomSpec(8, "H2", "HN2", "H", true, true,0),
+    AtomSpec(9, "HA", "HA", "H", false, true,0),
+    AtomSpec(10, "HB2", "1HB", "H", false, true,0),
+    AtomSpec(11, "HB3", "2HB", "H", false, true,0),
+    AtomSpec(12, "HG", "HG", "H", false, true,0),
+    AtomSpec(13, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<14; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -816,23 +816,23 @@ CompoundPtr MakeTHRCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C4 H9 N O3");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "OG1", "OG1", "O", false, true),
-    AtomSpec(6, "CG2", "CG2", "C", false, true),
-    AtomSpec(7, "OXT", "OXT", "O", true, true),
-    AtomSpec(8, "H", "H", "H", false, true),
-    AtomSpec(9, "H2", "HN2", "H", true, true),
-    AtomSpec(10, "HA", "HA", "H", false, true),
-    AtomSpec(11, "HB", "HB", "H", false, true),
-    AtomSpec(12, "HG1", "HG1", "H", false, true),
-    AtomSpec(13, "HG21", "1HG2", "H", false, true),
-    AtomSpec(14, "HG22", "2HG2", "H", false, true),
-    AtomSpec(15, "HG23", "3HG2", "H", false, true),
-    AtomSpec(16, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "OG1", "OG1", "O", false, true,0),
+    AtomSpec(6, "CG2", "CG2", "C", false, true,0),
+    AtomSpec(7, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(8, "H", "H", "H", false, true,0),
+    AtomSpec(9, "H2", "HN2", "H", true, true,0),
+    AtomSpec(10, "HA", "HA", "H", false, true,0),
+    AtomSpec(11, "HB", "HB", "H", false, true,0),
+    AtomSpec(12, "HG1", "HG1", "H", false, true,0),
+    AtomSpec(13, "HG21", "1HG2", "H", false, true,0),
+    AtomSpec(14, "HG22", "2HG2", "H", false, true,0),
+    AtomSpec(15, "HG23", "3HG2", "H", false, true,0),
+    AtomSpec(16, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<17; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -863,25 +863,25 @@ CompoundPtr MakeVALCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C5 H11 N O2");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "CG1", "CG1", "C", false, true),
-    AtomSpec(6, "CG2", "CG2", "C", false, true),
-    AtomSpec(7, "OXT", "OXT", "O", true, true),
-    AtomSpec(8, "H", "H", "H", false, true),
-    AtomSpec(9, "H2", "HN2", "H", true, true),
-    AtomSpec(10, "HA", "HA", "H", false, true),
-    AtomSpec(11, "HB", "HB", "H", false, true),
-    AtomSpec(12, "HG11", "1HG1", "H", false, true),
-    AtomSpec(13, "HG12", "2HG1", "H", false, true),
-    AtomSpec(14, "HG13", "3HG1", "H", false, true),
-    AtomSpec(15, "HG21", "1HG2", "H", false, true),
-    AtomSpec(16, "HG22", "2HG2", "H", false, true),
-    AtomSpec(17, "HG23", "3HG2", "H", false, true),
-    AtomSpec(18, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "CG1", "CG1", "C", false, true,0),
+    AtomSpec(6, "CG2", "CG2", "C", false, true,0),
+    AtomSpec(7, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(8, "H", "H", "H", false, true,0),
+    AtomSpec(9, "H2", "HN2", "H", true, true,0),
+    AtomSpec(10, "HA", "HA", "H", false, true,0),
+    AtomSpec(11, "HB", "HB", "H", false, true,0),
+    AtomSpec(12, "HG11", "1HG1", "H", false, true,0),
+    AtomSpec(13, "HG12", "2HG1", "H", false, true,0),
+    AtomSpec(14, "HG13", "3HG1", "H", false, true,0),
+    AtomSpec(15, "HG21", "1HG2", "H", false, true,0),
+    AtomSpec(16, "HG22", "2HG2", "H", false, true,0),
+    AtomSpec(17, "HG23", "3HG2", "H", false, true,0),
+    AtomSpec(18, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<19; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -914,33 +914,33 @@ CompoundPtr MakeTRPCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C11 H12 N2 O2");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "CG", "CG", "C", false, true),
-    AtomSpec(6, "CD1", "CD1", "C", false, true),
-    AtomSpec(7, "CD2", "CD2", "C", false, true),
-    AtomSpec(8, "NE1", "NE1", "N", false, true),
-    AtomSpec(9, "CE2", "CE2", "C", false, true),
-    AtomSpec(10, "CE3", "CE3", "C", false, true),
-    AtomSpec(11, "CZ2", "CZ2", "C", false, true),
-    AtomSpec(12, "CZ3", "CZ3", "C", false, true),
-    AtomSpec(13, "CH2", "CH2", "C", false, true),
-    AtomSpec(14, "OXT", "OXT", "O", true, true),
-    AtomSpec(15, "H", "H", "H", false, true),
-    AtomSpec(16, "H2", "HN2", "H", true, true),
-    AtomSpec(17, "HA", "HA", "H", false, true),
-    AtomSpec(18, "HB2", "1HB", "H", false, true),
-    AtomSpec(19, "HB3", "2HB", "H", false, true),
-    AtomSpec(20, "HD1", "HD1", "H", false, true),
-    AtomSpec(21, "HE1", "HE1", "H", false, true),
-    AtomSpec(22, "HE3", "HE3", "H", false, true),
-    AtomSpec(23, "HZ2", "HZ2", "H", false, true),
-    AtomSpec(24, "HZ3", "HZ3", "H", false, true),
-    AtomSpec(25, "HH2", "HH2", "H", false, true),
-    AtomSpec(26, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "CG", "CG", "C", false, true,0),
+    AtomSpec(6, "CD1", "CD1", "C", false, true,0),
+    AtomSpec(7, "CD2", "CD2", "C", false, true,0),
+    AtomSpec(8, "NE1", "NE1", "N", false, true,0),
+    AtomSpec(9, "CE2", "CE2", "C", false, true,0),
+    AtomSpec(10, "CE3", "CE3", "C", false, true,0),
+    AtomSpec(11, "CZ2", "CZ2", "C", false, true,0),
+    AtomSpec(12, "CZ3", "CZ3", "C", false, true,0),
+    AtomSpec(13, "CH2", "CH2", "C", false, true,0),
+    AtomSpec(14, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(15, "H", "H", "H", false, true,0),
+    AtomSpec(16, "H2", "HN2", "H", true, true,0),
+    AtomSpec(17, "HA", "HA", "H", false, true,0),
+    AtomSpec(18, "HB2", "1HB", "H", false, true,0),
+    AtomSpec(19, "HB3", "2HB", "H", false, true,0),
+    AtomSpec(20, "HD1", "HD1", "H", false, true,0),
+    AtomSpec(21, "HE1", "HE1", "H", false, true,0),
+    AtomSpec(22, "HE3", "HE3", "H", false, true,0),
+    AtomSpec(23, "HZ2", "HZ2", "H", false, true,0),
+    AtomSpec(24, "HZ3", "HZ3", "H", false, true,0),
+    AtomSpec(25, "HH2", "HH2", "H", false, true,0),
+    AtomSpec(26, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<27; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -983,30 +983,30 @@ CompoundPtr MakeTYRCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C9 H11 N O3");
   AtomSpec atoms[] = {
-    AtomSpec(0, "N", "N", "N", false, true),
-    AtomSpec(1, "CA", "CA", "C", false, true),
-    AtomSpec(2, "C", "C", "C", false, true),
-    AtomSpec(3, "O", "O", "O", false, true),
-    AtomSpec(4, "CB", "CB", "C", false, true),
-    AtomSpec(5, "CG", "CG", "C", false, true),
-    AtomSpec(6, "CD1", "CD1", "C", false, true),
-    AtomSpec(7, "CD2", "CD2", "C", false, true),
-    AtomSpec(8, "CE1", "CE1", "C", false, true),
-    AtomSpec(9, "CE2", "CE2", "C", false, true),
-    AtomSpec(10, "CZ", "CZ", "C", false, true),
-    AtomSpec(11, "OH", "OH", "O", false, true),
-    AtomSpec(12, "OXT", "OXT", "O", true, true),
-    AtomSpec(13, "H", "H", "H", false, true),
-    AtomSpec(14, "H2", "HN2", "H", true, true),
-    AtomSpec(15, "HA", "HA", "H", false, true),
-    AtomSpec(16, "HB2", "1HB", "H", false, true),
-    AtomSpec(17, "HB3", "2HB", "H", false, true),
-    AtomSpec(18, "HD1", "HD1", "H", false, true),
-    AtomSpec(19, "HD2", "HD2", "H", false, true),
-    AtomSpec(20, "HE1", "HE1", "H", false, true),
-    AtomSpec(21, "HE2", "HE2", "H", false, true),
-    AtomSpec(22, "HH", "HH", "H", false, true),
-    AtomSpec(23, "HXT", "HXT", "H", true, true)
+    AtomSpec(0, "N", "N", "N", false, true,0),
+    AtomSpec(1, "CA", "CA", "C", false, true,0),
+    AtomSpec(2, "C", "C", "C", false, true,0),
+    AtomSpec(3, "O", "O", "O", false, true,0),
+    AtomSpec(4, "CB", "CB", "C", false, true,0),
+    AtomSpec(5, "CG", "CG", "C", false, true,0),
+    AtomSpec(6, "CD1", "CD1", "C", false, true,0),
+    AtomSpec(7, "CD2", "CD2", "C", false, true,0),
+    AtomSpec(8, "CE1", "CE1", "C", false, true,0),
+    AtomSpec(9, "CE2", "CE2", "C", false, true,0),
+    AtomSpec(10, "CZ", "CZ", "C", false, true,0),
+    AtomSpec(11, "OH", "OH", "O", false, true,0),
+    AtomSpec(12, "OXT", "OXT", "O", true, true,0),
+    AtomSpec(13, "H", "H", "H", false, true,0),
+    AtomSpec(14, "H2", "HN2", "H", true, true,0),
+    AtomSpec(15, "HA", "HA", "H", false, true,0),
+    AtomSpec(16, "HB2", "1HB", "H", false, true,0),
+    AtomSpec(17, "HB3", "2HB", "H", false, true,0),
+    AtomSpec(18, "HD1", "HD1", "H", false, true,0),
+    AtomSpec(19, "HD2", "HD2", "H", false, true,0),
+    AtomSpec(20, "HE1", "HE1", "H", false, true,0),
+    AtomSpec(21, "HE2", "HE2", "H", false, true,0),
+    AtomSpec(22, "HH", "HH", "H", false, true,0),
+    AtomSpec(23, "HXT", "HXT", "H", true, true,0)
   };
   for (int i=0; i<24; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -1045,44 +1045,44 @@ CompoundPtr MakeGCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C10 H14 N5 O8 P");
   AtomSpec atoms[] = {
-    AtomSpec(0, "OP3", "O3P", "O", true, true),
-    AtomSpec(1, "P", "P", "P", false, true),
-    AtomSpec(2, "OP1", "O1P", "O", false, true),
-    AtomSpec(3, "OP2", "O2P", "O", false, true),
-    AtomSpec(4, "O5'", "O5*", "O", false, true),
-    AtomSpec(5, "C5'", "C5*", "C", false, true),
-    AtomSpec(6, "C4'", "C4*", "C", false, true),
-    AtomSpec(7, "O4'", "O4*", "O", false, true),
-    AtomSpec(8, "C3'", "C3*", "C", false, true),
-    AtomSpec(9, "O3'", "O3*", "O", false, true),
-    AtomSpec(10, "C2'", "C2*", "C", false, true),
-    AtomSpec(11, "O2'", "O2*", "O", false, true),
-    AtomSpec(12, "C1'", "C1*", "C", false, true),
-    AtomSpec(13, "N9", "N9", "N", false, true),
-    AtomSpec(14, "C8", "C8", "C", false, true),
-    AtomSpec(15, "N7", "N7", "N", false, true),
-    AtomSpec(16, "C5", "C5", "C", false, true),
-    AtomSpec(17, "C6", "C6", "C", false, true),
-    AtomSpec(18, "O6", "O6", "O", false, true),
-    AtomSpec(19, "N1", "N1", "N", false, true),
-    AtomSpec(20, "C2", "C2", "C", false, true),
-    AtomSpec(21, "N2", "N2", "N", false, true),
-    AtomSpec(22, "N3", "N3", "N", false, true),
-    AtomSpec(23, "C4", "C4", "C", false, true),
-    AtomSpec(24, "HOP3", "3HOP", "H", false, true),
-    AtomSpec(25, "HOP2", "2HOP", "H", false, true),
-    AtomSpec(26, "H5'", "1H5*", "H", false, true),
-    AtomSpec(27, "H5''", "2H5*", "H", false, true),
-    AtomSpec(28, "H4'", "H4*", "H", false, true),
-    AtomSpec(29, "H3'", "H3*", "H", false, true),
-    AtomSpec(30, "HO3'", "H3T", "H", true, true),
-    AtomSpec(31, "H2'", "H2*", "H", false, true),
-    AtomSpec(32, "HO2'", "2HO*", "H", false, true),
-    AtomSpec(33, "H1'", "H1*", "H", false, true),
-    AtomSpec(34, "H8", "H8", "H", false, true),
-    AtomSpec(35, "H1", "H1", "H", false, true),
-    AtomSpec(36, "H21", "1H2", "H", false, true),
-    AtomSpec(37, "H22", "2H2", "H", false, true)
+    AtomSpec(0, "OP3", "O3P", "O", true, true,0),
+    AtomSpec(1, "P", "P", "P", false, true,0),
+    AtomSpec(2, "OP1", "O1P", "O", false, true,0),
+    AtomSpec(3, "OP2", "O2P", "O", false, true,0),
+    AtomSpec(4, "O5'", "O5*", "O", false, true,0),
+    AtomSpec(5, "C5'", "C5*", "C", false, true,0),
+    AtomSpec(6, "C4'", "C4*", "C", false, true,0),
+    AtomSpec(7, "O4'", "O4*", "O", false, true,0),
+    AtomSpec(8, "C3'", "C3*", "C", false, true,0),
+    AtomSpec(9, "O3'", "O3*", "O", false, true,0),
+    AtomSpec(10, "C2'", "C2*", "C", false, true,0),
+    AtomSpec(11, "O2'", "O2*", "O", false, true,0),
+    AtomSpec(12, "C1'", "C1*", "C", false, true,0),
+    AtomSpec(13, "N9", "N9", "N", false, true,0),
+    AtomSpec(14, "C8", "C8", "C", false, true,0),
+    AtomSpec(15, "N7", "N7", "N", false, true,0),
+    AtomSpec(16, "C5", "C5", "C", false, true,0),
+    AtomSpec(17, "C6", "C6", "C", false, true,0),
+    AtomSpec(18, "O6", "O6", "O", false, true,0),
+    AtomSpec(19, "N1", "N1", "N", false, true,0),
+    AtomSpec(20, "C2", "C2", "C", false, true,0),
+    AtomSpec(21, "N2", "N2", "N", false, true,0),
+    AtomSpec(22, "N3", "N3", "N", false, true,0),
+    AtomSpec(23, "C4", "C4", "C", false, true,0),
+    AtomSpec(24, "HOP3", "3HOP", "H", false, true,0),
+    AtomSpec(25, "HOP2", "2HOP", "H", false, true,0),
+    AtomSpec(26, "H5'", "1H5*", "H", false, true,0),
+    AtomSpec(27, "H5''", "2H5*", "H", false, true,0),
+    AtomSpec(28, "H4'", "H4*", "H", false, true,0),
+    AtomSpec(29, "H3'", "H3*", "H", false, true,0),
+    AtomSpec(30, "HO3'", "H3T", "H", true, true,0),
+    AtomSpec(31, "H2'", "H2*", "H", false, true,0),
+    AtomSpec(32, "HO2'", "2HO*", "H", false, true,0),
+    AtomSpec(33, "H1'", "H1*", "H", false, true,0),
+    AtomSpec(34, "H8", "H8", "H", false, true,0),
+    AtomSpec(35, "H1", "H1", "H", false, true,0),
+    AtomSpec(36, "H21", "1H2", "H", false, true,0),
+    AtomSpec(37, "H22", "2H2", "H", false, true,0)
   };
   for (int i=0; i<38; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -1137,42 +1137,42 @@ CompoundPtr MakeTCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C10 H15 N2 O8 P");
   AtomSpec atoms[] = {
-    AtomSpec(0, "OP3", "O3P", "O", true, true),
-    AtomSpec(1, "P", "P", "P", false, true),
-    AtomSpec(2, "OP1", "O1P", "O", false, true),
-    AtomSpec(3, "OP2", "O2P", "O", false, true),
-    AtomSpec(4, "O5'", "O5*", "O", false, true),
-    AtomSpec(5, "C5'", "C5*", "C", false, true),
-    AtomSpec(6, "C4'", "C4*", "C", false, true),
-    AtomSpec(7, "O4'", "O4*", "O", false, true),
-    AtomSpec(8, "C3'", "C3*", "C", false, true),
-    AtomSpec(9, "O3'", "O3*", "O", false, true),
-    AtomSpec(10, "C2'", "C2*", "C", false, true),
-    AtomSpec(11, "C1'", "C1*", "C", false, true),
-    AtomSpec(12, "N1", "N1", "N", false, true),
-    AtomSpec(13, "C2", "C2", "C", false, true),
-    AtomSpec(14, "O2", "O2", "O", false, true),
-    AtomSpec(15, "N3", "N3", "N", false, true),
-    AtomSpec(16, "C4", "C4", "C", false, true),
-    AtomSpec(17, "O4", "O4", "O", false, true),
-    AtomSpec(18, "C5", "C5", "C", false, true),
-    AtomSpec(19, "C7", "C5M", "C", false, true),
-    AtomSpec(20, "C6", "C6", "C", false, true),
-    AtomSpec(21, "HOP3", "3HOP", "H", false, true),
-    AtomSpec(22, "HOP2", "2HOP", "H", false, true),
-    AtomSpec(23, "H5'", "1H5*", "H", false, true),
-    AtomSpec(24, "H5''", "2H5*", "H", false, true),
-    AtomSpec(25, "H4'", "H4*", "H", false, true),
-    AtomSpec(26, "H3'", "H3*", "H", false, true),
-    AtomSpec(27, "HO3'", "H3T", "H", true, true),
-    AtomSpec(28, "H2'", "1H2*", "H", false, true),
-    AtomSpec(29, "H2''", "2H2*", "H", false, true),
-    AtomSpec(30, "H1'", "H1*", "H", false, true),
-    AtomSpec(31, "H3", "H3", "H", false, true),
-    AtomSpec(32, "H71", "1H5M", "H", false, true),
-    AtomSpec(33, "H72", "2H5M", "H", false, true),
-    AtomSpec(34, "H73", "3H5M", "H", false, true),
-    AtomSpec(35, "H6", "H6", "H", false, true)
+    AtomSpec(0, "OP3", "O3P", "O", true, true,0),
+    AtomSpec(1, "P", "P", "P", false, true,0),
+    AtomSpec(2, "OP1", "O1P", "O", false, true,0),
+    AtomSpec(3, "OP2", "O2P", "O", false, true,0),
+    AtomSpec(4, "O5'", "O5*", "O", false, true,0),
+    AtomSpec(5, "C5'", "C5*", "C", false, true,0),
+    AtomSpec(6, "C4'", "C4*", "C", false, true,0),
+    AtomSpec(7, "O4'", "O4*", "O", false, true,0),
+    AtomSpec(8, "C3'", "C3*", "C", false, true,0),
+    AtomSpec(9, "O3'", "O3*", "O", false, true,0),
+    AtomSpec(10, "C2'", "C2*", "C", false, true,0),
+    AtomSpec(11, "C1'", "C1*", "C", false, true,0),
+    AtomSpec(12, "N1", "N1", "N", false, true,0),
+    AtomSpec(13, "C2", "C2", "C", false, true,0),
+    AtomSpec(14, "O2", "O2", "O", false, true,0),
+    AtomSpec(15, "N3", "N3", "N", false, true,0),
+    AtomSpec(16, "C4", "C4", "C", false, true,0),
+    AtomSpec(17, "O4", "O4", "O", false, true,0),
+    AtomSpec(18, "C5", "C5", "C", false, true,0),
+    AtomSpec(19, "C7", "C5M", "C", false, true,0),
+    AtomSpec(20, "C6", "C6", "C", false, true,0),
+    AtomSpec(21, "HOP3", "3HOP", "H", false, true,0),
+    AtomSpec(22, "HOP2", "2HOP", "H", false, true,0),
+    AtomSpec(23, "H5'", "1H5*", "H", false, true,0),
+    AtomSpec(24, "H5''", "2H5*", "H", false, true,0),
+    AtomSpec(25, "H4'", "H4*", "H", false, true,0),
+    AtomSpec(26, "H3'", "H3*", "H", false, true,0),
+    AtomSpec(27, "HO3'", "H3T", "H", true, true,0),
+    AtomSpec(28, "H2'", "1H2*", "H", false, true,0),
+    AtomSpec(29, "H2''", "2H2*", "H", false, true,0),
+    AtomSpec(30, "H1'", "H1*", "H", false, true,0),
+    AtomSpec(31, "H3", "H3", "H", false, true,0),
+    AtomSpec(32, "H71", "1H5M", "H", false, true,0),
+    AtomSpec(33, "H72", "2H5M", "H", false, true,0),
+    AtomSpec(34, "H73", "3H5M", "H", false, true,0),
+    AtomSpec(35, "H6", "H6", "H", false, true,0)
   };
   for (int i=0; i<36; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -1224,43 +1224,43 @@ CompoundPtr MakeACompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C10 H14 N5 O7 P");
   AtomSpec atoms[] = {
-    AtomSpec(0, "OP3", "O3P", "O", true, true),
-    AtomSpec(1, "P", "P", "P", false, true),
-    AtomSpec(2, "OP1", "O1P", "O", false, true),
-    AtomSpec(3, "OP2", "O2P", "O", false, true),
-    AtomSpec(4, "O5'", "O5*", "O", false, true),
-    AtomSpec(5, "C5'", "C5*", "C", false, true),
-    AtomSpec(6, "C4'", "C4*", "C", false, true),
-    AtomSpec(7, "O4'", "O4*", "O", false, true),
-    AtomSpec(8, "C3'", "C3*", "C", false, true),
-    AtomSpec(9, "O3'", "O3*", "O", false, true),
-    AtomSpec(10, "C2'", "C2*", "C", false, true),
-    AtomSpec(11, "O2'", "O2*", "O", false, true),
-    AtomSpec(12, "C1'", "C1*", "C", false, true),
-    AtomSpec(13, "N9", "N9", "N", false, true),
-    AtomSpec(14, "C8", "C8", "C", false, true),
-    AtomSpec(15, "N7", "N7", "N", false, true),
-    AtomSpec(16, "C5", "C5", "C", false, true),
-    AtomSpec(17, "C6", "C6", "C", false, true),
-    AtomSpec(18, "N6", "N6", "N", false, true),
-    AtomSpec(19, "N1", "N1", "N", false, true),
-    AtomSpec(20, "C2", "C2", "C", false, true),
-    AtomSpec(21, "N3", "N3", "N", false, true),
-    AtomSpec(22, "C4", "C4", "C", false, true),
-    AtomSpec(23, "HOP3", "3HOP", "H", false, true),
-    AtomSpec(24, "HOP2", "2HOP", "H", false, true),
-    AtomSpec(25, "H5'", "1H5*", "H", false, true),
-    AtomSpec(26, "H5''", "2H5*", "H", false, true),
-    AtomSpec(27, "H4'", "H4*", "H", false, true),
-    AtomSpec(28, "H3'", "H3*", "H", false, true),
-    AtomSpec(29, "HO3'", "H3T", "H", true, true),
-    AtomSpec(30, "H2'", "H2*", "H", false, true),
-    AtomSpec(31, "HO2'", "2HO*", "H", false, true),
-    AtomSpec(32, "H1'", "H1*", "H", false, true),
-    AtomSpec(33, "H8", "H8", "H", false, true),
-    AtomSpec(34, "H61", "1H6", "H", false, true),
-    AtomSpec(35, "H62", "2H6", "H", false, true),
-    AtomSpec(36, "H2", "H2", "H", false, true)
+    AtomSpec(0, "OP3", "O3P", "O", true, true,0),
+    AtomSpec(1, "P", "P", "P", false, true,0),
+    AtomSpec(2, "OP1", "O1P", "O", false, true,0),
+    AtomSpec(3, "OP2", "O2P", "O", false, true,0),
+    AtomSpec(4, "O5'", "O5*", "O", false, true,0),
+    AtomSpec(5, "C5'", "C5*", "C", false, true,0),
+    AtomSpec(6, "C4'", "C4*", "C", false, true,0),
+    AtomSpec(7, "O4'", "O4*", "O", false, true,0),
+    AtomSpec(8, "C3'", "C3*", "C", false, true,0),
+    AtomSpec(9, "O3'", "O3*", "O", false, true,0),
+    AtomSpec(10, "C2'", "C2*", "C", false, true,0),
+    AtomSpec(11, "O2'", "O2*", "O", false, true,0),
+    AtomSpec(12, "C1'", "C1*", "C", false, true,0),
+    AtomSpec(13, "N9", "N9", "N", false, true,0),
+    AtomSpec(14, "C8", "C8", "C", false, true,0),
+    AtomSpec(15, "N7", "N7", "N", false, true,0),
+    AtomSpec(16, "C5", "C5", "C", false, true,0),
+    AtomSpec(17, "C6", "C6", "C", false, true,0),
+    AtomSpec(18, "N6", "N6", "N", false, true,0),
+    AtomSpec(19, "N1", "N1", "N", false, true,0),
+    AtomSpec(20, "C2", "C2", "C", false, true,0),
+    AtomSpec(21, "N3", "N3", "N", false, true,0),
+    AtomSpec(22, "C4", "C4", "C", false, true,0),
+    AtomSpec(23, "HOP3", "3HOP", "H", false, true,0),
+    AtomSpec(24, "HOP2", "2HOP", "H", false, true,0),
+    AtomSpec(25, "H5'", "1H5*", "H", false, true,0),
+    AtomSpec(26, "H5''", "2H5*", "H", false, true,0),
+    AtomSpec(27, "H4'", "H4*", "H", false, true,0),
+    AtomSpec(28, "H3'", "H3*", "H", false, true,0),
+    AtomSpec(29, "HO3'", "H3T", "H", true, true,0),
+    AtomSpec(30, "H2'", "H2*", "H", false, true,0),
+    AtomSpec(31, "HO2'", "2HO*", "H", false, true,0),
+    AtomSpec(32, "H1'", "H1*", "H", false, true,0),
+    AtomSpec(33, "H8", "H8", "H", false, true,0),
+    AtomSpec(34, "H61", "1H6", "H", false, true,0),
+    AtomSpec(35, "H62", "2H6", "H", false, true,0),
+    AtomSpec(36, "H2", "H2", "H", false, true,0)
   };
   for (int i=0; i<37; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -1314,41 +1314,41 @@ CompoundPtr MakeCCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C9 H14 N3 O8 P");
   AtomSpec atoms[] = {
-    AtomSpec(0, "OP3", "O3P", "O", true, true),
-    AtomSpec(1, "P", "P", "P", false, true),
-    AtomSpec(2, "OP1", "O1P", "O", false, true),
-    AtomSpec(3, "OP2", "O2P", "O", false, true),
-    AtomSpec(4, "O5'", "O5*", "O", false, true),
-    AtomSpec(5, "C5'", "C5*", "C", false, true),
-    AtomSpec(6, "C4'", "C4*", "C", false, true),
-    AtomSpec(7, "O4'", "O4*", "O", false, true),
-    AtomSpec(8, "C3'", "C3*", "C", false, true),
-    AtomSpec(9, "O3'", "O3*", "O", false, true),
-    AtomSpec(10, "C2'", "C2*", "C", false, true),
-    AtomSpec(11, "O2'", "O2*", "O", false, true),
-    AtomSpec(12, "C1'", "C1*", "C", false, true),
-    AtomSpec(13, "N1", "N1", "N", false, true),
-    AtomSpec(14, "C2", "C2", "C", false, true),
-    AtomSpec(15, "O2", "O2", "O", false, true),
-    AtomSpec(16, "N3", "N3", "N", false, true),
-    AtomSpec(17, "C4", "C4", "C", false, true),
-    AtomSpec(18, "N4", "N4", "N", false, true),
-    AtomSpec(19, "C5", "C5", "C", false, true),
-    AtomSpec(20, "C6", "C6", "C", false, true),
-    AtomSpec(21, "HOP3", "3HOP", "H", false, true),
-    AtomSpec(22, "HOP2", "2HOP", "H", false, true),
-    AtomSpec(23, "H5'", "1H5*", "H", false, true),
-    AtomSpec(24, "H5''", "2H5*", "H", false, true),
-    AtomSpec(25, "H4'", "H4*", "H", false, true),
-    AtomSpec(26, "H3'", "H3*", "H", false, true),
-    AtomSpec(27, "HO3'", "H3T", "H", true, true),
-    AtomSpec(28, "H2'", "H2*", "H", false, true),
-    AtomSpec(29, "HO2'", "2HO*", "H", false, true),
-    AtomSpec(30, "H1'", "H1*", "H", false, true),
-    AtomSpec(31, "H41", "1H4", "H", false, true),
-    AtomSpec(32, "H42", "2H4", "H", false, true),
-    AtomSpec(33, "H5", "H5", "H", false, true),
-    AtomSpec(34, "H6", "H6", "H", false, true)
+    AtomSpec(0, "OP3", "O3P", "O", true, true,0),
+    AtomSpec(1, "P", "P", "P", false, true,0),
+    AtomSpec(2, "OP1", "O1P", "O", false, true,0),
+    AtomSpec(3, "OP2", "O2P", "O", false, true,0),
+    AtomSpec(4, "O5'", "O5*", "O", false, true,0),
+    AtomSpec(5, "C5'", "C5*", "C", false, true,0),
+    AtomSpec(6, "C4'", "C4*", "C", false, true,0),
+    AtomSpec(7, "O4'", "O4*", "O", false, true,0),
+    AtomSpec(8, "C3'", "C3*", "C", false, true,0),
+    AtomSpec(9, "O3'", "O3*", "O", false, true,0),
+    AtomSpec(10, "C2'", "C2*", "C", false, true,0),
+    AtomSpec(11, "O2'", "O2*", "O", false, true,0),
+    AtomSpec(12, "C1'", "C1*", "C", false, true,0),
+    AtomSpec(13, "N1", "N1", "N", false, true,0),
+    AtomSpec(14, "C2", "C2", "C", false, true,0),
+    AtomSpec(15, "O2", "O2", "O", false, true,0),
+    AtomSpec(16, "N3", "N3", "N", false, true,0),
+    AtomSpec(17, "C4", "C4", "C", false, true,0),
+    AtomSpec(18, "N4", "N4", "N", false, true,0),
+    AtomSpec(19, "C5", "C5", "C", false, true,0),
+    AtomSpec(20, "C6", "C6", "C", false, true,0),
+    AtomSpec(21, "HOP3", "3HOP", "H", false, true,0),
+    AtomSpec(22, "HOP2", "2HOP", "H", false, true,0),
+    AtomSpec(23, "H5'", "1H5*", "H", false, true,0),
+    AtomSpec(24, "H5''", "2H5*", "H", false, true,0),
+    AtomSpec(25, "H4'", "H4*", "H", false, true,0),
+    AtomSpec(26, "H3'", "H3*", "H", false, true,0),
+    AtomSpec(27, "HO3'", "H3T", "H", true, true,0),
+    AtomSpec(28, "H2'", "H2*", "H", false, true,0),
+    AtomSpec(29, "HO2'", "2HO*", "H", false, true,0),
+    AtomSpec(30, "H1'", "H1*", "H", false, true,0),
+    AtomSpec(31, "H41", "1H4", "H", false, true,0),
+    AtomSpec(32, "H42", "2H4", "H", false, true,0),
+    AtomSpec(33, "H5", "H5", "H", false, true,0),
+    AtomSpec(34, "H6", "H6", "H", false, true,0)
   };
   for (int i=0; i<35; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -1399,40 +1399,40 @@ CompoundPtr MakeUCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C9 H13 N2 O9 P");
   AtomSpec atoms[] = {
-    AtomSpec(0, "OP3", "O3P", "O", true, true),
-    AtomSpec(1, "P", "P", "P", false, true),
-    AtomSpec(2, "OP1", "O1P", "O", false, true),
-    AtomSpec(3, "OP2", "O2P", "O", false, true),
-    AtomSpec(4, "O5'", "O5*", "O", false, true),
-    AtomSpec(5, "C5'", "C5*", "C", false, true),
-    AtomSpec(6, "C4'", "C4*", "C", false, true),
-    AtomSpec(7, "O4'", "O4*", "O", false, true),
-    AtomSpec(8, "C3'", "C3*", "C", false, true),
-    AtomSpec(9, "O3'", "O3*", "O", false, true),
-    AtomSpec(10, "C2'", "C2*", "C", false, true),
-    AtomSpec(11, "O2'", "O2*", "O", false, true),
-    AtomSpec(12, "C1'", "C1*", "C", false, true),
-    AtomSpec(13, "N1", "N1", "N", false, true),
-    AtomSpec(14, "C2", "C2", "C", false, true),
-    AtomSpec(15, "O2", "O2", "O", false, true),
-    AtomSpec(16, "N3", "N3", "N", false, true),
-    AtomSpec(17, "C4", "C4", "C", false, true),
-    AtomSpec(18, "O4", "O4", "O", false, true),
-    AtomSpec(19, "C5", "C5", "C", false, true),
-    AtomSpec(20, "C6", "C6", "C", false, true),
-    AtomSpec(21, "HOP3", "3HOP", "H", false, true),
-    AtomSpec(22, "HOP2", "2HOP", "H", false, true),
-    AtomSpec(23, "H5'", "1H5*", "H", false, true),
-    AtomSpec(24, "H5''", "2H5*", "H", false, true),
-    AtomSpec(25, "H4'", "H4*", "H", false, true),
-    AtomSpec(26, "H3'", "H3*", "H", false, true),
-    AtomSpec(27, "HO3'", "H3T", "H", true, true),
-    AtomSpec(28, "H2'", "H2*", "H", false, true),
-    AtomSpec(29, "HO2'", "2HO*", "H", false, true),
-    AtomSpec(30, "H1'", "H1*", "H", false, true),
-    AtomSpec(31, "H3", "H3", "H", false, true),
-    AtomSpec(32, "H5", "H5", "H", false, true),
-    AtomSpec(33, "H6", "H6", "H", false, true)
+    AtomSpec(0, "OP3", "O3P", "O", true, true,0),
+    AtomSpec(1, "P", "P", "P", false, true,0),
+    AtomSpec(2, "OP1", "O1P", "O", false, true,0),
+    AtomSpec(3, "OP2", "O2P", "O", false, true,0),
+    AtomSpec(4, "O5'", "O5*", "O", false, true,0),
+    AtomSpec(5, "C5'", "C5*", "C", false, true,0),
+    AtomSpec(6, "C4'", "C4*", "C", false, true,0),
+    AtomSpec(7, "O4'", "O4*", "O", false, true,0),
+    AtomSpec(8, "C3'", "C3*", "C", false, true,0),
+    AtomSpec(9, "O3'", "O3*", "O", false, true,0),
+    AtomSpec(10, "C2'", "C2*", "C", false, true,0),
+    AtomSpec(11, "O2'", "O2*", "O", false, true,0),
+    AtomSpec(12, "C1'", "C1*", "C", false, true,0),
+    AtomSpec(13, "N1", "N1", "N", false, true,0),
+    AtomSpec(14, "C2", "C2", "C", false, true,0),
+    AtomSpec(15, "O2", "O2", "O", false, true,0),
+    AtomSpec(16, "N3", "N3", "N", false, true,0),
+    AtomSpec(17, "C4", "C4", "C", false, true,0),
+    AtomSpec(18, "O4", "O4", "O", false, true,0),
+    AtomSpec(19, "C5", "C5", "C", false, true,0),
+    AtomSpec(20, "C6", "C6", "C", false, true,0),
+    AtomSpec(21, "HOP3", "3HOP", "H", false, true,0),
+    AtomSpec(22, "HOP2", "2HOP", "H", false, true,0),
+    AtomSpec(23, "H5'", "1H5*", "H", false, true,0),
+    AtomSpec(24, "H5''", "2H5*", "H", false, true,0),
+    AtomSpec(25, "H4'", "H4*", "H", false, true,0),
+    AtomSpec(26, "H3'", "H3*", "H", false, true,0),
+    AtomSpec(27, "HO3'", "H3T", "H", true, true,0),
+    AtomSpec(28, "H2'", "H2*", "H", false, true,0),
+    AtomSpec(29, "HO2'", "2HO*", "H", false, true,0),
+    AtomSpec(30, "H1'", "H1*", "H", false, true,0),
+    AtomSpec(31, "H3", "H3", "H", false, true,0),
+    AtomSpec(32, "H5", "H5", "H", false, true,0),
+    AtomSpec(33, "H6", "H6", "H", false, true,0)
   };
   for (int i=0; i<34; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -1482,43 +1482,43 @@ CompoundPtr MakeDGCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C10 H14 N5 O7 P");
   AtomSpec atoms[] = {
-    AtomSpec(0, "OP3", "O3P", "O", true, true),
-    AtomSpec(1, "P", "P", "P", false, true),
-    AtomSpec(2, "OP1", "O1P", "O", false, true),
-    AtomSpec(3, "OP2", "O2P", "O", false, true),
-    AtomSpec(4, "O5'", "O5*", "O", false, true),
-    AtomSpec(5, "C5'", "C5*", "C", false, true),
-    AtomSpec(6, "C4'", "C4*", "C", false, true),
-    AtomSpec(7, "O4'", "O4*", "O", false, true),
-    AtomSpec(8, "C3'", "C3*", "C", false, true),
-    AtomSpec(9, "O3'", "O3*", "O", false, true),
-    AtomSpec(10, "C2'", "C2*", "C", false, true),
-    AtomSpec(11, "C1'", "C1*", "C", false, true),
-    AtomSpec(12, "N9", "N9", "N", false, true),
-    AtomSpec(13, "C8", "C8", "C", false, true),
-    AtomSpec(14, "N7", "N7", "N", false, true),
-    AtomSpec(15, "C5", "C5", "C", false, true),
-    AtomSpec(16, "C6", "C6", "C", false, true),
-    AtomSpec(17, "O6", "O6", "O", false, true),
-    AtomSpec(18, "N1", "N1", "N", false, true),
-    AtomSpec(19, "C2", "C2", "C", false, true),
-    AtomSpec(20, "N2", "N2", "N", false, true),
-    AtomSpec(21, "N3", "N3", "N", false, true),
-    AtomSpec(22, "C4", "C4", "C", false, true),
-    AtomSpec(23, "HOP3", "3HOP", "H", false, true),
-    AtomSpec(24, "HOP2", "2HOP", "H", false, true),
-    AtomSpec(25, "H5'", "1H5*", "H", false, true),
-    AtomSpec(26, "H5''", "2H5*", "H", false, true),
-    AtomSpec(27, "H4'", "H4*", "H", false, true),
-    AtomSpec(28, "H3'", "H3*", "H", false, true),
-    AtomSpec(29, "HO3'", "H3T", "H", true, true),
-    AtomSpec(30, "H2'", "1H2*", "H", false, true),
-    AtomSpec(31, "H2''", "2H2*", "H", false, true),
-    AtomSpec(32, "H1'", "H1*", "H", false, true),
-    AtomSpec(33, "H8", "H8", "H", false, true),
-    AtomSpec(34, "H1", "H1", "H", false, true),
-    AtomSpec(35, "H21", "1H2", "H", false, true),
-    AtomSpec(36, "H22", "2H2", "H", false, true)
+    AtomSpec(0, "OP3", "O3P", "O", true, true,0),
+    AtomSpec(1, "P", "P", "P", false, true,0),
+    AtomSpec(2, "OP1", "O1P", "O", false, true,0),
+    AtomSpec(3, "OP2", "O2P", "O", false, true,0),
+    AtomSpec(4, "O5'", "O5*", "O", false, true,0),
+    AtomSpec(5, "C5'", "C5*", "C", false, true,0),
+    AtomSpec(6, "C4'", "C4*", "C", false, true,0),
+    AtomSpec(7, "O4'", "O4*", "O", false, true,0),
+    AtomSpec(8, "C3'", "C3*", "C", false, true,0),
+    AtomSpec(9, "O3'", "O3*", "O", false, true,0),
+    AtomSpec(10, "C2'", "C2*", "C", false, true,0),
+    AtomSpec(11, "C1'", "C1*", "C", false, true,0),
+    AtomSpec(12, "N9", "N9", "N", false, true,0),
+    AtomSpec(13, "C8", "C8", "C", false, true,0),
+    AtomSpec(14, "N7", "N7", "N", false, true,0),
+    AtomSpec(15, "C5", "C5", "C", false, true,0),
+    AtomSpec(16, "C6", "C6", "C", false, true,0),
+    AtomSpec(17, "O6", "O6", "O", false, true,0),
+    AtomSpec(18, "N1", "N1", "N", false, true,0),
+    AtomSpec(19, "C2", "C2", "C", false, true,0),
+    AtomSpec(20, "N2", "N2", "N", false, true,0),
+    AtomSpec(21, "N3", "N3", "N", false, true,0),
+    AtomSpec(22, "C4", "C4", "C", false, true,0),
+    AtomSpec(23, "HOP3", "3HOP", "H", false, true,0),
+    AtomSpec(24, "HOP2", "2HOP", "H", false, true,0),
+    AtomSpec(25, "H5'", "1H5*", "H", false, true,0),
+    AtomSpec(26, "H5''", "2H5*", "H", false, true,0),
+    AtomSpec(27, "H4'", "H4*", "H", false, true,0),
+    AtomSpec(28, "H3'", "H3*", "H", false, true,0),
+    AtomSpec(29, "HO3'", "H3T", "H", true, true,0),
+    AtomSpec(30, "H2'", "1H2*", "H", false, true,0),
+    AtomSpec(31, "H2''", "2H2*", "H", false, true,0),
+    AtomSpec(32, "H1'", "H1*", "H", false, true,0),
+    AtomSpec(33, "H8", "H8", "H", false, true,0),
+    AtomSpec(34, "H1", "H1", "H", false, true,0),
+    AtomSpec(35, "H21", "1H2", "H", false, true,0),
+    AtomSpec(36, "H22", "2H2", "H", false, true,0)
   };
   for (int i=0; i<37; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -1572,42 +1572,42 @@ CompoundPtr MakeDTCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C10 H15 N2 O8 P");
   AtomSpec atoms[] = {
-    AtomSpec(0, "OP3", "O3P", "O", true, true),
-    AtomSpec(1, "P", "P", "P", false, true),
-    AtomSpec(2, "OP1", "O1P", "O", false, true),
-    AtomSpec(3, "OP2", "O2P", "O", false, true),
-    AtomSpec(4, "O5'", "O5*", "O", false, true),
-    AtomSpec(5, "C5'", "C5*", "C", false, true),
-    AtomSpec(6, "C4'", "C4*", "C", false, true),
-    AtomSpec(7, "O4'", "O4*", "O", false, true),
-    AtomSpec(8, "C3'", "C3*", "C", false, true),
-    AtomSpec(9, "O3'", "O3*", "O", false, true),
-    AtomSpec(10, "C2'", "C2*", "C", false, true),
-    AtomSpec(11, "C1'", "C1*", "C", false, true),
-    AtomSpec(12, "N1", "N1", "N", false, true),
-    AtomSpec(13, "C2", "C2", "C", false, true),
-    AtomSpec(14, "O2", "O2", "O", false, true),
-    AtomSpec(15, "N3", "N3", "N", false, true),
-    AtomSpec(16, "C4", "C4", "C", false, true),
-    AtomSpec(17, "O4", "O4", "O", false, true),
-    AtomSpec(18, "C5", "C5", "C", false, true),
-    AtomSpec(19, "C7", "C5M", "C", false, true),
-    AtomSpec(20, "C6", "C6", "C", false, true),
-    AtomSpec(21, "HOP3", "3HOP", "H", false, true),
-    AtomSpec(22, "HOP2", "2HOP", "H", false, true),
-    AtomSpec(23, "H5'", "1H5*", "H", false, true),
-    AtomSpec(24, "H5''", "2H5*", "H", false, true),
-    AtomSpec(25, "H4'", "H4*", "H", false, true),
-    AtomSpec(26, "H3'", "H3*", "H", false, true),
-    AtomSpec(27, "HO3'", "H3T", "H", true, true),
-    AtomSpec(28, "H2'", "1H2*", "H", false, true),
-    AtomSpec(29, "H2''", "2H2*", "H", false, true),
-    AtomSpec(30, "H1'", "H1*", "H", false, true),
-    AtomSpec(31, "H3", "H3", "H", false, true),
-    AtomSpec(32, "H71", "1H5M", "H", false, true),
-    AtomSpec(33, "H72", "2H5M", "H", false, true),
-    AtomSpec(34, "H73", "3H5M", "H", false, true),
-    AtomSpec(35, "H6", "H6", "H", false, true)
+    AtomSpec(0, "OP3", "O3P", "O", true, true,0),
+    AtomSpec(1, "P", "P", "P", false, true,0),
+    AtomSpec(2, "OP1", "O1P", "O", false, true,0),
+    AtomSpec(3, "OP2", "O2P", "O", false, true,0),
+    AtomSpec(4, "O5'", "O5*", "O", false, true,0),
+    AtomSpec(5, "C5'", "C5*", "C", false, true,0),
+    AtomSpec(6, "C4'", "C4*", "C", false, true,0),
+    AtomSpec(7, "O4'", "O4*", "O", false, true,0),
+    AtomSpec(8, "C3'", "C3*", "C", false, true,0),
+    AtomSpec(9, "O3'", "O3*", "O", false, true,0),
+    AtomSpec(10, "C2'", "C2*", "C", false, true,0),
+    AtomSpec(11, "C1'", "C1*", "C", false, true,0),
+    AtomSpec(12, "N1", "N1", "N", false, true,0),
+    AtomSpec(13, "C2", "C2", "C", false, true,0),
+    AtomSpec(14, "O2", "O2", "O", false, true,0),
+    AtomSpec(15, "N3", "N3", "N", false, true,0),
+    AtomSpec(16, "C4", "C4", "C", false, true,0),
+    AtomSpec(17, "O4", "O4", "O", false, true,0),
+    AtomSpec(18, "C5", "C5", "C", false, true,0),
+    AtomSpec(19, "C7", "C5M", "C", false, true,0),
+    AtomSpec(20, "C6", "C6", "C", false, true,0),
+    AtomSpec(21, "HOP3", "3HOP", "H", false, true,0),
+    AtomSpec(22, "HOP2", "2HOP", "H", false, true,0),
+    AtomSpec(23, "H5'", "1H5*", "H", false, true,0),
+    AtomSpec(24, "H5''", "2H5*", "H", false, true,0),
+    AtomSpec(25, "H4'", "H4*", "H", false, true,0),
+    AtomSpec(26, "H3'", "H3*", "H", false, true,0),
+    AtomSpec(27, "HO3'", "H3T", "H", true, true,0),
+    AtomSpec(28, "H2'", "1H2*", "H", false, true,0),
+    AtomSpec(29, "H2''", "2H2*", "H", false, true,0),
+    AtomSpec(30, "H1'", "H1*", "H", false, true,0),
+    AtomSpec(31, "H3", "H3", "H", false, true,0),
+    AtomSpec(32, "H71", "1H5M", "H", false, true,0),
+    AtomSpec(33, "H72", "2H5M", "H", false, true,0),
+    AtomSpec(34, "H73", "3H5M", "H", false, true,0),
+    AtomSpec(35, "H6", "H6", "H", false, true,0)
   };
   for (int i=0; i<36; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -1659,39 +1659,39 @@ CompoundPtr MakeDUCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C9 H13 N2 O8 P");
   AtomSpec atoms[] = {
-    AtomSpec(0, "OP3", "O3P", "O", true, true),
-    AtomSpec(1, "P", "P", "P", false, true),
-    AtomSpec(2, "OP1", "O1P", "O", false, true),
-    AtomSpec(3, "OP2", "O2P", "O", false, true),
-    AtomSpec(4, "O5'", "O5*", "O", false, true),
-    AtomSpec(5, "C5'", "C5*", "C", false, true),
-    AtomSpec(6, "C4'", "C4*", "C", false, true),
-    AtomSpec(7, "O4'", "O4*", "O", false, true),
-    AtomSpec(8, "C3'", "C3*", "C", false, true),
-    AtomSpec(9, "O3'", "O3*", "O", false, true),
-    AtomSpec(10, "C2'", "C2*", "C", false, true),
-    AtomSpec(11, "C1'", "C1*", "C", false, true),
-    AtomSpec(12, "N1", "N1", "N", false, true),
-    AtomSpec(13, "C2", "C2", "C", false, true),
-    AtomSpec(14, "O2", "O2", "O", false, true),
-    AtomSpec(15, "N3", "N3", "N", false, true),
-    AtomSpec(16, "C4", "C4", "C", false, true),
-    AtomSpec(17, "O4", "O4", "O", false, true),
-    AtomSpec(18, "C5", "C5", "C", false, true),
-    AtomSpec(19, "C6", "C6", "C", false, true),
-    AtomSpec(20, "HOP3", "3HOP", "H", false, true),
-    AtomSpec(21, "HOP2", "2HOP", "H", false, true),
-    AtomSpec(22, "H5'", "1H5*", "H", false, true),
-    AtomSpec(23, "H5''", "2H5*", "H", false, true),
-    AtomSpec(24, "H4'", "H4*", "H", false, true),
-    AtomSpec(25, "H3'", "H3*", "H", false, true),
-    AtomSpec(26, "HO3'", "H3T", "H", true, true),
-    AtomSpec(27, "H2'", "1H2*", "H", false, true),
-    AtomSpec(28, "H2''", "2H2*", "H", false, true),
-    AtomSpec(29, "H1'", "H1*", "H", false, true),
-    AtomSpec(30, "H3", "H3", "H", false, true),
-    AtomSpec(31, "H5", "H5", "H", false, true),
-    AtomSpec(32, "H6", "H6", "H", false, true)
+    AtomSpec(0, "OP3", "O3P", "O", true, true,0),
+    AtomSpec(1, "P", "P", "P", false, true,0),
+    AtomSpec(2, "OP1", "O1P", "O", false, true,0),
+    AtomSpec(3, "OP2", "O2P", "O", false, true,0),
+    AtomSpec(4, "O5'", "O5*", "O", false, true,0),
+    AtomSpec(5, "C5'", "C5*", "C", false, true,0),
+    AtomSpec(6, "C4'", "C4*", "C", false, true,0),
+    AtomSpec(7, "O4'", "O4*", "O", false, true,0),
+    AtomSpec(8, "C3'", "C3*", "C", false, true,0),
+    AtomSpec(9, "O3'", "O3*", "O", false, true,0),
+    AtomSpec(10, "C2'", "C2*", "C", false, true,0),
+    AtomSpec(11, "C1'", "C1*", "C", false, true,0),
+    AtomSpec(12, "N1", "N1", "N", false, true,0),
+    AtomSpec(13, "C2", "C2", "C", false, true,0),
+    AtomSpec(14, "O2", "O2", "O", false, true,0),
+    AtomSpec(15, "N3", "N3", "N", false, true,0),
+    AtomSpec(16, "C4", "C4", "C", false, true,0),
+    AtomSpec(17, "O4", "O4", "O", false, true,0),
+    AtomSpec(18, "C5", "C5", "C", false, true,0),
+    AtomSpec(19, "C6", "C6", "C", false, true,0),
+    AtomSpec(20, "HOP3", "3HOP", "H", false, true,0),
+    AtomSpec(21, "HOP2", "2HOP", "H", false, true,0),
+    AtomSpec(22, "H5'", "1H5*", "H", false, true,0),
+    AtomSpec(23, "H5''", "2H5*", "H", false, true,0),
+    AtomSpec(24, "H4'", "H4*", "H", false, true,0),
+    AtomSpec(25, "H3'", "H3*", "H", false, true,0),
+    AtomSpec(26, "HO3'", "H3T", "H", true, true,0),
+    AtomSpec(27, "H2'", "1H2*", "H", false, true,0),
+    AtomSpec(28, "H2''", "2H2*", "H", false, true,0),
+    AtomSpec(29, "H1'", "H1*", "H", false, true,0),
+    AtomSpec(30, "H3", "H3", "H", false, true,0),
+    AtomSpec(31, "H5", "H5", "H", false, true,0),
+    AtomSpec(32, "H6", "H6", "H", false, true,0)
   };
   for (int i=0; i<33; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -1740,40 +1740,40 @@ CompoundPtr MakeDCCompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C9 H14 N3 O7 P");
   AtomSpec atoms[] = {
-    AtomSpec(0, "OP3", "O3P", "O", true, true),
-    AtomSpec(1, "P", "P", "P", false, true),
-    AtomSpec(2, "OP1", "O1P", "O", false, true),
-    AtomSpec(3, "OP2", "O2P", "O", false, true),
-    AtomSpec(4, "O5'", "O5*", "O", false, true),
-    AtomSpec(5, "C5'", "C5*", "C", false, true),
-    AtomSpec(6, "C4'", "C4*", "C", false, true),
-    AtomSpec(7, "O4'", "O4*", "O", false, true),
-    AtomSpec(8, "C3'", "C3*", "C", false, true),
-    AtomSpec(9, "O3'", "O3*", "O", false, true),
-    AtomSpec(10, "C2'", "C2*", "C", false, true),
-    AtomSpec(11, "C1'", "C1*", "C", false, true),
-    AtomSpec(12, "N1", "N1", "N", false, true),
-    AtomSpec(13, "C2", "C2", "C", false, true),
-    AtomSpec(14, "O2", "O2", "O", false, true),
-    AtomSpec(15, "N3", "N3", "N", false, true),
-    AtomSpec(16, "C4", "C4", "C", false, true),
-    AtomSpec(17, "N4", "N4", "N", false, true),
-    AtomSpec(18, "C5", "C5", "C", false, true),
-    AtomSpec(19, "C6", "C6", "C", false, true),
-    AtomSpec(20, "HOP3", "3HOP", "H", false, true),
-    AtomSpec(21, "HOP2", "2HOP", "H", false, true),
-    AtomSpec(22, "H5'", "1H5*", "H", false, true),
-    AtomSpec(23, "H5''", "2H5*", "H", false, true),
-    AtomSpec(24, "H4'", "H4*", "H", false, true),
-    AtomSpec(25, "H3'", "H3*", "H", false, true),
-    AtomSpec(26, "HO3'", "H3T", "H", true, true),
-    AtomSpec(27, "H2'", "1H2*", "H", false, true),
-    AtomSpec(28, "H2''", "2H2*", "H", false, true),
-    AtomSpec(29, "H1'", "H1*", "H", false, true),
-    AtomSpec(30, "H41", "1H4", "H", false, true),
-    AtomSpec(31, "H42", "2H4", "H", false, true),
-    AtomSpec(32, "H5", "H5", "H", false, true),
-    AtomSpec(33, "H6", "H6", "H", false, true)
+    AtomSpec(0, "OP3", "O3P", "O", true, true,0),
+    AtomSpec(1, "P", "P", "P", false, true,0),
+    AtomSpec(2, "OP1", "O1P", "O", false, true,0),
+    AtomSpec(3, "OP2", "O2P", "O", false, true,0),
+    AtomSpec(4, "O5'", "O5*", "O", false, true,0),
+    AtomSpec(5, "C5'", "C5*", "C", false, true,0),
+    AtomSpec(6, "C4'", "C4*", "C", false, true,0),
+    AtomSpec(7, "O4'", "O4*", "O", false, true,0),
+    AtomSpec(8, "C3'", "C3*", "C", false, true,0),
+    AtomSpec(9, "O3'", "O3*", "O", false, true,0),
+    AtomSpec(10, "C2'", "C2*", "C", false, true,0),
+    AtomSpec(11, "C1'", "C1*", "C", false, true,0),
+    AtomSpec(12, "N1", "N1", "N", false, true,0),
+    AtomSpec(13, "C2", "C2", "C", false, true,0),
+    AtomSpec(14, "O2", "O2", "O", false, true,0),
+    AtomSpec(15, "N3", "N3", "N", false, true,0),
+    AtomSpec(16, "C4", "C4", "C", false, true,0),
+    AtomSpec(17, "N4", "N4", "N", false, true,0),
+    AtomSpec(18, "C5", "C5", "C", false, true,0),
+    AtomSpec(19, "C6", "C6", "C", false, true,0),
+    AtomSpec(20, "HOP3", "3HOP", "H", false, true,0),
+    AtomSpec(21, "HOP2", "2HOP", "H", false, true,0),
+    AtomSpec(22, "H5'", "1H5*", "H", false, true,0),
+    AtomSpec(23, "H5''", "2H5*", "H", false, true,0),
+    AtomSpec(24, "H4'", "H4*", "H", false, true,0),
+    AtomSpec(25, "H3'", "H3*", "H", false, true,0),
+    AtomSpec(26, "HO3'", "H3T", "H", true, true,0),
+    AtomSpec(27, "H2'", "1H2*", "H", false, true,0),
+    AtomSpec(28, "H2''", "2H2*", "H", false, true,0),
+    AtomSpec(29, "H1'", "H1*", "H", false, true,0),
+    AtomSpec(30, "H41", "1H4", "H", false, true,0),
+    AtomSpec(31, "H42", "2H4", "H", false, true,0),
+    AtomSpec(32, "H5", "H5", "H", false, true,0),
+    AtomSpec(33, "H6", "H6", "H", false, true,0)
   };
   for (int i=0; i<34; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
@@ -1823,42 +1823,42 @@ CompoundPtr MakeDACompound() {
   c->SetChemType(mol::ChemType('U'));
   c->SetFormula("C10 H14 N5 O6 P");
   AtomSpec atoms[] = {
-    AtomSpec(0, "OP3", "O3P", "O", true, true),
-    AtomSpec(1, "P", "P", "P", false, true),
-    AtomSpec(2, "OP1", "O1P", "O", false, true),
-    AtomSpec(3, "OP2", "O2P", "O", false, true),
-    AtomSpec(4, "O5'", "O5*", "O", false, true),
-    AtomSpec(5, "C5'", "C5*", "C", false, true),
-    AtomSpec(6, "C4'", "C4*", "C", false, true),
-    AtomSpec(7, "O4'", "O4*", "O", false, true),
-    AtomSpec(8, "C3'", "C3*", "C", false, true),
-    AtomSpec(9, "O3'", "O3*", "O", false, true),
-    AtomSpec(10, "C2'", "C2*", "C", false, true),
-    AtomSpec(11, "C1'", "C1*", "C", false, true),
-    AtomSpec(12, "N9", "N9", "N", false, true),
-    AtomSpec(13, "C8", "C8", "C", false, true),
-    AtomSpec(14, "N7", "N7", "N", false, true),
-    AtomSpec(15, "C5", "C5", "C", false, true),
-    AtomSpec(16, "C6", "C6", "C", false, true),
-    AtomSpec(17, "N6", "N6", "N", false, true),
-    AtomSpec(18, "N1", "N1", "N", false, true),
-    AtomSpec(19, "C2", "C2", "C", false, true),
-    AtomSpec(20, "N3", "N3", "N", false, true),
-    AtomSpec(21, "C4", "C4", "C", false, true),
-    AtomSpec(22, "HOP3", "3HOP", "H", false, true),
-    AtomSpec(23, "HOP2", "2HOP", "H", false, true),
-    AtomSpec(24, "H5'", "1H5*", "H", false, true),
-    AtomSpec(25, "H5''", "2H5*", "H", false, true),
-    AtomSpec(26, "H4'", "H4*", "H", false, true),
-    AtomSpec(27, "H3'", "H3*", "H", false, true),
-    AtomSpec(28, "HO3'", "H3T", "H", true, true),
-    AtomSpec(29, "H2'", "1H2*", "H", false, true),
-    AtomSpec(30, "H2''", "2H2*", "H", false, true),
-    AtomSpec(31, "H1'", "H1*", "H", false, true),
-    AtomSpec(32, "H8", "H8", "H", false, true),
-    AtomSpec(33, "H61", "1H6", "H", false, true),
-    AtomSpec(34, "H62", "2H6", "H", false, true),
-    AtomSpec(35, "H2", "H2", "H", false, true)
+    AtomSpec(0, "OP3", "O3P", "O", true, true,0),
+    AtomSpec(1, "P", "P", "P", false, true,0),
+    AtomSpec(2, "OP1", "O1P", "O", false, true,0),
+    AtomSpec(3, "OP2", "O2P", "O", false, true,0),
+    AtomSpec(4, "O5'", "O5*", "O", false, true,0),
+    AtomSpec(5, "C5'", "C5*", "C", false, true,0),
+    AtomSpec(6, "C4'", "C4*", "C", false, true,0),
+    AtomSpec(7, "O4'", "O4*", "O", false, true,0),
+    AtomSpec(8, "C3'", "C3*", "C", false, true,0),
+    AtomSpec(9, "O3'", "O3*", "O", false, true,0),
+    AtomSpec(10, "C2'", "C2*", "C", false, true,0),
+    AtomSpec(11, "C1'", "C1*", "C", false, true,0),
+    AtomSpec(12, "N9", "N9", "N", false, true,0),
+    AtomSpec(13, "C8", "C8", "C", false, true,0),
+    AtomSpec(14, "N7", "N7", "N", false, true,0),
+    AtomSpec(15, "C5", "C5", "C", false, true,0),
+    AtomSpec(16, "C6", "C6", "C", false, true,0),
+    AtomSpec(17, "N6", "N6", "N", false, true,0),
+    AtomSpec(18, "N1", "N1", "N", false, true,0),
+    AtomSpec(19, "C2", "C2", "C", false, true,0),
+    AtomSpec(20, "N3", "N3", "N", false, true,0),
+    AtomSpec(21, "C4", "C4", "C", false, true,0),
+    AtomSpec(22, "HOP3", "3HOP", "H", false, true,0),
+    AtomSpec(23, "HOP2", "2HOP", "H", false, true,0),
+    AtomSpec(24, "H5'", "1H5*", "H", false, true,0),
+    AtomSpec(25, "H5''", "2H5*", "H", false, true,0),
+    AtomSpec(26, "H4'", "H4*", "H", false, true,0),
+    AtomSpec(27, "H3'", "H3*", "H", false, true,0),
+    AtomSpec(28, "HO3'", "H3T", "H", true, true,0),
+    AtomSpec(29, "H2'", "1H2*", "H", false, true,0),
+    AtomSpec(30, "H2''", "2H2*", "H", false, true,0),
+    AtomSpec(31, "H1'", "H1*", "H", false, true,0),
+    AtomSpec(32, "H8", "H8", "H", false, true,0),
+    AtomSpec(33, "H61", "1H6", "H", false, true,0),
+    AtomSpec(34, "H62", "2H6", "H", false, true,0),
+    AtomSpec(35, "H2", "H2", "H", false, true,0)
   };
   for (int i=0; i<36; ++i) { c->AddAtom(atoms[i]); }
   BondSpec bonds[] = {
diff --git a/modules/io/src/mol/chemdict_parser.cc b/modules/io/src/mol/chemdict_parser.cc
index 654204dcd6591d31267b67bbde7b14ddabea19b4..b1aac36a2e7c866da336cd406a7ccae87c2e357a 100644
--- a/modules/io/src/mol/chemdict_parser.cc
+++ b/modules/io/src/mol/chemdict_parser.cc
@@ -22,7 +22,7 @@ bool ChemdictParser::OnBeginData(const StringRef& data_name)
 }
 
 bool ChemdictParser::OnBeginLoop(const StarLoopDesc& header)
-{ 
+{  
   if (header.GetCategory()=="chem_comp_atom") {
     loop_type_=ATOM_SPEC;
     indices_[ATOM_NAME]=header.GetIndex("atom_id");
@@ -30,7 +30,8 @@ bool ChemdictParser::OnBeginLoop(const StarLoopDesc& header)
     indices_[ELE]=header.GetIndex("type_symbol");      
     indices_[IS_LEAVING]=header.GetIndex("pdbx_leaving_atom_flag");
     indices_[IS_AROMATIC]=header.GetIndex("pdbx_aromatic_flag");
-    indices_[ORDINAL]=header.GetIndex("pdbx_ordinal");      
+    indices_[ORDINAL]=header.GetIndex("pdbx_ordinal");     
+    indices_[CHARGE]=header.GetIndex("charge");      
     return true;
   } else if (header.GetCategory()=="chem_comp_bond") {
     loop_type_=BOND_SPEC;
@@ -54,6 +55,7 @@ void ChemdictParser::OnDataRow(const StarLoopDesc& header,
     atom.ordinal=columns[indices_[ORDINAL]].to_int().second-1;
     atom.element=columns[indices_[ELE]].str();
     atom.is_aromatic=columns[indices_[IS_AROMATIC]][0]=='Y';
+    atom.charge=columns[indices_[CHARGE]].to_int().second;
     compound_->AddAtom(atom);
     atom_map_[atom.name]=atom.ordinal;
   } else if (loop_type_==BOND_SPEC) {
@@ -126,6 +128,10 @@ void ChemdictParser::OnDataItem(const StarDataItem& item)
     } else if (item.GetName()==StringRef("pdbx_modified_date", 18)) {
       compound_->SetModificationDate(Date::FromString(item.GetValue()));
     }
+     else if (item.GetName()==StringRef("pdbx_formal_charge", 18)) {
+      compound_->SetCharge(item.GetValue().to_int().second);
+       //std::cout << compound_->GetID() << compound_->GetCharge() << "\n" ;
+      }
   } else if (item.GetName()==StringRef("atom_id", 7)) {
     atom_.name=item.GetValue().str();
   } else if (item.GetName()==StringRef("alt_atom_id", 11)) {
diff --git a/modules/io/src/mol/chemdict_parser.hh b/modules/io/src/mol/chemdict_parser.hh
index 51142744c37de1e419f39395db04edc926801982..ae5552885c5ff7fd2728282d8201df32d99065d2 100644
--- a/modules/io/src/mol/chemdict_parser.hh
+++ b/modules/io/src/mol/chemdict_parser.hh
@@ -75,12 +75,13 @@ private:
     IS_LEAVING=4,
     ELE=5,
     STEREO_CONF=6,
+    CHARGE=7,
     ATOM_ID1=0,
     ATOM_ID2=1,
     BOND_ORDER=2
   } PropIndex;
   char                                    last_;
-  int                                     indices_[10];
+  int                                     indices_[11];
   bool                                    insert_;
   static std::map<String, mol::ChemClass> tm_;  
   static std::map<String, mol::ChemType>  xtm_;