diff --git a/scikits/learn/utils/fixes.py b/scikits/learn/utils/fixes.py
index d83ed43795a55dc07713f11c2bd86670d4f56825..13ee4e0669585149af836640ee86d1e598beec5f 100644
--- a/scikits/learn/utils/fixes.py
+++ b/scikits/learn/utils/fixes.py
@@ -80,12 +80,11 @@ def qr_economic(A, **kwargs):
     Scipy 0.9 changed the keyword econ=True to mode='economic'
     """
     import scipy.linalg
-    version = scipy.__version__.split('.')
-    if version[0] < 1 and version[1] < 9:
-        return scipy.linalg.qr(A, econ=True, **kwargs)
-    else:
+    # trick: triangular solve has introduced in 0.9
+    if not hasattr(scipy.linalg, 'triangular_solve'):
         return scipy.linalg.qr(A, mode='economic', **kwargs)
-        
+    else:
+        return scipy.linalg.qr(A, econ=True, **kwargs)
 
 def arpack_eigsh(A, **kwargs):
     """
@@ -98,9 +97,8 @@ def arpack_eigsh(A, **kwargs):
     else:
         return arpack.eigen_symmetric(A, **kwargs)
 
-# export fixes for np =< 1.4
-np_version = np.__version__.split('.')
-if np_version[0] < 2 and np_version[1] < 5:
+# export fixes for np < 1.4
+if not hasattr(np, 'copysign'):
     in1d = _in1d
     copysign = _copysign
     unique = _unique
diff --git a/scikits/learn/utils/tests/test_svd.py b/scikits/learn/utils/tests/test_svd.py
index 68748bdb6b6c38313b60326412ed0c97f24e8e50..efa6ee525b2391cbb7d1046d9e63eb3357367e2b 100644
--- a/scikits/learn/utils/tests/test_svd.py
+++ b/scikits/learn/utils/tests/test_svd.py
@@ -142,3 +142,6 @@ def test_fast_svd_transpose_consistency():
     assert_almost_equal(s2, s3)
 
 
+if __name__ == '__main__':
+    import nose
+    nose.runmodule()