diff --git a/sidechain/doc/rotamer.rst b/sidechain/doc/rotamer.rst
index 7e87093f6e637bc336cd96a4f5c10d44c883914b..c729b48e792d3ee17eca63d68e3ffa10187fc26b 100644
--- a/sidechain/doc/rotamer.rst
+++ b/sidechain/doc/rotamer.rst
@@ -254,7 +254,7 @@ Details can be found in the relevant publication [canutescu2003]_.
 The VINA scoring function
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-The VINA scoring function is a combination of scores that are named 
+The VINA scoring function is a combination of functional forms that are named 
 gaussian1, gaussian2, repulsion, hydrophobic and hbond in the Autodock Vina
 software [trott2010]_. VINA only evaluates heavy atoms. Gaussian1, gaussian2
 and repulsion are evaluated for all pairs of particles. Hydrophobic is only
@@ -263,6 +263,43 @@ evaluated between hydrogen bond donor/acceptor pairs. While SCWRL3 and SCWRL4
 are intended to evaluate sidechain-sidechain interactions in proteins, 
 VINA is mainly targeted at interactions between sidechains and ligands.
 
+The functional forms are linearly combined with the default weights from
+the Autodock Vina Software. They're set as global variables and can be
+extracted with:
+
+.. method:: GetVINAWeightGaussian1
+
+
+.. method:: GetVINAWeightGaussian2
+
+
+.. method:: GetVINAWeightRepulsion
+
+
+.. method:: GetVINAWeightHydrophobic
+
+
+.. method:: GetVINAWeightHBond
+
+You can set custom weights. A call to the following functions overwrites 
+according weights globally which affects any subsequent score evaluation:
+
+.. method:: SetVINAWeightGaussian1(w)
+
+
+.. method:: SetVINAWeightGaussian2(w)
+
+
+.. method:: SetVINAWeightRepulsion(w)
+
+
+.. method:: SetVINAWeightHydrophobic(w)
+
+
+.. method:: SetVINAWeightHBond(w)
+
+
+
 The VINA scoring function differentiates between the following particle types:
 
 .. class:: VINAParticleType
diff --git a/sidechain/pymod/export_rotamer_constructor.cc b/sidechain/pymod/export_rotamer_constructor.cc
index 0950dddbbe747815a4556d261e3b5d422a4cbc6b..ae7853a0bc1638dbd6225c79307f890964ed335c 100644
--- a/sidechain/pymod/export_rotamer_constructor.cc
+++ b/sidechain/pymod/export_rotamer_constructor.cc
@@ -23,6 +23,7 @@
 #include <promod3/sidechain/scwrl4_rotamer_constructor.hh>
 #include <promod3/sidechain/scwrl3_rotamer_constructor.hh>
 #include <promod3/sidechain/vina_rotamer_constructor.hh>
+#include <promod3/sidechain/vina_particle_scoring.hh>
 
 using namespace boost::python;
 using namespace promod3::sidechain;
@@ -475,4 +476,15 @@ void export_RotamerConstructor(){
          &VINARotamerConstructor::ConstructFRMRotamerHeuristic, (arg("res")))
   ;
 
+  def("SetVINAWeightGaussian1", &SetVINAWeightGaussian1, (arg("weight")));
+  def("SetVINAWeightGaussian2", &SetVINAWeightGaussian2, (arg("weight")));
+  def("SetVINAWeightRepulsion", &SetVINAWeightRepulsion, (arg("weight")));
+  def("SetVINAWeightHydrophobic", &SetVINAWeightHydrophobic, (arg("weight")));
+  def("SetVINAWeightHBond", &SetVINAWeightHBond, (arg("weight")));
+
+  def("GetVINAWeightGaussian1", &GetVINAWeightGaussian1);
+  def("GetVINAWeightGaussian2", &GetVINAWeightGaussian2);
+  def("GetVINAWeightRepulsion", &GetVINAWeightRepulsion);
+  def("GetVINAWeightHydrophobic", &GetVINAWeightHydrophobic);
+  def("GetVINAWeightHBond", &GetVINAWeightHBond);
 }
diff --git a/sidechain/src/vina_particle_scoring.cc b/sidechain/src/vina_particle_scoring.cc
index c048e2149d865988b229932c212a076ef2e198b7..c5a52d6f9507a967f870f1ee5fcbd4e91bdbb0c3 100644
--- a/sidechain/src/vina_particle_scoring.cc
+++ b/sidechain/src/vina_particle_scoring.cc
@@ -20,6 +20,25 @@
 
 namespace promod3 { namespace sidechain {
 
+Real VINAParam::gaussian1_weight_ = -0.035579;
+Real VINAParam::gaussian2_weight_ = -0.005156;
+Real VINAParam::repulsion_weight_ = 0.840245;
+Real VINAParam::hydrophobic_weight_ = -0.035069;
+Real VINAParam::hbond_weight_ = -0.587439;
+
+void SetVINAWeightGaussian1(float w) { VINAParam::gaussian1_weight_ = w; }
+void SetVINAWeightGaussian2(float w) { VINAParam::gaussian2_weight_ = w; }
+void SetVINAWeightRepulsion(float w) { VINAParam::repulsion_weight_ = w; }
+void SetVINAWeightHydrophobic(float w) { VINAParam::hydrophobic_weight_ = w; }
+void SetVINAWeightHBond(float w) { VINAParam::hbond_weight_ = w; }
+
+Real GetVINAWeightGaussian1() { return VINAParam::gaussian1_weight_; }
+Real GetVINAWeightGaussian2() { return VINAParam::gaussian2_weight_; }
+Real GetVINAWeightRepulsion() { return VINAParam::repulsion_weight_; }
+Real GetVINAWeightHydrophobic() { return VINAParam::hydrophobic_weight_; }
+Real GetVINAWeightHBond() { return VINAParam::hbond_weight_; }
+
+
 VINAParam::VINAParam(VINAParticleType t, 
                      const geom::Vec3& pos): pos_(pos),
                                              radius_(VINAVDWRadii[t]),
@@ -82,13 +101,6 @@ bool VINAParam::EqualTo(PScoringParam* other) const {
 
 Real VINAPairwiseScore(VINAParam* p_one, VINAParam* p_two) {
 
-  // linear weights of the different terms
-  const Real w_gaussian1 = -0.035579;
-  const Real w_gaussian2 = -0.005156;
-  const Real w_repulsion = 0.840245;
-  const Real w_hydrophobic = -0.035069;
-  const Real w_hbond = -0.587439; 
-
   Real r = geom::Distance(p_one->pos_, p_two->pos_);
   Real d = r - (p_one->radius_ + p_two->radius_);
 
@@ -120,11 +132,11 @@ Real VINAPairwiseScore(VINAParam* p_one, VINAParam* p_two) {
     e_hbond = (d < Real(-0.7) ? 1.0 : (d/Real(-0.7)));
   }
 
-  Real e = w_gaussian1 * e_gaussian1 +
-           w_gaussian2 * e_gaussian2 +
-           w_repulsion * e_repulsion +
-           w_hydrophobic * e_hydrophobic +
-           w_hbond * e_hbond;
+  Real e = VINAParam::gaussian1_weight_ * e_gaussian1 +
+           VINAParam::gaussian2_weight_ * e_gaussian2 +
+           VINAParam::repulsion_weight_ * e_repulsion +
+           VINAParam::hydrophobic_weight_ * e_hydrophobic +
+           VINAParam::hbond_weight_ * e_hbond;
 
   return e;
 }
diff --git a/sidechain/src/vina_particle_scoring.hh b/sidechain/src/vina_particle_scoring.hh
index 204cfb6144f4d925fa74b5e1ae01e391a7fedfdf..b2df5010dea73756fe50620e717fe9e02a73443a 100644
--- a/sidechain/src/vina_particle_scoring.hh
+++ b/sidechain/src/vina_particle_scoring.hh
@@ -64,6 +64,18 @@ const Real VINAVDWRadii[18] = {
   0.0 // INVALID
 };
 
+void SetVINAWeightGaussian1(float w);
+void SetVINAWeightGaussian2(float w);
+void SetVINAWeightRepulsion(float w);
+void SetVINAWeightHydrophobic(float w);
+void SetVINAWeightHBond(float w);
+
+Real GetVINAWeightGaussian1();
+Real GetVINAWeightGaussian2();
+Real GetVINAWeightRepulsion();
+Real GetVINAWeightHydrophobic();
+Real GetVINAWeightHBond();
+
 struct VINAParam : public PScoringParam {
 
   VINAParam(VINAParticleType t, const geom::Vec3& pos);
@@ -95,6 +107,11 @@ struct VINAParam : public PScoringParam {
   bool hydrophobic_;
   bool hbond_acceptor_;
   bool hbond_donor_;
+  static Real gaussian1_weight_;
+  static Real gaussian2_weight_;
+  static Real repulsion_weight_;
+  static Real hydrophobic_weight_;
+  static Real hbond_weight_;
 };
 
 Real VINAPairwiseScore(VINAParam* p_one, VINAParam* p_two);