diff --git a/setup.py b/setup.py
index efb062da91a1f44ce6242b2e63125bfcdabbeef3..b7c3e4d69f3ce60fa3fbb7c5dbf8d0018807b4c9 100644
--- a/setup.py
+++ b/setup.py
@@ -21,7 +21,7 @@ include_dirs = [
     xbob.core.get_include(),
     ]
 
-packages = ['bob-io >= 2.0.0a2']
+packages = ['bob-io >= 2.0.0a2', 'bob-machine >= 2.0.0a2']
 version = '2.0.0a0'
 
 setup(
diff --git a/xbob/learn/mlp/test_roll.py b/xbob/learn/mlp/test_roll.py
new file mode 100644
index 0000000000000000000000000000000000000000..825aaf0cd1502b7049d29d05c11aba7d0bf434e8
--- /dev/null
+++ b/xbob/learn/mlp/test_roll.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+# vim: set fileencoding=utf-8 :
+# Laurent El Shafey <Laurent.El-Shafey@idiap.ch>
+# Tue Jun 25 20:44:40 CEST 2013
+#
+# Copyright (C) 2011-2014 Idiap Research Institute, Martigny, Switzerland
+
+"""Tests on the roll/unroll functions
+"""
+
+import numpy
+from . import Machine, roll, unroll
+
+def test_roll_1(self):
+
+  m = Machine((10,3,8,5))
+  m.randomize()
+
+  vec = unroll(m)
+  m2 = Machine((10,3,8,5))
+  roll(m2, vec)
+  assert m == m2
+
+  m3 = Machine((10,3,8,5))
+  vec = unroll(m.weights, m.biases)
+  roll(m3, vec)
+  assert m == m3
+
+def test_roll_2(self):
+
+  w = [numpy.array([[2,3.]]), numpy.array([[2,3,4.],[5,6,7]])]
+  b = [numpy.array([5.,]), numpy.array([7,8.])]
+  vec = numpy.ndarray(11, numpy.float64)
+  unroll(w, b, vec)
+
+  w_ = [numpy.ndarray((1,2), numpy.float64), numpy.ndarray((2,3), numpy.float64)]
+  b_ = [numpy.ndarray(1, numpy.float64), numpy.ndarray(2, numpy.float64)]
+  roll(w_, b_, vec)
+
+  assert (w_[0] == w[0]).all()
+  assert (b_[0] == b[0]).all()