diff --git a/modules/mol/base/src/impl/entity_impl.cc b/modules/mol/base/src/impl/entity_impl.cc
index 4b4cb3a7a1331b60d1295f0069a782b496503b72..1fd465f235f4d05f7d29d727b4b423dc6a69d277 100644
--- a/modules/mol/base/src/impl/entity_impl.cc
+++ b/modules/mol/base/src/impl/entity_impl.cc
@@ -145,20 +145,7 @@ void EntityImpl::ReplicateHierarchy(EntityImplPtr dest)
   for (ChainImplList::const_iterator i=chain_list_.begin(), 
        e1=chain_list_.end(); i!=e1; ++i) {
     ChainImplPtr src_chain=*i;
-    ChainImplPtr dst_chain=dest->InsertChain(src_chain,false);
-    // copy generic properties
-    dst_chain->Assign(*src_chain.get());
-    for (ResidueImplList::iterator j=src_chain->GetResidueList().begin(),
-         e2=src_chain->GetResidueList().end(); j!=e2; ++j) {
-      ResidueImplPtr src_res=*j;
-      ResidueImplPtr dst_res=dst_chain->AppendResidue(src_res, false);
-      for (AtomImplList::iterator k=src_res->GetAtomList().begin(),
-           e3=src_res->GetAtomList().end(); k!=e3; ++k) {
-        AtomImplPtr src_atom=*k;
-        AtomImplPtr dst_atom=dst_res->InsertAtom(src_atom);
-        dst_atom->SetIndex(src_atom->GetIndex());
-      }
-    }
+    dest->InsertChain(src_chain,true);
   }
 }
 
diff --git a/modules/mol/base/src/impl/residue_impl.cc b/modules/mol/base/src/impl/residue_impl.cc
index fd2c7762b3193caafa68d2b86af177243ceafe5d..29fee9883e5a8381eac4c12d3d75a194f007de44 100644
--- a/modules/mol/base/src/impl/residue_impl.cc
+++ b/modules/mol/base/src/impl/residue_impl.cc
@@ -69,7 +69,8 @@ AtomImplPtr ResidueImpl::InsertAtom(const AtomImplPtr& atom)
   dst_atom->SetState(atom->GetState());
   dst_atom->SetBFactor(atom->GetBFactor());
   dst_atom->SetOccupancy(atom->GetOccupancy());
-  dst_atom->SetHetAtom(atom->IsHetAtom());  
+  dst_atom->SetHetAtom(atom->IsHetAtom());
+  dst_atom->SetIndex(atom->GetIndex());
 
   if (!atom->HasDefaultProps()) {
     dst_atom->SetRadius(atom->GetRadius());