diff --git a/modules/mol/base/src/chain_view.cc b/modules/mol/base/src/chain_view.cc
index b940a37ee37dd8f82c302ba4b5a51119169cb6f6..4727e31ddce6764bcdfc0e78bb5e7c3c31e0d83f 100644
--- a/modules/mol/base/src/chain_view.cc
+++ b/modules/mol/base/src/chain_view.cc
@@ -334,14 +334,10 @@ bool ChainView::operator!=(const ChainView& rhs) const
 
 Real ChainView::GetMass() const {
   this->CheckValidity();
-  Real mass = 0;
+  double mass = 0;
   ResidueViewList::const_iterator i;
   for (i=data_->residues.begin(); i!=data_->residues.end(); ++i) {
-    ResidueView r=*i;
-    for (AtomViewList::const_iterator j=r.GetAtomList().begin(),
-         e2=r.GetAtomList().end(); j!=e2; ++j) {
-      mass+=j->GetMass();
-    }
+    mass+=i->GetMass();
   }
   return mass;
 }
diff --git a/modules/mol/base/src/entity_view.cc b/modules/mol/base/src/entity_view.cc
index 3e5445b56a8936c7562c5e0d830ad0785c1b1ccb..a88f0b39553a438c0d51359fee91cacf9d85a7a1 100644
--- a/modules/mol/base/src/entity_view.cc
+++ b/modules/mol/base/src/entity_view.cc
@@ -187,10 +187,10 @@ geom::Vec3 EntityView::GetCenterOfMass() const
 
 Real EntityView::GetMass() const 
 {
-  Real mass = 0;
-  AtomViewIter it=this->AtomsBegin();
-  for(; it!=this->AtomsEnd(); ++it) {
-    mass+=(*it).GetMass();
+  this->CheckValidity();
+  double mass = 0;
+  for (ChainViewList::iterator i=data_->chains.begin();i!=data_->chains.end(); ++i) {
+    mass+=i->GetMass();
   }
   return mass;
 }
diff --git a/modules/mol/base/src/impl/chain_impl.cc b/modules/mol/base/src/impl/chain_impl.cc
index c04e1ed72b33e226ae3a9ce08295ca541b4c1848..46026902068b5e6b978e76cdcbbfdff1499459c6 100644
--- a/modules/mol/base/src/impl/chain_impl.cc
+++ b/modules/mol/base/src/impl/chain_impl.cc
@@ -400,14 +400,11 @@ void ChainImpl::AssignSecondaryStructure(SecStructure ss,
 
 Real ChainImpl::GetMass() const
 {
-  Real mass = 0;
+  double mass = 0;
   for (ResidueImplList::const_iterator i=residue_list_.begin(); 
         i!=residue_list_.end(); ++i) {
     ResidueImplPtr r=*i;
-    for (AtomImplList::iterator j=r->GetAtomList().begin(); 
-          j!=r->GetAtomList().end(); ++j) {
-      mass+=(*j)->GetMass();
-    }
+    mass+=r->GetMass();
   }
   return mass;
 }
diff --git a/modules/mol/base/src/impl/entity_impl.cc b/modules/mol/base/src/impl/entity_impl.cc
index 305e3423041abfb58252cf417a861ada5d77967b..bc3fba841fe6798db72963e07bbbf79d718344c9 100644
--- a/modules/mol/base/src/impl/entity_impl.cc
+++ b/modules/mol/base/src/impl/entity_impl.cc
@@ -308,10 +308,11 @@ geom::Vec3 EntityImpl::GetCenterOfMass() const {
 }
 
 Real EntityImpl::GetMass() const {
-  Real mass=0.0;
-  for (AtomImplMap::const_iterator it = atom_map_.begin();
-      it!=atom_map_.end();++it) {
-    mass+=it->second->GetMass();
+  double mass=0.0;
+  for (ChainImplList::const_iterator i=chain_list_.begin(), 
+       e=chain_list_.end(); i!=e; ++i) {
+    ChainImplPtr chain=*i;
+    mass+=chain->GetMass();
   }
   return mass;
 }
diff --git a/modules/mol/base/src/impl/residue_impl.cc b/modules/mol/base/src/impl/residue_impl.cc
index 28f0cc6f9047616848e8d0a334da946a6fdfea9f..eb633c5be612603ae304975dfd24335c53aa92ec 100644
--- a/modules/mol/base/src/impl/residue_impl.cc
+++ b/modules/mol/base/src/impl/residue_impl.cc
@@ -451,7 +451,7 @@ void ResidueImpl::RemoveAltPositionsForAtom(const AtomImplPtr& atom) {
 
 Real ResidueImpl::GetMass() const
 {
-  Real mass = 0;
+  double mass = 0;
   for (AtomImplList::const_iterator i=atom_list_.begin(); 
        i!=atom_list_.end(); ++i) {
     mass+=(*i)->GetMass();