diff --git a/Makefile b/Makefile
index ebce8175a55a82205d6f42cbfefad78c3c684530..209ae99238d9182765b9d1f670ba5d9ee330ba72 100644
--- a/Makefile
+++ b/Makefile
@@ -3,8 +3,10 @@
 all: mkdirs 
 	cd FFTlib		; $(MAKE)
 	cd fdelmodc		; $(MAKE) install
+	cd fdelmodc3D		; $(MAKE) install
 	cd utils		; $(MAKE) install
 	cd marchenko		; $(MAKE) install
+	cd marchenko3D		; $(MAKE) install
 	cd corrvir		; $(MAKE) install
 	cd raytime		; $(MAKE) install
 	cd MDD			; $(MAKE) install
@@ -17,8 +19,10 @@ mkdirs:
 clean:
 	cd FFTlib 		; $(MAKE) $@
 	cd fdelmodc		; $(MAKE) $@
+	cd fdelmodc3D		; $(MAKE) $@
 	cd utils		; $(MAKE) $@
 	cd marchenko		; $(MAKE) $@
+	cd marchenko3D		; $(MAKE) $@
 	cd corrvir		; $(MAKE) $@
 	cd raytime		; $(MAKE) $@
 	cd MDD			; $(MAKE) $@
@@ -26,8 +30,10 @@ clean:
 realclean:
 	cd FFTlib 		; $(MAKE) $@
 	cd fdelmodc		; $(MAKE) $@
+	cd fdelmodc3D		; $(MAKE) $@
 	cd utils		; $(MAKE) $@
 	cd marchenko		; $(MAKE) $@
+	cd marchenko3D		; $(MAKE) $@
 	cd corrvir		; $(MAKE) $@
 	cd raytime		; $(MAKE) $@
 	cd MDD			; $(MAKE) $@
diff --git a/fdelmodc3D/fdelmodc3D b/fdelmodc3D/fdelmodc3D
index 7fd32fbba9bd29bbbedf15be688a851a8c6c8fee..cdfa636fc5c87c6ed8961e34db637db53fb08adb 100755
Binary files a/fdelmodc3D/fdelmodc3D and b/fdelmodc3D/fdelmodc3D differ
diff --git a/marchenko/demo/WS15/README.5 b/marchenko/demo/WS15/README.5
new file mode 100644
index 0000000000000000000000000000000000000000..cec5287d390ef6817ebc5dc5c5cd75920c86cd48
--- /dev/null
+++ b/marchenko/demo/WS15/README.5
@@ -0,0 +1,19 @@
+To generate the raytimes and the estimated amplitudes for the virtual source and receivers, run:
+
+rayvsp.scr
+
+After the raytimes have been determined you can create the source function of the homogeneous Green's function by running:
+
+marchenko_ray.scr
+
+A reference Green's function can be modeled by running
+
+homg_reference.scr
+
+To view the retrieved and reference Green's function, run:
+
+homgview.scr
+
+Or to convert the data to eps and png, run:
+
+homgpng.scr
diff --git a/marchenko/demo/twoD/homg_reference.scr b/marchenko/demo/twoD/homg_reference.scr
new file mode 100755
index 0000000000000000000000000000000000000000..6c00a6c9954680bf908518e615f724e65dcb916d
--- /dev/null
+++ b/marchenko/demo/twoD/homg_reference.scr
@@ -0,0 +1,43 @@
+#!/bin/bash
+
+export PATH=$HOME/src/OpenSource/bin:$PATH:
+
+dx=2.5
+dt=0.0005
+
+makewave fp=20 dt=$dt file_out=wave.su nt=4096 t0=0.1 scale=1
+
+
+export KMP_AFFINITY=disabled
+export OMP_NUM_THREADS=16
+
+
+	
+fdelmodc \
+	file_cp=syncl_cp.su ischeme=1 iorder=4 \
+   	file_den=syncl_ro.su \
+   	file_src=wave.su \
+   	file_rcv=homg_ref.su \
+   	src_type=1 \
+	src_orient=1 \
+	src_injectionrate=1 \
+   	rec_type_vz=0 \
+   	rec_type_p=1 \
+   	rec_int_vz=2 \
+	rec_delay=0.1 \
+   	dtrcv=0.004 \
+   	verbose=2 \
+   	tmod=2.2 \
+   	dxrcv=10.0 \
+   	xrcv1=-3000 xrcv2=3000 \
+   	zrcv1=0 zrcv2=0 \
+   	xsrc=0 zsrc=1000 \
+	file_snap=homg_ref.su \
+	xsnap1=0 xsnap2=0 dxsnap=10 \
+	zsnap1=100 zsnap2=1900 dzsnap=10 \
+	tsnap=0.1 tsnap2=2.148 dtsnap=0.004 \
+   	ntaper=200 npml=100 \
+   	left=2 right=2 top=2 bottom=2
+
+sushw < homg_ref_sp.su key=ntr a=0 > tmp.su
+mv tmp.su homg_ref_sp.su
diff --git a/marchenko/demo/twoD/homgpng.scr b/marchenko/demo/twoD/homgpng.scr
new file mode 100755
index 0000000000000000000000000000000000000000..dfd55d07e3021830ef73b8083acb56445ac37ff8
--- /dev/null
+++ b/marchenko/demo/twoD/homgpng.scr
@@ -0,0 +1,6 @@
+#!/bin/bash -x
+
+suwind < homg_rayz.su key=fldr min=513 | supsimage title='Retrieved' perc=99 > homg_retrieved.eps
+/usr/bin/convert -quality 90 -antialias homg_retrieved.eps homg_retrieved.png
+supsimage < homg_ref_sp.su title='Reference' perc=99 > homg_reference.eps
+/usr/bin/convert -quality 90 -antialias homg_reference.eps homg_reference.png
diff --git a/marchenko/demo/twoD/homgview.scr b/marchenko/demo/twoD/homgview.scr
new file mode 100755
index 0000000000000000000000000000000000000000..d5efb5982a5fb8782492d28074942388454705db
--- /dev/null
+++ b/marchenko/demo/twoD/homgview.scr
@@ -0,0 +1,4 @@
+#!/bin/bash -x
+
+suwind < homg_rayz.su key=fldr min=513 | suximage title='Retrieved' perc=99 &
+suximage < homg_ref_sp.su title='Reference' perc=99 &
diff --git a/marchenko/demo/twoD/marchenko_ray.scr b/marchenko/demo/twoD/marchenko_ray.scr
new file mode 100755
index 0000000000000000000000000000000000000000..ad12049c69250e60e813f0a1d04d0ff78b5b7c38
--- /dev/null
+++ b/marchenko/demo/twoD/marchenko_ray.scr
@@ -0,0 +1,22 @@
+#!/bin/bash -x
+
+export PATH=$HOME/src/OpenSource/bin:$PATH:
+
+makewave w=fw fmin=0 flef=5 frig=80 fmax=100 nt=1024 dt=0.004 t0=0.0 scale=0 scfft=1 file_out=wavesrc.su
+makewave w=g2 fp=25 nt=1024 dt=0.004 t0=0.0 scale=1 scfft=0 file_out=wavefp.su
+
+export OMP_NUM_THREADS=40
+
+#apply the Marchenko algorithm
+marchenko3D file_shot=shots/refl_rp.su verbose=1 \
+    tap=0 niter=6 hw=8 shift=7 smooth=3 geomspread=1 ampest=1 \
+    file_ray=raysrc_time.su file_amp=raysrc_amp.su file_wav=wavesrc.su \
+    file_green=greensrc.su
+
+marchenko3D file_shot=shots/refl_rp.su verbose=1 file_inp=greensrc.su \
+    tap=0 niter=6 hw=8 shift=7 smooth=3 geomspread=1 ampest=1 \
+    file_ray=rayz_time.su file_amp=rayz_amp.su file_wav=wavefp.su \
+    file_homg=homg_rayz.su file_green=green_rayz.su
+
+sushw < homg_rayz.su key=ntr a=0 > tmp.su
+mv tmp.su homg_rayz.su
diff --git a/marchenko/demo/twoD/rayvsp.scr b/marchenko/demo/twoD/rayvsp.scr
new file mode 100755
index 0000000000000000000000000000000000000000..f822d5fec0f8d710ee579be5920ccb38808db089
--- /dev/null
+++ b/marchenko/demo/twoD/rayvsp.scr
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+export PATH=$HOME/src/OpenSource/bin:$PATH:
+
+Raytime \
+    verbose=1 useT2=1 geomspread=1 file_rcv=raysrc.su \
+    zsrc=1000 xrcv1=-3000 xrcv2=3000 dxrcv=10 file_cp=syncl_cp.su zrcv1=0 zrcv2=0 \
+    xsrc=0 nxshot=1 nzshot=1 dxshot=10 dzshot=10 nraystep=25 method=fd
+
+Raytime \
+    verbose=1 useT2=1 geomspread=1 file_rcv=rayz.su \
+    zsrc=100 xrcv1=-3000 xrcv2=3000 dxrcv=10 file_cp=syncl_cp.su zrcv1=0 zrcv2=0 \
+    xsrc=0 nxshot=1 nzshot=181 dxshot=10 dzshot=10 nraystep=25 method=fd