diff --git a/miscmaths.cc b/miscmaths.cc
index f23ae8cddf7d6a6621fa36377489a1750e25b657..5aed0ce1cfa5f70d303a429afbb4b92460ff0042 100644
--- a/miscmaths.cc
+++ b/miscmaths.cc
@@ -1,6 +1,6 @@
 /*  miscmaths.cc
 
-    Mark Jenkinson & Mark Woolrich & Christian Beckmann, FMRIB Image Analysis Group
+    Mark Jenkinson & Mark Woolrich & Christian Beckmann & Tim Behrens, FMRIB Image Analysis Group
 
     Copyright (C) 1999-2000 University of Oxford  */
 
@@ -356,7 +356,10 @@ namespace MISCMATHS {
      if (x>0.0) return ((int) (x+0.5));
      else       return ((int) (x-0.5));
    }  
-
+  
+  double rounddouble(double x){
+    return ( floor(x+0.5));
+  }
   int periodicclamp(int x, int x1, int x2)
    {
      if (x2<x1) return periodicclamp(x,x2,x1);
@@ -1558,7 +1561,7 @@ void element_mod_n(Matrix& Mat,double n)
     for( int i=1;i<=Mat.Nrows();i++){
 
       if( !( (Mat(i,j)>0) && (Mat(i,j)<n) ) ){ 
-	tmp = ( Mat(i,j) - MISCMATHS::round(Mat(i,j)/n)*n );
+	tmp = ( Mat(i,j) - rounddouble(Mat(i,j)/n)*n );
 	Mat(i,j)= tmp > 0 ? tmp : tmp + n;
       }    
       
diff --git a/miscmaths.h b/miscmaths.h
index 382d2e63262eb83349e31736c803294eef20757e..63a19dca54cef5aff9ec00ccce9994ddbe2b9495 100644
--- a/miscmaths.h
+++ b/miscmaths.h
@@ -71,7 +71,8 @@ namespace MISCMATHS {
   int round(int x); 
   int round(float x);
   int round(double x);
-  
+  double rounddouble(double x);
+
   inline int sign(int x){ if (x>0) return 1; else { if (x<0) return -1; else return 0; } }
   inline int sign(float x){ if (x>0) return 1; else { if (x<0) return -1; else return 0; } }
   inline int sign(double x){ if (x>0) return 1; else { if (x<0) return -1; else return 0; } }