diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 6ed6e991b9c468e0b4bb94e5790b6a64f3a554bf..9b80b1fa77326192821c0de62742603ce1bbf7e3 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -26,6 +26,9 @@ Changes In Release 1.3.0
   * Update directory layout of OST to be more conformant with the site-package
     system of Python: Instead of storing the modules in lib{64}/ost/ost, they
     are now in lib{64}/python{{VERSION}}/site-packages/ost
+  * Added molck, the molecular checker. A small command-line tool to clean PDB 
+    files, e.g. remove atoms with zero occupancy, "virtual atoms", hydrogens 
+    etc.
 
 Changes In Release 1.2.3
 --------------------------------------------------------------------------------
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cfbd59e3ac4f1e437bd2ecc6abb889d45a6a7898..f4ce4d675a556308f5b1031c3f4446050d9a15eb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,7 +6,7 @@ cmake_minimum_required(VERSION 2.6.4 FATAL_ERROR)
 project(OpenStructure CXX C)
 set (OST_VERSION_MAJOR 1)
 set (OST_VERSION_MINOR 3)
-set (OST_VERSION_PATCH 0)
+set (OST_VERSION_PATCH 1)
 set (OST_VERSION_STRING ${OST_VERSION_MAJOR}.${OST_VERSION_MINOR}.${OST_VERSION_PATCH} )
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake_support)
 include(OST)
diff --git a/modules/base/src/boost_filesystem_helper.hh b/modules/base/src/boost_filesystem_helper.hh
index 5418253fd7553f7f715e8259d1f6f08615080ca1..450ffa94deaef5b230c11cd0129e3a5422549fda 100644
--- a/modules/base/src/boost_filesystem_helper.hh
+++ b/modules/base/src/boost_filesystem_helper.hh
@@ -37,6 +37,16 @@ String BFPathToString(const boost::filesystem::path& path)
 #endif
 }
 
+inline String BFPathStem(const boost::filesystem::path& path) {
+#if BOOST_FILESYSTEM_VERSION<103400
+  String name = BFPathToString(path);
+  size_t n = name.rfind('.');
+  return name.substr(0, n);
+#else
+  return path.stem();
+#endif
+}
+
 }
 
 
diff --git a/modules/mol/base/pymod/export_entity_view.cc b/modules/mol/base/pymod/export_entity_view.cc
index 4ce29c03b4be50ba28d895fa957b25a626fbe690..fd97572869e6f935b0a3ab7b7b6226f8d850dcd9 100644
--- a/modules/mol/base/pymod/export_entity_view.cc
+++ b/modules/mol/base/pymod/export_entity_view.cc
@@ -215,4 +215,6 @@ void export_EntityView()
   class_<EntityViewList>("EntityViewList", init<>())
     .def(vector_indexing_suite<EntityViewList>())
   ;
+  to_python_converter<std::pair<EntityView, EntityView>,
+                      PairToTupleConverter<EntityView, EntityView> >();
 }
diff --git a/modules/mol/base/src/editor_base.cc b/modules/mol/base/src/editor_base.cc
index 31642fee31bff6b7e4f621bd0376f75647891015..9e8729d9374391321f511f8e17e1bef79b81d327 100644
--- a/modules/mol/base/src/editor_base.cc
+++ b/modules/mol/base/src/editor_base.cc
@@ -208,9 +208,13 @@ void EditorBase::RenumberAllResidues(int start, bool keep_spacing)
   ent_.Impl()->RenumberAllResidues(start, keep_spacing);
 }
 
-void EditorBase::RenumberChain(const String& name, int start, bool keep_spacing)
+void EditorBase::RenumberChain(const ChainHandle& chain, int start, bool keep_spacing)
 {
-  ent_.Impl()->RenumberChain(name, start, keep_spacing);
+  CheckHandleValidity(chain);
+  if(chain.GetEntity()!=ent_){
+    throw Error("Chain does not belong to the editors entity!");
+  }
+  chain.Impl()->RenumberAllResidues(start, keep_spacing);
 }
 
 void EditorBase::RenameAtom(AtomHandle atom, const String& new_name)
diff --git a/modules/mol/base/src/editor_base.hh b/modules/mol/base/src/editor_base.hh
index ad87fe149adf3af3e8d9168632be6e7d1192fdae..05d82ddb0682e12737b629947f010947cb009842 100644
--- a/modules/mol/base/src/editor_base.hh
+++ b/modules/mol/base/src/editor_base.hh
@@ -293,7 +293,7 @@ public:
   /// \param keep_spacing
   ///           If set to false, residues will continously be renumbered ongoing from start.
   ///           Otherwise the spacings between the residues are kept.
-  void RenumberChain(const String& name, int start, bool keep_spacing);
+  void RenumberChain(const ChainHandle& chain, int start, bool keep_spacing);
     
   /// \brief Get edit mode of editor
   EditMode GetMode() const {return mode_;}
diff --git a/modules/seq/alg/src/impl/align_impl.hh b/modules/seq/alg/src/impl/align_impl.hh
index 2df545dbd156cf9c3b0bb5c7b922b28d10d60573..33c1afe760f8a70f5b6cdadff69bb26e9e2353f9 100644
--- a/modules/seq/alg/src/impl/align_impl.hh
+++ b/modules/seq/alg/src/impl/align_impl.hh
@@ -98,6 +98,15 @@ inline void DLLEXPORT StoreStrAsAln(String& aln_str1, String& aln_str2,
   AlignmentHandle aln=CreateAlignment();
   aln.AddSequence(CreateSequence(s1.GetName(), aln_str1));
   aln.AddSequence(CreateSequence(s2.GetName(), aln_str2));  
+
+  if (s1.GetAttachedView()) {
+    aln.AttachView(0, s1.GetAttachedView());
+  }
+
+  if (s2.GetAttachedView()) {
+    aln.AttachView(1, s2.GetAttachedView());
+  }
+
   aln.SetSequenceOffset(0, i);
   aln.SetSequenceOffset(1, j);
   alignments.push_back(aln);
diff --git a/modules/seq/base/pymod/export_sequence.cc b/modules/seq/base/pymod/export_sequence.cc
index 269ce3a7cb584704d5074505180d653ffe93539c..6cdf081cd35740fa1f4a543ef341e37f3e0974f6 100644
--- a/modules/seq/base/pymod/export_sequence.cc
+++ b/modules/seq/base/pymod/export_sequence.cc
@@ -80,6 +80,9 @@ ConstSequenceList do_slice_a(ConstSequenceList& t, slice sl)
 {
   return do_slice<ConstSequenceList>(t, sl);
 }
+String aln_to_str(const AlignmentHandle& aln) {
+  return aln.ToString();
+}
 
 SequenceList do_slice_b(SequenceList& t, slice sl)
 {
@@ -334,9 +337,6 @@ void export_sequence()
   class_<SeqListIter>("SeqListIter", no_init)
     .def("next", &SeqListIter::next)
   ;
-  to_python_converter<std::pair<mol::EntityView, mol::EntityView>, 
-                      PairToTupleConverter<mol::EntityView, mol::EntityView> >();
-  
   class_<AlignmentHandle>("AlignmentHandle", init<>())
     .def("GetCount", &AlignmentHandle::GetCount)
     .add_property("sequence_count", &AlignmentHandle::GetCount)
@@ -345,10 +345,13 @@ void export_sequence()
     .def("GetResidueIndex", &AlignmentHandle::GetResidueIndex)
     .def("GetResidue", &AlignmentHandle::GetResidue)
     .def("AddSequence", &AlignmentHandle::AddSequence)
+    .def("GetMatchingBackboneViews", &AlignmentHandle::GetMatchingBackboneViews,
+         (arg("idx_a")=0, arg("idx_b")=1))
     .def("FindSequence", &AlignmentHandle::FindSequence)
     .def("FindSequenceIndex", &AlignmentHandle::FindSequenceIndex)
     .def("Copy", &AlignmentHandle::Copy)
-    .def("ToString", &AlignmentHandle::ToString)
+    .def("ToString", &AlignmentHandle::ToString, (arg("width")=80))
+    .def("__str__", aln_to_str)
     .def("GetLength", &AlignmentHandle::GetLength)
     .def("__len__", &AlignmentHandle::GetLength)
     .def("GetSequences", &AlignmentHandle::GetSequences)
diff --git a/modules/seq/base/src/sequence_op.cc b/modules/seq/base/src/sequence_op.cc
index c502367f14c2e0addadcc72121542b1cb4c57cb4..17e36da506a6a2e7db955e902153c11854dbff72 100644
--- a/modules/seq/base/src/sequence_op.cc
+++ b/modules/seq/base/src/sequence_op.cc
@@ -41,7 +41,9 @@ SequenceHandle SequenceFromChain(const String& name,
        e=residues.end(); i!=e; ++i) {
     sequence+=(*i).GetOneLetterCode();
   }
-  return CreateSequence(name, sequence);
+  SequenceHandle s = CreateSequence(name, sequence);
+  s.AttachView(chain.Select(""));
+  return s;
 }
 
 
@@ -54,7 +56,9 @@ SequenceHandle SequenceFromChain(const String& name,
        e=chain.GetResidueList().end(); i!=e; ++i) {
     sequence+=(*i).GetOneLetterCode();
   }
-  return CreateSequence(name, sequence);
+  SequenceHandle s = CreateSequence(name, sequence);
+  s.AttachView(chain.Select(""));
+  return s;
 } 
  
 }}
diff --git a/tools/molck/main.cc b/tools/molck/main.cc
index dab69250c67ce2022bc66555b0179c8386ef577e..6b896ac68313eb65e8ed10c75040f6bdd2bfa3c2 100644
--- a/tools/molck/main.cc
+++ b/tools/molck/main.cc
@@ -370,7 +370,7 @@ int main(int argc, char *argv[])
     }
     if (write_to_file) {
       fs::path input_file_path(files[i]);
-      fs::path input_filename = input_file_path.stem();
+      fs::path input_filename = BFPathStem(input_file_path);
  
 
       String input_filename_string=BFPathToString(input_filename);