diff --git a/old_bedpost b/old_bedpost
index e8a8b74abb8046f955a89837d62c8a8cd30a3b17..54519820b35d69a4deae6b22e7238f3e7928326c 100755
--- a/old_bedpost
+++ b/old_bedpost
@@ -2,36 +2,80 @@
 
 Usage() {
     echo ""
-    echo "Usage: Bedpost <subject directory> "
+    echo "Usage: bedpost <subject directory> "
     echo ""
     echo "expects to find bvals and bvecs in subject directory"
     echo "expects to find data nodif_brain_mask nodif in subject directory"
-    echo "N.B. nodif_brain_mask has to be betted"
     echo ""
-    echo "If struct is in subject directory transforms will be made"
-    echo "NB: if there, struct should already be betted"
     exit
 }
 
-ExitUnlock() {
-    rm /usr/people/dtiuser/locks/.bedpost.lock
+trap Clean_Exit 2
+
+
+Clean_Exit(){
+    
+    if [ -d ${subjdir}.bedpost/logs/pid_${$} ];then
+	i=`ls  ${subjdir}.bedpost/logs/pid_${$}`
+	for j in ${i};do 
+	    host=`echo $j | awk --field-separator=_fdt_ '{print $1}'`
+	    pid=`echo $j | awk --field-separator=_fdt_ '{print $2}'`
+	    ${FSL_REMOTE_CALL} $host "kill -KILL $pid" #this leaves one child process per processor - what can you do?
+	done
+    fi
+    
+    ExitUnlock;
+}
+
+Lock(){
+    if [ x${FSL_LOCK_DIR} != "x" ];then
+	touch ${FSL_LOCK_DIR}/.bedpost.lock
+    fi
+}
+
+ExitUnlock(){
+    if [ -e ${FSL_LOCK_DIR}/.bedpost.lock ];then
+	rm ${FSL_LOCK_DIR}/.bedpost.lock
+    fi
     exit
 }
 
+LockTest(){
+    if [ x${FSL_LOCK_DIR} = "x" ];then
+	echo 1;
+    elif [ ! -e ${FSL_LOCK_DIR}/.bedpost.lock ];then
+	echo 1;
+    else
+	echo 0;
+    fi
+}
+
+make_absolute(){
+    dir=$1;
+    if [ -d ${dir} ]; then
+	OLDWD=`pwd`
+	cd ${dir}
+	dir_all=`pwd`
+	cd $OLDWD
+    else
+	dir_all=${dir}
+    fi
+    echo ${dir_all}
+}
 
-[ "$1" = "" ] && Usage
 
 
-if [ -e /usr/people/dtiuser/locks/.bedpost.lock ]; then
+[ "$1" = "" ] && Usage
+
+if [ `LockTest` -eq 0 ]; then
     echo "bedpost is currently being run - try again later"
     exit
 fi
 
-touch /usr/people/dtiuser/locks/.bedpost.lock
+Lock();
 
-projdir=`pwd`
-subjdir=`basename $1`
-subjdir=${projdir}/${subjdir}
+subjdir=`make_absolute $1`
+subjdir=`echo $subjdir | sed 's/\/$/$/g'`
 
 echo subjectdir is $subjdir
 
@@ -52,60 +96,39 @@ if [ ! -e ${subjdir}/bvals ]; then
 	ExitUnlock
 fi
 
-if [ ! -e ${subjdir}/data.hdr ]; then
-	echo "${subjdir}/data.hdr not found"
+if [ `${FSLDIR}/bin/imtest ${subjdir}/data` -eq 0 ]; then
+	echo "${subjdir}/data not found"
 	ExitUnlock
 fi
 
-if [ ! -e ${subjdir}/nodif.hdr ]; then
-	echo "${subjdir}/nodif.hdr not found"
+if [ `${FSLDIR}/bin/imtest ${subjdir}/nodif` -eq 0 ]; then
+	echo "${subjdir}/nodif not found"
 	ExitUnlock
 fi
 
-if [ ! -e ${subjdir}/nodif_brain_mask.hdr ]; then
-	echo "${subjdir}/nodif_brain_mask.hdr not found"
+if [ `${FSLDIR}/bin/imtest ${subjdir}/nodif_brain_mask` -eq 0 ]; then
+	echo "${subjdir}/nodif_brain_mask not found"
 	ExitUnlock
 fi
 
 
-if [ ! -e ${subjdir}/data.img ]; then
-	echo "${subjdir}/data.img not found"
-	ExitUnlock
-fi
-
-if [ ! -e ${subjdir}/nodif.img ]; then
-	echo "${subjdir}/nodif.img not found"
-	ExitUnlock
-fi
-
-if [ ! -e ${subjdir}/nodif_brain_mask.img ]; then
-	echo "${subjdir}/nodif_brain_mask.img not found"
-	ExitUnlock
-fi
-
-
-
 echo making bedpost directory
-mkdir ${subjdir}.bedpost/
-mkdir ${subjdir}.bedpost/diff_slices
+mkdir -p ${subjdir}.bedpost/
+mkdir -p ${subjdir}.bedpost/diff_slices
 
 echo copying files to bedpost directory
-cp ${subjdir}/bvecs ${subjdir}.bedpost
-cp ${subjdir}/bvals ${subjdir}.bedpost
-cp ${subjdir}/nodif.hdr ${subjdir}.bedpost
-cp ${subjdir}/nodif.img ${subjdir}.bedpost
-cp ${subjdir}/nodif_brain_mask.hdr ${subjdir}.bedpost
-cp ${subjdir}/nodif_brain_mask.img ${subjdir}.bedpost
-
+cp ${subjdir}/bvecs ${subjdir}/bvals ${subjdir}.bedpost
+${FSLDIR}/bin/imcp ${subjdir}/nodif ${subjdir}/nodif_brain_mask ${subjdir}.bedpost
 
 
 
 mkdir -p ${subjdir}.bedpost/logs
+mkdir -p ${subjdir}.bedpost/logs/pid_${$}
 
 nslices=`avwval ${subjdir}/data dim3`
 
-${FSLDIR}/bin/avwslice ${subjdir}/data
-${FSLDIR}/bin/avwslice ${subjdir}/nodif_brain_mask
+#${FSLDIR}/bin/avwslice ${subjdir}/data
+#${FSLDIR}/bin/avwslice ${subjdir}/nodif_brain_mask
 
 #following need to be setup elsewhere
 #FSL_MACHINE_LIST="cayenne0 cayenne0 cayenne2 cayenne3"
@@ -115,16 +138,23 @@ if [ "$FSL_MACHINE_LIST" = "" ] ; then
     ${FSLDIR}/bin/bedpost_proc $subjdir $nslices
 else
     for machine in $FSL_MACHINE_LIST; do
-	$FSL_REMOTE_CALL $machine ${FSLDIR}/bin/bedpost_proc $subjdir $nslices &
+	$FSL_REMOTE_CALL $machine  "if [ -r /etc/fslconf/fsl.sh ];then . /etc/fslconf/fsl.sh; elif [ -r /usr/local/etc/fslconf/fsl.sh ];then . /usr/local/etc/fslconf/fsl.sh; elif [ -r \${HOME}/.fslconf/fsl.sh ]; then . \${HOME}/.fslconf/fsl.sh; fi; if [ x\${FSLDIR} != "x" ];then \${FSLDIR}/bin/bedpost_proc $subjdir $nslices ${subjdir}.bedpost/logs/pid_${$}; else echo FSLDIR not set in any default location on machine `hostname`;fi"  &
     done
 fi
 
 
-echo "DONE"
+finished=0;
+while [ $finished -eq 0 ];do
+    sleep 60;
+    nfin=`ls ${subjdir}.bedpost/logs/.*_finished |wc -w` #fix this (see Bedpost)
+    if [ $nfin -eq $nslices ];then
+	finished=1;
+    fi
+done
+
 #postprocessing
 #postprocess $subjdir
 
-
 mkdir -p ${subjdir}.bedpost/xfms
 xfmdir=${subjdir}.bedpost/xfms
 echo 1 0 0 0 > ${xfmdir}/eye.mat
@@ -132,7 +162,11 @@ echo 0 1 0 0 >> ${xfmdir}/eye.mat
 echo 0 0 1 0 >> ${xfmdir}/eye.mat
 echo 0 0 0 1 >> ${xfmdir}/eye.mat
 
+echo "DONE"
+
+ExitUnlock()
+
+
 
-rm /usr/people/dtiuser/locks/.bedpost.lock
 
 
diff --git a/old_bedpost_proc b/old_bedpost_proc
index ee26c49cc7f01048baa9473a3a6b81380bcc48bb..65b4f4570fe911a493ce0b747c6a103306249f0a 100755
--- a/old_bedpost_proc
+++ b/old_bedpost_proc
@@ -2,27 +2,29 @@
 
 Usage() {
     echo ""
-    echo "Usage: bedpost_proc <subject_dir> <nslices>"
+    echo "Usage: bedpost_proc <subject_dir> <nslices> [piddir]"
     echo ""
     exit
 }
 
 [ "$2" = "" ] && Usage
+[ "$3" = "" ] || touch ${3}/`hostname`_fdt_${$}
 
 subjdir=$1
 nslices=$2
-    
+
 slice=0
 while [ $slice -lt $nslices ];do
-
     if [ ! -e ${subjdir}.bedpost/logs/.$slice ] ; then
-	echo `hostname` > ${subjdir}.bedpost/logs/.$slice
+	echo `hostname`_${$} > ${subjdir}.bedpost/logs/.$slice
 	sleep 10
-	if [ `hostname` = `cat ${subjdir}.bedpost/logs/.$slice` ] ; then
+	if [ `hostname`_${$} = `cat ${subjdir}.bedpost/logs/.$slice` ] ; then
 	    nice ${FSLDIR}/bin/diff_pvm --data=${subjdir}/data_slice_$slice --mask=${subjdir}/nodif_brain_mask_slice_$slice -b ${subjdir}/bvals -r ${subjdir}/bvecs --logdir=${subjdir}.bedpost/diff_slices/data_slice_$slice --nj=1300 --bi=300 --se=20 > ${subjdir}.bedpost/logs/log$slice
+	    touch ${subjdir}.bedpost/logs/.${slice}_finished
 	fi
     fi
     slice=`echo "$slice + 1" | bc`
 done
-    
 
+[ "$3" = "" ] || rm ${3}/`hostname`_fdt_${$}
+sleep 10
\ No newline at end of file
diff --git a/pt_alltracts.cc b/pt_alltracts.cc
index a74574b6dd297af2bb9fc4106cbe98dde85ec1a6..b7539af3744e97426760d7eb943e16af9f6d10d9 100644
--- a/pt_alltracts.cc
+++ b/pt_alltracts.cc
@@ -142,7 +142,7 @@ void alltracts(){
 		    th_ph_f=vols.sample(part.x(),part.y(),part.z());
 		  }
 		  else{
-		    if(skipmask((int)round(part.x()),(int)round(part.y()),(int)round(part.z()))==0)
+		    if(skipmask(x_s,y_s,z_s)==0)
 		      th_ph_f=vols.sample(part.x(),part.y(),part.z());
 		  }
 		  
diff --git a/pt_matrix.cc b/pt_matrix.cc
index eb167ea4194199cf007573070b561f28d24a27fc..1cbb068913c2537b3e53bca03895267e04dd749c 100644
--- a/pt_matrix.cc
+++ b/pt_matrix.cc
@@ -247,7 +247,7 @@ void matrix2(){
 		    th_ph_f=vols.sample(part.x(),part.y(),part.z());
 		  }
 		  else{
-		    if(skipmask((int)round(part.x()),(int)round(part.y()),(int)round(part.z()))==0)
+		    if(skipmask(x_s,y_s,z_s)==0)
 		      th_ph_f=vols.sample(part.x(),part.y(),part.z());
 		  }
 		  
diff --git a/pt_matrix_mesh.cc b/pt_matrix_mesh.cc
index b37aefd93f8ed8f5d30fd5078d269abdb950690d..acc5165067ff6c77c4f8a5341bfa1ee52d27e8db 100644
--- a/pt_matrix_mesh.cc
+++ b/pt_matrix_mesh.cc
@@ -231,8 +231,14 @@ void mesh_matrix2(){
 	      th_ph_f=vols.sample(part.x(),part.y(),part.z());
 	    }
 	    else{
-	      if(skipmask((int)round(part.x()),(int)round(part.y()),(int)round(part.z()))==0)
+	      xyz_rubbish=vox_to_vox(xyz_dti,vols.dimensions(),dim_rubbish,Seeds_to_DTI.i());
+	      int x_s =(int)round((float)xyz_rubbish(1));
+	      int y_s =(int)round((float)xyz_rubbish(2));
+	      int z_s =(int)round((float)xyz_rubbish(3));
+	      
+	      if(skipmask(x_s,y_s,z_s)==0)
 		th_ph_f=vols.sample(part.x(),part.y(),part.z());
+
 	    }
 	    
 	    tmp2=rand(); tmp2/=RAND_MAX;
diff --git a/pt_seeds_to_targets.cc b/pt_seeds_to_targets.cc
index a3a07e5c99ae85c2e85279b086a3db43fbeb1bea..c1690e8b2ab0a056ce14053b4158ec36c53faf88 100644
--- a/pt_seeds_to_targets.cc
+++ b/pt_seeds_to_targets.cc
@@ -172,7 +172,7 @@ void seeds_to_targets()
 		    th_ph_f=vols.sample(part.x(),part.y(),part.z());
 		  }
 		  else{
-		    if(skipmask((int)round(part.x()),(int)round(part.y()),(int)round(part.z()))==0)
+		    if(skipmask(x_s,y_s,z_s)==0)
 		      th_ph_f=vols.sample(part.x(),part.y(),part.z());
 		  }
 		  
diff --git a/pt_twomasks.cc b/pt_twomasks.cc
index b1479a9b3ec97d2f34c83879ab3c8c3f78fefbe7..d00a87574cc763be427573ef89dfd2ecfe2d898c 100644
--- a/pt_twomasks.cc
+++ b/pt_twomasks.cc
@@ -148,7 +148,7 @@ void twomasks_symm(){
 		      th_ph_f=vols.sample(part.x(),part.y(),part.z());
 		    }
 		    else{
-		      if(skipmask((int)round(part.x()),(int)round(part.y()),(int)round(part.z()))==0)
+		      if(skipmask(x_s,y_s,z_s)==0)
 			th_ph_f=vols.sample(part.x(),part.y(),part.z());
 		    }