diff --git a/scikits/learn/datasets/samples_generator.py b/scikits/learn/datasets/samples_generator.py
index 472b4955c78017130c744c8eaf63ac85a7d27092..cea4b91728312b4efb447200b47f89207d6f982f 100644
--- a/scikits/learn/datasets/samples_generator.py
+++ b/scikits/learn/datasets/samples_generator.py
@@ -11,7 +11,8 @@ Samples generator
 # License: BSD 3 clause
 
 
-
+def samples_classif():
+    pass
 
 ######################################################################
 # Generate Dataset for test
diff --git a/scikits/learn/pipeline.py b/scikits/learn/pipeline.py
new file mode 100644
index 0000000000000000000000000000000000000000..cbc360407cbe601171cd9ca54bdad36585a38245
--- /dev/null
+++ b/scikits/learn/pipeline.py
@@ -0,0 +1,44 @@
+from .base import BaseEstimator
+
+class Pipeline(BaseEstimator):
+    """
+    Univariate ranking Pipeline.
+    Sequentialy apply a list of methods
+    
+    Example:
+    import datamind.ml.dimred.univRankingGLM as drglm
+    d=data.twoclassses()
+    y=d[:,["class"]]
+    X=d[:,1:]
+    # permute features
+    X=X[:,N.random.permutation(X.shape[1])]
+    print X
+    methods=[drglm.UnivOneWayAnovaFstat(pval=.3),
+             drglm.UnivOneWayAnovaFstat(z=1.5),
+             drglm.UnivOneWayAnovaFstat(dim=2)]
+    pipeline=UnivRankingPipeline(methods)
+    pipeline.fit(X,y)
+    print pipeline.reduce(X)
+    print pipeline.getSelectedFeatures()
+    """
+    def __init__(self,transformers,estimator):
+        """
+        methods: list of UnivRanking objects,
+        ie.: with fit/reduce/getSelectedFeatures methods
+        """
+        self.transformers=transformers
+        self.estimator=estimator
+
+    def fit(self, X,y):
+        Xt=X
+        for transformer in self.transformers:
+            Xt=transformer.fit(Xt,y).transform(Xt)
+        estimator.fit(Xt,y)
+        return self
+    
+    def predict(X)
+        Xt=X
+        for transformer in self.transformers:
+            Xt=transformer.transform(Xt)
+        return estimator.predict(Xt,y)
+