diff --git a/modules/mol/mm/pymod/export_block_modifiers.cc b/modules/mol/mm/pymod/export_block_modifiers.cc
index f72a91b92ad4b3cbaa5eb71dbb5a77b17dbf5d5c..a8bca930a680a28aca4eee8f358a08a8a217e610 100644
--- a/modules/mol/mm/pymod/export_block_modifiers.cc
+++ b/modules/mol/mm/pymod/export_block_modifiers.cc
@@ -69,27 +69,27 @@ void export_BlockModifiers()
   boost::python::register_ptr_to_python<ost::mol::mm::BlockModifierPtr>();
 
   class_<ost::mol::mm::GromacsHydrogenConstructor, bases<ost::mol::mm::HydrogenConstructor> >("GromacsHydrogenConstructor", init<>())
-    .def("ApplyOnBuildingBlock",&ost::mol::mm::GromacsHydrogenConstructor::ApplyOnBuildingBlock)
-    .def("ApplyOnResidue",&ost::mol::mm::GromacsHydrogenConstructor::ApplyOnResidue)
-    .def("AddHydrogenRule",&WrapAddHydrogenRule)
+    .def("ApplyOnBuildingBlock",&ost::mol::mm::GromacsHydrogenConstructor::ApplyOnBuildingBlock,(arg("block")))
+    .def("ApplyOnResidue",&ost::mol::mm::GromacsHydrogenConstructor::ApplyOnResidue,(arg("residue"),arg("editor")))
+    .def("AddHydrogenRule",&WrapAddHydrogenRule,(arg("number"),arg("method"),arg("hydrogen_names"),arg("anchors")))
   ;
 
   class_<ost::mol::mm::GromacsBlockModifier, bases<ost::mol::mm::BlockModifier> >("GromacsBlockModifier", init<>())
     .def("ApplyOnBuildingBlock",&ost::mol::mm::GromacsBlockModifier::ApplyOnBuildingBlock,(arg("block")))
-    .def("ApplyOnResidue",&ost::mol::mm::GromacsBlockModifier::ApplyOnResidue,(arg("residue")))
+    .def("ApplyOnResidue",&ost::mol::mm::GromacsBlockModifier::ApplyOnResidue,(arg("residue"),arg("residue")))
     .def("AddReplaceRule",&ost::mol::mm::GromacsBlockModifier::AddReplaceRule,(arg("name"),arg("new_name"),arg("new_type"),arg("new_charge")))
     .def("AddAddRule",&ost::mol::mm::GromacsBlockModifier::AddAddRule,(arg("number"),arg("method"),arg("atom_names"),arg("anchors"),arg("type"),arg("charge")))
     .def("AddBond",&ost::mol::mm::GromacsBlockModifier::AddBond,(arg("bond")))
     .def("AddAngle",&ost::mol::mm::GromacsBlockModifier::AddAngle,(arg("angle")))
     .def("AddDihedral",&ost::mol::mm::GromacsBlockModifier::AddDihedral,(arg("dihedral")))
     .def("AddImproper",&ost::mol::mm::GromacsBlockModifier::AddImproper,(arg("improper")))
-    .def("AddCMap",&ost::mol::mm::GromacsBlockModifier::AddDeleteAtom,(arg("cmap")))
+    .def("AddCMap",&ost::mol::mm::GromacsBlockModifier::AddCMap,(arg("cmap")))
     .def("AddDeleteAtom",&ost::mol::mm::GromacsBlockModifier::AddDeleteAtom,(arg("name")))
   ;
  
   class_<ost::mol::mm::HeuristicHydrogenConstructor, bases<ost::mol::mm::HydrogenConstructor> >("HeuristicHydrogenConstructor", init<ost::mol::mm::BuildingBlockPtr>())
   .def("ApplyOnBuildingBlock",&ost::mol::mm::HeuristicHydrogenConstructor::ApplyOnBuildingBlock,(arg("block")))
-  .def("ApplyOnResidue",&ost::mol::mm::HeuristicHydrogenConstructor::ApplyOnResidue,(arg("residue")))
+  .def("ApplyOnResidue",&ost::mol::mm::HeuristicHydrogenConstructor::ApplyOnResidue,(arg("residue"),arg("editor")))
   ;
 
   boost::python::register_ptr_to_python<ost::mol::mm::GromacsHydrogenConstructorPtr>();
diff --git a/modules/mol/mm/pymod/export_buildingblock.cc b/modules/mol/mm/pymod/export_buildingblock.cc
index aa85249aec4a4b2dcdf0be1b2205f810e5e539d7..514b7919b86cc9462921ba8f5cc5073251660786 100644
--- a/modules/mol/mm/pymod/export_buildingblock.cc
+++ b/modules/mol/mm/pymod/export_buildingblock.cc
@@ -96,10 +96,10 @@ void export_Buildingblock()
     .def("AddDihedral",&ost::mol::mm::BuildingBlock::AddDihedral,(arg("dihedral"),arg("replace_existing")=false))
     .def("AddImproper",&ost::mol::mm::BuildingBlock::AddImproper,(arg("improper"),arg("replace_existing")=false))
     .def("AddExclusion",&ost::mol::mm::BuildingBlock::AddExclusion,(arg("exclusion"),arg("replace_existing")=false))
-    .def("AddCMap",&ost::mol::mm::BuildingBlock::AddBond,(arg("cmap"),arg("replace_existing")=false))
+    .def("AddCMap",&ost::mol::mm::BuildingBlock::AddCMap,(arg("cmap"),arg("replace_existing")=false))
     .def("AddConstraint",&ost::mol::mm::BuildingBlock::AddConstraint,(arg("constraint"),arg("replace_existing")=false))
     .def("RemoveAtom",&ost::mol::mm::BuildingBlock::RemoveAtom,(arg("name")))
-    .def("ReplaceAtom",&ost::mol::mm::BuildingBlock::ReplaceAtom,(arg("name"),arg("new_name"),arg("new_type"),arg("new_charge"),arg("new_charge"),arg("new_mass")=std::numeric_limits<Real>::quiet_NaN()))
+    .def("ReplaceAtom",&ost::mol::mm::BuildingBlock::ReplaceAtom,(arg("name"),arg("new_name"),arg("new_type"),arg("new_charge"),arg("new_mass")=std::numeric_limits<Real>::quiet_NaN()))
     .def("RemoveInteractionsToNext",&ost::mol::mm::BuildingBlock::RemoveInteractionsToNext)
     .def("RemoveInteractionsToPrev",&ost::mol::mm::BuildingBlock::RemoveInteractionsToPrev)
   ;
diff --git a/modules/mol/mm/pymod/export_forcefield.cc b/modules/mol/mm/pymod/export_forcefield.cc
index 7811fe3af9bba8f318a2c4e7fbfa0ee20ae5c28c..096b6eef433b075dd3e47ab0d08791103f44a879 100644
--- a/modules/mol/mm/pymod/export_forcefield.cc
+++ b/modules/mol/mm/pymod/export_forcefield.cc
@@ -44,8 +44,9 @@ void export_Forcefield()
     .def("Load",&ost::mol::mm::Forcefield::Load,(arg("filename"))).staticmethod("Load")
     .def("Save",&ost::mol::mm::Forcefield::Save,(arg("filename")))
     .def("GetBuildingBlock",&ost::mol::mm::Forcefield::GetBuildingBlock,(arg("name")))
+    .def("GetBlockModifier",&ost::mol::mm::Forcefield::GetBlockModifier,(arg("name")))
     .def("GetAtomType",&ost::mol::mm::Forcefield::GetAtomType,(arg("res_name"),arg("atom_name")))
-    .def("GetHydrogenConstructor",&ost::mol::mm::Forcefield::GetHydrogenConstructor,arg("name"))
+    .def("GetHydrogenConstructor",&ost::mol::mm::Forcefield::GetHydrogenConstructor,(arg("name")))
     .def("GetNTerModifier",&ost::mol::mm::Forcefield::GetNTerModifier,(arg("residue_name"),arg("ter_name")=""))
     .def("GetCTerModifier",&ost::mol::mm::Forcefield::GetCTerModifier,(arg("residue_name"),arg("ter_name")=""))
     .def("GetBond",&ost::mol::mm::Forcefield::GetBond,(arg("atom_type_1"),arg("atom_type_2")))
@@ -84,7 +85,7 @@ void export_Forcefield()
     .def("GetResidueRenamingCTer",&ost::mol::mm::Forcefield::GetResidueRenamingCTer,(arg("res_name")))
     .def("GetResidueRenamingTwoTer",&ost::mol::mm::Forcefield::GetResidueRenamingTwoTer,(arg("res_name")))
     .def("GetAtomRenaming",&ost::mol::mm::Forcefield::GetAtomRenaming,(arg("res_name"),arg("atom_name")))
-    .def("AssignFFSpecificNames",&ost::mol::mm::Forcefield::AssignFFSpecificNames,(arg("ent"),arg("reverse")=true))
+    .def("AssignFFSpecificNames",&ost::mol::mm::Forcefield::AssignFFSpecificNames,(arg("ent"),arg("reverse")=false))
   ;
 
   boost::python::register_ptr_to_python<ost::mol::mm::ForcefieldPtr>();
diff --git a/modules/mol/mm/pymod/export_simulation.cc b/modules/mol/mm/pymod/export_simulation.cc
index 7d30173602d9a20a6aa6acc57a9a7c5491bff98e..a5d3cae349e83f51c84bc2f95c3b3b052b0b03d4 100644
--- a/modules/mol/mm/pymod/export_simulation.cc
+++ b/modules/mol/mm/pymod/export_simulation.cc
@@ -51,9 +51,9 @@ void export_Simulation()
   class_<ost::mol::mm::Simulation>("Simulation",no_init)
     .def(init<const ost::mol::EntityHandle, const ost::mol::mm::SettingsPtr>())
     .def(init<const ost::mol::mm::TopologyPtr,const ost::mol::EntityHandle&,const ost::mol::mm::SettingsPtr>())
-    .def("Save",&ost::mol::mm::Simulation::Save)
-    .def("Load",&ost::mol::mm::Simulation::Load).staticmethod("Load")
-    .def("Steps",&ost::mol::mm::Simulation::Steps)
+    .def("Save",&ost::mol::mm::Simulation::Save,(arg("filename")))
+    .def("Load",&ost::mol::mm::Simulation::Load,(arg("filename"))).staticmethod("Load")
+    .def("Steps",&ost::mol::mm::Simulation::Steps,(arg("steps")))
     .def("GetPositions",&ost::mol::mm::Simulation::GetPositions,(arg("enforce_periodic_box")=false, arg("in_angstrom")=true))
     .def("GetVelocities",&ost::mol::mm::Simulation::GetVelocities)
     .def("GetForces",&ost::mol::mm::Simulation::GetForces)
@@ -68,22 +68,22 @@ void export_Simulation()
     .def("Register",&ost::mol::mm::Simulation::Register) 
     .def("UpdatePositions",&ost::mol::mm::Simulation::UpdatePositions, (arg("enforce_periodic_box")=false))
     .def("GetTopology",&ost::mol::mm::Simulation::GetTopology)
-    .def("ResetHarmonicBond",&ost::mol::mm::Simulation::ResetHarmonicBond) 
-    .def("ResetHarmonicAngle",&ost::mol::mm::Simulation::ResetHarmonicAngle)
-    .def("ResetUreyBradleyAngle",&ost::mol::mm::Simulation::ResetUreyBradleyAngle)
-    .def("ResetPeriodicDihedral",&ost::mol::mm::Simulation::ResetPeriodicDihedral)
-    .def("ResetPeriodicImproper",&ost::mol::mm::Simulation::ResetPeriodicImproper)
-    .def("ResetHarmonicImproper",&ost::mol::mm::Simulation::ResetHarmonicImproper)
-    .def("ResetLJPair",&ost::mol::mm::Simulation::ResetLJPair)
-    .def("ResetDistanceConstraint",&ost::mol::mm::Simulation::ResetDistanceConstraint)  
-    .def("ResetHarmonicPositionRestraint",&ost::mol::mm::Simulation::ResetHarmonicPositionRestraint,(arg("index"),arg("ref_position"),arg("k"),arg("x_scale")=1.0,arg("y_scale")=1.0,arg("z_scale")=1.0))                                                                     
-    .def("ResetHarmonicDistanceRestraint",&ost::mol::mm::Simulation::ResetHarmonicDistanceRestraint)
-    .def("ResetLJ",&ost::mol::mm::Simulation::ResetLJ)
-    .def("ResetGBSA",&ost::mol::mm::Simulation::ResetGBSA)
-    .def("ResetCharge",&ost::mol::mm::Simulation::ResetCharge)
-    .def("ResetMass",&ost::mol::mm::Simulation::ResetMass)
-    .def("AddPositionConstraint",&ost::mol::mm::Simulation::AddPositionConstraint)
-    .def("AddPositionConstraints",&WrapAddPositionConstraints)
+    .def("ResetHarmonicBond",&ost::mol::mm::Simulation::ResetHarmonicBond,(arg("bond_idx"),arg("bond_length"),arg("force_constant"))) 
+    .def("ResetHarmonicAngle",&ost::mol::mm::Simulation::ResetHarmonicAngle,(arg("angle_idx"),arg("angle"),arg("force_constant")))
+    .def("ResetUreyBradleyAngle",&ost::mol::mm::Simulation::ResetUreyBradleyAngle,(arg("angle_idx"),arg("angle"),arg("angle_force_constant"),arg("bond_length"),arg("bond_force_constant")))
+    .def("ResetPeriodicDihedral",&ost::mol::mm::Simulation::ResetPeriodicDihedral,(arg("dihedral_idx"),arg("multiplicity"),arg("phase"),arg("force_constant")))
+    .def("ResetPeriodicImproper",&ost::mol::mm::Simulation::ResetPeriodicImproper,(arg("improper_idx"),arg("multiplicity"),arg("phase"),arg("force_constant")))
+    .def("ResetHarmonicImproper",&ost::mol::mm::Simulation::ResetHarmonicImproper,(arg("improper_idx"),arg("phase"),arg("force_constant")))
+    .def("ResetLJPair",&ost::mol::mm::Simulation::ResetLJPair,(arg("ljpair_idx"),arg("sigma"),arg("epsilon")))
+    .def("ResetDistanceConstraint",&ost::mol::mm::Simulation::ResetDistanceConstraint,(arg("constraint_idx"),arg("length")))  
+    .def("ResetHarmonicPositionRestraint",&ost::mol::mm::Simulation::ResetHarmonicPositionRestraint,(arg("restraint_idx"),arg("ref_position"),arg("k"),arg("x_scale")=1.0,arg("y_scale")=1.0,arg("z_scale")=1.0))                                                                     
+    .def("ResetHarmonicDistanceRestraint",&ost::mol::mm::Simulation::ResetHarmonicDistanceRestraint,(arg("restraint_idx"),arg("length"),arg("force_constant")))
+    .def("ResetLJ",&ost::mol::mm::Simulation::ResetLJ,(arg("particle_idx"),arg("sigma"),arg("epsilon")))
+    .def("ResetGBSA",&ost::mol::mm::Simulation::ResetGBSA,(arg("particle_idx"),arg("radius"),arg("scaling")))
+    .def("ResetCharge",&ost::mol::mm::Simulation::ResetCharge,(arg("particle_idx"),arg("charge")))
+    .def("ResetMass",&ost::mol::mm::Simulation::ResetMass,(arg("particle_idx"),arg("mass")))
+    .def("AddPositionConstraint",&ost::mol::mm::Simulation::AddPositionConstraint,(arg("particle_idx")))
+    .def("AddPositionConstraints",&WrapAddPositionConstraints,(arg("particle_idx")))
     .def("ResetPositionConstraints",&ost::mol::mm::Simulation::ResetPositionConstraints)
     .def("GetPeriodicBoxExtents",&ost::mol::mm::Simulation::GetPeriodicBoxExtents)
     .def("SetPeriodicBoxExtents",&ost::mol::mm::Simulation::SetPeriodicBoxExtents,(arg("extents")))
diff --git a/modules/mol/mm/pymod/export_topology.cc b/modules/mol/mm/pymod/export_topology.cc
index f72bd75024dce0e205d08d3e8169886d77edf31d..c104fbf8c7de6fbe8f85fd6b259193c7bb2f8a58 100644
--- a/modules/mol/mm/pymod/export_topology.cc
+++ b/modules/mol/mm/pymod/export_topology.cc
@@ -372,113 +372,113 @@ void export_Topology()
   class_<ost::mol::mm::Topology>("Topology",no_init)
 
     .def("__init__",make_constructor(&WrapTopologyConstructor))
-    .def("Save",&ost::mol::mm::Topology::Save)
-    .def("Load",&ost::mol::mm::Topology::Load).staticmethod("Load")
+    .def("Save",&ost::mol::mm::Topology::Save,(arg("filename")))
+    .def("Load",&ost::mol::mm::Topology::Load,(arg("filename"))).staticmethod("Load")
  
     //interaction adding functions
-    .def("AddHarmonicBond",&ost::mol::mm::Topology::AddHarmonicBond)
-    .def("AddHarmonicAngle",&ost::mol::mm::Topology::AddHarmonicAngle)
-    .def("AddUreyBradleyAngle",&ost::mol::mm::Topology::AddUreyBradleyAngle)
-    .def("AddPeriodicDihedral",&ost::mol::mm::Topology::AddPeriodicDihedral)
-    .def("AddPeriodicImproper",&ost::mol::mm::Topology::AddPeriodicImproper)
-    .def("AddHarmonicImproper",&ost::mol::mm::Topology::AddHarmonicImproper)
-    .def("AddCMap",&WrapAddCMap)
-    .def("AddLJPair",&ost::mol::mm::Topology::AddLJPair)
-    .def("AddDistanceConstraint",&ost::mol::mm::Topology::AddDistanceConstraint)
-    .def("AddExclusion",&ost::mol::mm::Topology::AddExclusion)
-    .def("AddPositionConstraint",&ost::mol::mm::Topology::AddPositionConstraint)
+    .def("AddHarmonicBond",&ost::mol::mm::Topology::AddHarmonicBond,(arg("idx_one"),arg("idx_two"),arg("bond_length"),arg("force_constant")))
+    .def("AddHarmonicAngle",&ost::mol::mm::Topology::AddHarmonicAngle,(arg("idx_one"),arg("idx_two"),arg("idx_three"),arg("angle"),arg("force_constant")))
+    .def("AddUreyBradleyAngle",&ost::mol::mm::Topology::AddUreyBradleyAngle,(arg("idx_one"),arg("idx_two"),arg("idx_three"),arg("angle"),arg("angle_force_constant"),arg("bond_length"),arg("bond_force_constant")))
+    .def("AddPeriodicDihedral",&ost::mol::mm::Topology::AddPeriodicDihedral,(arg("idx_one"),arg("idx_two"),arg("idx_three"),arg("idx_four"),arg("multiplicity"),arg("phase"),arg("force_constant")))
+    .def("AddPeriodicImproper",&ost::mol::mm::Topology::AddPeriodicImproper,(arg("idx_one"),arg("idx_two"),arg("idx_three"),arg("idx_four"),arg("multiplicity"),arg("phase"),arg("force_constant")))
+    .def("AddHarmonicImproper",&ost::mol::mm::Topology::AddHarmonicImproper,(arg("idx_one"),arg("idx_two"),arg("idx_three"),arg("idx_four"),arg("angle"),arg("force_constant")))
+    .def("AddCMap",&WrapAddCMap,(arg("idx_one"),arg("idx_two"),arg("idx_three"),arg("idx_four"),arg("idx_five"),arg("dimension"),arg("map")))
+    .def("AddLJPair",&ost::mol::mm::Topology::AddLJPair,(arg("idx_one"),arg("idx_two"),arg("sigma"),arg("epsilon")))
+    .def("AddDistanceConstraint",&ost::mol::mm::Topology::AddDistanceConstraint,(arg("idx_one"),arg("idx_two"),arg("distance")))
+    .def("AddExclusion",&ost::mol::mm::Topology::AddExclusion,(arg("idx_one"),arg("idx_two")))
+    .def("AddPositionConstraint",&ost::mol::mm::Topology::AddPositionConstraint,(arg("idx")))
     .def("ResetPositionConstraints",&ost::mol::mm::Topology::ResetPositionConstraints)
     .def("ResetExclusions",&ost::mol::mm::Topology::ResetExclusions)
-    .def("AddHarmonicPositionRestraint",&ost::mol::mm::Topology::AddHarmonicPositionRestraint,(arg("index"),arg("ref_position"),arg("k"),arg("x_scale")=1.0,arg("y_scale")=1.0,arg("z_scale")=1.0))
-    .def("AddHarmonicDistanceRestraint",&ost::mol::mm::Topology::AddHarmonicDistanceRestraint)
-    .def("AddFGMDHBondDonor",&ost::mol::mm::Topology::AddFGMDHBondDonor)
-    .def("AddFGMDHBondAcceptor",&ost::mol::mm::Topology::AddFGMDHBondAcceptor)
+    .def("AddHarmonicPositionRestraint",&ost::mol::mm::Topology::AddHarmonicPositionRestraint,(arg("idx"),arg("ref_position"),arg("k"),arg("x_scale")=1.0,arg("y_scale")=1.0,arg("z_scale")=1.0))
+    .def("AddHarmonicDistanceRestraint",&ost::mol::mm::Topology::AddHarmonicDistanceRestraint,(arg("idx_one"),arg("idx_two"),arg("length"),arg("force_constant")))
+    .def("AddFGMDHBondDonor",&ost::mol::mm::Topology::AddFGMDHBondDonor,(arg("idx_one"),arg("idx_two"),arg("length"),arg("k_length"),arg("alpha"),arg("k_alpha"),arg("beta"),arg("k_beta")))
+    .def("AddFGMDHBondAcceptor",&ost::mol::mm::Topology::AddFGMDHBondAcceptor,(arg("idx_one"),arg("idx_two")))
  
     //single atom parameter getter and setter functions
-    .def("SetSigmas",&WrapSetSigmas)
-    .def("SetSigma",&ost::mol::mm::Topology::SetSigma)
-    .def("SetEpsilons",&WrapSetEpsilons)
-    .def("SetEpsilon",&ost::mol::mm::Topology::SetEpsilon)
-    .def("SetGBSARadii",&WrapSetGBSARadii)
-    .def("SetGBSARadius",&ost::mol::mm::Topology::SetGBSARadius)
-    .def("SetOBCScalings",&WrapSetOBCScalings)
-    .def("SetOBCScaling",&ost::mol::mm::Topology::SetOBCScaling)
-    .def("SetCharges",&WrapSetCharges)
-    .def("SetCharge",&ost::mol::mm::Topology::SetCharge)
-    .def("SetMasses",&WrapSetMasses)
-    .def("SetMass",&ost::mol::mm::Topology::SetMass)
+    .def("SetSigmas",&WrapSetSigmas,(arg("sigmas")))
+    .def("SetSigma",&ost::mol::mm::Topology::SetSigma,(arg("particle_idx"),arg("sigma")))
+    .def("SetEpsilons",&WrapSetEpsilons,(arg("epsilons")))
+    .def("SetEpsilon",&ost::mol::mm::Topology::SetEpsilon,(arg("particle_idx"),arg("epsilon")))
+    .def("SetGBSARadii",&WrapSetGBSARadii,(arg("gbsa_radii")))
+    .def("SetGBSARadius",&ost::mol::mm::Topology::SetGBSARadius,(arg("particle_idx"),arg("radius")))
+    .def("SetOBCScalings",&WrapSetOBCScalings,(arg("obc_scalings")))
+    .def("SetOBCScaling",&ost::mol::mm::Topology::SetOBCScaling,(arg("particle_idx"),arg("obc_scaling")))
+    .def("SetCharges",&WrapSetCharges,(arg("charges")))
+    .def("SetCharge",&ost::mol::mm::Topology::SetCharge,(arg("particle_idx"),arg("charge")))
+    .def("SetMasses",&WrapSetMasses,(arg("masses")))
+    .def("SetMass",&ost::mol::mm::Topology::SetMass,(arg("particle_idx"),arg("mass")))
     .def("GetSigmas",&WrapGetSigmas)
     .def("GetEpsilons",&WrapGetEpsilons)
     .def("GetGBSARadii",&WrapGetGBSARadii)
     .def("GetOBCScalings",&WrapGetOBCScalings)
     .def("GetCharges",&WrapGetCharges)
     .def("GetMasses",&WrapGetMasses)
-    .def("GetCharge",&ost::mol::mm::Topology::GetCharge)
-    .def("GetMass",&ost::mol::mm::Topology::GetMass)
-    .def("GetOBCScaling",&ost::mol::mm::Topology::GetOBCScaling)
-    .def("GetGBSARadius",&ost::mol::mm::Topology::GetGBSARadius)
+    .def("GetCharge",&ost::mol::mm::Topology::GetCharge,(arg("particle_idx")))
+    .def("GetMass",&ost::mol::mm::Topology::GetMass,(arg("particle_idx")))
+    .def("GetOBCScaling",&ost::mol::mm::Topology::GetOBCScaling,(arg("particle_idx")))
+    .def("GetGBSARadius",&ost::mol::mm::Topology::GetGBSARadius,(arg("particle_idx")))
 
     //getter and setter functions for nonbonded fudge parameters
-    .def("SetFudgeLJ",&ost::mol::mm::Topology::SetFudgeLJ)
-    .def("SetFudgeQQ",&ost::mol::mm::Topology::SetFudgeQQ)
+    .def("SetFudgeLJ",&ost::mol::mm::Topology::SetFudgeLJ,(arg("fudge_param")))
+    .def("SetFudgeQQ",&ost::mol::mm::Topology::SetFudgeQQ,(arg("fudge_param")))
     .def("GetFudgeLJ",&ost::mol::mm::Topology::GetFudgeLJ)
     .def("GetFudgeQQ",&ost::mol::mm::Topology::GetFudgeQQ)
  
     //getter functions for interaction parameters
-    .def("GetHarmonicBondParameters",&WrapGetHarmonicBondParam)
-    .def("GetHarmonicAngleParameters",&WrapGetHarmonicAngleParam)
-    .def("GetUreyBradleyAngleParameters",&WrapGetUreyBradleyAngleParam)
-    .def("GetPeriodicDihedralParameters",&WrapGetPeriodicDihedralParam)
-    .def("GetPeriodicImproperParameters",&WrapGetPeriodicImproperParam)
-    .def("GetHarmonicImproperParameters",&WrapGetHarmonicImproperParam)
-    .def("GetCMapParameters",&WrapGetCMapParam)
-    .def("GetLJPairParameters",&WrapGetLJPairParam)
-    .def("GetDistanceConstraintParameters",&WrapGetDistanceConstraintParam)
-    .def("GetHarmonicPositionRestraintParameters",&WrapGetHarmonicPositionRestraintParam)
-    .def("GetHarmonicDistanceRestraintParameters",&WrapGetHarmonicDistanceRestraintParam)
-    .def("GetFGMDHBondDonorParameters",&WrapGetFGMDHBondDonorParam)
-    .def("GetFGMDHBondAcceptorParameters",&WrapGetFGMDHBondAcceptorParam)
+    .def("GetHarmonicBondParameters",&WrapGetHarmonicBondParam,(arg("interaction_idx")))
+    .def("GetHarmonicAngleParameters",&WrapGetHarmonicAngleParam,(arg("interaction_idx")))
+    .def("GetUreyBradleyAngleParameters",&WrapGetUreyBradleyAngleParam,(arg("interaction_idx")))
+    .def("GetPeriodicDihedralParameters",&WrapGetPeriodicDihedralParam,(arg("interaction_idx")))
+    .def("GetPeriodicImproperParameters",&WrapGetPeriodicImproperParam,(arg("interaction_idx")))
+    .def("GetHarmonicImproperParameters",&WrapGetHarmonicImproperParam,(arg("interaction_idx")))
+    .def("GetCMapParameters",&WrapGetCMapParam,(arg("interaction_idx")))
+    .def("GetLJPairParameters",&WrapGetLJPairParam,(arg("interaction_idx")))
+    .def("GetDistanceConstraintParameters",&WrapGetDistanceConstraintParam,(arg("interaction_idx")))
+    .def("GetHarmonicPositionRestraintParameters",&WrapGetHarmonicPositionRestraintParam,(arg("interaction_idx")))
+    .def("GetHarmonicDistanceRestraintParameters",&WrapGetHarmonicDistanceRestraintParam,(arg("interaction_idx")))
+    .def("GetFGMDHBondDonorParameters",&WrapGetFGMDHBondDonorParam,(arg("interaction_idx")))
+    .def("GetFGMDHBondAcceptorParameters",&WrapGetFGMDHBondAcceptorParam,(arg("interaction_idx")))
 
     //setter functions for interaction parameters
-    .def("SetHarmonicBondParameters",&ost::mol::mm::Topology::SetHarmonicBondParameters)
-    .def("SetHarmonicAngleParameters",&ost::mol::mm::Topology::SetHarmonicAngleParameters)
-    .def("SetUreyBradleyAngleParameters",&ost::mol::mm::Topology::SetUreyBradleyAngleParameters)
-    .def("SetPeriodicDihedralParameters",&ost::mol::mm::Topology::SetPeriodicDihedralParameters)
-    .def("SetPeriodicImproperParameters",&ost::mol::mm::Topology::SetPeriodicImproperParameters)
-    .def("SetHarmonicImproperParameters",&ost::mol::mm::Topology::SetHarmonicImproperParameters)
-    .def("SetCMapParameters",&WrapSetCMapParameters)
-    .def("SetLJPairParameters",&ost::mol::mm::Topology::SetLJPairParameters)
-    .def("SetDistanceConstraintParameters",&ost::mol::mm::Topology::SetDistanceConstraintParameters)
-    .def("SetHarmonicPositionRestraintParameters",&ost::mol::mm::Topology::SetHarmonicPositionRestraintParameters)
-    .def("SetHarmonicDistanceRestraintParameters",&ost::mol::mm::Topology::SetHarmonicDistanceRestraintParameters)
-    .def("SetFGMDHBondDonorParameters",&ost::mol::mm::Topology::SetFGMDHBondDonorParameters)
+    .def("SetHarmonicBondParameters",&ost::mol::mm::Topology::SetHarmonicBondParameters,(arg("interaction_idx"),arg("bond_length"),arg("force_constant")))
+    .def("SetHarmonicAngleParameters",&ost::mol::mm::Topology::SetHarmonicAngleParameters,(arg("interaction_idx"),arg("angle"),arg("force_constant")))
+    .def("SetUreyBradleyAngleParameters",&ost::mol::mm::Topology::SetUreyBradleyAngleParameters,(arg("interaction_idx"),arg("angle"),arg("angle_force_constant"),arg("bond_length"),arg("bond_force_constant")))
+    .def("SetPeriodicDihedralParameters",&ost::mol::mm::Topology::SetPeriodicDihedralParameters,(arg("interaction_idx"),arg("multiplicity"),arg("phase"),arg("force_constant")))
+    .def("SetPeriodicImproperParameters",&ost::mol::mm::Topology::SetPeriodicImproperParameters,(arg("interaction_idx"),arg("multiplicity"),arg("phase"),arg("force_constant")))
+    .def("SetHarmonicImproperParameters",&ost::mol::mm::Topology::SetHarmonicImproperParameters,(arg("interaction_idx"),arg("angle"),arg("force_constant")))
+    .def("SetCMapParameters",&WrapSetCMapParameters,(arg("interaction_idx"),arg("map")))
+    .def("SetLJPairParameters",&ost::mol::mm::Topology::SetLJPairParameters,(arg("interaction_idx"),arg("sigma"),arg("epsilon")))
+    .def("SetDistanceConstraintParameters",&ost::mol::mm::Topology::SetDistanceConstraintParameters,(arg("interaction_idx"),arg("distance")))
+    .def("SetHarmonicPositionRestraintParameters",&ost::mol::mm::Topology::SetHarmonicPositionRestraintParameters,(arg("interaction_idx"),arg("ref_position"),arg("k"),arg("x_scale")=1.0,arg("y_scale")=1.0,arg("z_scale")=1.0))
+    .def("SetHarmonicDistanceRestraintParameters",&ost::mol::mm::Topology::SetHarmonicDistanceRestraintParameters,(arg("interaction_idx"),arg("length"),arg("force_constant")))
+    .def("SetFGMDHBondDonorParameters",&ost::mol::mm::Topology::SetFGMDHBondDonorParameters,(arg("interaction_idx"),arg("length"),arg("k_length"),arg("alpha"),arg("k_alpha"),arg("beta"),arg("k_beta")))
 
     //functions to find interactions certain atoms are involved in
-    .def("GetHarmonicBondIndices",&GetHarmonicBondIndices)
-    .def("GetHarmonicBondIndices",&GetHarmonicBondIndicesSingleIndex)
-    .def("GetHarmonicAngleIndices",&GetHarmonicAngleIndices)
-    .def("GetHarmonicAngleIndices",&GetHarmonicAngleIndicesSingleIndex)
-    .def("GetUreyBradleyAngleIndices",&GetUreyBradleyAngleIndices)
-    .def("GetUreyBradleyAngleIndices",&GetUreyBradleyAngleIndicesSingleIndex)
-    .def("GetPeriodicDihedralIndices",&GetPeriodicDihedralIndices)
-    .def("GetPeriodicDihedralIndices",&GetPeriodicDihedralIndicesSingleIndex)
-    .def("GetPeriodicImproperIndices",&GetPeriodicImproperIndices)
-    .def("GetPeriodicImproperIndices",&GetPeriodicImproperIndicesSingleIndex)
-    .def("GetHarmonicImproperIndices",&GetHarmonicImproperIndices)
-    .def("GetHarmonicImproperIndices",&GetHarmonicImproperIndicesSingleIndex)
-    .def("GetDistanceConstraintIndex",&ost::mol::mm::Topology::GetDistanceConstraintIndex)
-    .def("GetDistanceConstraintIndices",&GetDistanceConstraintIndicesSingleIndex)    
-    .def("GetCMapIndices",&GetCMapIndices)
-    .def("GetCMapIndices",&GetCMapIndicesSingleIndex)
-    .def("GetLJPairIndex",&ost::mol::mm::Topology::GetLJPairIndex)
-    .def("GetLJPairIndices",&GetLJPairIndicesSingleIndex)
-    .def("GetHarmonicDistanceRestraintIndices",&GetHarmonicDistanceRestraintIndices)
-    .def("GetHarmonicDistanceRestraintIndices",&GetHarmonicDistanceRestraintIndicesSingleIndex)
-    .def("GetHarmonicPositionRestraintIndices",&GetHarmonicPositionRestraintIndicesSingleIndex)
-    .def("GetFGMDHBondDonorIndices",&GetFGMDHBondDonorIndices)
-    .def("GetFGMDHBondDonorIndices",&GetFGMDHBondDonorIndicesSingleIndex)
-    .def("GetFGMDHBondAcceptorIndices",&GetFGMDHBondAcceptorIndices)
-    .def("GetFGMDHBondAcceptorIndices",&GetFGMDHBondAcceptorIndicesSingleIndex)
+    .def("GetHarmonicBondIndices",&GetHarmonicBondIndices,(arg("idx_one"),arg("idx_two")))
+    .def("GetHarmonicBondIndices",&GetHarmonicBondIndicesSingleIndex,(arg("idx")))
+    .def("GetHarmonicAngleIndices",&GetHarmonicAngleIndices,(arg("idx_one"),arg("idx_two"),arg("idx_three")))
+    .def("GetHarmonicAngleIndices",&GetHarmonicAngleIndicesSingleIndex,(arg("idx")))
+    .def("GetUreyBradleyAngleIndices",&GetUreyBradleyAngleIndices,(arg("idx_one"),arg("idx_two"),arg("idx_three")))
+    .def("GetUreyBradleyAngleIndices",&GetUreyBradleyAngleIndicesSingleIndex,(arg("idx")))
+    .def("GetPeriodicDihedralIndices",&GetPeriodicDihedralIndices,(arg("idx_one"),arg("idx_two"),arg("idx_three"),arg("idx_four")))
+    .def("GetPeriodicDihedralIndices",&GetPeriodicDihedralIndicesSingleIndex,(arg("idx")))
+    .def("GetPeriodicImproperIndices",&GetPeriodicImproperIndices,(arg("idx_one"),arg("idx_two"),arg("idx_three"),arg("idx_four")))
+    .def("GetPeriodicImproperIndices",&GetPeriodicImproperIndicesSingleIndex,(arg("idx")))
+    .def("GetHarmonicImproperIndices",&GetHarmonicImproperIndices,(arg("idx_one"),arg("idx_two"),arg("idx_three"),arg("idx_four")))
+    .def("GetHarmonicImproperIndices",&GetHarmonicImproperIndicesSingleIndex,(arg("idx")))
+    .def("GetDistanceConstraintIndex",&ost::mol::mm::Topology::GetDistanceConstraintIndex,(arg("idx_one"),arg("idx_two")))
+    .def("GetDistanceConstraintIndices",&GetDistanceConstraintIndicesSingleIndex,(arg("idx")))    
+    .def("GetCMapIndices",&GetCMapIndices,(arg("idx_one"),arg("idx_two"),arg("idx_three"),arg("idx_four"),arg("idx_five")))
+    .def("GetCMapIndices",&GetCMapIndicesSingleIndex,(arg("idx")))
+    .def("GetLJPairIndex",&ost::mol::mm::Topology::GetLJPairIndex,(arg("idx_one"),arg("idx_two")))
+    .def("GetLJPairIndices",&GetLJPairIndicesSingleIndex,(arg("idx")))
+    .def("GetHarmonicDistanceRestraintIndices",&GetHarmonicDistanceRestraintIndices,(arg("idx_one"),arg("idx_two")))
+    .def("GetHarmonicDistanceRestraintIndices",&GetHarmonicDistanceRestraintIndicesSingleIndex,(arg("idx")))
+    .def("GetHarmonicPositionRestraintIndices",&GetHarmonicPositionRestraintIndicesSingleIndex,(arg("idx")))
+    .def("GetFGMDHBondDonorIndices",&GetFGMDHBondDonorIndices,(arg("idx_one"),arg("idx_two")))
+    .def("GetFGMDHBondDonorIndices",&GetFGMDHBondDonorIndicesSingleIndex,(arg("idx")))
+    .def("GetFGMDHBondAcceptorIndices",&GetFGMDHBondAcceptorIndices,(arg("idx_one"),arg("idx_two")))
+    .def("GetFGMDHBondAcceptorIndices",&GetFGMDHBondAcceptorIndicesSingleIndex,(arg("idx")))
 
 
     //functions to get amount of data in topology
@@ -497,9 +497,10 @@ void export_Topology()
     .def("GetNumFGMDHBondDonors",&ost::mol::mm::Topology::GetNumFGMDHBondDonors)  
     .def("GetNumFGMDHBondAcceptors",&ost::mol::mm::Topology::GetNumFGMDHBondAcceptors)  
 
-    .def("Merge",&MergeTop)
-    .def("Merge",&MergeTopEnt)                                                           
+    .def("Merge",&MergeTop,(arg("other_topology")))
+    .def("Merge",&MergeTopEnt,(arg("ent"),arg("other_topology"),arg("other_ent")))                                                           
   ;
 
+
   boost::python::register_ptr_to_python<ost::mol::mm::TopologyPtr>();
 }