diff --git a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/BoostUtils.py b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/BoostUtils.py
index 877e262d82110305e876b0d674b66312cc55c237..3ac3c046ed335487c7e43339241cd1381d0501f0 100644
--- a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/BoostUtils.py
+++ b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/BoostUtils.py
@@ -782,7 +782,6 @@ class BaseBoost(object):
 
     def _collect_probas(self, X, sub_sampled=False):
         if self.estimators_generator.__class__.__name__ == "TreeClassifiersGenerator":
-            print("frogom")
             return np.asarray([clf.predict_proba(X[:,attribute_indices]) for clf, attribute_indices in zip(self.estimators_generator.estimators_, self.estimators_generator.attribute_indices)])
         else:
             return np.asarray([clf.predict_proba(X) for clf in self.estimators_generator.estimators_])
diff --git a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CGDescUtils.py b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CGDescUtils.py
index 9b1f8f9aac0e2b750ffa1ade0d8c8565705fd7d2..a3e53c6b873eec0f9fd3e7a9933d16b644a99140 100644
--- a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CGDescUtils.py
+++ b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CGDescUtils.py
@@ -154,7 +154,6 @@ class ColumnGenerationClassifierQar(BaseEstimator, ClassifierMixin, BaseBoost):
         end = time.time()
         self.predict_time = end - start
         self.step_predict(classification_matrix)
-        print(np.unique(signs_array))
         return signs_array
 
     def step_predict(self, classification_matrix):
@@ -490,7 +489,6 @@ class ColumnGenerationClassifierQar(BaseEstimator, ClassifierMixin, BaseBoost):
         return 1.0 / n_examples * np.ones((n_examples,))
 
     def get_step_decision_test_graph(self, directory, y_test):
-        print(np.unique(y_test))
         np.savetxt(directory + "y_test_step.csv", self.step_decisions, delimiter=',')
         step_metrics = []
         for step_index in range(self.step_decisions.shape[1]-1):
diff --git a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CQBoostUtils.py b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CQBoostUtils.py
index 401bcdcabef83269739d6d8f85e165b3dd1052c8..6560eb1a4eee3c279dad43cbbf4b1f0a07376d93 100644
--- a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CQBoostUtils.py
+++ b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/CQBoostUtils.py
@@ -36,7 +36,6 @@ class ColumnGenerationClassifier(BaseEstimator, ClassifierMixin, BaseBoost):
         elif self.estimators_generator is "Trees":
             self.estimators_generator = TreeClassifiersGenerator(max_depth=self.max_depth, n_trees=self.n_stumps, self_complemented=True)
 
-        print(self.max_depth, self.n_stumps)
         self.estimators_generator.fit(X, y)
         self.classification_matrix = self._binary_classification_matrix(X)
         self.c_bounds = []
diff --git a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/MinCQUtils.py b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/MinCQUtils.py
index afa55be54a04bf63d9e6a0e3f8ad018e37a4eacb..0e8479a394c1e0d51820eae2e43322e8ebdf26d7 100644
--- a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/MinCQUtils.py
+++ b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/MinCQUtils.py
@@ -272,7 +272,6 @@ class RegularizedBinaryMinCqClassifier(MinCqClassifier):
 
         # Keep learning information for further use.
         self.learner_info_ = {}
-        print(np.unique(weights))
 
         # We count the number of non-zero weights, including the implicit voters.
         # TODO: Verify how we define non-zero weights here, could be if the weight is near 1/2n.
diff --git a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/PregenUtils.py b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/PregenUtils.py
index 92a603e8d98c8759f77209925f12cf49deb8fe34..6011f7c6560d246634ad13df8632eb0168a18231 100644
--- a/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/PregenUtils.py
+++ b/multiview_platform/MonoMultiViewClassifiers/Monoview/Additions/PregenUtils.py
@@ -1,7 +1,7 @@
 
 from ..MonoviewUtils import change_label_to_minus
 from .BoostUtils import StumpsClassifiersGenerator, BaseBoost, TreeClassifiersGenerator
-import numpy as np
+
 
 class PregenClassifier(BaseBoost):
 
diff --git a/multiview_platform/MonoMultiViewClassifiers/Monoview/ExecClassifMonoView.py b/multiview_platform/MonoMultiViewClassifiers/Monoview/ExecClassifMonoView.py
index c0d43c74edb4e61c6214ea96a687c85c75680338..156c187a8e13c5071085a833a81db9637b031099 100644
--- a/multiview_platform/MonoMultiViewClassifiers/Monoview/ExecClassifMonoView.py
+++ b/multiview_platform/MonoMultiViewClassifiers/Monoview/ExecClassifMonoView.py
@@ -52,6 +52,7 @@ def ExecMonoview(directory, X, Y, name, labelsNames, classificationIndices, KFol
     learningRate, \
     labelsString, \
     outputFileName = initConstants(args, X, classificationIndices, labelsNames, name, directory)
+
     logging.debug("Done:\t Loading data")
 
     logging.debug("Info:\t Classification - Database:" + str(name) + " Feature:" + str(feat) + " train ratio:"
diff --git a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CGDesc.py b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CGDesc.py
index 76ba5daee5cbb3ace48f8cfd16f4bb1d0a96c804..ed2d9536c81e51aa4f7063ae08279dfedd0b1a85 100644
--- a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CGDesc.py
+++ b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CGDesc.py
@@ -18,7 +18,7 @@ class CGDesc(ColumnGenerationClassifierQar, BaseMonoviewClassifier):
             estimators_generator="Stumps"
             )
         self.param_names = ["n_max_iterations", "n_stumps", "random_state"]
-        self.distribs = [CustomRandint(low=2, high=1000), [n_stumps],
+        self.distribs = [CustomRandint(low=2, high=500), [n_stumps],
                          [random_state]]
         self.classed_params = []
         self.weird_strings = {}
diff --git a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoost.py b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoost.py
index dfed2a182b5e9c91bc090a1948c2f526467ccafe..14d654531b5183944f1e4913941ccb65229089e9 100644
--- a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoost.py
+++ b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoost.py
@@ -7,13 +7,13 @@ import os
 
 class CQBoost(ColumnGenerationClassifier, BaseMonoviewClassifier):
 
-    def __init__(self, random_state=None, mu=0.01, epsilon=1e-06, n_stumps=1, n_max_iterations=100, **kwargs):
+    def __init__(self, random_state=None, mu=0.01, epsilon=1e-06, n_stumps=1, n_max_iterations=None, **kwargs):
         super(CQBoost, self).__init__(
             random_state=random_state,
             mu=mu,
             epsilon=epsilon,
             estimators_generator="Stumps",
-            n_max_iterations=100
+            n_max_iterations=n_max_iterations
         )
         self.param_names = ["mu", "epsilon", "n_stumps", "random_state", "n_max_iterations"]
         self.distribs = [CustomUniform(loc=0.5, state=1.0, multiplier="e-"),
diff --git a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoostTree.py b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoostTree.py
index b7a8dad5c24cf964c91448cb31b8eee002411f09..25c2a5ea5412d1ffcd6752c6909375b0d5deda28 100644
--- a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoostTree.py
+++ b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/CQBoostTree.py
@@ -8,7 +8,6 @@ import os
 class CQBoostTree(ColumnGenerationClassifier, BaseMonoviewClassifier):
 
     def __init__(self, random_state=None, mu=0.01, epsilon=1e-06, n_stumps=1, max_depth=2, n_max_iterations=100, **kwargs):
-        print(n_max_iterations)
         super(CQBoostTree, self).__init__(
             random_state=random_state,
             mu=mu,
diff --git a/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/DecisionTreePregen.py b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/DecisionTreePregen.py
new file mode 100644
index 0000000000000000000000000000000000000000..14f554e5281b3b267188f4feed31293e16c616c6
--- /dev/null
+++ b/multiview_platform/MonoMultiViewClassifiers/MonoviewClassifiers/DecisionTreePregen.py
@@ -0,0 +1,84 @@
+from sklearn.tree import DecisionTreeClassifier
+import time
+import numpy as np
+
+from ..Monoview.MonoviewUtils import CustomRandint, BaseMonoviewClassifier, change_label_to_minus, change_label_to_zero
+from ..Monoview.Additions.PregenUtils import PregenClassifier
+
+# Author-Info
+__author__ = "Baptiste Bauvin"
+__status__ = "Prototype"  # Production, Development, Prototype
+
+
+class DecisionTreePregen(DecisionTreeClassifier, BaseMonoviewClassifier, PregenClassifier):
+
+    def __init__(self, random_state=None, max_depth=None,
+                 criterion='gini', splitter='best', n_stumps=1, self_complemented=True, **kwargs):
+        super(DecisionTreePregen, self).__init__(
+            max_depth=max_depth,
+            criterion=criterion,
+            splitter=splitter,
+            random_state=random_state
+            )
+        self.estimators_generator = "Stumps"
+        self.n_stumps = n_stumps
+        self.self_complemented = self_complemented
+        self.param_names = ["max_depth", "criterion", "splitter",'random_state',
+                            'n_stumps']
+        self.classed_params = []
+        self.distribs = [CustomRandint(low=1, high=300),
+                         ["gini", "entropy"],
+                         ["best", "random"], [random_state], [n_stumps]]
+        self.weird_strings = {}
+
+    def fit(self, X, y, sample_weight=None, check_input=True,
+            X_idx_sorted=None):
+        begin = time.time()
+        pregen_X, pregen_y = self.pregen_voters(X, y)
+        super(DecisionTreePregen, self).fit(pregen_X, pregen_y,
+                                            sample_weight=sample_weight,
+                                            check_input=check_input,
+                                            X_idx_sorted=X_idx_sorted)
+        end = time.time()
+        self.train_time = end - begin
+        self.train_shape = pregen_X.shape
+        return self
+
+    def predict(self, X, check_input=True):
+        begin = time.time()
+        pregen_X, _ = self.pregen_voters(X)
+        pred = super(DecisionTreePregen, self).predict(pregen_X, check_input=check_input)
+        end = time.time()
+        self.pred_time = end - begin
+        return change_label_to_zero(pred)
+
+    def canProbas(self):
+        """Used to know if the classifier can return label probabilities"""
+        return True
+
+    def getInterpret(self, directory, y_test):
+        interpretString = ""
+        interpretString += self.getFeatureImportance(directory)
+        np.savetxt(directory + "times.csv",
+                   np.array([self.train_time, self.pred_time]), delimiter=',')
+        return interpretString
+
+
+def formatCmdArgs(args):
+    """Used to format kwargs for the parsed args"""
+    kwargsDict = {"max_depth": args.DTP_depth,
+                  "criterion": args.DTP_criterion,
+                  "splitter": args.DTP_splitter,
+                  "n_stumps":args.DTP_stumps}
+    return kwargsDict
+
+
+def paramsToSet(nIter, randomState):
+    paramsSet = []
+    for _ in range(nIter):
+        paramsSet.append({"max_depth": randomState.randint(1, 300),
+                          "criterion": randomState.choice(["gini", "entropy"]),
+                          "splitter": randomState.choice(["best", "random"])})
+    return paramsSet
+
+
diff --git a/multiview_platform/MonoMultiViewClassifiers/utils/execution.py b/multiview_platform/MonoMultiViewClassifiers/utils/execution.py
index 3e235fae6f1c764d54bd2bcee7c93fb36e6bfce0..189de2032fb85bfcfdee21c0f040194bf57aefd9 100644
--- a/multiview_platform/MonoMultiViewClassifiers/utils/execution.py
+++ b/multiview_platform/MonoMultiViewClassifiers/utils/execution.py
@@ -157,6 +157,20 @@ def parseTheArgs(arguments):
     groupDT.add_argument('--DT_splitter', metavar='STRING', action='store',
                          help='Determine criterion for Decision Trees', default="random")
 
+    groupDTP = parser.add_argument_group('Decision Trees pregen arguments')
+    groupDTP.add_argument('--DTP_depth', metavar='INT', type=int, action='store',
+                         help='Determine max depth for Decision Trees',
+                         default=3)
+    groupDTP.add_argument('--DTP_criterion', metavar='STRING', action='store',
+                         help='Determine max depth for Decision Trees',
+                         default="entropy")
+    groupDTP.add_argument('--DTP_splitter', metavar='STRING', action='store',
+                         help='Determine criterion for Decision Trees',
+                         default="random")
+    groupDTP.add_argument('--DTP_stumps', metavar='INT', type=int, action='store',
+                          help='Determine the number of stumps for Decision Trees pregen',
+                          default=1)
+
     groupSGD = parser.add_argument_group('SGD arguments')
     groupSGD.add_argument('--SGD_alpha', metavar='FLOAT', type=float, action='store',
                           help='Determine alpha for SGDClassifier', default=0.1)