diff --git a/modules/io/src/mol/sdf_writer.cc b/modules/io/src/mol/sdf_writer.cc
index 23f5d3ed4133a277865d7b6374fc468e2a15a5e9..c2db1ddb096925a67b02f542908c2a342010f2ef 100644
--- a/modules/io/src/mol/sdf_writer.cc
+++ b/modules/io/src/mol/sdf_writer.cc
@@ -29,7 +29,7 @@ using boost::format;
 
 namespace {
 
-  class SDFAtomWriter : public mol::EntityVisitor {
+  class SDFAtomWriter : public mol::EntityViewVisitor {
     public:
       SDFAtomWriter(std::ostream& ostream, std::map<long, int>& atom_indices)
       : ostr_(ostream), atom_indices_(atom_indices), counter_(0) {
@@ -37,7 +37,7 @@ namespace {
       }
     private:
     public:
-      virtual bool VisitAtom(const mol::AtomHandle& atom) {
+      virtual bool VisitAtom(const mol::AtomView& atom) {
         atom_indices_[atom.GetHashCode()] = ++counter_;
         ostr_ << format("%10.4f") % atom.GetPos()[0]
               << format("%10.4f") % atom.GetPos()[1]
@@ -53,22 +53,22 @@ namespace {
       int counter_;
   };
 
-  class SDFBondWriter : public mol::EntityVisitor {
+  class SDFBondWriter : public mol::EntityViewVisitor {
   public:
     SDFBondWriter(std::ostream& ostream, std::map<long, int>& atom_indices)
       : ostr_(ostream), atom_indices_(atom_indices), counter_(0) {
     }
   private:
   public:
-    virtual bool VisitAtom(const mol::AtomHandle& atom) {
+    virtual bool VisitAtom(const mol::AtomView& atom) {
       counter_++;
-      mol::AtomHandleList atoms = atom.GetBondPartners();
-      mol::AtomHandleList::iterator atom_iter = atoms.begin();
+      mol::AtomViewList atoms = atom.GetBondPartners();
+      mol::AtomViewList::iterator atom_iter = atoms.begin();
       for(; atom_iter != atoms.end(); ++atom_iter) {
         int atom_index = atom_indices_.find((*atom_iter).GetHashCode())->second;
         if(atom_index > counter_) {
           int type = 1;
-          mol::BondHandle bond = atom.FindBondToAtom(*atom_iter);
+          mol::BondHandle bond = atom.GetHandle().FindBondToAtom(atom_iter->GetHandle());
           if(bond.IsValid()) type = bond.GetBondOrder();
           ostr_ << format("%3i") % counter_
                 << format("%3i") % atom_index
@@ -105,11 +105,11 @@ void SDFWriter::Write(const mol::EntityView& ent) {
 }
 
 void SDFWriter::Write(const mol::EntityHandle& ent) {
-  mol::EntityHandle non_const_handle = ent;
-  non_const_handle.Apply(*this);
+  mol::EntityView non_const_view = ent.CreateFullView();
+  non_const_view.Apply(*this);
 }
 
-bool SDFWriter::VisitChain(const mol::ChainHandle& chain) {
+bool SDFWriter::VisitChain(const mol::ChainView& chain) {
   // print end of molecule line
   if(counter_ != 0) {
     ostr_ << "$$$$" << std::endl;
@@ -138,7 +138,7 @@ bool SDFWriter::VisitChain(const mol::ChainHandle& chain) {
 
   // write atom block
   SDFAtomWriter atom_writer(ostr_, atom_indices_);
-  mol::ChainHandle non_const_chain = chain;
+  mol::ChainView non_const_chain = chain;
   non_const_chain.Apply(atom_writer);
 
   // write bond block
diff --git a/modules/io/src/mol/sdf_writer.hh b/modules/io/src/mol/sdf_writer.hh
index 62a365d491f303f6e0a5a01add5ce3af1636deba..76538f808f611dd8edb1a5979b2f9ad9ced66359 100644
--- a/modules/io/src/mol/sdf_writer.hh
+++ b/modules/io/src/mol/sdf_writer.hh
@@ -38,7 +38,7 @@
 
 namespace ost { namespace io {
 
-class DLLEXPORT_OST_IO SDFWriter : public mol::EntityVisitor {
+class DLLEXPORT_OST_IO SDFWriter : public mol::EntityViewVisitor {
 public:
   SDFWriter(std::ostream& ostream);
   SDFWriter(const String& filename);
@@ -48,7 +48,7 @@ public:
   void Write(const mol::EntityHandle& ent);
 
 private:
-  virtual bool VisitChain(const mol::ChainHandle& chain);
+  virtual bool VisitChain(const mol::ChainView& chain);
 
   std::ofstream      outfile_;
   std::ostream&      ostr_;
diff --git a/modules/io/tests/test_io_sdf.cc b/modules/io/tests/test_io_sdf.cc
index 08ae8d80ccd475ed20d9c2c5dba3791609149ef7..f18f018bc48150ebb2776dea1f98d302db043ce5 100644
--- a/modules/io/tests/test_io_sdf.cc
+++ b/modules/io/tests/test_io_sdf.cc
@@ -151,6 +151,21 @@ BOOST_AUTO_TEST_CASE(write_sdf)
                             "testfiles/sdf/compound-out.sdf"));
 }
 
+BOOST_AUTO_TEST_CASE(write_sdf_view)
+{
+  // this scope is required to force the writer stream to be closed before
+  // opening the file again in compare_files. Avoids a race condition.
+  {
+    mol::EntityHandle eh = mol::CreateEntity();
+    EntityIOSDFHandler sdfh;
+    sdfh.Import(eh,"testfiles/sdf/compound.sdf");
+    mol::EntityView ev = eh.Select("(ele=C or ele=N) and aname!='1'");
+    SaveEntity(ev, "testfiles/sdf/compound-view-out.sdf");
+  }
+  BOOST_CHECK(compare_files("testfiles/sdf/compound-view.sdf",
+                            "testfiles/sdf/compound-view-out.sdf"));
+}
+
 BOOST_AUTO_TEST_CASE(nonexisting_file)
 {
   mol::EntityHandle eh=mol::CreateEntity();
diff --git a/modules/io/tests/testfiles/sdf/compound-view.sdf b/modules/io/tests/testfiles/sdf/compound-view.sdf
new file mode 100644
index 0000000000000000000000000000000000000000..0902b1232e979e69f500f1ff5c9c5a93fbf2994b
--- /dev/null
+++ b/modules/io/tests/testfiles/sdf/compound-view.sdf
@@ -0,0 +1,440 @@
+Test Ligand
+
+
+ 21 23  0  0  0  0            999 V2000
+   33.9561    6.2475   23.4088 C   0  0  0  0  0  0
+   32.6324    6.6232   23.1367 C   0  0  0  0  0  0
+   34.5295    6.5843   24.6557 C   0  0  0  0  0  0
+   31.8762    7.3329   24.0856 C   0  0  0  0  0  0
+   33.7671    7.2733   25.6188 C   0  0  0  0  0  0
+   32.4286    7.6460   25.3459 C   0  0  0  0  0  0
+   31.5951    8.3119   26.3710 C   0  0  0  0  0  0
+   31.3314    7.9140   27.6484 C   0  0  0  0  0  0
+   31.8735    6.7525   28.4344 C   0  0  0  0  0  0
+   30.4351    8.7885   28.2094 N   0  0  0  0  0  0
+   31.7811    6.9129   29.7679 N   0  0  0  0  0  0
+   30.1110    9.7809   27.3482 N   0  0  0  0  0  0
+   32.3829    6.0325   30.7674 C   0  0  0  0  0  0
+   30.7767    9.4820   26.2306 C   0  0  0  0  0  0
+   31.3859    4.9676   31.2295 C   0  0  0  0  0  0
+   30.7144   10.3135   25.0185 C   0  0  0  0  0  0
+   31.9150   10.8059   24.4681 C   0  0  0  0  0  0
+   31.8995   11.6150   23.3143 C   0  0  0  0  0  0
+   30.6694   11.9024   22.6787 C   0  0  0  0  0  0
+   29.4673   11.4261   23.2329 C   0  0  0  0  0  0
+   29.4821   10.6385   24.4075 C   0  0  0  0  0  0
+  1  2  1  0  0  0
+  1  3  2  0  0  0
+  2  4  2  0  0  0
+  3  5  1  0  0  0
+  4  6  1  0  0  0
+  5  6  2  0  0  0
+  6  7  1  0  0  0
+  7  8  2  0  0  0
+  7 14  1  0  0  0
+  8  9  1  0  0  0
+  8 10  1  0  0  0
+  9 11  1  0  0  0
+ 10 12  1  0  0  0
+ 11 13  1  0  0  0
+ 12 14  2  0  0  0
+ 13 15  1  0  0  0
+ 14 16  1  0  0  0
+ 16 17  1  0  0  0
+ 16 21  2  0  0  0
+ 17 18  2  0  0  0
+ 18 19  1  0  0  0
+ 19 20  2  0  0  0
+ 20 21  1  0  0  0
+M  END
+> <i_i_glide_confnum>
+2
+
+> <i_i_glide_lignum>
+1
+
+> <i_i_glide_posenum>
+352
+
+> <r_i_docking_score>
+-8.84426
+
+> <r_i_glide_ecoul>
+-16.1644
+
+> <r_i_glide_einternal>
+6.78671
+
+> <r_i_glide_emodel>
+-96.9661
+
+> <r_i_glide_energy>
+-62.2146
+
+> <r_i_glide_erotb>
+0.517993
+
+> <r_i_glide_esite>
+-0.0291388
+
+> <r_i_glide_evdw>
+-46.0502
+
+> <r_i_glide_gscore>
+-8.84426
+
+> <r_i_glide_hbond>
+-0.960751
+
+> <r_i_glide_ligand_efficiency>
+-0.327565
+
+> <r_i_glide_ligand_efficiency_ln>
+-2.0588
+
+> <r_i_glide_ligand_efficiency_sa>
+-0.982695
+
+> <r_i_glide_lipo>
+-2.84534
+
+> <r_i_glide_metal>
+-0
+
+> <r_i_glide_rewards>
+-0.799851
+
+> <r_i_glide_rmsd>
+0.6819
+
+$$$$
+Test Ligand
+
+
+ 21 23  0  0  0  0            999 V2000
+   34.1450    6.3862   23.4047 C   0  0  0  0  0  0
+   34.6745    6.7394   24.6654 C   0  0  0  0  0  0
+   32.7998    6.7274   23.0916 C   0  0  0  0  0  0
+   33.8742    7.4015   25.6120 C   0  0  0  0  0  0
+   32.0035    7.3913   24.0448 C   0  0  0  0  0  0
+   32.5275    7.7230   25.3191 C   0  0  0  0  0  0
+   31.6607    8.3431   26.3377 C   0  0  0  0  0  0
+   31.4133    7.9370   27.6169 C   0  0  0  0  0  0
+   31.9782    6.7689   28.3776 C   0  0  0  0  0  0
+   30.5206    8.8053   28.2099 N   0  0  0  0  0  0
+   32.0029    6.9625   29.7121 N   0  0  0  0  0  0
+   30.1677    9.8050   27.3570 N   0  0  0  0  0  0
+   32.5238    6.0208   30.6934 C   0  0  0  0  0  0
+   30.8244    9.5086   26.2225 C   0  0  0  0  0  0
+   31.3863    5.1079   31.1861 C   0  0  0  0  0  0
+   30.7465   10.3438   25.0101 C   0  0  0  0  0  0
+   31.9316   10.8558   24.4417 C   0  0  0  0  0  0
+   31.8920   11.6586   23.2829 C   0  0  0  0  0  0
+   30.6518   11.9231   22.6600 C   0  0  0  0  0  0
+   29.4612   11.4393   23.2345 C   0  0  0  0  0  0
+   29.4978   10.6576   24.4073 C   0  0  0  0  0  0
+  1  2  1  0  0  0
+  1  3  2  0  0  0
+  2  4  2  0  0  0
+  3  5  1  0  0  0
+  4  6  1  0  0  0
+  5  6  2  0  0  0
+  6  7  1  0  0  0
+  7  8  2  0  0  0
+  7 14  1  0  0  0
+  8  9  1  0  0  0
+  8 10  1  0  0  0
+  9 11  1  0  0  0
+ 10 12  1  0  0  0
+ 11 13  1  0  0  0
+ 12 14  2  0  0  0
+ 13 15  1  0  0  0
+ 14 16  1  0  0  0
+ 16 17  1  0  0  0
+ 16 21  2  0  0  0
+ 17 18  2  0  0  0
+ 18 19  1  0  0  0
+ 19 20  2  0  0  0
+ 20 21  1  0  0  0
+M  END
+> <i_i_glide_confnum>
+14
+
+> <i_i_glide_lignum>
+1
+
+> <i_i_glide_posenum>
+302
+
+> <r_i_docking_score>
+-8.79327
+
+> <r_i_glide_ecoul>
+-16.9687
+
+> <r_i_glide_einternal>
+5.76514
+
+> <r_i_glide_emodel>
+-98.4298
+
+> <r_i_glide_energy>
+-63.3874
+
+> <r_i_glide_erotb>
+0.517993
+
+> <r_i_glide_esite>
+-0.00975737
+
+> <r_i_glide_evdw>
+-46.4187
+
+> <r_i_glide_gscore>
+-8.79327
+
+> <r_i_glide_hbond>
+-0.966475
+
+> <r_i_glide_ligand_efficiency>
+-0.325677
+
+> <r_i_glide_ligand_efficiency_ln>
+-2.04693
+
+> <r_i_glide_ligand_efficiency_sa>
+-0.97703
+
+> <r_i_glide_lipo>
+-2.69167
+
+> <r_i_glide_metal>
+-0
+
+> <r_i_glide_rewards>
+-0.777126
+
+> <r_i_glide_rmsd>
+0.605551
+
+$$$$
+Test Ligand
+
+
+ 21 23  0  0  0  0            999 V2000
+   34.2768    6.4601   23.4276 C   0  0  0  0  0  0
+   34.7199    6.6807   24.7535 C   0  0  0  0  0  0
+   32.9608    6.8443   23.0740 C   0  0  0  0  0  0
+   33.8637    7.2655   25.7079 C   0  0  0  0  0  0
+   32.1001    7.4207   24.0338 C   0  0  0  0  0  0
+   32.5448    7.6388   25.3572 C   0  0  0  0  0  0
+   31.6578    8.2493   26.3632 C   0  0  0  0  0  0
+   31.3829    7.8493   27.6381 C   0  0  0  0  0  0
+   31.8957    6.6637   28.4136 C   0  0  0  0  0  0
+   30.4903    8.7246   28.2064 N   0  0  0  0  0  0
+   31.7656    6.7961   29.7467 N   0  0  0  0  0  0
+   30.1647    9.7304   27.3526 N   0  0  0  0  0  0
+   32.1947    5.8187   30.7363 C   0  0  0  0  0  0
+   30.8430    9.4334   26.2330 C   0  0  0  0  0  0
+   33.6957    5.9781   31.0077 C   0  0  0  0  0  0
+   30.7874   10.2877   25.0301 C   0  0  0  0  0  0
+   31.9854   10.7833   24.4695 C   0  0  0  0  0  0
+   31.9583   11.6080   23.3306 C   0  0  0  0  0  0
+   30.7247   11.9044   22.7018 C   0  0  0  0  0  0
+   29.5221   11.4297   23.2588 C   0  0  0  0  0  0
+   29.5448   10.6400   24.4309 C   0  0  0  0  0  0
+  1  2  1  0  0  0
+  1  3  2  0  0  0
+  2  4  2  0  0  0
+  3  5  1  0  0  0
+  4  6  1  0  0  0
+  5  6  2  0  0  0
+  6  7  1  0  0  0
+  7  8  2  0  0  0
+  7 14  1  0  0  0
+  8  9  1  0  0  0
+  8 10  1  0  0  0
+  9 11  1  0  0  0
+ 10 12  1  0  0  0
+ 11 13  1  0  0  0
+ 12 14  2  0  0  0
+ 13 15  1  0  0  0
+ 14 16  1  0  0  0
+ 16 17  1  0  0  0
+ 16 21  2  0  0  0
+ 17 18  2  0  0  0
+ 18 19  1  0  0  0
+ 19 20  2  0  0  0
+ 20 21  1  0  0  0
+M  END
+> <i_i_glide_confnum>
+1
+
+> <i_i_glide_lignum>
+1
+
+> <i_i_glide_posenum>
+177
+
+> <r_i_docking_score>
+-8.70173
+
+> <r_i_glide_ecoul>
+-15.8862
+
+> <r_i_glide_einternal>
+1.84397
+
+> <r_i_glide_emodel>
+-99.0481
+
+> <r_i_glide_energy>
+-62.44
+
+> <r_i_glide_erotb>
+0.517993
+
+> <r_i_glide_esite>
+-0.0274759
+
+> <r_i_glide_evdw>
+-46.5538
+
+> <r_i_glide_gscore>
+-8.70173
+
+> <r_i_glide_hbond>
+-0.97397
+
+> <r_i_glide_ligand_efficiency>
+-0.322286
+
+> <r_i_glide_ligand_efficiency_ln>
+-2.02562
+
+> <r_i_glide_ligand_efficiency_sa>
+-0.966858
+
+> <r_i_glide_lipo>
+-2.74283
+
+> <r_i_glide_metal>
+-0
+
+> <r_i_glide_rewards>
+-0.764823
+
+> <r_i_glide_rmsd>
+0.543804
+
+$$$$
+Test Ligand
+
+
+ 21 23  0  0  0  0            999 V2000
+   34.5144    6.6833   23.3611 C   0  0  0  0  0  0
+   33.1880    6.9515   22.9860 C   0  0  0  0  0  0
+   34.9381    7.0224   24.6610 C   0  0  0  0  0  0
+   32.2870    7.5460   23.8905 C   0  0  0  0  0  0
+   34.0422    7.6076   25.5720 C   0  0  0  0  0  0
+   32.7085    7.8735   25.1943 C   0  0  0  0  0  0
+   31.7655    8.4568   26.1623 C   0  0  0  0  0  0
+   31.4563    8.0176   27.4151 C   0  0  0  0  0  0
+   31.9612    6.8234   28.1735 C   0  0  0  0  0  0
+   30.4991    8.8399   27.9505 N   0  0  0  0  0  0
+   31.7656    6.8973   29.5011 N   0  0  0  0  0  0
+   30.1623    9.8254   27.0921 N   0  0  0  0  0  0
+   32.1790    5.9073   30.4826 C   0  0  0  0  0  0
+   30.8968    9.5864   26.0023 C   0  0  0  0  0  0
+   33.4739    6.3765   31.1528 C   0  0  0  0  0  0
+   30.8088   10.4312   24.8021 C   0  0  0  0  0  0
+   31.9800   11.0176   24.2785 C   0  0  0  0  0  0
+   31.9238   11.8291   23.1331 C   0  0  0  0  0  0
+   30.6968   12.0157   22.4634 C   0  0  0  0  0  0
+   29.5186   11.4761   23.0060 C   0  0  0  0  0  0
+   29.5649   10.7043   24.1795 C   0  0  0  0  0  0
+  1  2  1  0  0  0
+  1  3  2  0  0  0
+  2  4  2  0  0  0
+  3  5  1  0  0  0
+  4  6  1  0  0  0
+  5  6  2  0  0  0
+  6  7  1  0  0  0
+  7  8  2  0  0  0
+  7 14  1  0  0  0
+  8  9  1  0  0  0
+  8 10  1  0  0  0
+  9 11  1  0  0  0
+ 10 12  1  0  0  0
+ 11 13  1  0  0  0
+ 12 14  2  0  0  0
+ 13 15  1  0  0  0
+ 14 16  1  0  0  0
+ 16 17  1  0  0  0
+ 16 21  2  0  0  0
+ 17 18  2  0  0  0
+ 18 19  1  0  0  0
+ 19 20  2  0  0  0
+ 20 21  1  0  0  0
+M  END
+> <i_i_glide_confnum>
+9
+
+> <i_i_glide_lignum>
+1
+
+> <i_i_glide_posenum>
+294
+
+> <r_i_docking_score>
+-8.69162
+
+> <r_i_glide_ecoul>
+-14.7519
+
+> <r_i_glide_einternal>
+5.89466
+
+> <r_i_glide_emodel>
+-97.7232
+
+> <r_i_glide_energy>
+-63.1839
+
+> <r_i_glide_erotb>
+0.517993
+
+> <r_i_glide_esite>
+-0.0119369
+
+> <r_i_glide_evdw>
+-48.432
+
+> <r_i_glide_gscore>
+-8.69162
+
+> <r_i_glide_hbond>
+-0.870172
+
+> <r_i_glide_ligand_efficiency>
+-0.321912
+
+> <r_i_glide_ligand_efficiency_ln>
+-2.02327
+
+> <r_i_glide_ligand_efficiency_sa>
+-0.965735
+
+> <r_i_glide_lipo>
+-2.92829
+
+> <r_i_glide_metal>
+-0
+
+> <r_i_glide_rewards>
+-0.764823
+
+> <r_i_glide_rmsd>
+0.463026
+
+$$$$