diff --git a/vecreg.cc b/vecreg.cc
index 74861247cfd993d50b30df7676d605cd36c62b30..936771a3d9e508c1602d3e72818124a609e5b9b8 100755
--- a/vecreg.cc
+++ b/vecreg.cc
@@ -8,6 +8,8 @@
 
 #include "vecreg.h"
 #include "utils/options.h"
+#include "warpfns/fnirt_file_reader.h"
+#include "warpfns/warpfns.h"
 
 using namespace Utilities;
 
@@ -128,7 +130,7 @@ void sjgradient(const volume<float>& im,volume4D<float>& grad){
 
 
 void vecreg_nonlin(const volume4D<float>& tens,volume4D<float>& oV1,
-		   const volume<float>& refvol,volume4D<float>& warp,
+		   const volume<float>& refvol,volume4D<float>& warpvol,
 		   const volume<float>& mask){
 
   ColumnVector X_seed(3),X_target(3);
@@ -138,24 +140,31 @@ void vecreg_nonlin(const volume4D<float>& tens,volume4D<float>& oV1,
   //float nxx=(float)tens.xsize()/2.0,nyy=(float)tens.ysize()/2.0,nzz=(float)tens.zsize()/2.0;
   //float nx=(float)oV1.xsize()/2.0,ny=(float)oV1.ysize()/2.0,nz=(float)oV1.zsize()/2.0;
 
-  // transform mm warp to voxel warp
+  
+  // read warp field created by Jesper
+  FnirtFileReader ffr(warp.value());
+  warpvol=ffr.FieldAsNewimageVolume4D(true);
+  //  convertwarp_abs2rel(warpvol);
+  //  convertwarp_rel2abs(warpvol);
+
+// transform mm warp to voxel warp
   // the warpfield here has been transfomed by MJ's script
-  for(int z=0;z<warp[0].zsize();z++)
-    for(int y=0;y<warp[0].ysize();y++)
-      for(int x=0;x<warp[0].xsize();x++){
-	warp[0](x,y,z) /= dx;
-	warp[1](x,y,z) /= dy;
-	warp[2](x,y,z) /= dz;
-      }
+  // for(int z=0;z<warpvol[0].zsize();z++)
+//     for(int y=0;y<warpvol[0].ysize();y++)
+//       for(int x=0;x<warpvol[0].xsize();x++){
+// 	warpvol[0](x,y,z) /= dx;
+// 	warpvol[1](x,y,z) /= dy;
+// 	warpvol[2](x,y,z) /= dz;
+//       }
  
 
   // compute transformation jacobian
   volume4D<float> jx(mask.xsize(),mask.ysize(),mask.zsize(),3);
   volume4D<float> jy(mask.xsize(),mask.ysize(),mask.zsize(),3);
   volume4D<float> jz(mask.xsize(),mask.ysize(),mask.zsize(),3);
-  sjgradient(warp[0],jx);
-  sjgradient(warp[1],jy);
-  sjgradient(warp[2],jz);
+  sjgradient(warpvol[0],jx);
+  sjgradient(warpvol[1],jy);
+  sjgradient(warpvol[2],jz);
 
 
   ColumnVector V_seed(3),V_target(3);
@@ -166,10 +175,20 @@ void vecreg_nonlin(const volume4D<float>& tens,volume4D<float>& oV1,
   for(int z=0;z<oV1.zsize();z++)
     for(int y=0;y<oV1.ysize();y++)
        for(int x=0;x<oV1.xsize();x++){
+	 
+	//  X_seed << round(x+warpvol[0](x,y,z))
+// 		<< round(y+warpvol[1](x,y,z))
+// 		<< round(z+warpvol[2](x,y,z));
+// 	 X_seed << round(warpvol[0](x,y,z))
+// 		<< round(warpvol[1](x,y,z))
+// 		<< round(warpvol[2](x,y,z));
+
+
+	 X_target << x << y << z;
+	 X_seed = NewimageCoord2NewimageCoord(warpvol,false,oV1[0],mask,X_target);
+
+	 //OUT(X_seed.t());
 
-	 X_seed << round(x+warp[0](x,y,z))
-		<< round(y+warp[1](x,y,z))
-		<< round(z+warp[2](x,y,z));
 	 if(mask((int)X_seed(1),(int)X_seed(2),(int)X_seed(3))==0){
 	   continue;
 	 }
diff --git a/vecreg.h b/vecreg.h
index afdb8a6cc1129e5064dacd538b7a2a93b8bef843..262ab3fdcbd2f4a33e0ce2c64f38e63f1347abdf 100755
--- a/vecreg.h
+++ b/vecreg.h
@@ -1,5 +1,11 @@
 #include <cmath>
 #include <stdlib.h>
+
+
+#ifndef EXPOSE_TREACHEROUS
+#define EXPOSE_TREACHEROUS           // To allow us to use .sampling_mat()
+#endif
+
 #include "newimage/newimageall.h"
 #include "miscmaths/miscmaths.h"