diff --git a/modules/bindings/pymod/msms.py b/modules/bindings/pymod/msms.py
index dc3b8590626aad471534d47ce660220d616800d9..893e6c4b509c2faa88b88037ef55dc0282c0eb88 100644
--- a/modules/bindings/pymod/msms.py
+++ b/modules/bindings/pymod/msms.py
@@ -69,7 +69,7 @@ def _SetupFiles(entity, selection):
   for a in entity_view.GetAtomList():
     position=a.GetPos()
     tmp_file_handle.write('%8.3f %8.3f %8.3f %4.2f\n' % (position[0],
-                          position[1], position[2], a.GetAtomProps().radius))
+                          position[1], position[2], a.radius))
   tmp_file_handle.close()
   
   return (tmp_dir_name, tmp_file_name)
diff --git a/modules/conop/pymod/export_conop.cc b/modules/conop/pymod/export_conop.cc
index 8b2509ec3a70a9fd8620919496a58ffa8f0cead5..64d12ffd224f8add296c035390c21803616f5d9b 100644
--- a/modules/conop/pymod/export_conop.cc
+++ b/modules/conop/pymod/export_conop.cc
@@ -31,7 +31,6 @@ void export_Conop() {
      .def("Instance", &Conopology::Instance, return_value_policy<reference_existing_object>()).staticmethod("Instance")
     .def("ConnectAll", &Conopology::ConnectAll)
     .def("GetBuilder", &Conopology::GetBuilder)
-    .def("GetDefaultAtomRadius", &Conopology::GetDefaultAtomRadius)
     .def("ConnectAll", &Conopology::ConnectAll)
     .def("RegisterBuilder", &Conopology::RegisterBuilder)
     .def("SetDefaultBuilder", &Conopology::SetDefaultBuilder)
diff --git a/modules/conop/src/conop.cc b/modules/conop/src/conop.cc
index d7edd9aa8ef5b451128a45b742d1b74ffb45b954..e2fc45e2e227f32d4d14b75181170ab4604e68c4 100644
--- a/modules/conop/src/conop.cc
+++ b/modules/conop/src/conop.cc
@@ -33,165 +33,128 @@ Conopology& Conopology::Instance()
 }
 
 Conopology::Conopology():
-  builder_map_(),
-  ele_rad_map_(),
-  ele_mass_map_()
+  builder_map_()
 {
   builder_map_["HEURISTIC"]=BuilderP(new HeuristicBuilder());
   builder_map_["DEFAULT"]=builder_map_["HEURISTIC"];
-
-  ele_rad_map_["H"]  = 1.09;
-                 
-  ele_rad_map_["C"]  = 1.70;  //was 1.75
-  ele_rad_map_["N"]  = 1.55;
-  ele_rad_map_["O"]  = 1.52;
-  ele_rad_map_["F"]  = 1.47;
-                 
-  ele_rad_map_["NA"] = 2.27;
-  ele_rad_map_["MG"] = 1.73;
-  ele_rad_map_["SI"] = 2.10;
-  ele_rad_map_["P"]  = 1.80;
-  ele_rad_map_["S"]  = 1.80;
-  ele_rad_map_["CL"] = 1.75;
-                 
-  ele_rad_map_["K"]  = 2.75;
-  ele_rad_map_["CA"] = 2.00;
-  ele_rad_map_["MN"] = 2.00;
-  ele_rad_map_["FE"] = 2.00;
-  ele_rad_map_["CO"] = 2.00;
-  ele_rad_map_["NI"] = 1.63;
-  ele_rad_map_["CU"] = 1.40;
-  ele_rad_map_["ZN"] = 1.39;
-  ele_rad_map_["BR"] = 1.85;
-
-  ele_rad_map_["I"]  = 1.98;
-
-
-  // Element masses according to IUPAC standards
-  // see http://www.chem.qmul.ac.uk/iupac/AtWt/
-  ele_mass_map_["H"]  = 1.00794;
-  ele_mass_map_["HE"] = 4.002602;
-  ele_mass_map_["LI"] = 6.941;
-  ele_mass_map_["BE"] = 9.012182;
-  ele_mass_map_["B"]  = 10.811;
-  ele_mass_map_["C"]  = 12.0107;
-  ele_mass_map_["N"]  = 14.0067;
-  ele_mass_map_["O"]  = 15.9994;
-  ele_mass_map_["F"]  = 18.9984032;
-  ele_mass_map_["NE"] = 20.1797;
-  ele_mass_map_["NA"] = 22.98976928;
-  ele_mass_map_["MG"] = 24.3050;
-  ele_mass_map_["AL"] = 26.9815386;
-  ele_mass_map_["SI"] = 28.0855;
-  ele_mass_map_["P"]  = 30.973762;
-  ele_mass_map_["S"]  = 32.065;
-  ele_mass_map_["CL"] = 35.453;
-  ele_mass_map_["AR"] = 39.948;
-  ele_mass_map_["K"]  = 39.0983;
-  ele_mass_map_["CA"] = 40.078;
-  ele_mass_map_["SC"] = 44.955912;
-  ele_mass_map_["TI"] = 47.867;
-  ele_mass_map_["V"]  = 50.9415;
-  ele_mass_map_["CR"] = 51.9961;
-  ele_mass_map_["MN"] = 54.938045;
-  ele_mass_map_["FE"] = 55.845;
-  ele_mass_map_["CO"] = 58.933195;
-  ele_mass_map_["NI"] = 58.6934;
-  ele_mass_map_["CU"] = 63.546;
-  ele_mass_map_["ZN"] = 65.38;
-  ele_mass_map_["GA"] = 69.723;
-  ele_mass_map_["GE"] = 72.64;
-  ele_mass_map_["AS"] = 74.92160;
-  ele_mass_map_["SE"] = 78.96;
-  ele_mass_map_["BR"] = 79.904;
-  ele_mass_map_["KR"] = 83.798;
-  ele_mass_map_["RB"] = 85.4678;
-  ele_mass_map_["SR"] = 87.62;
-  ele_mass_map_["Y"]  = 88.90585;
-  ele_mass_map_["ZR"] = 91.224;
-  ele_mass_map_["NB"] = 92.90638;
-  ele_mass_map_["MO"] = 95.96;
-  ele_mass_map_["TC"] = 98.0;
-  ele_mass_map_["RU"] = 101.07;
-  ele_mass_map_["RH"] = 102.90550;
-  ele_mass_map_["PD"] = 106.42;
-  ele_mass_map_["AG"] = 107.8682;
-  ele_mass_map_["CD"] = 112.411;
-  ele_mass_map_["IN"] = 114.818;
-  ele_mass_map_["SN"] = 118.710;
-  ele_mass_map_["SB"] = 121.760;
-  ele_mass_map_["TE"] = 127.60;
-  ele_mass_map_["I"]  = 126.90447;
-  ele_mass_map_["XE"] = 131.293;
-  ele_mass_map_["CS"] = 132.9054519;
-  ele_mass_map_["BA"] = 137.327;
-  ele_mass_map_["LA"] = 138.90547;
-  ele_mass_map_["CE"] = 140.116;
-  ele_mass_map_["PR"] = 140.90765;
-  ele_mass_map_["ND"] = 144.242;
-  ele_mass_map_["PM"] = 145.0;
-  ele_mass_map_["SM"] = 150.36;
-  ele_mass_map_["EU"] = 151.964;
-  ele_mass_map_["GD"] = 157.25;
-  ele_mass_map_["TB"] = 158.92535;
-  ele_mass_map_["DY"] = 162.500;
-  ele_mass_map_["HO"] = 164.93032;
-  ele_mass_map_["ER"] = 167.259;
-  ele_mass_map_["TM"] = 168.93421;
-  ele_mass_map_["YB"] = 173.054;
-  ele_mass_map_["LU"] = 174.9668;
-  ele_mass_map_["HF"] = 178.49;
-  ele_mass_map_["TA"] = 180.94788;
-  ele_mass_map_["W"]  = 183.84;
-  ele_mass_map_["RE"] = 186.207;
-  ele_mass_map_["OS"] = 190.23;
-  ele_mass_map_["IR"] = 192.217;
-  ele_mass_map_["PT"] = 195.084;
-  ele_mass_map_["AU"] = 196.966569;
-  ele_mass_map_["HG"] = 200.59;
-  ele_mass_map_["TL"] = 204.3833;
-  ele_mass_map_["PB"] = 207.2;
-  ele_mass_map_["BI"] = 208.98040;
-  ele_mass_map_["PO"] = 209.0;
-  ele_mass_map_["AT"] = 210.0;
-  ele_mass_map_["RN"] = 222.0;
-  ele_mass_map_["FR"] = 223.0;
-  ele_mass_map_["RA"] = 226.0;
-  ele_mass_map_["AC"] = 227.0;
-  ele_mass_map_["TH"] = 232.03806;
-  ele_mass_map_["PA"] = 231.03588;
-  ele_mass_map_["U"]  = 238.02891;
-  ele_mass_map_["NP"] = 237.0;
-  ele_mass_map_["PU"] = 244.0;
-  ele_mass_map_["AM"] = 243.0;
-  ele_mass_map_["CM"] = 247.0;
-  ele_mass_map_["BK"] = 247.0;
-  ele_mass_map_["CF"] = 251.0;
-  ele_mass_map_["ES"] = 252.0;
-  ele_mass_map_["FM"] = 257.0;
-  ele_mass_map_["MD"] = 258.0;
-  ele_mass_map_["NO"] = 259.0;
-  ele_mass_map_["LR"] = 262.0;
-  ele_mass_map_["RF"] = 267.0;
-  ele_mass_map_["DB"] = 268.0;
-  ele_mass_map_["SG"] = 271.0;
-  ele_mass_map_["BH"] = 272.0;
-  ele_mass_map_["HS"] = 270.0;
-  ele_mass_map_["MT"] = 276.0;
-  ele_mass_map_["DS"] = 281.0;
-  ele_mass_map_["RG"] = 280.0;
-  ele_mass_map_["CN"] = 285.0;
-  ele_mass_map_["UUT"]= 284.0;
-  ele_mass_map_["UUQ"]= 289.0;
-  ele_mass_map_["UUP"]= 288.0;
-  ele_mass_map_["UUH"]= 293.0;
-  ele_mass_map_["UUO"]= 294.0;  
+  
+  known_elements_.insert("AC");
+  known_elements_.insert("AG");
+  known_elements_.insert("AL");
+  known_elements_.insert("AM");
+  known_elements_.insert("AR");
+  known_elements_.insert("AS");
+  known_elements_.insert("AT");
+  known_elements_.insert("AU");
+  known_elements_.insert("B");
+  known_elements_.insert("BA");
+  known_elements_.insert("BE");
+  known_elements_.insert("BH");
+  known_elements_.insert("BI");
+  known_elements_.insert("BK");
+  known_elements_.insert("BR");
+  known_elements_.insert("C");
+  known_elements_.insert("CA");
+  known_elements_.insert("CD");
+  known_elements_.insert("CE");
+  known_elements_.insert("CF");
+  known_elements_.insert("CL");
+  known_elements_.insert("CM");
+  known_elements_.insert("CO");
+  known_elements_.insert("CR");
+  known_elements_.insert("CS");
+  known_elements_.insert("CU");
+  known_elements_.insert("DB");
+  known_elements_.insert("DS");
+  known_elements_.insert("DY");
+  known_elements_.insert("ER");
+  known_elements_.insert("ES");
+  known_elements_.insert("EU");
+  known_elements_.insert("F");
+  known_elements_.insert("FE");
+  known_elements_.insert("FM");
+  known_elements_.insert("FR");
+  known_elements_.insert("GA");
+  known_elements_.insert("GD");
+  known_elements_.insert("GE");
+  known_elements_.insert("H");
+  known_elements_.insert("HE");
+  known_elements_.insert("HF");
+  known_elements_.insert("HG");
+  known_elements_.insert("HO");
+  known_elements_.insert("HS");
+  known_elements_.insert("I");
+  known_elements_.insert("IN");
+  known_elements_.insert("IR");
+  known_elements_.insert("K");
+  known_elements_.insert("KR");
+  known_elements_.insert("LA");
+  known_elements_.insert("LI");
+  known_elements_.insert("LR");
+  known_elements_.insert("LU");
+  known_elements_.insert("MD");
+  known_elements_.insert("MG");
+  known_elements_.insert("MN");
+  known_elements_.insert("MO");
+  known_elements_.insert("MT");
+  known_elements_.insert("N");
+  known_elements_.insert("NA");
+  known_elements_.insert("NB");
+  known_elements_.insert("ND");
+  known_elements_.insert("NE");
+  known_elements_.insert("NI");
+  known_elements_.insert("NO");
+  known_elements_.insert("NP");
+  known_elements_.insert("O");
+  known_elements_.insert("OS");
+  known_elements_.insert("P");
+  known_elements_.insert("PA");
+  known_elements_.insert("PB");
+  known_elements_.insert("PD");
+  known_elements_.insert("PM");
+  known_elements_.insert("PO");
+  known_elements_.insert("PR");
+  known_elements_.insert("PT");
+  known_elements_.insert("PU");
+  known_elements_.insert("RA");
+  known_elements_.insert("RB");
+  known_elements_.insert("RE");
+  known_elements_.insert("RF");
+  known_elements_.insert("RH");
+  known_elements_.insert("RN");
+  known_elements_.insert("RU");
+  known_elements_.insert("S");
+  known_elements_.insert("SB");
+  known_elements_.insert("SC");
+  known_elements_.insert("SE");
+  known_elements_.insert("SG");
+  known_elements_.insert("SI");
+  known_elements_.insert("SM");
+  known_elements_.insert("SN");
+  known_elements_.insert("SR");
+  known_elements_.insert("TA");
+  known_elements_.insert("TB");
+  known_elements_.insert("TC");
+  known_elements_.insert("TE");
+  known_elements_.insert("TH");
+  known_elements_.insert("TI");
+  known_elements_.insert("TL");
+  known_elements_.insert("TM");
+  known_elements_.insert("U");
+  known_elements_.insert("V");
+  known_elements_.insert("W");
+  known_elements_.insert("XE");
+  known_elements_.insert("Y");
+  known_elements_.insert("YB");
+  known_elements_.insert("ZN");
+  known_elements_.insert("ZR");
 }
 
 void Conopology::RegisterBuilder(const BuilderP& b, const String& name) {
   if (!GetBuilder(name))
   builder_map_[name]=b;
 }
+
 void Conopology::SetDefaultBuilder(const String& default_name) {
   BuilderP builder=GetBuilder(default_name);
   if (builder)
@@ -310,31 +273,11 @@ void Conopology::ConnectAll(const BuilderP& b, mol::EntityHandle eh, int flag)
   eh.Apply(tmaker);
 }
 
-Real Conopology::GetDefaultAtomRadius(const String& element) const
+bool Conopology::IsValidElement(const String& ele) const
 {
-  String upper_ele=element;
-  std::transform(upper_ele.begin(),upper_ele.end(),upper_ele.begin(),toupper);  
-  std::map<String,Real>::const_iterator it = ele_rad_map_.find(upper_ele);
-  return it==ele_rad_map_.end() ? 1.5 : it->second;
+  String upper_ele=ele;
+  std::transform(upper_ele.begin(),upper_ele.end(),upper_ele.begin(),toupper);
+  return known_elements_.find(upper_ele)!=known_elements_.end();
 }
 
-bool Conopology::IsValidElement(const String& element) const
-{
-  String upper_ele=element;
-  std::transform(upper_ele.begin(),upper_ele.end(),upper_ele.begin(),toupper);  
-  
-  std::map<String,Real>::const_iterator it = ele_mass_map_.find(upper_ele);
-  return it!=ele_mass_map_.end();
-}
-
-Real Conopology::GetDefaultAtomMass(const String& element) const
-{
-  String upper_ele=element;
-  std::transform(upper_ele.begin(),upper_ele.end(),upper_ele.begin(),toupper);  
-  
-  std::map<String,Real>::const_iterator it = ele_mass_map_.find(upper_ele);
-  return it==ele_mass_map_.end() ? 1.0 : it->second;
-}
-
-
 }} // ns
diff --git a/modules/conop/src/conop.hh b/modules/conop/src/conop.hh
index e8ad4bc0b7034942a446a0726c3cb2949ba76d36..7109c83aaed031112376eed5e5dca2cf1732d673 100644
--- a/modules/conop/src/conop.hh
+++ b/modules/conop/src/conop.hh
@@ -36,13 +36,6 @@ public:
   // retrieve a builder by name
   BuilderP GetBuilder(const String& name="DEFAULT");
 
-  // return default vdW radius
-  // temporary location until more elaborate chemical information is impl
-  Real GetDefaultAtomRadius(const String& element) const;
-
-  // return default mass
-  Real GetDefaultAtomMass(const String& element) const;
-
   /*
     convenience function, connect all atoms with given coordinates,
     such as after coordinate file import, based on a given builder
@@ -61,8 +54,7 @@ private:
   Conopology& operator=(const Conopology&) {return *this;}
 
   BuilderMap builder_map_;
-  std::map<String,Real> ele_rad_map_;
-  std::map<String,Real> ele_mass_map_;
+  std::set<String> known_elements_;
 };
 
 }} //
diff --git a/modules/conop/src/heuristic_builder.cc b/modules/conop/src/heuristic_builder.cc
index bb4a63a229bfdc5b270b447538115df02a8b9659..55f548ae37b97fa43eb564d8a1f93cec8d1da5d7 100644
--- a/modules/conop/src/heuristic_builder.cc
+++ b/modules/conop/src/heuristic_builder.cc
@@ -474,18 +474,9 @@ bool HeuristicBuilder::IsResidueComplete(const mol::ResidueHandle& rh)
 
 void HeuristicBuilder::FillAtomProps(mol::AtomHandle atom)
 {
-  mol::AtomProp prop=atom.GetAtomProps();
-  if (prop.element=="") {
-    prop.element=Builder::GuessAtomElement(atom.GetName(), prop.is_hetatm);
+  if (atom.GetElement()=="") {
+    atom.SetElement(Builder::GuessAtomElement(atom.GetName(), atom.IsHetAtom()));
   }
-  Conopology& conop_inst=Conopology::Instance();
-  if (prop.radius==0.0) {
-    prop.radius=conop_inst.GetDefaultAtomRadius(prop.element);    
-  }
-  if (prop.mass==0.0) {
-    prop.mass=conop_inst.GetDefaultAtomMass(prop.element);    
-  }
-  atom.SetAtomProps(prop);  
 }
 
 }} // ns
diff --git a/modules/conop/src/rule_based_builder.cc b/modules/conop/src/rule_based_builder.cc
index e47c96e358850eb5f89111d575366577e2e9eab7..f8617c89dfaf122e061d937d4842ccfcd99e27ff 100644
--- a/modules/conop/src/rule_based_builder.cc
+++ b/modules/conop/src/rule_based_builder.cc
@@ -84,17 +84,9 @@ bool RuleBasedBuilder::HasUnknownAtoms(mol::ResidueHandle res)
 void RuleBasedBuilder::FillAtomProps(mol::AtomHandle atom, const AtomSpec& spec) 
 {
   Conopology& conop_inst=Conopology::Instance();
-  mol::AtomProp props=atom.GetAtomProps();
-  if (!conop_inst.IsValidElement(props.element)) {
-    props.element=spec.element;
-  }
-  if (props.radius==0.0) {
-    props.radius=conop_inst.GetDefaultAtomRadius(spec.element);    
-  }
-  if (props.mass==0.0) {
-    props.mass=conop_inst.GetDefaultAtomMass(spec.element);
-  }
-  atom.SetAtomProps(props);  
+  if (!conop_inst.IsValidElement(atom.GetElement())) {
+    atom.SetElement(spec.element);
+  } 
 }
 
 void RuleBasedBuilder::FillResidueProps(mol::ResidueHandle residue) 
@@ -330,18 +322,10 @@ void RuleBasedBuilder::FillAtomProps(mol::AtomHandle atom)
 
 bool RuleBasedBuilder::OnUnknownAtom(mol::AtomHandle atom)
 {
-  mol::AtomProp props=atom.GetAtomProps();
   Conopology& conop_inst=Conopology::Instance();
-  if (!conop_inst.IsValidElement(props.element)) {
-    props.element=Builder::GuessAtomElement(atom.GetName(), props.is_hetatm);
-  }
-  if (props.radius==0.0) {
-    props.radius=conop_inst.GetDefaultAtomRadius(props.element);    
-  }
-  if (props.mass==0.0) {
-    props.mass=conop_inst.GetDefaultAtomMass(props.element);
+  if (!conop_inst.IsValidElement(atom.GetElement())) {
+    atom.SetElement(Builder::GuessAtomElement(atom.GetName(), atom.IsHetAtom()));
   }
-  atom.SetAtomProps(props); 
   return false;
 }
 
diff --git a/modules/gfx/src/impl/backbone_trace.cc b/modules/gfx/src/impl/backbone_trace.cc
index 26f9f009caacc3b352d9f631a9aeda87931de627..2a0315380b75dfe55ef774155d60416c59f07fe9 100644
--- a/modules/gfx/src/impl/backbone_trace.cc
+++ b/modules/gfx/src/impl/backbone_trace.cc
@@ -78,8 +78,8 @@ public:
     // determine atom to add to list
     mol::AtomHandle ca = res.GetCentralAtom();
     if (ca) {
-      NodeEntry entry={ca, GfxObj::Ele2Color(ca.GetAtomProps().element),
-                       GfxObj::Ele2Color(ca.GetAtomProps().element),
+      NodeEntry entry={ca, GfxObj::Ele2Color(ca.GetElement()),
+                       GfxObj::Ele2Color(ca.GetElement()),
                        geom::Vec3(), // this will be set by the gfx trace obj
                        res.GetCentralNormal(),
                        1.0,
diff --git a/modules/gfx/src/surface.cc b/modules/gfx/src/surface.cc
index 6ffae62e6dabef375cac9d900d2b67b9bfcf008e..2e271df6ded607bbc1596e742a1e5417d6f00fd3 100644
--- a/modules/gfx/src/surface.cc
+++ b/modules/gfx/src/surface.cc
@@ -23,7 +23,6 @@
 #include <map>
 #include <limits>
 
-#include <ost/mol/atom_prop.hh>
 #include <ost/mol/mol.hh>
 #include <ost/mol/entity_property_mapper.hh>
 #include "surface.hh"
diff --git a/modules/io/src/mol/entity_io_crd_handler.cc b/modules/io/src/mol/entity_io_crd_handler.cc
index 320db5d1d667f81a895096b170ecac51920ca0e4..88286b78e628d869a96ee89456c8070374545c53 100644
--- a/modules/io/src/mol/entity_io_crd_handler.cc
+++ b/modules/io/src/mol/entity_io_crd_handler.cc
@@ -142,14 +142,7 @@ void CRDReader::ParseAndAddAtom(const String& line, mol::EntityHandle& ent)
 
   // finally add atom
   LOG_DEBUG("adding atom " << aname << " (" << ele << ") @" << apos);
-  mol::AtomProp aprop;
-  aprop.element=ele;
-  aprop.radius=conop::Conopology::Instance().GetDefaultAtomRadius(ele);
-  aprop.is_hetatm=false;
-  aprop.b_factor=0.0;
-  aprop.occupancy=1.0;
-  
-  mol::AtomHandle ah = editor.InsertAtom(curr_residue_, aname, apos, aprop);
+  mol::AtomHandle ah = editor.InsertAtom(curr_residue_, aname, apos, ele);
   sequential_atom_list_.push_back(ah);
   ++atom_count_;
 }
diff --git a/modules/io/src/mol/entity_io_mae_handler.cc b/modules/io/src/mol/entity_io_mae_handler.cc
index e810c9089efc13896ce0e418815e846a27ba43cb..f5def7a3e0e6c944fd3bd8652fc376d4e8f9fd0b 100644
--- a/modules/io/src/mol/entity_io_mae_handler.cc
+++ b/modules/io/src/mol/entity_io_mae_handler.cc
@@ -265,13 +265,7 @@ void MAEReader::add_atom(mol::EntityHandle ent,
 
   // finally add atom
   LOG_DEBUG("  atom " << aname << " (" << ele << ") @" << apos);
-  mol::AtomProp aprop;
-  aprop.element=ele;
-  aprop.radius=conop::Conopology::Instance().GetDefaultAtomRadius(ele);
-  aprop.is_hetatm=false;
-  aprop.b_factor=0.0;
-  aprop.occupancy=1.0;
-  mol::AtomHandle ah = editor.InsertAtom(curr_residue_, aname, apos, aprop);
+  mol::AtomHandle ah = editor.InsertAtom(curr_residue_, aname, apos, ele);
 }
   
 
diff --git a/modules/io/src/mol/pdb_reader.cc b/modules/io/src/mol/pdb_reader.cc
index 6fad3dc2c2b9fa3c0b2ae0fc86c010e115ac119e..969d9ffa158269e26a8e885b64d3b37121b4fbc3 100644
--- a/modules/io/src/mol/pdb_reader.cc
+++ b/modules/io/src/mol/pdb_reader.cc
@@ -395,15 +395,13 @@ void PDBReader::ParseAnisou(const StringRef& line, int line_num,
     throw IOException(str(format(fmt_str) % line_num));      
   }
   //get properties which are already set and extend them by adding the ANISOU info
-  mol::AtomProp aprop=atom.GetAtomProps();
+  
+
   geom::Mat3 mat(anisou[0], anisou[3], anisou[4],
                  anisou[3], anisou[1], anisou[5],
                  anisou[4], anisou[5], anisou[2]);
-  aprop.anisou=mat;
-  //divide by 10**4 to actually reflect the real values
-  aprop.anisou/=10000;
-  aprop.has_anisou=true;
-  atom.SetAtomProps(aprop);
+  mat/=10000;
+  atom.SetAnisou(mat);
 }
 
 void PDBReader::ParseAndAddAtom(const StringRef& line, int line_num,
@@ -527,30 +525,7 @@ void PDBReader::ParseAndAddAtom(const StringRef& line, int line_num,
   }
   // finally add atom
   LOG_DEBUG("adding atom " << aname << " (" << s_ele << ") @" << apos);
-  mol::AtomProp aprop;
-  aprop.element=s_ele;
-  if(is_pqr_) {
-    if (radius.first) {
-      aprop.radius=radius.second;
-    } else {
-      aprop.radius=0.0;
-    }
-  } else {
-    aprop.radius=0.0;
-  }
-
-  if (temp.first) {
-    aprop.b_factor=temp.second;
-  }
-  if (occ.first) {
-    aprop.occupancy=occ.second;
-  }
-  if (charge.first) {
-    aprop.charge=charge.second;
-  }
-
-  aprop.is_hetatm=record_type[0]=='H' ? true : false;
-
+  mol::AtomHandle ah;
   if (alt_loc!=' ') {
     // Check if there is already a atom with the same name.
     mol::AtomHandle me=curr_residue_.FindAtom(aname);
@@ -562,15 +537,31 @@ void PDBReader::ParseAndAddAtom(const StringRef& line, int line_num,
                      "with name " << aname << ", but without an alt loc");
         return;
       }
+      return;
     } else {
-      mol::AtomHandle ah=editor.InsertAltAtom(curr_residue_, aname,
-                                              String(1, alt_loc), apos, aprop);
+      ah=editor.InsertAltAtom(curr_residue_, aname,
+                              String(1, alt_loc), apos, s_ele);
       ++atom_count_;
     }
   } else {
-    mol::AtomHandle ah = editor.InsertAtom(curr_residue_, aname, apos, aprop);
+    ah=editor.InsertAtom(curr_residue_, aname, apos, s_ele);
     ++atom_count_;
   }
+  if(is_pqr_) {
+    if (radius.first) {
+      ah.SetRadius(radius.second);
+    }
+  }
+  if (temp.first) {
+    ah.SetBFactor(temp.second);
+  }
+  if (occ.first) {
+    ah.SetOccupancy(occ.second);
+  }
+  if (charge.first) {
+    ah.SetCharge(charge.second);
+  }
+  ah.SetHetAtom(record_type[0]=='H');
 }
 
 void PDBReader::ParseHelixEntry(const StringRef& line)
diff --git a/modules/io/src/mol/pdb_writer.cc b/modules/io/src/mol/pdb_writer.cc
index 8b16c2cce992fd7bf61675d315a00ca30178d581..8ab50da6428a8193bf420f8021d6bbea27a35f3b 100644
--- a/modules/io/src/mol/pdb_writer.cc
+++ b/modules/io/src/mol/pdb_writer.cc
@@ -197,7 +197,7 @@ public:
   virtual bool VisitAtom(const mol::AtomHandle& atom) {
     counter_++;
     write_atom(ostr_, line_, atom, counter_, is_pqr_, charmm_style_);
-    if (atom.GetAtomProps().is_hetatm) {
+    if (atom.IsHetAtom()) {
       atom_indices_[atom.GetHashCode()]=counter_;
     }
     return true;
@@ -268,7 +268,7 @@ public:
 private:
 public:
   virtual bool VisitAtom(const mol::AtomHandle& atom) {
-    if (atom.GetAtomProps().is_hetatm) {
+    if (atom.IsHetAtom()) {
       bool has_partner=false;
       int atom_index=atom_indices_[atom.GetHashCode()];
       mol::AtomHandleList partners=atom.GetBondPartners();
diff --git a/modules/io/src/mol/sdf_reader.cc b/modules/io/src/mol/sdf_reader.cc
index 4427850ea6678b6a9a6cb639e3e92e600c9a30a8..a7f70c916adf46b04133aca145d0809b721c3836 100644
--- a/modules/io/src/mol/sdf_reader.cc
+++ b/modules/io/src/mol/sdf_reader.cc
@@ -196,17 +196,12 @@ void SDFReader::ParseAndAddAtom(const String& line, int line_num,
 
   String ele=boost::trim_copy(s_ele);
   String aname=boost::lexical_cast<String>(anum);
-
-  mol::AtomProp aprop;
-  aprop.element=ele;
-  aprop.radius=conop::Conopology::Instance().GetDefaultAtomRadius(ele);
-  aprop.mass=conop::Conopology::Instance().GetDefaultAtomMass(ele);
-  aprop.is_hetatm=hetatm;
-
+  
+  Real charge=0.0;  
   try {
-    aprop.charge=boost::lexical_cast<Real>(boost::trim_copy(s_charge));
-    if(aprop.charge != 0) {
-      aprop.charge=4-aprop.charge;
+    charge=boost::lexical_cast<Real>(boost::trim_copy(s_charge));
+    if (charge!=0) {
+      charge=4-charge;
     } //4-sdf_charge=real_charge if not 0
   } catch(boost::bad_lexical_cast&) {
     String msg="Bad atom line %d: Can't convert charge"
@@ -216,7 +211,9 @@ void SDFReader::ParseAndAddAtom(const String& line, int line_num,
 
   LOG_DEBUG("adding atom " << aname << " (" << s_ele << ") @" << apos);
 
-  editor.InsertAtom(curr_residue_, aname,apos,aprop);
+  mol::AtomHandle atom=editor.InsertAtom(curr_residue_, aname,apos, ele);  
+  atom.SetHetAtom(hetatm);
+  atom.SetCharge(charge);
 }
 
 
@@ -257,10 +254,12 @@ void SDFReader::ParseAndAddBond(const String& line, int line_num,
 
   mol::AtomHandle first,second;
 
-  first = ent.FindAtom(curr_chain_.GetName(), mol::ResNum(residue_count_), first_name);
-  second = ent.FindAtom(curr_chain_.GetName(), mol::ResNum(residue_count_), second_name);
+  first = ent.FindAtom(curr_chain_.GetName(), mol::ResNum(residue_count_), 
+                       first_name);
+  second = ent.FindAtom(curr_chain_.GetName(), mol::ResNum(residue_count_), 
+                        second_name);
 
-  if(first.IsValid() && second.IsValid()) {
+  if (first.IsValid() && second.IsValid()) {
     bond = editor.Connect(first, second);
     bond.SetBondOrder(type);
   } else {
@@ -269,7 +268,8 @@ void SDFReader::ParseAndAddBond(const String& line, int line_num,
     throw IOException(str(format(msg) % line_num % first % second));
   }
 
-  LOG_DEBUG("adding bond " << s_first_name << " " << s_second_name << " (" << s_type << ") ");
+  LOG_DEBUG("adding bond " << s_first_name << " " << s_second_name << " (" 
+            << s_type << ") ");
 }
 
 }}
diff --git a/modules/io/tests/test_io_pdb.cc b/modules/io/tests/test_io_pdb.cc
index df8ff5295dc686bbcf12c281b649a66a7218ff0c..1c9218aa4373fededd1b5132f016a465bd87bd98 100644
--- a/modules/io/tests/test_io_pdb.cc
+++ b/modules/io/tests/test_io_pdb.cc
@@ -67,10 +67,10 @@ BOOST_AUTO_TEST_CASE(atom_record)
   BOOST_CHECK_EQUAL(a1.GetResidue().GetChain().GetName(), "A");  
   
   BOOST_CHECK_EQUAL(a1.GetPos(), geom::Vec3(16.0, 64.0, 8.0));
-  BOOST_CHECK_EQUAL(a1.GetAtomProps().b_factor, 1.0);
-  BOOST_CHECK_EQUAL(a1.GetAtomProps().occupancy, 0.5);  
-  BOOST_CHECK_EQUAL(a1.GetAtomProps().element, "N");
-  BOOST_CHECK_EQUAL(a1.GetAtomProps().is_hetatm, false);
+  BOOST_CHECK_EQUAL(a1.GetBFactor(), 1.0);
+  BOOST_CHECK_EQUAL(a1.GetOccupancy(), 0.5);  
+  BOOST_CHECK_EQUAL(a1.GetElement(), "N");
+  BOOST_CHECK_EQUAL(a1.IsHetAtom(), false);
   mol::AtomHandle a2=ent.FindAtom(" ", mol::ResNum(1), "CA");
   BOOST_REQUIRE(a2.IsValid());  
   BOOST_CHECK_EQUAL(a2.GetName(), "CA");
@@ -78,10 +78,10 @@ BOOST_AUTO_TEST_CASE(atom_record)
   BOOST_CHECK_EQUAL(a2.GetResidue().GetChain().GetName(), " ");  
   
   BOOST_CHECK_EQUAL(a2.GetPos(), geom::Vec3(32.0, -128.0, -2.5));
-  BOOST_CHECK_EQUAL(a2.GetAtomProps().b_factor, 128.0);
-  BOOST_CHECK_EQUAL(a2.GetAtomProps().occupancy, 1.0);  
-  BOOST_CHECK_EQUAL(a2.GetAtomProps().element, "C");
-  BOOST_CHECK_EQUAL(a2.GetAtomProps().is_hetatm, true);
+  BOOST_CHECK_EQUAL(a2.GetBFactor(), 128.0);
+  BOOST_CHECK_EQUAL(a2.GetOccupancy(), 1.0);  
+  BOOST_CHECK_EQUAL(a2.GetElement(), "C");
+  BOOST_CHECK_EQUAL(a2.IsHetAtom(), true);
 }
 
 BOOST_AUTO_TEST_CASE(end_record)
@@ -162,16 +162,16 @@ BOOST_AUTO_TEST_CASE(anisou_record)
   BOOST_REQUIRE(ent.GetAtomCount()==1);
   mol::AtomHandle a1=ent.FindAtom("A", mol::ResNum(7), "N");
   BOOST_REQUIRE(a1.IsValid());
-  mol::AtomProp props=a1.GetAtomProps();
-  BOOST_CHECK_CLOSE(Real( 0.0100), props.anisou(0, 0), Real(1e-4));
-  BOOST_CHECK_CLOSE(Real(-0.0016), props.anisou(1, 0), Real(1e-4));
-  BOOST_CHECK_CLOSE(Real(-0.0026), props.anisou(2, 0), Real(1e-4));
-  BOOST_CHECK_CLOSE(Real(-0.0016), props.anisou(0, 1), Real(1e-4));
-  BOOST_CHECK_CLOSE(Real( 0.0110), props.anisou(1, 1), Real(1e-4));
-  BOOST_CHECK_CLOSE(Real(-0.0054), props.anisou(2, 1), Real(1e-4));
-  BOOST_CHECK_CLOSE(Real(-0.0026), props.anisou(0, 2), Real(1e-4));
-  BOOST_CHECK_CLOSE(Real(-0.0054), props.anisou(1, 2), Real(1e-4));
-  BOOST_CHECK_CLOSE(Real( 0.0120), props.anisou(2, 2), Real(1e-4));    
+  const geom::Mat3& anisou=a1.GetAnisou();
+  BOOST_CHECK_CLOSE(Real( 0.0100), anisou(0, 0), Real(1e-4));
+  BOOST_CHECK_CLOSE(Real(-0.0016), anisou(1, 0), Real(1e-4));
+  BOOST_CHECK_CLOSE(Real(-0.0026), anisou(2, 0), Real(1e-4));
+  BOOST_CHECK_CLOSE(Real(-0.0016), anisou(0, 1), Real(1e-4));
+  BOOST_CHECK_CLOSE(Real( 0.0110), anisou(1, 1), Real(1e-4));
+  BOOST_CHECK_CLOSE(Real(-0.0054), anisou(2, 1), Real(1e-4));
+  BOOST_CHECK_CLOSE(Real(-0.0026), anisou(0, 2), Real(1e-4));
+  BOOST_CHECK_CLOSE(Real(-0.0054), anisou(1, 2), Real(1e-4));
+  BOOST_CHECK_CLOSE(Real( 0.0120), anisou(2, 2), Real(1e-4));    
 }
 
 BOOST_AUTO_TEST_CASE(only_66_cols)
@@ -210,12 +210,10 @@ BOOST_AUTO_TEST_CASE(write_atom)
   mol::XCSEditor edi=ent.RequestXCSEditor();
   mol::ChainHandle ch=edi.InsertChain("A");
   mol::ResidueHandle r=edi.AppendResidue(ch, "GLY");
-  mol::AtomProp c_prop;
-  c_prop.element="C";
-  c_prop.occupancy=1.0;
-  c_prop.b_factor=128.0;
-  mol::AtomHandle a=edi.InsertAtom(r, "CA", geom::Vec3(32.0, -128.0, -2.5), 
-                                   c_prop);
+
+  mol::AtomHandle a=edi.InsertAtom(r, "CA", geom::Vec3(32.0, -128.0, -2.5), "C");
+  a.SetOccupancy(1.0);
+  a.SetBFactor(128.0);
   writer.Write(ent);
   String s=out.str();
   BOOST_CHECK_EQUAL(s.substr(0, 54), 
@@ -233,14 +231,12 @@ BOOST_AUTO_TEST_CASE(write_hetatom)
   mol::XCSEditor edi=ent.RequestXCSEditor();
   mol::ChainHandle ch=edi.InsertChain("A");
   mol::ResidueHandle r=edi.AppendResidue(ch, "CA");
-  mol::AtomProp c_prop;
-  c_prop.element="CA";
-  c_prop.is_hetatm=true;
-  c_prop.mass=40.01;
-  c_prop.occupancy=1.0;
-  c_prop.b_factor=40.75;
   mol::AtomHandle a=edi.InsertAtom(r, "CA", geom::Vec3(32.0, -128.0, -2.5), 
-                                   c_prop);
+                                   "CA");
+  a.SetHetAtom(true);
+  a.SetMass(40.01);
+  a.SetOccupancy(1.0);
+  a.SetBFactor(40.75);
   writer.Write(ent);
   String s=out.str();
   BOOST_CHECK_EQUAL(s.substr(0, 54), 
diff --git a/modules/io/tests/test_io_sdf.cc b/modules/io/tests/test_io_sdf.cc
index bbf858427da81a44a098a997b28682a1cb205073..db108e4c52e35ef12c3e9fb7abe1c03a3216e841 100644
--- a/modules/io/tests/test_io_sdf.cc
+++ b/modules/io/tests/test_io_sdf.cc
@@ -60,7 +60,7 @@ BOOST_AUTO_TEST_CASE(simple_sdf)
   BOOST_CHECK_EQUAL(eh.GetChainCount(), 1);
   BOOST_CHECK_EQUAL(eh.GetAtomCount(),  6);
   BOOST_CHECK_EQUAL(eh.GetBondCount(),  6);
-  BOOST_CHECK_CLOSE(eh.GetMass(), Real(121.545502), Real(1e-4));
+  BOOST_CHECK_CLOSE(eh.GetMass(), Real(121.546997), Real(1e-4));
 
   // check atom/bond types
   mol::AtomHandle ah=eh.GetAtomList()[0];
@@ -70,7 +70,7 @@ BOOST_AUTO_TEST_CASE(simple_sdf)
   BOOST_CHECK_EQUAL(ah2.GetElement(), "Cl");
   BOOST_CHECK_CLOSE(ah.GetRadius(),  Real(1.55), Real(1e-2));
   BOOST_CHECK_CLOSE(ah2.GetRadius(), Real(1.75), Real(1e-2));
-  BOOST_CHECK_CLOSE(ah.GetMass(),  Real(14.0067), Real(1e-4));
+  BOOST_CHECK_CLOSE(ah.GetMass(),  Real(14.007), Real(1e-4));
   BOOST_CHECK_CLOSE(ah2.GetMass(), Real(35.453), Real(1e-3));
   BOOST_CHECK_EQUAL(ah.GetBondCount(),  3);
   BOOST_CHECK_EQUAL(ah2.GetBondCount(), 1);
diff --git a/modules/mol/alg/src/entity_to_density.cc b/modules/mol/alg/src/entity_to_density.cc
index 269f23add94f340c0b3f4eb40184b9feadc81bf7..6a15ac44fc68fd179f19b5f1d9405b259ecc3923 100644
--- a/modules/mol/alg/src/entity_to_density.cc
+++ b/modules/mol/alg/src/entity_to_density.cc
@@ -135,7 +135,7 @@ public:
       bool found = false;
       while (found != true && table_iter!=scatt_props_table_.end())
       {
-        if ( (*table_iter).element == (*iterator).GetAtomProps().element)
+        if ( (*table_iter).element == (*iterator).GetElement())
         {        
           geom::Vec3 coord = (*iterator).GetPos();
 
@@ -287,7 +287,7 @@ public:
                                              scatt_props_table_.begin();
       bool found = false;
       while (found != true && table_iter!=scatt_props_table_.end()) {
-        if ((*table_iter).element == (*iterator).GetAtomProps().element) {
+        if ((*table_iter).element == (*iterator).GetElement()) {
           found = true;
           Real a = (*table_iter).atomic_weight;
           geom::Vec3 coord = (*iterator).GetPos();
diff --git a/modules/mol/alg/tests/test_superposition.cc b/modules/mol/alg/tests/test_superposition.cc
index c410a768ac11b18155fca970f9f1fe23b1c0ec40..599e0e31ca8461a1302b6f9ec8b77131a66cbcb6 100644
--- a/modules/mol/alg/tests/test_superposition.cc
+++ b/modules/mol/alg/tests/test_superposition.cc
@@ -33,21 +33,18 @@ using namespace ost::mol::alg;
 struct Fixture {
   Fixture() {
 
-    AtomProp prop;
-    prop.element="C";
-
     e=CreateEntity();
     XCSEditor ed=e.RequestXCSEditor();
     c=ed.InsertChain("A");
     r=ed.AppendResidue(c, "XXX");
-    ab=ed.InsertAtom(r, "A", geom::Vec3(-5,-5,-5), prop);
-    ac=ed.InsertAtom(r, "B", geom::Vec3(-5, 5,-5), prop);
-    ad=ed.InsertAtom(r, "C", geom::Vec3(-5, 5, 5), prop);
-    ae=ed.InsertAtom(r, "D", geom::Vec3(-5,-5, 5), prop);
-    af=ed.InsertAtom(r, "E", geom::Vec3(5,-5, 5), prop);
-    ag=ed.InsertAtom(r, "F", geom::Vec3(5,-5,-5), prop);
-    ah=ed.InsertAtom(r, "G", geom::Vec3(5, 5,-5), prop);
-    ai=ed.InsertAtom(r, "H", geom::Vec3(5, 5, 5), prop);
+    ab=ed.InsertAtom(r, "A", geom::Vec3(-5,-5,-5), "C");
+    ac=ed.InsertAtom(r, "B", geom::Vec3(-5, 5,-5), "C");
+    ad=ed.InsertAtom(r, "C", geom::Vec3(-5, 5, 5), "C");
+    ae=ed.InsertAtom(r, "D", geom::Vec3(-5,-5, 5), "C");
+    af=ed.InsertAtom(r, "E", geom::Vec3(5,-5, 5), "C");
+    ag=ed.InsertAtom(r, "F", geom::Vec3(5,-5,-5), "C");
+    ah=ed.InsertAtom(r, "G", geom::Vec3(5, 5,-5), "C");
+    ai=ed.InsertAtom(r, "H", geom::Vec3(5, 5, 5), "C");
 
 
     BondHandle b1=ed.Connect(ab, ad);
diff --git a/modules/mol/base/pymod/export_atom.cc b/modules/mol/base/pymod/export_atom.cc
index 13fc2ee554980d1941bb074db842f2364653bac4..fe12a2f64e87b484b0cfa7cd0fdde8080dc38906 100644
--- a/modules/mol/base/pymod/export_atom.cc
+++ b/modules/mol/base/pymod/export_atom.cc
@@ -42,13 +42,7 @@ void export_Atom()
     .add_property("qualified_name", &AtomBase::GetQualifiedName)
     .def("IsValid", &AtomBase::IsValid)
     .def(self_ns::str(self))
-    .def("GetAtomProps", &AtomBase::GetAtomProps,
-         return_value_policy<copy_const_reference>())
-    .def("SetAtomProps", &AtomBase::SetAtomProps, args("prop"))
     .def("GetIndex", &AtomBase::GetIndex)
-    .add_property("prop",
-                  make_function(&AtomBase::GetAtomProps,
-                                return_value_policy<copy_const_reference>()))
     .add_property("pos",
                   make_function(&AtomBase::GetPos,
                                 return_value_policy<copy_const_reference>()))
@@ -61,15 +55,19 @@ void export_Atom()
     .def("GetRadius", &AtomBase::GetRadius)
     .def("GetElement", &AtomBase::GetElement, 
          return_value_policy<copy_const_reference>())
+    .def("SetElement", &AtomBase::SetElement)
     .def("GetCharge", &AtomBase::GetCharge)
     .def("GetMass", &AtomBase::GetMass)
-    .def("IsHetAtom", &AtomBase::IsHetAtom)    
+    .def("IsHetAtom", &AtomBase::IsHetAtom)
+    .def("SetMass", &AtomBase::SetMass)
+    .def("SetCharge", &AtomBase::SetCharge)
     .add_property("radius", &AtomBase::GetRadius)
     .add_property("element", make_function(&AtomBase::GetElement, 
-                  return_value_policy<copy_const_reference>()))
-    .add_property("is_hetatom", &AtomBase::IsHetAtom)
-    .add_property("charge", &AtomBase::GetCharge)
-    .add_property("mass", &AtomBase::GetMass)
+                  return_value_policy<copy_const_reference>()),
+                  &AtomBase::SetElement)
+    .add_property("is_hetatom", &AtomBase::IsHetAtom, &AtomBase::SetHetAtom)
+    .add_property("charge", &AtomBase::GetCharge, &AtomBase::SetCharge)
+    .add_property("mass", &AtomBase::GetMass, &AtomBase::SetMass)
   ;
   generic_prop_def<AtomBase>(atom_base);
 
@@ -96,15 +94,5 @@ void export_Atom()
     .def(vector_indexing_suite<AtomHandleList>())
     .def(ost::VectorAdditions<AtomHandleList>())
   ;
-  class_<AtomProp>("AtomProp", init<>())
-    .def_readwrite("element", &AtomProp::element)
-    .def_readwrite("radius", &AtomProp::radius)
-    .def_readwrite("charge", &AtomProp::charge)
-    .def_readwrite("mass", &AtomProp::mass)
-    .def_readwrite("occupancy", &AtomProp::occupancy)
-    .def_readwrite("b_factor", &AtomProp::b_factor)
-    .def_readwrite("is_hetatm", &AtomProp::is_hetatm)
-    .def_readwrite("anisou", &AtomProp::anisou)
-  ;
 }
 
diff --git a/modules/mol/base/src/CMakeLists.txt b/modules/mol/base/src/CMakeLists.txt
index 6b2967cc0f97c73fb93a405b7b6680a9b1717618..0a4314041d865a1611eb74c4532a141d15e50248 100644
--- a/modules/mol/base/src/CMakeLists.txt
+++ b/modules/mol/base/src/CMakeLists.txt
@@ -26,7 +26,6 @@ query_error.cc
 query_state.cc
 residue_base.cc
 residue_handle.cc
-residue_prop.cc
 residue_view.cc
 surface_builder.cc
 surface_handle.cc
@@ -42,7 +41,6 @@ xcs_editor.cc)
 set(OST_MOL_HEADERS
 atom_base.hh
 atom_handle.hh
-atom_prop.hh
 atom_view.hh
 bond_handle.hh
 bond_table.hh
diff --git a/modules/mol/base/src/atom_base.cc b/modules/mol/base/src/atom_base.cc
index 2818844b012bb0ac1d8ef0d2f088fb7435128434..6de12176fc090aa013d084ecf1bd178153778011 100644
--- a/modules/mol/base/src/atom_base.cc
+++ b/modules/mol/base/src/atom_base.cc
@@ -75,19 +75,6 @@ std::vector<String> AtomBase::GetAltGroupNames() const
   return impl_->GetResidue()->GetAltAtomGroupNames(Impl());
 }
 
-
-const AtomProp& AtomBase::GetAtomProps() const 
-{
-  this->CheckValidity();  
-  return impl_->GetAtomProps();
-}
-
-void AtomBase::SetAtomProps(const AtomProp& prop) 
-{
-  this->CheckValidity();  
-  impl_->GetAtomProps()=prop;
-}
-
 impl::AtomImplPtr& AtomBase::Impl() 
 {
   return impl_;
@@ -134,47 +121,98 @@ std::ostream& operator<<(std::ostream& os, const AtomBase& atom)
 Real AtomBase::GetRadius() const
 {
   this->CheckValidity();
-  return Impl()->GetAtomProps().radius;
+  return Impl()->GetRadius();
 }
 
 
 const String& AtomBase::GetElement() const
 {
   this->CheckValidity();
-  return Impl()->GetAtomProps().element;
+  return Impl()->GetElement();
 }
 
 
 bool AtomBase::IsHetAtom() const
 {
   this->CheckValidity();
-  return Impl()->GetAtomProps().is_hetatm;
+  return Impl()->IsHetAtom();
 }
 
 Real AtomBase::GetBFactor() const
 {
   this->CheckValidity();
-  return Impl()->GetAtomProps().b_factor;
+  return Impl()->GetBFactor();
+}
+void AtomBase::SetElement(const String& element)
+{
+  this->CheckValidity();
+  Impl()->SetElement(element);
+}
+
+void AtomBase::SetBFactor(Real factor)
+{
+  this->CheckValidity();
+  Impl()->SetBFactor(factor);
+}
+
+void AtomBase::SetOccupancy(Real occ)
+{
+  this->CheckValidity();
+  Impl()->SetOccupancy(occ);
 }
 
 Real AtomBase::GetMass() const
 {
   this->CheckValidity();
-  return Impl()->GetAtomProps().mass;
+  return Impl()->GetMass();
 }
 
 Real AtomBase::GetCharge() const
 {
   this->CheckValidity();
-  return Impl()->GetAtomProps().charge;
+  return Impl()->GetCharge();
 }
 
 Real AtomBase::GetOccupancy() const
 {
   this->CheckValidity();
-  return Impl()->GetAtomProps().occupancy;
+  return Impl()->GetOccupancy();
+}
+
+void AtomBase::SetCharge(Real charge)
+{
+  this->CheckValidity();
+  Impl()->SetCharge(charge);
+}
+
+void AtomBase::SetRadius(Real radius)
+{
+  this->CheckValidity();
+  Impl()->SetCharge(radius);
+}
+
+const geom::Mat3& AtomBase::GetAnisou() const
+{
+  this->CheckValidity();
+  return Impl()->GetAnisou();
 }
 
+void AtomBase::SetAnisou(const geom::Mat3& anisou)
+{
+  this->CheckValidity();
+  Impl()->SetAnisou(anisou);
+}
+
+void AtomBase::SetMass(Real mass)
+{
+  this->CheckValidity();
+  Impl()->SetMass(mass);
+}
+void AtomBase::SetHetAtom(bool het)
+{
+  this->CheckValidity();
+  Impl()->SetHetAtom(het);
+}
 
 String AtomBase::GetStringProperty(Prop::ID prop_id) const
 {
diff --git a/modules/mol/base/src/atom_base.hh b/modules/mol/base/src/atom_base.hh
index 9777aea714732f090c4b2def487086e4031ad26f..189c5830a07d693a91939b01232345c3126650f5 100644
--- a/modules/mol/base/src/atom_base.hh
+++ b/modules/mol/base/src/atom_base.hh
@@ -75,16 +75,7 @@ public:
   geom::Vec3 GetAltPos(const String& alt_group) const;
   
   std::vector<String> GetAltGroupNames() const;
-    /// \name Atom properties
-  //@{
-  /// \brief Get atom properties such as element name, radius crystallographic
-  ///     occupancy and temperature factors.
-  ///
-  /// \sa      #SetAtomProps
-  const AtomProp& GetAtomProps() const;
-    
-  /// \brief  Set atom properties.
-  void SetAtomProps(const AtomProp& prop);
+
   //@} 
   
   /// \name Handle validity
@@ -134,6 +125,24 @@ public:
   /// The returned value may be zero for some structures
   Real GetBFactor() const;
   
+  
+  void SetBFactor(Real factor);
+  
+  void SetOccupancy(Real occ);
+  
+  
+  void SetCharge(Real charge);
+  
+  void SetMass(Real mass);
+  
+  void SetHetAtom(bool het);
+  
+  void SetRadius(Real radius);
+  
+  
+  const geom::Mat3& GetAnisou() const;
+  
+  void SetAnisou(const geom::Mat3& anisou);
   /// \brief get mass of atom
   /// 
   /// The returned value may be zero
@@ -153,6 +162,8 @@ public:
   /// \brief get atom implementation
   impl::AtomImplPtr& Impl();
 
+
+  void SetElement(const String& element);
 protected:
   
   GenericPropContainerImpl* GpImpl();
diff --git a/modules/mol/base/src/chain_view.cc b/modules/mol/base/src/chain_view.cc
index 1c5ba252e6c3d526ac711bb99f8031d860bda5e5..0e6458c388f6c9ee1cdde4c49eada4781330e3cd 100644
--- a/modules/mol/base/src/chain_view.cc
+++ b/modules/mol/base/src/chain_view.cc
@@ -381,7 +381,7 @@ geom::Vec3 ChainView::GetCenterOfMass() const
       ResidueView r=*i;
       for (AtomViewList::const_iterator j=r.GetAtomList().begin(),
           e2=r.GetAtomList().end(); j!=e2; ++j) {
-        center+=j->GetPos() * j->GetAtomProps().mass;
+        center+=j->GetPos() * j->GetMass();
       }
     }
     center/=mass;
diff --git a/modules/mol/base/src/editor_base.cc b/modules/mol/base/src/editor_base.cc
index 02f7d1744240d5b05fdf1d1a8240d67eb503ad7a..4ed9b6a4b3bcbf2bde6cf6e4183cefe13ef06bfb 100644
--- a/modules/mol/base/src/editor_base.cc
+++ b/modules/mol/base/src/editor_base.cc
@@ -78,29 +78,28 @@ void EditorBase::RenameChain(ChainHandle chain, const String& new_name)
 
 
 AtomHandle EditorBase::InsertAtom(ResidueHandle res, const String& name,
-                                  const geom::Vec3& pos,
-                                  const AtomProp& prop)
+                                  const geom::Vec3& pos, const String& ele)
 {
   CheckHandleValidity(res);
   ent_.Impl()->MarkTraceDirty();  
-  return AtomHandle(res.Impl()->InsertAtom(name, pos,prop));
+  return AtomHandle(res.Impl()->InsertAtom(name, pos, ele));
 }
 
 AtomHandle EditorBase::InsertAltAtom(ResidueHandle res, const String& name,
                                      const String& alt_group,
                                      const geom::Vec3& pos,
-                                     const AtomProp& prop) 
+                                     const String& ele) 
 {
   CheckHandleValidity(res);
   ent_.Impl()->MarkTraceDirty();
-  AtomHandle atom(res.Impl()->InsertAltAtom(name, alt_group, pos, prop));
+  AtomHandle atom(res.Impl()->InsertAltAtom(name, alt_group, pos, ele));
   this->UpdateTrace();
   return atom;
 }
 
 void EditorBase::AddAltAtomPos(const String& group,
-                                    const AtomHandle& atom,
-                                    const geom::Vec3& position) 
+                               const AtomHandle& atom,
+                               const geom::Vec3& position) 
 {
   CheckHandleValidity(atom);
   atom.GetResidue().Impl()->AddAltAtomPos(group, atom.Impl(), position);
diff --git a/modules/mol/base/src/editor_base.hh b/modules/mol/base/src/editor_base.hh
index 4354c82954f995340078c5bf7fafc289b43cd53c..e8a11272657de25b909201a73eca6fb2bb42e64e 100644
--- a/modules/mol/base/src/editor_base.hh
+++ b/modules/mol/base/src/editor_base.hh
@@ -28,7 +28,6 @@
 
 #include "entity_handle.hh"
 #include "residue_prop.hh"
-#include "atom_prop.hh"
 #include "editor_type_fw.hh"
 
 namespace ost { namespace mol {
@@ -116,17 +115,14 @@ public:
   ///     algorithms as well as most builders in the conop module rely on proper 
   ///     naming.
   /// \param pos is the position of the atom in global coordinates
-  /// \param prop are the atom's properties such as element, van der Waals 
-  ///     radius charge and so on. The default set of atom properties is  rather
-  ///     meaningless
   AtomHandle InsertAtom(ResidueHandle residue, const String& name, 
-                        const geom::Vec3& pos, const AtomProp& prop=AtomProp());
+                        const geom::Vec3& pos, const String& ele="");
 
   /// \brief Insert new atom with alternative position indicator
   /// \sa EditorBase::AddAltAtomPos(), ResidueHandle
   AtomHandle InsertAltAtom(ResidueHandle residue, const String& name, 
-                           const String& alt_group, const geom::Vec3& pos, 
-                           const AtomProp& prop=AtomProp());
+                           const String& alt_group, const geom::Vec3& pos,
+                           const String& ele="");
   /// \brief  Add alternative atom position
   /// \param group is the name of the alternative atom position group. If no 
   ///     group of that name exists, it will be created.
@@ -138,7 +134,7 @@ public:
   ///         is the alternative position
   /// \sa EditorBase::InsertAltAtom(), ResidueHandle
   void AddAltAtomPos(const String& group, const AtomHandle& atom, 
-                          const geom::Vec3& position);                           
+                     const geom::Vec3& position);
   //\}
   
   /// \brief connect two atoms with bond
diff --git a/modules/mol/base/src/impl/CMakeLists.txt b/modules/mol/base/src/impl/CMakeLists.txt
index 41ddeb0b5672a5081a97b63ec1a6a5c3cdc497d5..45a453ac1901307c628aeccb2f427a0293d480d3 100644
--- a/modules/mol/base/src/impl/CMakeLists.txt
+++ b/modules/mol/base/src/impl/CMakeLists.txt
@@ -10,12 +10,14 @@ query_impl.cc
 residue_impl.cc
 surface_impl.cc
 torsion_impl.cc
+atom_prop.cc
 PARENT_SCOPE
 )
 
 set(OST_MOL_IMPL_HEADERS
 pointer_iterator.hh
 atom_group.hh
+atom_prop.hh
 atom_impl.hh
 atom_impl_fw.hh
 chain_impl.hh
diff --git a/modules/mol/base/src/impl/atom_impl.cc b/modules/mol/base/src/impl/atom_impl.cc
index 698bc863f2083117655a67901aa8bb7d2fa5bfe0..f355416fa95cfdfd548a27b3cdc7ef613225dd91 100644
--- a/modules/mol/base/src/impl/atom_impl.cc
+++ b/modules/mol/base/src/impl/atom_impl.cc
@@ -40,12 +40,13 @@ AtomImpl::AtomImpl(const EntityImplPtr& e,
                    const ResidueImplPtr& r,
                    const String& n,
                    const geom::Vec3& p,
-                   const AtomProp& prop,
+                   const String& ele,
                    unsigned long index):
   res_(r),
   name_(n),
   pos_(p),
-  prop_(prop),
+  element_(ele),
+  is_hetatm_(false),
   prim_connector_(),
   connector_list_(),
   fragment_(),
@@ -56,6 +57,7 @@ AtomImpl::AtomImpl(const EntityImplPtr& e,
   geom::Mat4 transf_matrix = ent.GetTransformationMatrix();
   geom::Vec3 transf_pos = geom::Vec3(transf_matrix*geom::Vec4(p));
   tf_pos_ = transf_pos;
+  prop_=AtomProp::GetDefaultProps(element_);
 }
 
 void AtomImpl::AddSecondaryConnector(const ConnectorImplP& bp)
@@ -319,11 +321,11 @@ Real AtomImpl::GetFloatProperty(Prop::ID prop_id) const
     case Prop::AZ:
       return pos_[2];            
     case Prop::OCC:
-      return prop_.occupancy;
+      return occupancy_;
     case Prop::ABFAC:
-      return prop_.b_factor;
+      return b_factor_;
     case Prop::ACHARGE:
-      return prop_.charge;
+      return prop_->charge;
     default:
       throw PropertyError(prop_id);
   }
@@ -335,7 +337,7 @@ String AtomImpl::GetStringProperty(Prop::ID prop_id) const
     case Prop::ANAME:
       return name_;
     case Prop::ELE:
-      return prop_.element;
+      return element_;
     default:
       throw PropertyError(prop_id);
   }
diff --git a/modules/mol/base/src/impl/atom_impl.hh b/modules/mol/base/src/impl/atom_impl.hh
index 9fcbbf77636a50e0871bf6b01ea70bc28c8a157d..90507b1029575ad86c811d68a07c7142a514d438 100644
--- a/modules/mol/base/src/impl/atom_impl.hh
+++ b/modules/mol/base/src/impl/atom_impl.hh
@@ -24,7 +24,7 @@
 #include <ost/mol/module_config.hh>
 #include <ost/geom/geom.hh>
 #include <ost/mol/entity_visitor_fw.hh>
-#include <ost/mol/atom_prop.hh>
+#include <ost/mol/impl/atom_prop.hh>
 
 #include <ost/mol/impl/atom_impl_fw.hh>
 #include <ost/mol/impl/residue_impl_fw.hh>
@@ -50,7 +50,7 @@ class AtomImpl: public GenericPropContainerImpl,
                 public boost::enable_shared_from_this<AtomImpl> {
 public:
    AtomImpl(const EntityImplPtr& ent, const ResidueImplPtr& res,
-            const String& name, const geom::Vec3& pos, const AtomProp& prop,
+            const String& name, const geom::Vec3& pos, const String& ele,
             unsigned long index);
 
   ~AtomImpl();
@@ -70,11 +70,7 @@ public:
   void SetTransformedPos(const geom::Vec3& pos) { tf_pos_=pos; }
 
   void SetOriginalPos(const geom::Vec3& pos) { pos_=pos; }
-  
-  const AtomProp& GetAtomProps() const {return prop_;}
-  
-  AtomProp& GetAtomProps() {return prop_;}
-  
+      
   ResidueImplPtr GetResidue() const;
 
   void SetPrimaryConnector(const ConnectorImplP& bp) {
@@ -111,11 +107,93 @@ public:
   void SetTraced(bool f) {set_state_bit(1,f);}
   bool IsTraced() const {return get_state_bit(1);}
 
-  unsigned int GetState() const {
+
+  Real GetBFactor() const { return b_factor_; }
+  
+  const String& GetElement() const { return element_; }  
+  
+  void SetElement(const String& ele) 
+  { 
+    if (element_!=ele) {
+      element_=ele;
+      prop_=impl::AtomProp::GetDefaultProps(element_);
+    }
+  }
+  
+  void SetAnisou(const geom::Mat3& anisou)
+  {
+    if (prop_->is_default && prop_->anisou!=anisou) {
+      prop_=new AtomProp(*prop_);
+      prop_->is_default=false;
+      prop_->has_anisou=true;
+    }
+
+    prop_->anisou=anisou;
+  }
+  
+  const geom::Mat3& GetAnisou() const
+  {
+    return prop_->anisou;
+  }
+  void SetBFactor(Real factor) 
+  { 
+    b_factor_=factor;
+  }  
+  
+  void SetOccupancy(Real occ)
+  {
+    occupancy_=occ;
+  }
+  
+  Real GetOccupancy() const 
+  { 
+    return occupancy_; 
+  }
+  
+  Real GetRadius() const { return prop_->radius; }
+  
+  Real GetMass() const { return prop_->mass; }
+  Real GetCharge() const { return prop_->charge; }
+  
+  bool IsHetAtom() { return is_hetatm_; }
+  
+  void SetHetAtom(bool het) { is_hetatm_=het; }
+  
+  void SetMass(Real mass)
+  {
+    if (prop_->is_default && prop_->mass!=mass) {
+      prop_=new AtomProp(*prop_);
+      prop_->is_default=false;
+    }
+    prop_->mass=mass;
+  }
+  
+  void SetRadius(Real radius)
+  {
+    if (prop_->is_default && prop_->radius!=radius) {
+      prop_=new AtomProp(*prop_);
+      prop_->is_default=false;
+    }
+    prop_->radius=radius;
+  }
+  
+  void SetCharge(Real charge)
+  {
+    if (prop_->is_default && prop_->charge!=charge) {
+      prop_=new AtomProp(*prop_);
+      prop_->is_default=false;
+    }
+    prop_->charge=charge;
+  }
+  
+  
+  unsigned int GetState() const 
+  {
     return state_;
   }
   
-  void SetState(int state) {
+  void SetState(int state) 
+  {
     state_=state;
   }
   
@@ -144,11 +222,14 @@ public:
                      
 private:
   ResidueImplW res_;
-  String name_;
-  geom::Vec3 pos_;
-  geom::Vec3 tf_pos_;
-  AtomProp prop_;
-
+  String       name_;
+  geom::Vec3   pos_;
+  geom::Vec3   tf_pos_;
+  Real         occupancy_;
+  Real         b_factor_;
+  String       element_;
+  AtomProp*    prop_;
+  bool         is_hetatm_;
   ConnectorImplP prim_connector_;
   ConnectorImplList connector_list_;
   FragmentImplP fragment_;
diff --git a/modules/mol/base/src/impl/atom_prop.cc b/modules/mol/base/src/impl/atom_prop.cc
new file mode 100644
index 0000000000000000000000000000000000000000..dc00c94b048d134aba7520377ee93014c04f34e3
--- /dev/null
+++ b/modules/mol/base/src/impl/atom_prop.cc
@@ -0,0 +1,157 @@
+//------------------------------------------------------------------------------
+// This file is part of the OpenStructure project <www.openstructure.org>
+//
+// Copyright (C) 2008-2010 by the OpenStructure authors
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License as published by the Free
+// Software Foundation; either version 3.0 of the License, or (at your option)
+// any later version.
+// This library is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
+// details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this library; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+//------------------------------------------------------------------------------
+#include "atom_prop.hh"
+
+namespace ost { namespace mol { namespace impl {
+
+std::map<String, AtomProp> AtomProp::defaults_;
+
+void AtomProp::Init()
+{
+  defaults_["AC"]=AtomProp(2.0000, 227.0000);
+  defaults_["AG"]=AtomProp(1.7200, 107.8680);
+  defaults_["AL"]=AtomProp(2.0000, 26.9820);
+  defaults_["AM"]=AtomProp(2.0000, 243.0000);
+  defaults_["AR"]=AtomProp(1.8800, 39.9480);
+  defaults_["AS"]=AtomProp(1.8500, 74.9220);
+  defaults_["AT"]=AtomProp(2.0000, 210.0000);
+  defaults_["AU"]=AtomProp(1.6600, 196.9670);
+  defaults_["B"]=AtomProp(2.0000, 10.8110);
+  defaults_["BA"]=AtomProp(2.0000, 137.3270);
+  defaults_["BE"]=AtomProp(2.0000, 9.0120);
+  defaults_["BH"]=AtomProp(2.0000, 264.0000);
+  defaults_["BI"]=AtomProp(2.0000, 208.9800);
+  defaults_["BK"]=AtomProp(2.0000, 247.0000);
+  defaults_["BR"]=AtomProp(1.8500, 79.9040);
+  defaults_["C"]=AtomProp(1.7000, 12.0110);
+  defaults_["CA"]=AtomProp(2.0000, 40.0780);
+  defaults_["CD"]=AtomProp(1.5800, 112.4110);
+  defaults_["CE"]=AtomProp(2.0000, 140.1160);
+  defaults_["CF"]=AtomProp(2.0000, 251.0000);
+  defaults_["CL"]=AtomProp(1.7500, 35.4530);
+  defaults_["CM"]=AtomProp(2.0000, 247.0000);
+  defaults_["CO"]=AtomProp(2.0000, 58.9330);
+  defaults_["CR"]=AtomProp(2.0000, 51.9960);
+  defaults_["CS"]=AtomProp(2.0000, 132.9050);
+  defaults_["CU"]=AtomProp(1.4000, 63.5460);
+  defaults_["DB"]=AtomProp(2.0000, 262.0000);
+  defaults_["DS"]=AtomProp(2.0000, 271.0000);
+  defaults_["DY"]=AtomProp(2.0000, 162.5000);
+  defaults_["ER"]=AtomProp(2.0000, 167.2600);
+  defaults_["ES"]=AtomProp(2.0000, 252.0000);
+  defaults_["EU"]=AtomProp(2.0000, 151.9640);
+  defaults_["F"]=AtomProp(1.4700, 18.9980);
+  defaults_["FE"]=AtomProp(2.0000, 55.8450);
+  defaults_["FM"]=AtomProp(2.0000, 257.0000);
+  defaults_["FR"]=AtomProp(2.0000, 223.0000);
+  defaults_["GA"]=AtomProp(1.8700, 69.7230);
+  defaults_["GD"]=AtomProp(2.0000, 157.2500);
+  defaults_["GE"]=AtomProp(2.0000, 72.6100);
+  defaults_["H"]=AtomProp(1.0900, 1.0080);
+  defaults_["HE"]=AtomProp(1.4000, 4.0030);
+  defaults_["HF"]=AtomProp(2.0000, 178.4900);
+  defaults_["HG"]=AtomProp(1.5500, 200.5900);
+  defaults_["HO"]=AtomProp(2.0000, 164.9300);
+  defaults_["HS"]=AtomProp(2.0000, 269.0000);
+  defaults_["I"]=AtomProp(1.9800, 126.9040);
+  defaults_["IN"]=AtomProp(1.9300, 114.8180);
+  defaults_["IR"]=AtomProp(2.0000, 192.2170);
+  defaults_["K"]=AtomProp(2.7500, 39.0980);
+  defaults_["KR"]=AtomProp(2.0200, 83.8000);
+  defaults_["LA"]=AtomProp(2.0000, 138.9060);
+  defaults_["LI"]=AtomProp(1.8200, 6.9410);
+  defaults_["LR"]=AtomProp(1.5000, 103.0000);
+  defaults_["LU"]=AtomProp(2.0000, 174.9670);
+  defaults_["MD"]=AtomProp(2.0000, 258.0000);
+  defaults_["MG"]=AtomProp(1.7300, 24.3050);
+  defaults_["MN"]=AtomProp(2.0000, 54.9380);
+  defaults_["MO"]=AtomProp(2.0000, 95.9400);
+  defaults_["MT"]=AtomProp(2.0000, 268.0000);
+  defaults_["N"]=AtomProp(1.5500, 14.0070);
+  defaults_["NA"]=AtomProp(2.2700, 22.9910);
+  defaults_["NB"]=AtomProp(2.0000, 92.9060);
+  defaults_["ND"]=AtomProp(2.0000, 144.2400);
+  defaults_["NE"]=AtomProp(1.5400, 20.1800);
+  defaults_["NI"]=AtomProp(1.6300, 58.6930);
+  defaults_["NO"]=AtomProp(2.0000, 259.0000);
+  defaults_["NP"]=AtomProp(2.0000, 237.0000);
+  defaults_["O"]=AtomProp(1.5200, 15.9990);
+  defaults_["OS"]=AtomProp(2.0000, 190.2300);
+  defaults_["P"]=AtomProp(1.8000, 30.9740);
+  defaults_["PA"]=AtomProp(2.0000, 231.0360);
+  defaults_["PB"]=AtomProp(2.0200, 207.2000);
+  defaults_["PD"]=AtomProp(1.6300, 106.4200);
+  defaults_["PM"]=AtomProp(2.0000, 145.0000);
+  defaults_["PO"]=AtomProp(2.0000, 210.0000);
+  defaults_["PR"]=AtomProp(2.0000, 140.9080);
+  defaults_["PT"]=AtomProp(1.7200, 195.0780);
+  defaults_["PU"]=AtomProp(2.0000, 244.0000);
+  defaults_["RA"]=AtomProp(2.0000, 226.0000);
+  defaults_["RB"]=AtomProp(2.0000, 85.4680);
+  defaults_["RE"]=AtomProp(2.0000, 186.2070);
+  defaults_["RF"]=AtomProp(2.0000, 261.0000);
+  defaults_["RH"]=AtomProp(2.0000, 102.9060);
+  defaults_["RN"]=AtomProp(2.0000, 222.0000);
+  defaults_["RU"]=AtomProp(2.0000, 101.0700);
+  defaults_["S"]=AtomProp(1.8000, 32.0660);
+  defaults_["SB"]=AtomProp(2.0000, 121.7600);
+  defaults_["SC"]=AtomProp(2.0000, 44.9560);
+  defaults_["SE"]=AtomProp(1.9000, 78.9600);
+  defaults_["SG"]=AtomProp(2.0000, 266.0000);
+  defaults_["SI"]=AtomProp(2.1000, 28.0860);
+  defaults_["SM"]=AtomProp(2.0000, 150.3600);
+  defaults_["SN"]=AtomProp(2.1700, 118.7100);
+  defaults_["SR"]=AtomProp(2.0000, 87.6200);
+  defaults_["TA"]=AtomProp(2.0000, 180.9480);
+  defaults_["TB"]=AtomProp(2.0000, 158.9250);
+  defaults_["TC"]=AtomProp(2.0000, 98.0000);
+  defaults_["TE"]=AtomProp(2.0600, 127.6000);
+  defaults_["TH"]=AtomProp(2.0000, 232.0380);
+  defaults_["TI"]=AtomProp(2.0000, 47.8670);
+  defaults_["TL"]=AtomProp(1.9600, 204.3830);
+  defaults_["TM"]=AtomProp(2.0000, 168.9340);
+  defaults_["U"]=AtomProp(1.8600, 238.0290);
+  defaults_["V"]=AtomProp(2.0000, 50.9420);
+  defaults_["W"]=AtomProp(2.0000, 183.8400);
+  defaults_["XE"]=AtomProp(2.1600, 131.2900);
+  defaults_["Y"]=AtomProp(2.0000, 88.9060);
+  defaults_["YB"]=AtomProp(2.0000, 173.0400);
+  defaults_["ZN"]=AtomProp(1.3900, 65.3900);
+  defaults_["ZR"]=AtomProp(2.0000, 91.2240);
+
+  defaults_[""]=AtomProp(0.0, 0.0);
+
+}
+
+AtomProp* AtomProp::GetDefaultProps(const String& ele)  
+{
+  if (defaults_.empty()) {
+    AtomProp::Init();
+  }
+  String upper_ele=ele;
+  std::transform(upper_ele.begin(),upper_ele.end(),upper_ele.begin(),toupper);  
+  std::map<String, AtomProp>::iterator i=defaults_.find(upper_ele);
+  if (i!=defaults_.end()) {
+    return &i->second;
+  }
+  return &defaults_[""];
+}
+
+
+}}}
diff --git a/modules/mol/base/src/atom_prop.hh b/modules/mol/base/src/impl/atom_prop.hh
similarity index 68%
rename from modules/mol/base/src/atom_prop.hh
rename to modules/mol/base/src/impl/atom_prop.hh
index badf20f00898a70a416826bcdf9602fc04d2b9d4..95e3068ea44ae429340c6d1785e1c48154d29f5b 100644
--- a/modules/mol/base/src/atom_prop.hh
+++ b/modules/mol/base/src/impl/atom_prop.hh
@@ -19,38 +19,42 @@
 #ifndef OST_ATOM_PROP_HH
 #define OST_ATOM_PROP_HH
 
+#include <map>
 #include <ost/mol/module_config.hh>
 #include <ost/geom/mat3.hh>
 
-namespace ost { namespace mol {
-
+namespace ost { namespace mol { namespace impl {
 
 
 class DLLEXPORT_OST_MOL AtomProp {
 public:
   AtomProp()
-    : element(""), radius(0.0), occupancy(1.0),
-      b_factor(0.0), charge(0.0), mass(0.0),
-      is_hetatm(false), has_anisou(false),
-      ordinal(0), anisou(geom::Mat3()) {
-
+    : radius(0.0), charge(0.0), mass(0.0), has_anisou(false), is_default(true),
+      anisou(geom::Mat3()) 
+  {
   }
-  String        element;
+  AtomProp(Real r, Real m, Real c=0.0): radius(r), charge(c), 
+     mass(m), has_anisou(false), is_default(true)
+  { }
+  AtomProp(const AtomProp& rhs): radius(rhs.radius), charge(rhs.charge),
+    mass(rhs.mass), has_anisou(rhs.has_anisou), is_default(rhs.is_default),
+    anisou(rhs.anisou)
+  { }
   Real          radius;
-  Real          occupancy;
-  Real          b_factor;
   Real          charge;
   Real          mass;
-  bool          is_hetatm;
   bool          has_anisou;
-  
-  int           ordinal;
+  bool          is_default;
   geom::Mat3    anisou;
+  
+  static AtomProp* GetDefaultProps(const String& ele);
+  
 private:
-  unsigned char flags;
+  static void Init();
+  static std::map<String, AtomProp> defaults_;
 };
 
-}} // ns
+}}} // ns
 
 #endif
 
diff --git a/modules/mol/base/src/impl/chain_impl.cc b/modules/mol/base/src/impl/chain_impl.cc
index 0395a810791cf1201663e5c9e7dacd8591c3f875..77948203633cb010a0a81da80dd582643f6cf327 100644
--- a/modules/mol/base/src/impl/chain_impl.cc
+++ b/modules/mol/base/src/impl/chain_impl.cc
@@ -369,7 +369,7 @@ Real ChainImpl::GetMass() const
     ResidueImplPtr r=*i;
     for (AtomImplList::iterator j=r->GetAtomList().begin(); 
           j!=r->GetAtomList().end(); ++j) {
-      mass+=(*j)->GetAtomProps().mass;
+      mass+=(*j)->GetMass();
     }
   }
   return mass;
@@ -424,7 +424,7 @@ geom::Vec3 ChainImpl::GetCenterOfMass() const
       ResidueImplPtr r=*i;
       for (AtomImplList::iterator j=r->GetAtomList().begin(); 
            j!=r->GetAtomList().end(); ++j) {
-        center+=(*j)->GetPos() * (*j)->GetAtomProps().mass;
+        center+=(*j)->GetPos() * (*j)->GetMass();
       }
     }
     center/=mass;
diff --git a/modules/mol/base/src/impl/entity_impl.cc b/modules/mol/base/src/impl/entity_impl.cc
index 33d9bef0552fee83ec02d05676d2ca4a6b1526a4..c7ceb61ce2b8a1b9d4a6e1466e2b47a8f3ca04ce 100644
--- a/modules/mol/base/src/impl/entity_impl.cc
+++ b/modules/mol/base/src/impl/entity_impl.cc
@@ -297,7 +297,7 @@ geom::Vec3 EntityImpl::GetCenterOfMass() const {
   Real mass = this->GetMass();
   if (this->GetAtomCount()>0 && mass>0) {
     for(AtomImplMap::const_iterator it = atom_map_.begin();it!=atom_map_.end();++it) {
-      center+=it->second->GetPos()*it->second->GetAtomProps().mass;
+      center+=it->second->GetPos()*it->second->GetMass();
     }
     center/=mass;
   }
@@ -308,7 +308,7 @@ Real EntityImpl::GetMass() const {
   Real mass=0.0;
   for (AtomImplMap::const_iterator it = atom_map_.begin();
       it!=atom_map_.end();++it) {
-    mass+=it->second->GetAtomProps().mass;
+    mass+=it->second->GetMass();
   }
   return mass;
 }
@@ -316,13 +316,13 @@ Real EntityImpl::GetMass() const {
 AtomImplPtr EntityImpl::CreateAtom(const ResidueImplPtr& rp,
                                    const String& name,
                                    const geom::Vec3& pos,
-                                   const AtomProp& prop)
+                                   const String& ele)
 {
 #if MAKE_SHARED_AVAILABLE
   AtomImplPtr ap=boost::make_shared<AtomImpl>(shared_from_this(), rp, name, 
-                                              pos, prop,next_index_++);
+                                              pos, ele,next_index_++);
 #else
-  AtomImplPtr ap(new AtomImpl(shared_from_this(), rp, name, pos, prop,next_index_++));
+  AtomImplPtr ap(new AtomImpl(shared_from_this(), rp, name, pos, ele, next_index_++));
 #endif
   if (identity_transf_ == false) {
     geom::Vec3 transformed_pos = geom::Vec3(transformation_matrix_*geom::Vec4(pos));
diff --git a/modules/mol/base/src/impl/entity_impl.hh b/modules/mol/base/src/impl/entity_impl.hh
index c01285ed2323b376e34d0754ed6e6ef21717999b..3c6579452c32e2ccf5d03bd5bb0fb4c4c06f5751 100644
--- a/modules/mol/base/src/impl/entity_impl.hh
+++ b/modules/mol/base/src/impl/entity_impl.hh
@@ -101,7 +101,7 @@ public:
 
   // default copy ctor and assignment op should work for now
   AtomImplPtr CreateAtom(const ResidueImplPtr& rp, const String& name,
-                       const geom::Vec3& pos, const AtomProp& prop);
+                         const geom::Vec3& pos, const String& ele);
 
   ResidueImplPtr CreateResidue(const ChainImplPtr& cp,
                                const ResNum& n,
diff --git a/modules/mol/base/src/impl/residue_impl.cc b/modules/mol/base/src/impl/residue_impl.cc
index b997ced3f5ee1e88fb833cec5236d7d0c0702e57..ef6ffd7291e2cf513c20d2047d4e9fe01478b996 100644
--- a/modules/mol/base/src/impl/residue_impl.cc
+++ b/modules/mol/base/src/impl/residue_impl.cc
@@ -47,10 +47,11 @@ ResidueImpl::ResidueImpl(const EntityImplPtr& ent,
 
 
 AtomImplPtr ResidueImpl::InsertAtom(const String& name,
-                                  const geom::Vec3& pos,
-                                  const AtomProp& prop)
+                                    const geom::Vec3& pos,
+                                    const String& ele)
 {
-  AtomImplPtr ap=ent_.lock()->CreateAtom(shared_from_this(),name, pos, prop);
+  AtomImplPtr ap=ent_.lock()->CreateAtom(shared_from_this(),
+                                         name, pos, ele);
   atom_list_.push_back(ap);
   return ap;
 }
@@ -59,7 +60,7 @@ AtomImplPtr ResidueImpl::InsertAtom(const AtomImplPtr& atom)
 {
   AtomImplPtr dst_atom=this->InsertAtom(atom->GetName(), 
                                         atom->GetPos(),
-                                        atom->GetAtomProps());
+                                        atom->GetElement());
   dst_atom->Assign(*atom.get());
   dst_atom->SetState(atom->GetState());
   return dst_atom;
@@ -70,7 +71,7 @@ Real ResidueImpl::GetAverageBFactor() const
   Real sum=0;
   for (AtomImplList::const_iterator i=atom_list_.begin(), 
        e=atom_list_.end(); i!=e; ++i) {
-    sum+=(*i)->GetAtomProps().b_factor;
+    sum+=(*i)->GetBFactor();
   }
   return atom_list_.size()>0 ? sum/atom_list_.size() : 0.0;
 }
@@ -115,8 +116,8 @@ geom::Vec3 ResidueImpl::GetAltAtomPos(const AtomImplPtr& atom,
 AtomImplPtr ResidueImpl::InsertAltAtom(const String& name,
                                        const String& alt_group,
                                        const geom::Vec3& pos,
-                                       const AtomProp& prop) {
-  AtomImplPtr atom=this->InsertAtom(name, pos, prop);
+                                       const String& ele) {
+  AtomImplPtr atom=this->InsertAtom(name, pos, ele);
   this->AddAltAtom(alt_group, atom, pos);
   return atom;
 }
@@ -422,7 +423,7 @@ Real ResidueImpl::GetMass() const
   Real mass = 0;
   for (AtomImplList::const_iterator i=atom_list_.begin(); 
        i!=atom_list_.end(); ++i) {
-    mass+=(*i)->GetAtomProps().mass;
+    mass+=(*i)->GetMass();
   }
   return mass;
 }
@@ -466,7 +467,7 @@ geom::Vec3 ResidueImpl::GetCenterOfMass() const
   if (this->GetAtomCount() > 0 && mass > 0) {
     for (AtomImplList::const_iterator i=atom_list_.begin(); 
         i!=atom_list_.end(); ++i) {
-      center+=(*i)->GetPos()*(*i)->GetAtomProps().mass;
+      center+=(*i)->GetPos()*(*i)->GetMass();
     }
   }
   return center/mass;
diff --git a/modules/mol/base/src/impl/residue_impl.hh b/modules/mol/base/src/impl/residue_impl.hh
index 183a9ccefe8c5025f2790109b0ab3d26acfc17f8..a9f8481d2304d501d8a3565d183a044f811ffccf 100644
--- a/modules/mol/base/src/impl/residue_impl.hh
+++ b/modules/mol/base/src/impl/residue_impl.hh
@@ -51,13 +51,13 @@ public:
   ResidueImpl(const EntityImplPtr& ent, const ChainImplPtr& ch,
               const ResNum& num, const ResidueKey& key);
 
-  AtomImplPtr InsertAtom(const String& name, const geom::Vec3& pos,
-                         const AtomProp& prop);
+  AtomImplPtr InsertAtom(const String& name, const geom::Vec3& pos, 
+                         const String& ele);
   /// \brief insert new residue with exactly the same parameters as atom, but 
   ///     no bonds
   AtomImplPtr InsertAtom(const AtomImplPtr& atom);
   AtomImplPtr InsertAltAtom(const String& name, const String& alt_group,
-                           const geom::Vec3& pos, const AtomProp& prop);
+                           const geom::Vec3& pos, const String& ele);
   const ResNum& GetNumber() const {return num_;}
   void SetNumber(const ResNum& num) {num_=num;}
 
diff --git a/modules/mol/base/src/query_state.cc b/modules/mol/base/src/query_state.cc
index 95dc07e16ef138132fc9b8a43c93c23061e994ee..03b2ea28b9236fa1088791541faf62e1a6351436 100644
--- a/modules/mol/base/src/query_state.cc
+++ b/modules/mol/base/src/query_state.cc
@@ -334,17 +334,17 @@ boost::logic::tribool QueryState::EvalAtom(const impl::AtomImplPtr& a) {
                                boost::get<float>(ss.param));
         break;                
       case Prop::OCC:
-        float_value=a->GetAtomProps().occupancy;
+        float_value=a->GetOccupancy();
         s_[*i]=cmp_num<Real>(ss.comp_op, float_value, 
                                boost::get<float>(ss.param));
         break;                        
       case Prop::ELE:
-        str_value = a->GetAtomProps().element;
+        str_value = a->GetElement();
         s_[*i] = cmp_string(ss.comp_op,str_value,
           boost::get<String>(ss.param));                          
         break;
       case Prop::ABFAC:
-        float_value=a->GetAtomProps().b_factor;
+        float_value=a->GetBFactor();
         s_[*i]=cmp_num<Real>(ss.comp_op, float_value, 
                               boost::get<float>(ss.param));
         break;
@@ -354,11 +354,11 @@ boost::logic::tribool QueryState::EvalAtom(const impl::AtomImplPtr& a) {
                                 ss.comp_op);
         break;
       case Prop::ISHETATM:
-        int_value = a->GetAtomProps().is_hetatm;
+        int_value = a->IsHetAtom();
         s_[*i] = cmp_num<int>(ss.comp_op,int_value,boost::get<int>(ss.param));
         break;
       case Prop::ACHARGE:
-        float_value=a->GetAtomProps().charge;
+        float_value=a->GetCharge();
         s_[*i]=cmp_num<Real>(ss.comp_op, float_value, 
                               boost::get<float>(ss.param));
         break;
diff --git a/modules/mol/base/src/residue_handle.hh b/modules/mol/base/src/residue_handle.hh
index f1eb07850185a9b1ea404eeceaedb589e1feff9b..83890f3afb5741bf410bbc9e9fc126aac67e609a 100644
--- a/modules/mol/base/src/residue_handle.hh
+++ b/modules/mol/base/src/residue_handle.hh
@@ -25,7 +25,6 @@
 #include <ost/mol/query.hh>
 #include <ost/mol/module_config.hh>
 #include <ost/mol/residue_base.hh>
-#include <ost/mol/atom_prop.hh>
 #include <ost/mol/entity_visitor_fw.hh>
 #include <ost/mol/iterator_fw.hh>
 
diff --git a/modules/mol/base/src/residue_prop.cc b/modules/mol/base/src/residue_prop.cc
deleted file mode 100644
index 3712bfe0b901e55bf67b8492406e96d231b4ac87..0000000000000000000000000000000000000000
--- a/modules/mol/base/src/residue_prop.cc
+++ /dev/null
@@ -1,95 +0,0 @@
-//------------------------------------------------------------------------------
-// This file is part of the OpenStructure project <www.openstructure.org>
-//
-// Copyright (C) 2008-2010 by the OpenStructure authors
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License as published by the Free
-// Software Foundation; either version 3.0 of the License, or (at your option)
-// any later version.
-// This library is distributed in the hope that it will be useful, but WITHOUT
-// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-// FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
-// details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with this library; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-//------------------------------------------------------------------------------
-#include "residue_prop.hh"
-#include <boost/format.hpp>
-
-namespace ost { namespace mol {
-
-ResNum::ResNum(int n):
-  num_(n), alt_('\0')
-{}
-
-ResNum::ResNum(int n, char a):
-  num_(n), alt_(a)
-{}
-
-bool ResNum::operator==(const ResNum& r) const
-{
-  return num_==r.num_ && alt_==r.alt_;
-}
-
-bool ResNum::operator<(const ResNum& r) const
-{
-  return num_==r.num_ ? alt_<r.alt_ : num_<r.num_;
-}
-
-int ResNum::operator+=(int i)
-{
-  num_+=i;
-  return num_;
-}
-
-int ResNum::operator-=(int i)
-{
-  num_-=i;
-  return num_;
-}
-
-int ResNum::operator+=(const ResNum& r)
-{
-  num_+=r.num_;
-  return num_;
-}
-
-int ResNum::operator-=(const ResNum& r)
-{
-  num_-=r.num_;
-  return num_;
-}
-
-ResNum& ResNum::operator++()
-{
-  ++num_;
-  return *this;
-}
-
-ResNum& ResNum::operator--()
-{
-  --num_;
-  return *this;
-}
-
-ResNum ResNum::NextInsertionCode() const
-{
-  char alt= alt_=='\0' ? 'a' : alt_+1;
-  ResNum nrvo(num_,alt);
-  return nrvo;
-}
-
-String ResNum::AsString() const {
-  return str(boost::format("%d%s") % num_ % (alt_==0 ? "" : String(1, alt_)));
-}
-
-std::ostream& operator<<(std::ostream& os, const ResNum& n)
-{
-  return os << n.AsString();
-}
-
-
-}} // ns
diff --git a/modules/mol/base/src/residue_prop.hh b/modules/mol/base/src/residue_prop.hh
index 2bb92b3da49032829c360f069d0ea9d76bf64296..001660fa02d7b27494ee3b70586d6fd640c46af8 100644
--- a/modules/mol/base/src/residue_prop.hh
+++ b/modules/mol/base/src/residue_prop.hh
@@ -25,48 +25,112 @@
 
 namespace ost { namespace mol {
 
-/*
-  
-*/
-class DLLEXPORT_OST_MOL ResNum: private
+
+class DLLEXPORT ResNum: private
     boost::additive<ResNum, int,
     boost::totally_ordered<ResNum, 
     boost::totally_ordered<ResNum, int,
     boost::unit_steppable<ResNum> > > >
 {
 public:
-  ResNum(int num); // no explicit on purpose
-  ResNum(int num, char alt);
-
-  bool operator==(const ResNum&) const;
-  bool operator<(const ResNum&) const;
-  int operator+=(int);
-  int operator-=(int);
-  int operator+=(const ResNum&);
-  int operator-=(const ResNum&);
-  ResNum& operator++();
-  ResNum& operator--();
-
-  ResNum NextInsertionCode() const;
-
-  int GetNum() const {return num_;}
-  char GetInsCode() const {return alt_;}
+  ResNum(int n):
+    num_(n), alt_('\0')
+  { }
+
+  ResNum(int n, char a):
+    num_(n), alt_(a)
+  {}
+
+  bool operator==(const ResNum& r) const
+  {
+    return num_==r.num_ && alt_==r.alt_;
+  }
+
+  bool operator<(const ResNum& r) const
+  {
+    return num_==r.num_ ? alt_<r.alt_ : num_<r.num_;
+  }
+
+  int operator+=(int i)
+  {
+    num_+=i;
+    return num_;
+  }
+
+  int operator-=(int i)
+  {
+    num_-=i;
+    return num_;
+  }
+
+  int operator+=(const ResNum& r)
+  {
+    num_+=r.num_;
+    return num_;
+  }
+
+  int operator-=(const ResNum& r)
+  {
+    num_-=r.num_;
+    return num_;
+  }
+
+  ResNum& operator++()
+  {
+    ++num_;
+    return *this;
+  }
+
+  ResNum& operator--()
+  {
+    --num_;
+    return *this;
+  }
+
+  ResNum NextInsertionCode() const
+  {
+    char alt= alt_=='\0' ? 'a' : alt_+1;
+    ResNum nrvo(num_,alt);
+    return nrvo;
+  }
   
   /// \brief get residue number as String
   ///
   /// The returned String consists of both the numeric residue sequence number
   /// and the insertion code. If the insertion code is not defined, i.e. is 
   /// equal to the null character, only the residue sequence number is returned.
-  String AsString() const;
+  inline String AsString() const;
+  
+  int GetNum() const { return num_; }
+  
+  void SetNum(int num) { num_=num; }
+  
+  void SetInsCode(char ins_code) { alt_=ins_code; }
+  
+  char GetInsCode() const { return alt_; }  
+  
 private:
-  int num_;
-  char alt_;
+  int num_ : 24;
+  int alt_ :  8;
 };
 
-DLLEXPORT_OST_MOL std::ostream& operator<<(std::ostream& os, const ResNum& n);
-
 typedef String ResidueKey;
 
+inline std::ostream& operator<<(std::ostream& os, const ResNum& n)
+{
+  return os << n.GetNum();
+  if (n.GetInsCode()!='\0')
+    os << n.GetInsCode();
+  return os;
+}
+
+inline String ResNum::AsString() const
+{
+  std::stringstream ss;
+  ss << *this;
+  return ss.str();    
+}
+
 }} // ns
 
 
diff --git a/modules/mol/base/src/residue_view.cc b/modules/mol/base/src/residue_view.cc
index 53e0a3eaa79126ebbd6095a3c69719196a8d6c09..8f76c5766d1f215bc2a3ee46b5e892a7347ee038 100644
--- a/modules/mol/base/src/residue_view.cc
+++ b/modules/mol/base/src/residue_view.cc
@@ -200,7 +200,7 @@ double ResidueView::GetMass() const
   double mass = 0;
   AtomViewList::const_iterator i;
   for (i=data_->atoms.begin(); i!=data_->atoms.end(); ++i) {
-    mass+=(*i).GetAtomProps().mass;
+    mass+=(*i).GetMass();
   }
   return mass;
 }
@@ -226,7 +226,7 @@ geom::Vec3 ResidueView::GetCenterOfMass() const
   if (!data_->atoms.empty() && mass > 0) {
     AtomViewList::const_iterator i;
     for (i=data_->atoms.begin(); i!=data_->atoms.end(); ++i) {
-      center+=(*i).GetPos()*(*i).GetAtomProps().mass;
+      center+=(*i).GetPos()*(*i).GetMass();
     }
       center/=mass;
   }
diff --git a/modules/mol/base/tests/test_atom_groups.cc b/modules/mol/base/tests/test_atom_groups.cc
index 72835fa76d4f441c8cb407fbb769e81488004c84..01e3510ff365c0336fe5ce1532005884e4cbd6f7 100644
--- a/modules/mol/base/tests/test_atom_groups.cc
+++ b/modules/mol/base/tests/test_atom_groups.cc
@@ -40,7 +40,7 @@ BOOST_AUTO_TEST_CASE(switch_pos)
   XCSEditor editor=ent.e.RequestXCSEditor();  
   BOOST_CHECK_THROW(editor.AddAltAtomPos("B", ent.aa, y),
                     Error);
-  AtomHandle xx=editor.InsertAltAtom(ent.r, "ZZ", "A", y, AtomProp()); 
+  AtomHandle xx=editor.InsertAltAtom(ent.r, "ZZ", "A", y); 
   BOOST_CHECK_NO_THROW(editor.AddAltAtomPos("B", xx, z));
   BOOST_CHECK_EQUAL(ent.r.GetCurrentAltGroupName(), "A");
   BOOST_CHECK(ent.r.SwitchAtomPos("B"));
@@ -56,10 +56,8 @@ BOOST_AUTO_TEST_CASE(delete_atom)
 {
   test::DummyEnt ent;
   XCSEditor editor=ent.e.RequestXCSEditor();       
-  AtomHandle xx=editor.InsertAltAtom(ent.r, "ZZ", "A", geom::Vec3(), 
-                                     AtomProp());
-  AtomHandle zz=editor.InsertAltAtom(ent.r, "XX", "A", geom::Vec3(), 
-                                     AtomProp());
+  AtomHandle xx=editor.InsertAltAtom(ent.r, "ZZ", "A", geom::Vec3());
+  AtomHandle zz=editor.InsertAltAtom(ent.r, "XX", "A", geom::Vec3());
   
   editor.AddAltAtomPos("B", xx, geom::Vec3());
   editor.AddAltAtomPos("B", zz, geom::Vec3());
@@ -78,8 +76,7 @@ BOOST_AUTO_TEST_CASE(atom_group_triv)
   std::vector<String> names=ent.r.GetAltAtomGroupNames();
   BOOST_CHECK(names.empty());
   XCSEditor editor=ent.e.RequestXCSEditor();
-  AtomHandle xx=editor.InsertAltAtom(ent.r, "A", "ZZ", geom::Vec3(0.0,1.0,0.0), 
-                                     AtomProp());   
+  AtomHandle xx=editor.InsertAltAtom(ent.r, "A", "ZZ", geom::Vec3(0.0,1.0,0.0));   
   editor.AddAltAtomPos("B", xx, geom::Vec3(1.0, 0.0, 0.0));
   BOOST_CHECK(ent.r.HasAltAtoms()==true);
   BOOST_CHECK(ent.r.HasAltAtomGroup("B")==true);
diff --git a/modules/mol/base/tests/test_query.cc b/modules/mol/base/tests/test_query.cc
index d84a3156be0375fedf8db262a0970d29c8a0d952..c3f779a872aac92060c96572378458c090598b38 100644
--- a/modules/mol/base/tests/test_query.cc
+++ b/modules/mol/base/tests/test_query.cc
@@ -36,52 +36,38 @@ EntityHandle make_query_test_entity()
   chain.SetFloatProp("testprop_c", 1.0);
   ResidueHandle res = e.AppendResidue(chain, "MET");
   res.SetFloatProp("testpropr", 1.0);
-  AtomProp c_atom;
-  c_atom.element="C";
-  c_atom.radius=1.0;
-
-  AtomProp o_atom;
-  o_atom.element="O";
-  o_atom.radius=1.0;
-  AtomProp n_atom;
-  n_atom.element="N";
-  n_atom.radius=1.0;
-
-  AtomProp s_atom;
-  s_atom.element="S";
-  s_atom.radius=1.0;
-  AtomHandle ah=e.InsertAtom(res, "N",geom::Vec3(21.609,35.384,56.705), n_atom);
+  AtomHandle ah=e.InsertAtom(res, "N",geom::Vec3(21.609,35.384,56.705), "N");
   ah.SetFloatProp("testpropa", 1.0);
-  e.InsertAtom(res, "CA",geom::Vec3(20.601,35.494,57.793), c_atom);
-  e.InsertAtom(res, "C",geom::Vec3(19.654,34.300,57.789), c_atom);
-  e.InsertAtom(res, "O",geom::Vec3(18.447,34.456,57.595), o_atom);
-  e.InsertAtom(res, "CB",geom::Vec3(19.789,36.783,57.639), c_atom);
-  e.InsertAtom(res, "CG",geom::Vec3(20.629,38.055,57.606), c_atom);
-  e.InsertAtom(res, "SD",geom::Vec3(21.638,38.325,59.084), s_atom);
-  e.InsertAtom(res, "CE",geom::Vec3(23.233,37.697,58.529), c_atom);
+  e.InsertAtom(res, "CA",geom::Vec3(20.601,35.494,57.793), "C");
+  e.InsertAtom(res, "C",geom::Vec3(19.654,34.300,57.789), "C");
+  e.InsertAtom(res, "O",geom::Vec3(18.447,34.456,57.595), "O");
+  e.InsertAtom(res, "CB",geom::Vec3(19.789,36.783,57.639), "C");
+  e.InsertAtom(res, "CG",geom::Vec3(20.629,38.055,57.606), "C");
+  e.InsertAtom(res, "SD",geom::Vec3(21.638,38.325,59.084), "S");
+  e.InsertAtom(res, "CE",geom::Vec3(23.233,37.697,58.529), "C");
 
   res = e.AppendResidue(chain, "ARG");
-  e.InsertAtom(res, "N",geom::Vec3(20.202,33.112,58.011), n_atom);
-  e.InsertAtom(res, "CA",geom::Vec3(19.396,31.903,58.033), c_atom);
-  e.InsertAtom(res, "C",geom::Vec3(18.608,31.739,59.328), c_atom);
-  e.InsertAtom(res, "O",geom::Vec3(17.651,30.965,59.381), o_atom);
-  e.InsertAtom(res, "CB",geom::Vec3(20.284,30.681,57.801), c_atom);
-  e.InsertAtom(res, "CG",geom::Vec3(20.665,30.488,56.342), c_atom);
-  e.InsertAtom(res, "CD",geom::Vec3(21.557,29.281,56.154), c_atom);
-  e.InsertAtom(res, "NE",geom::Vec3(22.931,29.557,56.551), n_atom);
-  e.InsertAtom(res, "CZ",geom::Vec3(23.901,28.653,56.528), c_atom);
-  e.InsertAtom(res, "NH1",geom::Vec3(23.640,27.417,56.130), n_atom);
-  e.InsertAtom(res, "NH2",geom::Vec3(25.132,28.980,56.893), n_atom);
+  e.InsertAtom(res, "N",geom::Vec3(20.202,33.112,58.011), "N");
+  e.InsertAtom(res, "CA",geom::Vec3(19.396,31.903,58.033), "C");
+  e.InsertAtom(res, "C",geom::Vec3(18.608,31.739,59.328), "C");
+  e.InsertAtom(res, "O",geom::Vec3(17.651,30.965,59.381), "O");
+  e.InsertAtom(res, "CB",geom::Vec3(20.284,30.681,57.801), "C");
+  e.InsertAtom(res, "CG",geom::Vec3(20.665,30.488,56.342), "C");
+  e.InsertAtom(res, "CD",geom::Vec3(21.557,29.281,56.154), "C");
+  e.InsertAtom(res, "NE",geom::Vec3(22.931,29.557,56.551), "N");
+  e.InsertAtom(res, "CZ",geom::Vec3(23.901,28.653,56.528), "C");
+  e.InsertAtom(res, "NH1",geom::Vec3(23.640,27.417,56.130), "N");
+  e.InsertAtom(res, "NH2",geom::Vec3(25.132,28.980,56.893), "N");
 
   res = e.AppendResidue(chain, "LEU");
-  e.InsertAtom(res, "N",geom::Vec3(19.003,32.473,60.366), n_atom);
-  e.InsertAtom(res, "CA",geom::Vec3(18.330,32.402,61.664), c_atom);
-  e.InsertAtom(res, "C",geom::Vec3(17.884,33.787,62.117), c_atom);
-  e.InsertAtom(res, "O",geom::Vec3(17.853,34.091,63.308), o_atom);
-  e.InsertAtom(res, "CB",geom::Vec3(19.269,31.793,62.710), c_atom);
-  e.InsertAtom(res, "CG",geom::Vec3(19.695,30.340,62.501), c_atom);
-  e.InsertAtom(res, "CD1",geom::Vec3(20.585,29.897,63.648), c_atom);
-  e.InsertAtom(res, "CD2",geom::Vec3(18.461,29.459,62.420), c_atom);
+  e.InsertAtom(res, "N",geom::Vec3(19.003,32.473,60.366), "N");
+  e.InsertAtom(res, "CA",geom::Vec3(18.330,32.402,61.664), "C");
+  e.InsertAtom(res, "C",geom::Vec3(17.884,33.787,62.117), "C");
+  e.InsertAtom(res, "O",geom::Vec3(17.853,34.091,63.308), "O");
+  e.InsertAtom(res, "CB",geom::Vec3(19.269,31.793,62.710), "C");
+  e.InsertAtom(res, "CG",geom::Vec3(19.695,30.340,62.501), "C");
+  e.InsertAtom(res, "CD1",geom::Vec3(20.585,29.897,63.648), "C");
+  e.InsertAtom(res, "CD2",geom::Vec3(18.461,29.459,62.420), "C");
   return eh;
 }
 
diff --git a/modules/qa/src/clash_score.cc b/modules/qa/src/clash_score.cc
index 66b95c09635eefd8fbf2fdbde5db2e78cf5bf501..d05a4e3fef38e5ea2b28b64f154f27df36d4f5ac 100644
--- a/modules/qa/src/clash_score.cc
+++ b/modules/qa/src/clash_score.cc
@@ -48,12 +48,12 @@ Real do_clash_score(const T& ent_a, const mol::EntityView& ent_b)
   for (I i=ent_a.AtomsBegin(), e=ent_a.AtomsEnd(); i!=e; ++i) {
     
     mol::AtomViewList clashees=ent_b.FindWithin((*i).GetPos(), 
-                                                (*i).GetAtomProps().radius+1.7);
+                                                (*i).GetRadius()+1.7);
 
     for (mol::AtomViewList::iterator j=clashees.begin(), 
          e2=clashees.end(); j!=e2; ++j) {
-         energy+=StericEnergy((*j).GetPos(), (*j).GetAtomProps().radius-0.25,
-                              (*i).GetPos(), (*i).GetAtomProps().radius-0.25);           
+         energy+=StericEnergy((*j).GetPos(), (*j).GetRadius()-0.25,
+                              (*i).GetPos(), (*i).GetRadius()-0.25);           
     }
   }
   return energy;  
@@ -75,11 +75,11 @@ Real ClashScore(const mol::AtomHandle& atom, const mol::EntityView& ent_b)
 {
   Real energy=0.0;
   mol::AtomViewList clashees=ent_b.FindWithin(atom.GetPos(), 
-                                              atom.GetAtomProps().radius+2.0);
+                                              atom.GetRadius()+2.0);
   for (mol::AtomViewList::iterator j=clashees.begin(), 
        e2=clashees.end(); j!=e2; ++j) {
-       energy+=StericEnergy((*j).GetPos(), (*j).GetAtomProps().radius,
-                            atom.GetPos(), atom.GetAtomProps().radius);           
+       energy+=StericEnergy((*j).GetPos(), (*j).GetRadius(),
+                            atom.GetPos(), atom.GetRadius());           
   }
   return energy;                                 
 }