diff --git a/modules/mol/base/pymod/export_residue.cc b/modules/mol/base/pymod/export_residue.cc
index d0915dcd719b02502ba2158cac951fb91acea277..fad1a74bd18ee5713c4e58b55fb57ad70ad27511 100644
--- a/modules/mol/base/pymod/export_residue.cc
+++ b/modules/mol/base/pymod/export_residue.cc
@@ -37,6 +37,16 @@ namespace {
     return String(1, char(s));
   }
 
+  boost::python::list get_alt_group_names(const ost::mol::ResidueHandle& res) {
+    std::vector<String>  v_alt_group_names = res.GetAltAtomGroupNames();
+    boost::python::list alt_group_names;
+    for(std::vector<String>::iterator it = v_alt_group_names.begin();
+        it != v_alt_group_names.end(); ++it) {
+      alt_group_names.append(*it);
+    }
+    return alt_group_names;
+  }
+
   typedef EntityView (ResidueHandle::*QueryMethod)(const Query&, uint) const;
   typedef EntityView (ResidueHandle::*StringMethod)(const String&, uint) const;
   QueryMethod select_query=&ResidueHandle::Select;
@@ -239,6 +249,7 @@ void export_Residue()
     .def("GetHandle", &ResidueHandle::GetHandle)
     .add_property("handle", &ResidueHandle::GetHandle)    
     .def("HasAltAtomGroup", &ResidueHandle::HasAltAtomGroup)
+    .def("GetAltAtomGroupNames", &get_alt_group_names)
     .def("GetCurrentAltGroupName", &ResidueHandle::GetCurrentAltGroupName,
          return_value_policy<copy_const_reference>())
     .def("SwitchAtomPos", &ResidueHandle::SwitchAtomPos)
diff --git a/modules/mol/base/src/impl/entity_impl.cc b/modules/mol/base/src/impl/entity_impl.cc
index 410c41715933d006f865e1803a73077177702657..90ef2ad75d3411d5ba105f97d5756ebce1031910 100644
--- a/modules/mol/base/src/impl/entity_impl.cc
+++ b/modules/mol/base/src/impl/entity_impl.cc
@@ -816,8 +816,9 @@ TorsionImplP EntityImpl::FindTorsion(const AtomImplPtr& a1,
   return TorsionImplP();
 }
 
-AtomImplList EntityImpl::FindWithin(const geom::Vec3& pos, Real radius) const
+AtomImplList EntityImpl::FindWithin(const geom::Vec3& pos, Real radius)
 {
+  this->UpdateOrganizerIfNeeded();
   SpatialAtomOrganizer::ItemList alist = atom_organizer_.FindWithin(pos,radius);
   return alist;
 }
diff --git a/modules/mol/base/src/impl/entity_impl.hh b/modules/mol/base/src/impl/entity_impl.hh
index 5033bd55e806f4cb21331649a663ac36ef28fe7f..7a1e3a30309371f1a921fa6ba598f618335b9e62 100644
--- a/modules/mol/base/src/impl/entity_impl.hh
+++ b/modules/mol/base/src/impl/entity_impl.hh
@@ -160,7 +160,7 @@ public:
   
   void UpdateOrganizer();
   
-  AtomImplList FindWithin(const geom::Vec3& pos, Real radius) const;
+  AtomImplList FindWithin(const geom::Vec3& pos, Real radius);
   // use query flag defaults
   EntityView Select(const EntityHandle& h, const Query& q) const;
   // override query flag defaults with given flags
diff --git a/modules/mol/base/src/impl/residue_impl.cc b/modules/mol/base/src/impl/residue_impl.cc
index 014f4069f5cae65e808d25151db5cee4ef10f213..3cf6591964f0a254d593853e7772c6639b4ed25a 100644
--- a/modules/mol/base/src/impl/residue_impl.cc
+++ b/modules/mol/base/src/impl/residue_impl.cc
@@ -648,6 +648,7 @@ bool ResidueImpl::SwitchAtomPos(const String& group) {
     entry.atom.lock()->SetOccupancy(j->occ);
   }
   curr_group_=group;
+  this->GetEntity()->MarkOrganizerDirty();
   return true;
 }