diff --git a/modules/mol/alg/src/molck.cc b/modules/mol/alg/src/molck.cc
index 8ce012cf783faa396c8efecfd713ba7355db05f3..e2acc287768ce93bf5ba8e5fcdcb6d73e0144e0d 100644
--- a/modules/mol/alg/src/molck.cc
+++ b/modules/mol/alg/src/molck.cc
@@ -1,30 +1,22 @@
-// #include <unistd.h>
-// #include <boost/program_options.hpp>
 #include <boost/filesystem/path.hpp>
 #include <boost/filesystem/convenience.hpp>
 #include <ost/base.hh>
 #include <ost/boost_filesystem_helper.hh>
-// #include <ost/platform.hh>
 #include <ost/conop/model_check.hh>
 #include <ost/conop/conop.hh>
 #include <ost/conop/amino_acids.hh>
 #include <ost/io/mol/pdb_reader.hh>
-// #include <ost/io/mol/pdb_writer.hh>
 #include <ost/io/mol/mmcif_reader.hh>
-// #include <ost/io/io_exception.hh>
 #include <ost/conop/nonstandard.hh>
 #include <ost/mol/alg/molck.hh>
-// #if defined(__APPLE__)
-// #include <mach-o/dyld.h>
-// #endif
-// using namespace ost;
+
 using namespace ost::conop;
 using namespace ost::mol;
 using namespace ost::io;
 
-// namespace po=boost::program_options;
 namespace fs=boost::filesystem;
 
+
 EntityHandle ost::mol::alg::molck::load_x(const String& file, const IOProfile& profile)
 {
   try {
@@ -135,7 +127,8 @@ EntityHandle ost::mol::alg::molck::MapNonStandardResidues(EntityHandle& ent, Com
   return new_ent;
 }
 
-void ost::mol::alg::molck::RemoveAtoms(EntityHandle& ent,
+void ost::mol::alg::molck::RemoveAtoms(
+                 EntityHandle& ent,
                  CompoundLibPtr lib,
                  bool rm_unk_atoms,
                  bool rm_non_std,
@@ -231,4 +224,53 @@ void ost::mol::alg::molck::CleanUpElementColumn(EntityHandle& ent, CompoundLibPt
       }
     }    
   }
-}
\ No newline at end of file
+}
+
+void ost::mol::alg::molck::Molck(
+           ost::mol::EntityHandle& ent,
+           ost::conop::CompoundLibPtr lib,
+           const ost::mol::alg::molck::MolckSettings& settings=ost::mol::alg::molck::MolckSettings()){
+  if (settings.map_nonstd_res)  {
+    ent = ost::mol::alg::molck::MapNonStandardResidues(ent, lib);
+  }
+  ost::mol::alg::molck::RemoveAtoms(ent, 
+              lib, 
+              settings.rm_unk_atoms,
+              settings.rm_non_std,
+              settings.rm_hyd_atoms,
+              settings.rm_oxt_atoms,
+              settings.rm_zero_occ_atoms,
+              settings.colored);
+  if (settings.assign_elem)  {
+    ost::mol::alg::molck::CleanUpElementColumn(ent, lib);
+  }          
+}
+
+// ost::mol::EntityHandle ost::mol::alg::molck::Molck(
+//            String& file,
+//            ost::conop::CompoundLibPtr lib,
+//            const ost::mol::alg::molck::MolckSettings& settings=ost::mol::alg::molck::MolckSettings()){
+//   IOProfile prof;
+//   prof.fault_tolerant=true;
+//   EntityHandle ent = ost::mol::alg::molck::load_x(file, prof);
+//   if (!ent.IsValid()) {
+//     throw std::runtime_error("Entity is invalid!");
+//   }
+
+//   if (settings.map_nonstd_res)  {
+//     ent = ost::mol::alg::molck::MapNonStandardResidues(ent, lib);
+//   }
+//   ost::mol::alg::molck::RemoveAtoms(ent, 
+//               lib, 
+//               settings.rm_unk_atoms,
+//               settings.rm_non_std,
+//               settings.rm_hyd_atoms,
+//               settings.rm_oxt_atoms,
+//               settings.rm_zero_occ_atoms,
+//               settings.colored);
+//   if (settings.assign_elem)  {
+//     ost::mol::alg::molck::CleanUpElementColumn(ent, lib);
+//   }
+
+//   return ent;          
+// }
\ No newline at end of file
diff --git a/modules/mol/alg/src/molck.hh b/modules/mol/alg/src/molck.hh
index 4f7f75fccf93824515fe6c75f71e172d4f24632f..0664ea7960d2188d1263d63e892a3ce2b1e16efc 100644
--- a/modules/mol/alg/src/molck.hh
+++ b/modules/mol/alg/src/molck.hh
@@ -5,9 +5,35 @@
 namespace ost { namespace mol{ namespace alg{ namespace molck {
 
 struct MolckSettings;
+
+struct MolckSettings{
+  
+  bool rm_unk_atoms;
+  bool rm_non_std;
+  bool rm_hyd_atoms;
+  bool rm_oxt_atoms;
+  bool rm_zero_occ_atoms;
+  bool colored;
+  bool map_nonstd_res;
+  bool assign_elem;
+
+  MolckSettings():   rm_unk_atoms(false), // Remove unknown and atoms not following the nomenclature
+                     rm_non_std(false), // Remove all residues not one of the 20 standard amino acids
+                     rm_hyd_atoms(true), // Remove hydrogen atoms
+                     rm_oxt_atoms(false), // Remove terminal oxygens
+                     rm_zero_occ_atoms(false), // Remove atoms with zero occupancy
+                     colored(false), // Whether the output should be colored
+                     map_nonstd_res(true), // Map non standard residues back to standard ones (e.g.: MSE->MET,SEP->SER,etc.)
+                     assign_elem(true){} // Clean up element column
+
+};
+
 ost::mol::EntityHandle load_x(const String& file, const ost::io::IOProfile& profile);
+
 ost::conop::CompoundLibPtr load_compound_lib(const String& custom_path);
+
 ost::mol::EntityHandle MapNonStandardResidues(ost::mol::EntityHandle& ent, ost::conop::CompoundLibPtr lib);
+
 void RemoveAtoms(ost::mol::EntityHandle& ent,
                  ost::conop::CompoundLibPtr lib,
                  bool rm_unk_atoms,
@@ -16,19 +42,13 @@ void RemoveAtoms(ost::mol::EntityHandle& ent,
                  bool rm_oxt_atoms,
                  bool rm_zero_occ_atoms,
                  bool colored=true);
+
 void CleanUpElementColumn(ost::mol::EntityHandle& ent, ost::conop::CompoundLibPtr lib);
 
-struct MolckSettings{
-  
-  String rm;
-  String color;
-  bool map_nonstd_res;
-  bool assign_elem;
+void Molck(ost::mol::EntityHandle& ent, ost::conop::CompoundLibPtr lib, const MolckSettings& settings);
+// void Molck(ost::mol::EntityHandle& ent, String& custom_path, const MolckSettings& settings);
+// ost::mol::EntityHandle Molck(String& file, ost::conop::CompoundLibPtr lib, const MolckSettings& settings);
+// ost::mol::EntityHandle Molck(String& file, String& custom_path, const MolckSettings& settings);
 
-  MolckSettings():   rm("hyd"), // atoms to be removed
-                     color("auto"), // whether the output should be colored
-                     map_nonstd_res(true), // map non standard residues back to standard ones (e.g.: MSE->MET,SEP->SER,etc.)
-                     assign_elem(true){} // clean up element column
 
-};
 }}}} // namespace
diff --git a/tools/molck/main.cc b/tools/molck/main.cc
index 882c3e36ab108cf7790392cc0ed37eeb85c9d31b..db66fe9428c14070f567c7936a9ea43dc551cc03 100644
--- a/tools/molck/main.cc
+++ b/tools/molck/main.cc
@@ -5,14 +5,9 @@
 #include <ost/base.hh>
 #include <ost/boost_filesystem_helper.hh>
 #include <ost/platform.hh>
-#include <ost/conop/model_check.hh>
 #include <ost/conop/conop.hh>
-#include <ost/conop/amino_acids.hh>
-#include <ost/io/mol/pdb_reader.hh>
 #include <ost/io/mol/pdb_writer.hh>
-#include <ost/io/mol/mmcif_reader.hh>
 #include <ost/io/io_exception.hh>
-#include <ost/conop/nonstandard.hh>
 #include <ost/mol/alg/molck.hh>
 #if defined(__APPLE__)
 #include <mach-o/dyld.h>
@@ -63,19 +58,12 @@ int main(int argc, char *argv[])
   }
   IOProfile prof;
   prof.fault_tolerant=true;
+  MolckSettings settings;
   String rm;
   String color;
-  bool colored = false;
 
-  bool rm_unk_atoms=false;
-  bool rm_hyd_atoms=false;
-  bool rm_non_std=false;
-  bool rm_oxt_atoms=false;
-  bool rm_zero_occ_atoms=false;
   bool write_to_stdout = false;
   bool write_to_file = false;
-  bool map_nonstd_res = false;
-  bool assign_elem = false;
   String output_blueprint_string;
   String custom_path="";
 
@@ -123,24 +111,24 @@ int main(int argc, char *argv[])
     output_blueprint_string = vm["out"].as<String>();
   }
   if (vm.count("map-nonstd")) {
-    map_nonstd_res = true;
+    settings.map_nonstd_res = true;
   }
   if (vm.count("fix-ele")) {
-    assign_elem = true;
+    settings.assign_elem = true;
   }
   
   std::vector<StringRef> rms=StringRef(rm.c_str(), rm.size()).split(',');
   for (size_t i=0; i<rms.size(); ++i) {
     if (rms[i] == StringRef("unk", 3)) {
-      rm_unk_atoms = true;
+      settings.rm_unk_atoms = true;
     } else if (rms[i] == StringRef("nonstd", 6)) {
-      rm_non_std = true;
+      settings.rm_non_std = true;
     } else if (rms[i] == StringRef("hyd", 3)) {
-      rm_hyd_atoms = true;
+      settings.rm_hyd_atoms = true;
     } else if (rms[i] == StringRef("oxt", 3)) {
-      rm_oxt_atoms = true;
+      settings.rm_oxt_atoms = true;
     } else if (rms[i] == StringRef("zeroocc", 7)) {
-      rm_zero_occ_atoms = true;
+      settings.rm_zero_occ_atoms = true;
     } else {
       std::cerr << "unknown value to remove '" << rms[i] << "'" << std::endl;
       usage();
@@ -148,11 +136,11 @@ int main(int argc, char *argv[])
     }
   }
   if (color=="auto") {
-    colored = isatty(STDERR_FILENO);
+    settings.colored = isatty(STDERR_FILENO);
   } else if (color == "on" || color == "1" || color == "yes") {
-    colored = true;
+    settings.colored = true;
   } else if (color == "off" || color == "0" || color == "no") {
-    colored = false;	
+    settings.colored = false;	
   } else {
     usage();
     exit(-1);
@@ -163,22 +151,8 @@ int main(int argc, char *argv[])
     if (!ent.IsValid()) {
       continue;
     }
-    if (map_nonstd_res)  {
-      ent = MapNonStandardResidues(ent, lib);
-    }
-
-    RemoveAtoms(ent, 
-                lib, 
-                rm_unk_atoms,
-                rm_non_std,
-                rm_hyd_atoms,
-                rm_oxt_atoms,
-                rm_zero_occ_atoms,
-                colored);
     
-    if (assign_elem)  {
-      CleanUpElementColumn(ent, lib);
-    }          
+    Molck(ent, lib, settings);
  
     if (write_to_stdout) {
       PDBWriter writer(std::cout, prof);