diff --git a/modules/mol/base/src/atom_base.cc b/modules/mol/base/src/atom_base.cc
index b1547fb518b730f72cfc9d29cd2ab78b833c42aa..482464768a96dbfd1f3195427e7e8cfafa6149cc 100644
--- a/modules/mol/base/src/atom_base.cc
+++ b/modules/mol/base/src/atom_base.cc
@@ -104,7 +104,7 @@ String AtomBase::GetQualifiedName() const
 
 void AtomBase::CheckValidity() const 
 {
-  if (!impl_)
+  if (! (impl_ && impl_->GetEntity()))
     throw InvalidHandle();
 }
 
diff --git a/modules/mol/base/src/chain_base.cc b/modules/mol/base/src/chain_base.cc
index 2b693b7fc031d07bf3da2492a1644db649557b30..28263e7387f55bb96dbb95489a512b92d494db27 100644
--- a/modules/mol/base/src/chain_base.cc
+++ b/modules/mol/base/src/chain_base.cc
@@ -53,7 +53,7 @@ String ChainBase::GetDescription() const {
 }
 
 void ChainBase::CheckValidity() const {
-  if (!impl_)
+  if (! (impl_ && impl_->GetEntity()))
     throw InvalidHandle();
 }
 
diff --git a/modules/mol/base/src/impl/atom_impl.cc b/modules/mol/base/src/impl/atom_impl.cc
index 9c5642eafc12d70f32be6c47f710f539c908dd9a..2e754a73b0b95474f741597dea19865734a25824 100644
--- a/modules/mol/base/src/impl/atom_impl.cc
+++ b/modules/mol/base/src/impl/atom_impl.cc
@@ -73,6 +73,9 @@ void AtomImpl::Apply(EntityVisitor& v)
 
 ResidueImplPtr AtomImpl::GetResidue() const
 {
+  if (!res_.lock()) {
+    throw InvalidHandle();
+  }
   return res_.lock();
 }
 
@@ -214,6 +217,9 @@ AtomImpl::~AtomImpl() {
 
 EntityImplPtr AtomImpl::GetEntity() const
 {
+  if (!res_.lock()) {
+    throw InvalidHandle();
+  }
   return res_.lock()->GetEntity();
 }
 
diff --git a/modules/mol/base/src/impl/chain_impl.cc b/modules/mol/base/src/impl/chain_impl.cc
index adf5aeb8b88ea887c6af3252ca0fdea423eab516..6aff6305b4e0ea98d5508e576fa2ba46b157ef0c 100644
--- a/modules/mol/base/src/impl/chain_impl.cc
+++ b/modules/mol/base/src/impl/chain_impl.cc
@@ -369,6 +369,9 @@ AtomImplPtr ChainImpl::FindAtom(const ResNum& num,
 
 EntityImplPtr ChainImpl::GetEntity() const 
 {
+  if (!ent_.lock()) {
+    throw InvalidHandle();
+  }
   return ent_.lock();
 }
 int ChainImpl::GetIndexForResNum(const ResNum& number) const
diff --git a/modules/mol/base/src/impl/residue_impl.cc b/modules/mol/base/src/impl/residue_impl.cc
index 819c7294dea5a4ca9bedb5c5c97a652b0a34de8e..316f16de24889aefa363508529439364ff935a63 100644
--- a/modules/mol/base/src/impl/residue_impl.cc
+++ b/modules/mol/base/src/impl/residue_impl.cc
@@ -200,6 +200,9 @@ void ResidueImpl::SetSecStructure(SecStructure ss)
 
 EntityImplPtr ResidueImpl::GetEntity() const
 {
+  if (!ent_.lock()) {
+    throw InvalidHandle();
+  }
   return ent_.lock();
 }
 
@@ -256,6 +259,9 @@ int ResidueImpl::GetBondCount() const
 
 ChainImplPtr ResidueImpl::GetChain() const
 {
+  if (!chain_.lock()) {
+    throw InvalidHandle();
+  }
   return chain_.lock();
 }
 
diff --git a/modules/mol/base/src/residue_base.cc b/modules/mol/base/src/residue_base.cc
index b788d7c2ed305e946dadaefd78cdc9c3ca87c4e0..01b996679065cb3ab483db9d6f437c9eba8b85b9 100644
--- a/modules/mol/base/src/residue_base.cc
+++ b/modules/mol/base/src/residue_base.cc
@@ -158,7 +158,7 @@ const impl::ResidueImplPtr& ResidueBase::Impl() const
 
 void ResidueBase::CheckValidity() const 
 {
-  if (!impl_)
+  if (! (impl_ && impl_->GetEntity()))
     throw InvalidHandle();
 }