diff --git a/bob/learn/misc/MAP_gmm_trainer.cpp b/bob/learn/misc/MAP_gmm_trainer.cpp
index 30cf72901db174808439c4cb90aa7a25546537e8..e9b0fde0b2a70f0a9c3d4ac347930b72a73cafaf 100644
--- a/bob/learn/misc/MAP_gmm_trainer.cpp
+++ b/bob/learn/misc/MAP_gmm_trainer.cpp
@@ -27,7 +27,8 @@ static auto MAP_GMMTrainer_doc = bob::extension::ClassDoc(
   )
   
   
-  .add_prototype("gmm_base_trainer,prior_gmm,[reynolds_adaptation],[relevance_factor],[alpha]","")
+  //.add_prototype("gmm_base_trainer,prior_gmm,[reynolds_adaptation],[relevance_factor],[alpha]","")
+  .add_prototype("gmm_base_trainer, prior_gmm, reynolds_adaptation, [relevance_factor], [alpha]","")
   .add_prototype("other","")
   .add_prototype("","")
 
@@ -56,21 +57,24 @@ static int PyBobLearnMiscMAPGMMTrainer_init_copy(PyBobLearnMiscMAPGMMTrainerObje
 
 static int PyBobLearnMiscMAPGMMTrainer_init_base_trainer(PyBobLearnMiscMAPGMMTrainerObject* self, PyObject* args, PyObject* kwargs) {
 
-  char** kwlist = MAP_GMMTrainer_doc.kwlist(1);
+  char** kwlist = MAP_GMMTrainer_doc.kwlist(0);
+  
   PyBobLearnMiscGMMBaseTrainerObject* gmm_base_trainer;
   PyBobLearnMiscGMMMachineObject* gmm_machine;
   PyObject* reynolds_adaptation   = 0;
   double alpha = 0.5;
   double relevance_factor = 4.0;
-  
-  if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!0!|O!dd", kwlist, &PyBobLearnMiscGMMBaseTrainer_Type, &gmm_base_trainer,
+
+
+  if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O!O!|O!dd", kwlist, &PyBobLearnMiscGMMBaseTrainer_Type, &gmm_base_trainer,
                                                                       &PyBobLearnMiscGMMMachine_Type, &gmm_machine,
-                                                                      &PyBool_Type, reynolds_adaptation,
+                                                                      &PyBool_Type, &reynolds_adaptation,
                                                                       &relevance_factor, &alpha )){
+
     MAP_GMMTrainer_doc.print_usage();
     return -1;
   }
-
+  
   self->cxx.reset(new bob::learn::misc::MAP_GMMTrainer(gmm_base_trainer->cxx, gmm_machine->cxx, f(reynolds_adaptation),relevance_factor, alpha));
   return 0;
 }
@@ -83,10 +87,11 @@ static int PyBobLearnMiscMAPGMMTrainer_init(PyBobLearnMiscMAPGMMTrainerObject* s
   // If the constructor input is GMMBaseTrainer object
   if(PyBobLearnMiscMAPGMMTrainer_Check(args))
     return PyBobLearnMiscMAPGMMTrainer_init_copy(self, args, kwargs);
-  else
+  else{
     return PyBobLearnMiscMAPGMMTrainer_init_base_trainer(self, args, kwargs);
+  }
 
-  BOB_CATCH_MEMBER("cannot create GMMMAPTrainer", 0)
+  BOB_CATCH_MEMBER("cannot create MAP_GMMTrainer", 0)
   return 0;
 }
 
diff --git a/bob/learn/misc/__MAP_gmm_trainer__.py b/bob/learn/misc/__MAP_gmm_trainer__.py
index e20128df88ca8a7cd2aaea8da360e5a098e5975c..d20efb52311623425d4ff408444b2acfbf744c29 100644
--- a/bob/learn/misc/__MAP_gmm_trainer__.py
+++ b/bob/learn/misc/__MAP_gmm_trainer__.py
@@ -11,7 +11,7 @@ import numpy
 # define the class
 class MAP_GMMTrainer(_MAP_GMMTrainer):
 
-  def __init__(self, gmm_base_trainer, prior_gmm, convergence_threshold=0.001, max_iterations=10, converge_by_likelihood=True, reynolds_adaptation=False, relevance_factor=4, alpha=0.5):
+  def __init__(self, gmm_base_trainer, prior_gmm, convergence_threshold=0.001, max_iterations=10, converge_by_likelihood=True, reynolds_adaptation=False, relevance_factor=4., alpha=0.5):
     """
     :py:class:bob.learn.misc.MAP_GMMTrainer constructor
 
@@ -35,7 +35,9 @@ class MAP_GMMTrainer(_MAP_GMMTrainer):
         
     """
 
-    _MAP_GMMTrainer.__init__(self, gmm_base_trainer, prior_gmm, reynolds_adaptation=reynolds_adaptation, relevance_factor=relevance_factor, alpha=alpha)
+    #_MAP_GMMTrainer.__init__(self, gmm_base_trainer, prior_gmm, reynolds_adaptation=reynolds_adaptation, relevance_factor=relevance_factor, alpha=alpha)
+    _MAP_GMMTrainer.__init__(self, gmm_base_trainer, prior_gmm, reynolds_adaptation, relevance_factor=relevance_factor, alpha=alpha)
+    
     self.convergence_threshold  = convergence_threshold
     self.max_iterations         = max_iterations
     self.converge_by_likelihood = converge_by_likelihood
diff --git a/bob/learn/misc/test_em.py b/bob/learn/misc/test_em.py
index 12bc22379382fe2555de80faeea2146c8733acdd..31e510e887ddb14930e04d768b7d31a8bcf9302c 100644
--- a/bob/learn/misc/test_em.py
+++ b/bob/learn/misc/test_em.py
@@ -14,7 +14,7 @@ import bob.io.base
 from bob.io.base.test_utils import datafile
 
 from . import KMeansMachine, GMMMachine, KMeansTrainer, \
-    GMMBaseTrainer, ML_GMMTrainer
+    GMMBaseTrainer, ML_GMMTrainer, MAP_GMMTrainer
 
 #, MAP_GMMTrainer
 
@@ -60,13 +60,6 @@ def test_gmm_ML_1():
   gmm_ref_32bit_debug = GMMMachine(bob.io.base.HDF5File(datafile('gmm_ML_32bit_debug.hdf5', __name__)))
   gmm_ref_32bit_release = GMMMachine(bob.io.base.HDF5File(datafile('gmm_ML_32bit_release.hdf5', __name__)))
 
-
-  print gmm.variance_thresholds
-  print gmm_ref.variance_thresholds
-  print gmm_ref_32bit_release.variance_thresholds
-  print gmm_ref_32bit_release.variance_thresholds
-
-
   assert (gmm == gmm_ref) or (gmm == gmm_ref_32bit_release) or (gmm == gmm_ref_32bit_release)
 
  
@@ -112,7 +105,7 @@ def test_gmm_ML_2():
   assert equals(gmm.weights, weightsML_ref, 1e-4)
 
 
-""" 
+
 def test_gmm_MAP_1():
 
   # Train a GMMMachine with MAP_GMMTrainer
@@ -122,23 +115,22 @@ def test_gmm_MAP_1():
   gmm = GMMMachine(bob.io.base.HDF5File(datafile("gmm_ML.hdf5", __name__)))
   gmmprior = GMMMachine(bob.io.base.HDF5File(datafile("gmm_ML.hdf5", __name__)))
 
-  map_gmmtrainer = MAP_GMMTrainer(16)
-  map_gmmtrainer.set_prior_gmm(gmmprior)
+  map_gmmtrainer = MAP_GMMTrainer(GMMBaseTrainer(True, False, False),gmmprior, reynolds_adaptation=False, relevance_factor=16)  
+  #map_gmmtrainer.set_prior_gmm(gmmprior)
   map_gmmtrainer.train(gmm, ar)
 
   #config = bob.io.base.HDF5File(datafile('gmm_MAP.hdf5", 'w', __name__))
   #gmm.save(config)
 
   gmm_ref = GMMMachine(bob.io.base.HDF5File(datafile('gmm_MAP.hdf5', __name__)))
-  #gmm_ref_32bit_release = GMMMachine(bob.io.base.HDF5File(datafile('gmm_MAP_32bit_release.hdf5', __name__)))
 
   assert (equals(gmm.means,gmm_ref.means,1e-3) and equals(gmm.variances,gmm_ref.variances,1e-3) and equals(gmm.weights,gmm_ref.weights,1e-3))
 
+
 def test_gmm_MAP_2():
 
   # Train a GMMMachine with MAP_GMMTrainer and compare with matlab reference
 
-  map_adapt = MAP_GMMTrainer(4., True, False, False, 0.)
   data = bob.io.base.load(datafile('data.hdf5', __name__))
   data = data.reshape((1, data.shape[0])) # make a 2D array out of it
   means = bob.io.base.load(datafile('means.hdf5', __name__))
@@ -150,7 +142,8 @@ def test_gmm_MAP_2():
   gmm.variances = variances
   gmm.weights = weights
 
-  map_adapt.set_prior_gmm(gmm)
+  map_adapt = MAP_GMMTrainer(GMMBaseTrainer(True, False, False, mean_var_update_responsibilities_threshold=0.),gmm, alpha=4., relevance_factor=4., reynolds_adaptation=True)
+  #map_adapt.set_prior_gmm(gmm)
 
   gmm_adapted = GMMMachine(2,50)
   gmm_adapted.means = means
@@ -162,10 +155,14 @@ def test_gmm_MAP_2():
 
   new_means = bob.io.base.load(datafile('new_adapted_mean.hdf5', __name__))
 
+ # print new_means[0,:]
+ # print gmm_adapted.means[:,0]
+
   # Compare to matlab reference
   assert equals(new_means[0,:], gmm_adapted.means[:,0], 1e-4)
   assert equals(new_means[1,:], gmm_adapted.means[:,1], 1e-4)
 
+
 def test_gmm_MAP_3():
 
   # Train a GMMMachine with MAP_GMMTrainer; compares to old reference
@@ -189,11 +186,9 @@ def test_gmm_MAP_3():
   max_iter_gmm = 1
   accuracy = 0.00001
   map_factor = 0.5
-  map_gmmtrainer = MAP_GMMTrainer(relevance_factor, True, False, False, prior)
+  map_gmmtrainer = MAP_GMMTrainer(GMMBaseTrainer(True, False, False, prior), prior_gmm, alpha=map_factor, reynolds_adaptation=False)
   map_gmmtrainer.max_iterations = max_iter_gmm
   map_gmmtrainer.convergence_threshold = accuracy
-  map_gmmtrainer.set_prior_gmm(prior_gmm)
-  map_gmmtrainer.set_t3_map(map_factor);
 
   gmm = GMMMachine(n_gaussians, n_inputs)
   gmm.set_variance_thresholds(threshold)
@@ -215,6 +210,7 @@ def test_gmm_MAP_3():
   assert equals(gmm.variances, variancesMAP_ref, 1e-4)
   assert equals(gmm.weights, weightsMAP_ref, 1e-4)
 
+
 def test_gmm_test():
 
   # Tests a GMMMachine by computing scores against a model and compare to
@@ -236,12 +232,12 @@ def test_gmm_test():
   # Test against the model
   score_mean_ref = -1.50379e+06
   score = 0.
-  for v in ar: score += gmm.forward(v)
+  for v in ar: score += gmm(v)
   score /= len(ar)
 
   # Compare current results to torch3vision
   assert abs(score-score_mean_ref)/score_mean_ref<1e-4
-""" 
+
 
 def test_custom_trainer():