diff --git a/Makefile b/Makefile
index 917bf1e6b53506e0a99da2fff34bc3f83cc1ffa3..30c69e0ec4d8f69b983f9e26469679a31ae0dac1 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,10 @@
 include $(FSLCONFDIR)/default.mk
 
+ifeq ($(COMPILE_GPU), 1)
+	COMPILE_WITH_GPU=libbedpostx_cuda.so xfibres_gpu.o splitter_gpu splitter_multigpu
+	SCRIPTS_GPU=CUDA/bedpostx_gpu CUDA/bedpostx_multigpu_SGE CUDA/bedpostx_multigpu_LSF
+endif
+
 PROJNAME = fdt
 
 USRINCFLAGS = -I${INC_NEWMAT} -I${INC_NEWRAN} -I${INC_CPROB} -I${INC_PROB} -I${INC_BOOST} -I${INC_ZLIB}
@@ -28,6 +33,10 @@ DTIGEN=dtigen
 RARNG=rearrange
 XPRED=xfibres_pred
 RUBIX=rubix
+LIBBEDPOSTX_CUDA=libbedpostx_cuda.so
+XFIBRES_GPU=xfibres_gpu
+SPLITTERGPU=splitter_gpu
+SPLITTERMULTIGPU=splitter_multigpu
 
 
 DTIFITOBJS=dtifit.o dtifitOptions.o diffmodels.o Bingham_Watson_approx.o
@@ -51,14 +60,17 @@ DTIGENOBJS=dtigen.o
 RARNGOBJS=rearrange.o
 XPREDOBJS=xfibres_pred.o
 RUBIXOBJS=rubix.o diffmodels.o rubixvox.o rubixoptions.o Bingham_Watson_approx.o
+XFIBRES_GPUOBJS=xfibres_gpu.o xfibresoptions.o 
+SPLITTERGPUOBJS=splitter_gpu.o xfibres_gpu.o xfibresoptions.o diffmodels.o Bingham_Watson_approx.o 
+SPLITTERMULTIGPUOBJS=splitter_multigpu.o xfibres_gpu.o xfibresoptions.o diffmodels.o Bingham_Watson_approx.o 
 
 SGEBEDPOST = bedpost 
 SGEBEDPOSTX = bedpostx bedpostx_postproc.sh bedpostx_preproc.sh bedpostx_single_slice.sh bedpostx_datacheck
 
-SCRIPTS = eddy_correct zeropad maskdyads probtrack fdt_rotate_bvecs ${SGEBEDPOST} ${SGEBEDPOSTX} 
+SCRIPTS = eddy_correct zeropad maskdyads probtrack fdt_rotate_bvecs ${SGEBEDPOST} ${SGEBEDPOSTX} ${SCRIPTS_GPU}
 FSCRIPTS = correct_and_average ocmr_preproc
 
-XFILES = dtifit ccops medianfilter make_dyadic_vectors vecreg xfibres probtrackx pvmfit dtigen
+XFILES = dtifit ccops medianfilter make_dyadic_vectors vecreg xfibres probtrackx pvmfit dtigen ${COMPILE_WITH_GPU}
 
 FXFILES = reord_OM sausages replacevols fdt_matrix_ops indexer rearrange xfibres_pred
 
@@ -138,4 +150,16 @@ ${XPRED}: 	${XPREDOBJS}
 		   ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${XPREDOBJS} ${DLIBS}
 
 ${RUBIX}: 	${RUBIXOBJS}
-		   ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${RUBIXOBJS} ${DLIBS}
\ No newline at end of file
+		   ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${RUBIXOBJS} ${DLIBS}
+
+${LIBBEDPOSTX_CUDA}: 
+		${CUDA}/bin/nvcc --shared --compiler-options '-fPIC' -o CUDA/libbedpostx_cuda.so CUDA/init_gpu.cu CUDA/samples.cu CUDA/diffmodels.cu CUDA/runmcmc.cu  CUDA/xfibres_gpu.cu -O3 -arch sm_20  -lcudart -lcuda -lcurand -I. -L${CUDA}/lib64 -L${CUDA}/lib -ICUDA/options -I${FSLDIR}/extras/include/newmat -I${FSLDIR}/include -I${CUDA}/include/thrust -I${FSLDIR}/include 
+
+${XFIBRES_GPU}: ${XFIBRES_GPUOBJS}
+		   ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${XFIBRES_GPUOBJS} ${DLIBS} -lbedpostx_cuda -LCUDA -I${FSLDIR}/extras/include/newmat -I${FSLDIR}/include
+
+${SPLITTERGPU}:	   ${SPLITTERGPUOBJS}
+		   ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${SPLITTERGPUOBJS} ${DLIBS} -lcudart -lcuda -lcurand -lbedpostx_cuda -LCUDA -L${CUDA}/lib64 -L${CUDA}/lib
+
+${SPLITTERMULTIGPU}:	   ${SPLITTERMULTIGPUOBJS}
+		   ${CXX} ${CXXFLAGS} ${LDFLAGS} -o $@ ${SPLITTERMULTIGPUOBJS} ${DLIBS} -lcudart -lcuda -lcurand -lbedpostx_cuda -LCUDA -L${CUDA}/lib64 -L${CUDA}/lib