diff --git a/modules/mol/alg/pymod/export_molck.cc b/modules/mol/alg/pymod/export_molck.cc
index 643ffbd222e65a7b285d8e78c31417c1ff05b5f5..3549e55a8a0d5918fc4c0d65d3ddaac6b71a569a 100644
--- a/modules/mol/alg/pymod/export_molck.cc
+++ b/modules/mol/alg/pymod/export_molck.cc
@@ -16,14 +16,109 @@
 // along with this library; if not, write to the Free Software Foundation, Inc.,
 // 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 //------------------------------------------------------------------------------
+#include <stdexcept>
 #include <boost/python.hpp>
+#include <boost/python/raw_function.hpp>
 
 using namespace boost::python;
 
 #include <ost/mol/alg/molck.hh>
 
+using namespace ost::mol::alg;
+
+namespace {
+
+object MolckSettingsInitWrapper(tuple args, dict kwargs){
+
+  object self = args[0];
+  args = tuple(args.slice(1,_));
+
+  bool rm_unk_atoms = false;
+  if(kwargs.contains("rm_unk_atoms")){
+    rm_unk_atoms = extract<bool>(kwargs["rm_unk_atoms"]);
+    kwargs["rm_unk_atoms"].del();
+  }
+
+  bool rm_non_std = false;
+  if(kwargs.contains("rm_non_std")){
+    rm_non_std = extract<bool>(kwargs["rm_non_std"]);
+    kwargs["rm_non_std"].del();
+  }
+
+  bool rm_hyd_atoms = true;
+  if(kwargs.contains("rm_hyd_atoms")){
+    rm_hyd_atoms = extract<bool>(kwargs["rm_hyd_atoms"]);
+    kwargs["rm_hyd_atoms"].del();
+  }
+
+  bool rm_oxt_atoms = false;
+  if(kwargs.contains("rm_oxt_atoms")){
+    rm_oxt_atoms = extract<bool>(kwargs["rm_oxt_atoms"]);
+    kwargs["rm_oxt_atoms"].del();
+  }
+
+  bool rm_zero_occ_atoms = false;
+  if(kwargs.contains("rm_zero_occ_atoms")){
+    rm_zero_occ_atoms = extract<bool>(kwargs["rm_zero_occ_atoms"]);
+    kwargs["rm_zero_occ_atoms"].del();
+  }
+
+  bool colored = false;
+  if(kwargs.contains("colored")){
+    colored = extract<bool>(kwargs["colored"]);
+    kwargs["colored"].del();
+  }
+
+  bool map_nonstd_res = true;
+  if(kwargs.contains("map_nonstd_res")){
+    map_nonstd_res = extract<bool>(kwargs["map_nonstd_res"]);
+    kwargs["map_nonstd_res"].del();
+  }
+
+  bool assign_elem = true;
+  if(kwargs.contains("assign_elem")){
+    assign_elem = extract<bool>(kwargs["assign_elem"]);
+    kwargs["assign_elem"].del();
+  }
+
+  if(len(kwargs) > 0){
+    std::stringstream ss;
+    ss << "Invalid keywords observed when setting up MolckSettings! ";
+    ss << "Or did you pass the same keyword twice? ";
+    ss << "Valid keywords are: rm_unk_atoms, rm_non_std, rm_hyd_atoms, ";
+    ss << "rm_oxt_atoms, rm_zero_occ_atoms, colored, map_nonstd_res, ";
+    ss << "assign_elem!";
+    throw std::invalid_argument(ss.str());
+  }
+
+
+  return self.attr("__init__")(rm_unk_atoms,
+                               rm_non_std,
+                               rm_hyd_atoms,
+                               rm_oxt_atoms,
+                               rm_zero_occ_atoms,
+                               colored,
+                               map_nonstd_res,
+                               assign_elem);
+}}
+
 void export_Molck()
 {
-  // def("load_compound_lib", &ost::mol::alg::load_compound_lib, 
-  //     (arg("custom_path")));
-}
+  class_<MolckSettings>("MolckSettings", no_init)
+    .def("__init__", raw_function(MolckSettingsInitWrapper))
+    .def(init<bool , bool, bool, bool, bool, bool, bool, bool>())
+    .def("ToString", &MolckSettings::ToString)
+    .def("__repr__", &MolckSettings::ToString)
+    .def("__str__", &MolckSettings::ToString)
+    .def_readwrite("rm_unk_atoms", &MolckSettings::rm_unk_atoms)
+    .def_readwrite("rm_non_std", &MolckSettings::rm_non_std)
+    .def_readwrite("rm_hyd_atoms", &MolckSettings::rm_hyd_atoms)
+    .def_readwrite("rm_oxt_atoms", &MolckSettings::rm_oxt_atoms)
+    .def_readwrite("rm_zero_occ_atoms", &MolckSettings::rm_zero_occ_atoms)
+    .def_readwrite("colored", &MolckSettings::colored)
+    .def_readwrite("map_nonstd_res", &MolckSettings::map_nonstd_res)
+    .def_readwrite("assign_elem", &MolckSettings::assign_elem)
+  ;
+
+  def("Molck", &Molck, (arg("ent"), arg("lib"), arg("settings")));
+}
\ No newline at end of file
diff --git a/modules/mol/alg/src/molck.hh b/modules/mol/alg/src/molck.hh
index d7e4b65d2975b8680c2f06ce44bd7b2f57fec5ee..566261d763c1859c507fea092b3db0280cd5d6b9 100644
--- a/modules/mol/alg/src/molck.hh
+++ b/modules/mol/alg/src/molck.hh
@@ -1,6 +1,15 @@
+
+#include <string>
 #include <ost/mol/entity_handle.hh>
 #include <ost/conop/compound_lib.hh>
 
+namespace {
+  inline std::string BoolToString(bool b)
+    {
+      return b ? "True" : "False";
+    }
+}
+
 namespace ost { namespace mol{ namespace alg {
 
 struct MolckSettings;
@@ -25,6 +34,39 @@ struct MolckSettings{
                      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
 
+  MolckSettings(bool init_rm_unk_atoms,
+                bool init_rm_non_std,
+                bool init_rm_hyd_atoms,
+                bool init_rm_oxt_atoms,
+                bool init_rm_zero_occ_atoms,
+                bool init_colored,
+                bool init_map_nonstd_res,
+                bool init_assign_elem){
+     rm_unk_atoms = init_rm_unk_atoms;
+     rm_non_std = init_rm_non_std;
+     rm_hyd_atoms = init_rm_hyd_atoms;
+     rm_oxt_atoms = init_rm_oxt_atoms;
+     rm_zero_occ_atoms = init_rm_zero_occ_atoms;
+     colored = init_colored;
+     map_nonstd_res = init_map_nonstd_res;
+     assign_elem = init_assign_elem;
+  }
+
+  public:
+    std::string ToString(){
+      std::string rep = "MolckSettings(rm_unk_atoms=" + BoolToString(rm_unk_atoms) +
+        ", rm_unk_atoms=" + BoolToString(rm_unk_atoms) +
+        ", rm_non_std=" + BoolToString(rm_non_std) +
+        ", rm_hyd_atoms=" + BoolToString(rm_hyd_atoms) +
+        ", rm_oxt_atoms=" + BoolToString(rm_oxt_atoms) +
+        ", rm_zero_occ_atoms=" + BoolToString(rm_zero_occ_atoms) +
+        ", colored=" + BoolToString(colored) +
+        ", map_nonstd_res=" + BoolToString(map_nonstd_res) +
+        ", assign_elem=" + BoolToString(assign_elem) +
+        ")";
+      return rep;
+    }
+
 };
 
 ost::mol::EntityHandle MapNonStandardResidues(ost::mol::EntityHandle& ent,