diff --git a/bedpostx b/bedpostx
index 8bbbde137b6dd1c3f3cf66a5be0186c550861943..9a20960e55ac95868c559ec4e1d7416bbaced8cd 100755
--- a/bedpostx
+++ b/bedpostx
@@ -18,10 +18,14 @@ fi
 
 Usage() {
     echo ""
-    echo "Usage: bedpostX <subject directory> "
+    echo "Usage: bedpostX <subject directory> [options]"
     echo ""
     echo "expects to find bvals and bvecs in subject directory"
     echo "expects to find data nodif_brain_mask nodif in subject directory"
+    echo "options:"
+    echo "-n (number of fibres per voxel, default 2)"
+    echo "-w (ARD weight, more weight means less fibres killed per voxel, default 1)"
+    echo "-b (burnin period, default 1000)"
     echo ""
     exit
 }
@@ -42,6 +46,23 @@ make_absolute(){
 
 [ "$1" = "" ] && Usage
 
+
+#parse option arguments
+nfibres=2
+fudge=1
+burnin=1000
+while [ ! -z "$2" ]
+do
+  case "$2" in
+      -n) nfibres=$3;shift;;
+      -w) fudge=$3;shift;;
+      -b) burnin=$3;shift;;
+      *) break;;
+  esac
+  shift
+done
+
+
 subjdir=`make_absolute $1`
 subjdir=`echo $subjdir | sed 's/\/$/$/g'`
 
@@ -82,7 +103,6 @@ mkdir -p ${subjdir}.bedpostX/logs/pid_${$}
 mkdir -p ${subjdir}.bedpostX/xfms
 
 mailto=`whoami`@fmrib.ox.ac.uk
-
 echo Queuing preprocessing stages
 preprocid=`qsub -M $mailto -V -q short.q \
     -o ${subjdir}.bedpostX/logs -e ${subjdir}.bedpostX/logs \
@@ -90,10 +110,11 @@ preprocid=`qsub -M $mailto -V -q short.q \
     awk '{print $3}'`
 
 echo Queuing parallel processing stage
+echo I am using this file
 nslices=`avwval ${subjdir}/data dim3`
 bedpostid=`qsub -M $mailto -hold_jid $preprocid -V -q long.q -t 1-$nslices \
     -o ${subjdir}.bedpostX/logs -e ${subjdir}.bedpostX/logs \
-    ${FSLDIR}/bin/sge_bedpostX_single_slice.sh $subjdir | \
+    ${FSLDIR}/bin/sge_bedpostX_single_slice.sh $subjdir $nfibres $fudge $burnin | \
     awk '{print $3}' | awk -F. '{print $1}'`
 
 echo Queuing post processing stage
@@ -105,7 +126,7 @@ mergeid=`qsub -M $mailto -hold_jid $bedpostid -V -q short.q \
 echo
 echo Type ${subjdir}.bedpostX/monitor to show progress.
 cat <<EOM > ${subjdir}.bedpostX/monitor
-#!/bin/sh
+# #!/bin/sh
 finished=0
 logdir=${subjdir}.bedpostX/logs
 while [ \$finished -eq 0 ] ; do
@@ -126,7 +147,7 @@ chmod +x ${subjdir}.bedpostX/monitor
 
 echo Type ${subjdir}.bedpostX/cancel to terminate the task.
 cat <<EOC > ${subjdir}.bedpostX/cancel
-#!/bin/sh
+# #!/bin/sh
 qdel $mergeid $bedpostid $preprocid
 EOC
 chmod +x ${subjdir}.bedpostX/cancel
diff --git a/bedpostx_single_slice.sh b/bedpostx_single_slice.sh
index 9a851a040b5a6022a25d48d930e914a386538e13..c6c96d389c3c8d823f5fd000146f130d8a88ddfc 100755
--- a/bedpostx_single_slice.sh
+++ b/bedpostx_single_slice.sh
@@ -14,5 +14,5 @@ ${FSLDIR}/bin/xfibres\
  --mask=$subjdir/nodif_brain_mask_slice_$slicezp\
  -b $subjdir/bvals -r $subjdir/bvecs\
  --forcedir --logdir=$subjdir.bedpostX/diff_slices/data_slice_$slicezp\
- --nj=1000 --bi=600 --se=20 --upe=24 --nfibres=2 > $subjdir.bedpostX/logs/log$slicezp  && echo Done
+ --fudge=$3 --nj=5000 --bi=$4 --se=100 --upe=24 --nfibres=$2 > $subjdir.bedpostX/logs/log$slicezp  && echo Done
 
diff --git a/old_bedpostX b/old_bedpostX
index 4be5dae2bdbf0bd6c4eaecfb012ef565dae28202..7b499c54ce782e1ce8780703772b54c7c02e9a71 100644
--- a/old_bedpostX
+++ b/old_bedpostX
@@ -8,10 +8,14 @@ fi
 
 Usage() {
     echo ""
-    echo "Usage: bedpostX <subject directory> "
+    echo "Usage: bedpostX <subject directory> [options]"
     echo ""
     echo "expects to find bvals and bvecs in subject directory"
     echo "expects to find data nodif_brain_mask nodif in subject directory"
+    echo "options:"
+    echo "-n (number of fibres per voxel, default 2)"
+    echo "-w (ARD weight, more weight means less fibres killed per voxel, default 1)"
+    echo "-b (burnin period, default 1000)"
     echo ""
     exit
 }
@@ -104,6 +108,22 @@ fi
 
 Lock;
 
+#parse option arguments
+nfibres=2
+fudge=1
+burnin=1000
+while [ ! -z "$2" ]
+do
+  case "$2" in
+      -n) nfibres=$3;shift;;
+      -w) fudge=$3;shift;;
+      -b) burnin=$3;shift;;
+      *) break;;
+  esac
+  shift
+done
+
+
 subjdir=`make_absolute $1`
 subjdir=`echo $subjdir | sed 's/\/$/$/g'`
 
@@ -167,14 +187,14 @@ ${FSLDIR}/bin/avwslice ${subjdir}/nodif_brain_mask
 
 if [ "x$FSLMACHINELIST" = "x" ] ; then
     echo "processing data on local host"
-    ${FSLDIR}/bin/bedpostX_proc $subjdir $nslices ${subjdir}.bedpostX/logs/pid_${$} &
+    ${FSLDIR}/bin/bedpostX_proc $subjdir $nslices -n $nfibres -w $fudge -b $burnin ${subjdir}.bedpostX/logs/pid_${$} &
 else
     echo "processing data on hosts: $FSLMACHINELIST"
     for machine in $FSLMACHINELIST; do
 	echo "if [ -r /usr/local/etc/fslconf/fsl.sh ];then . /usr/local/etc/fslconf/fsl.sh;fi; if [ -r /etc/fslconf/fsl.sh ];then . /etc/fslconf/fsl.sh;fi; if [ -r \${HOME}/.fslconf/fsl.sh ]; then . \${HOME}/.fslconf/fsl.sh; fi; if [ x\${FSLDIR} != "x" ];then \${FSLDIR}/bin/bedpostX_proc $subjdir $nslices ${subjdir}.bedpostX/logs/pid_${$}; else echo FSLDIR not set in any default location on machine `hostname`;fi"|	$FSLREMOTECALL $machine /bin/sh  &
     done
 fi
-
+echo finished
 
 b=0
 finished=0;
@@ -212,6 +232,9 @@ while [ $fib -le $numfib ];do
     fib=`echo "$fib +1"|bc`;
 done
 
+${FSLDIR}/bin/avwmerge -z ${subjdir}.bedpostX/meanSignal  `${FSLDIR}/bin/imglob -oneperimage ${subjdir}.bedpostX/diff_slices/data_slice_*/meanSignal`
+${FSLDIR}/bin/avwmerge -z ${subjdir}.bedpostX/stdSignal  `${FSLDIR}/bin/imglob -oneperimage ${subjdir}.bedpostX/diff_slices/data_slice_*/stdSignal`
+
 echo Removing intermediate files
 
 if [ `imtest ${subjdir}.bedpostX/merged_th1samples` -eq 1 ];then
diff --git a/old_bedpostX_proc b/old_bedpostX_proc
index 4cdbd5f61af3a28ae1ffc54768b1091c5c65d28a..56d192ee61a62be7a3e1988839c42fdd8069de9e 100644
--- a/old_bedpostX_proc
+++ b/old_bedpostX_proc
@@ -6,21 +6,36 @@
 
 Usage() {
     echo ""
-    echo "Usage: bedpostX_proc <subject_dir> <nslices> [piddir]"
+    echo "Usage: bedpostX_proc <subject_dir> <nslices> [-n nfibres -w ard_weight -b burnin_period] [piddir]"
     echo ""
     exit
 }
 
 
 [ "$2" = "" ] && Usage
-[ "$3" = "" ] || touch ${3}/`hostname`_fdt_${$}
 
+#parse option arguments
+nfibres=2
+fudge=1.5
+burnin=2000
+while [ ! -z "$3" ]
+do
+  case "$3" in
+      -n) nfibres=$4;shift;;
+      -w) fudge=$4;shift;;
+      -b) burnin=$4;shift;;
+      *) piddir=$3;;
+  esac
+  shift
+done
 
-subjdir=$1
-nslices=$2
 
+[ "$piddir" = "" ] || touch ${piddir}/`hostname`_fdt_${$}
 
 
+subjdir=$1
+nslices=$2
+
 slice=0
 while [ $slice -lt $nslices ];do
     slicezp=`${FSLDIR}/bin/zeropad $slice 4`
@@ -28,13 +43,13 @@ while [ $slice -lt $nslices ];do
 	echo `hostname`_${$} > ${subjdir}.bedpostX/logs/.$slicezp
 	sleep 10
 	if [ `hostname`_${$} = `cat ${subjdir}.bedpostX/logs/.$slicezp | sed -n '1p'` ] ; then
-	    nice ${FSLDIR}/bin/xfibres --data=$subjdir/data_slice_$slicezp --mask=$subjdir/nodif_brain_mask_slice_$slicezp -b $subjdir/bvals -r $subjdir/bvecs --forcedir --logdir=$subjdir.bedpostX/diff_slices/data_slice_$slicezp --nj=1000 --bi=600 --bn=0 --se=20 --nfibres=2 --fudge=1.5> $subjdir.bedpostX/logs/log$slicezp 
-#bi can be changed to 2000 if convergence looks dodgy
+	    nice ${FSLDIR}/bin/xfibres --data=$subjdir/data_slice_$slicezp --mask=$subjdir/nodif_brain_mask_slice_$slicezp -b $subjdir/bvals -r $subjdir/bvecs --forcedir --logdir=$subjdir.bedpostX/diff_slices/data_slice_$slicezp --nj=1000 --bi=$burnin --bn=0 --se=20 --nfibres=$nfibres --fudge=$fudge > $subjdir.bedpostX/logs/log$slicezp 
+
 	    touch ${subjdir}.bedpostX/logs/.${slicezp}_finished
 	fi
     fi
     slice=`echo "$slice + 1" | bc`
 done
 
-[ "$3" = "" ] || rm ${3}/`hostname`_fdt_${$}
-sleep 10
\ No newline at end of file
+[ "$piddir" = "" ] || rm ${piddir}/`hostname`_fdt_${$}
+sleep 10
diff --git a/xfibres.cc b/xfibres.cc
index 1f28291dc700a7deca74183b112cf46602b8f4f0..0baed21bf997712b0eee145e53f33692ec0f6d0d 100644
--- a/xfibres.cc
+++ b/xfibres.cc
@@ -123,7 +123,12 @@ class Samples{
   Matrix m_dsamples;
   Matrix m_S0samples;
   Matrix m_lik_energy;
-  
+
+//   // storing signal
+//   Matrix m_mean_sig;
+//   Matrix m_std_sig;
+//   Matrix m_sig2;
+
   vector<Matrix> m_thsamples;
   vector<Matrix> m_phsamples;
   vector<Matrix> m_fsamples;
@@ -135,7 +140,7 @@ class Samples{
   vector<Matrix> m_dyadic_vectors;
   vector<RowVector> m_mean_fsamples;
   vector<RowVector> m_mean_lamsamples;
-  
+
   float m_sum_d;
   float m_sum_S0;
   vector<SymmetricMatrix> m_dyad;
@@ -151,7 +156,7 @@ class Samples{
   
 public:
 
-  Samples( volume<int> vol2matrixkey,Matrix matrix2volkey,int nvoxels):
+  Samples( volume<int> vol2matrixkey,Matrix matrix2volkey,int nvoxels,int nmeasures):
     opts(xfibresOptions::getInstance()),m_vol2matrixkey(vol2matrixkey),m_matrix2volkey(matrix2volkey){
     
     m_beenhere=m_vol2matrixkey*0;
@@ -172,6 +177,13 @@ public:
     m_S0samples=0;
     m_lik_energy.ReSize(nsamples,nvoxels);
     
+    // m_mean_sig.ReSize(nmeasures,nvoxels);
+//     m_mean_sig=0;
+//     m_std_sig.ReSize(nmeasures,nvoxels);
+//     m_std_sig=0;
+//     m_sig2.ReSize(nmeasures,nvoxels);
+//     m_sig2=0;
+
     m_mean_dsamples.ReSize(nvoxels);
     m_mean_dsamples=0;
     m_mean_S0samples.ReSize(nvoxels);
@@ -222,6 +234,12 @@ public:
       m_sum_f[f]+=mfib.fibres()[f].get_f();
       m_sum_lam[f]+=mfib.fibres()[f].get_lam();
     }
+
+//     for(int i=1;i<=m_sig2.Nrows();i++){
+//       float sig=mfib.get_signal()(i);
+//       m_mean_sig(i,vox)+=sig;
+//       m_sig2(i,vox)+=(sig*sig);
+//     }
   }
   
   void finish_voxel(int vox){
@@ -314,6 +332,7 @@ public:
 	cart2sph(vec,th,ph);
 	if(f==0)
 	  mfibre.addfibre(th,ph,m_mean_fsamples[f](voxbest),1,false);//no a.r.d. on first fibre
+	//mfibre.addfibre(th,ph,m_mean_fsamples[f](voxbest),1,true);//a.r.d. on first fibre
 	else
 	  mfibre.addfibre(th,ph,m_mean_fsamples[f](voxbest),1,true);
 
@@ -347,7 +366,7 @@ public:
     save_volume4D(tmp,logger.appendDir("S0samples"));
     tmp.setmatrix(m_lik_energy,mask);
     save_volume4D(tmp,logger.appendDir("lik_energy"));
-    
+
     //Sort the output based on mean_fsamples
     // 
     vector<Matrix> sumf;
@@ -511,7 +530,8 @@ class xfibresVoxelManager{
     m_multifibre.set_d(D);
     m_multifibre.set_S0(S0);
     if(opts.nfibres.value()>0){
-      m_multifibre.addfibre(th,ph,f,1,false);//no a.r.d. on first fibre
+      //m_multifibre.addfibre(th,ph,f,1,false);//no a.r.d. on first fibre
+      m_multifibre.addfibre(th,ph,f,1,true);// a.r.d. on first fibre
       for(int i=2; i<=opts.nfibres.value(); i++){
 	 m_multifibre.addfibre();
       }
@@ -566,6 +586,8 @@ class xfibresVoxelManager{
 int main(int argc, char *argv[])
 {
   try{  
+    cout<<"running SAAD'S version of xfibre"<<endl;
+
     // Setup logging:
     Log& logger = LogSingleton::getInstance();
     xfibresOptions& opts = xfibresOptions::getInstance();
@@ -577,6 +599,7 @@ int main(int argc, char *argv[])
     bvals=read_ascii_matrix(opts.bvalsfile.value());
     bvecs=read_ascii_matrix(opts.bvecsfile.value());
     if(bvecs.Nrows()>3) bvecs=bvecs.t();
+    if(bvals.Nrows()>1) bvals=bvals.t();
     for(int i=1;i<=bvecs.Ncols();i++){
       float tmpsum=sqrt(bvecs(1,i)*bvecs(1,i)+bvecs(2,i)*bvecs(2,i)+bvecs(3,i)*bvecs(3,i));
       if(tmpsum!=0){
@@ -600,7 +623,7 @@ int main(int argc, char *argv[])
     ColumnVector alpha, beta;
     Amat=form_Amat(bvecs,bvals);
     cart2sph(bvecs,alpha,beta);
-    Samples samples(vol2matrixkey,matrix2volkey,datam.Ncols());
+    Samples samples(vol2matrixkey,matrix2volkey,datam.Ncols(),datam.Nrows());
     
     for(int vox=1;vox<=datam.Ncols();vox++){
       cout <<vox<<"/"<<datam.Ncols()<<endl;