diff --git a/.gitignore b/.gitignore
index ecb83700cb4f01a8442484d33b4b02010c8592a6..0f5a2cfd44297542c8b1bac2d1e9b277f4753bba 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@ build/cluster/*
 build/sphere/*
 build/trapping/*
 doc/build/*
+src/objects/*
\ No newline at end of file
diff --git a/src/Makefile b/src/Makefile
index 544534f8a4ef39c6e646749269d7ad3b732cc37c..3a14917951ad612c4c27ac9ba792e0572a209704 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,5 +1,6 @@
 SUBDIRS := cluster sphere trapping
 SRCDIR=$(PWD)
+OBJDIR=$(SRCDIR)/objects
 BUILDDIR=$(SRCDIR)/../build
 DOCSDIR=$(SRCDIR)/../doc
 
@@ -12,14 +13,13 @@ $(SUBDIRS):
 	$(MAKE) -C $@
 
 clean:
-	rm -f $(BUILDDIR)/cluster/*.o
-	rm -f $(BUILDDIR)/sphere/*.o
-	rm -f $(BUILDDIR)/trapping/*.o
+	rm -f $(OBJDIR)/*.o
 
 wipe:
 	rm -f $(BUILDDIR)/cluster/*
 	rm -f $(BUILDDIR)/sphere/*
 	rm -f $(BUILDDIR)/trapping/*
+	rm -f $(OBJDIR)/*.o
 	if [ -d $(DOCSDIR)/build/html ]; then rm -r $(DOCSDIR)/build/html; fi
 	if [ -d $(DOCSDIR)/build/latex ]; then rm -r $(DOCSDIR)/build/latex; fi
 
diff --git a/src/cluster/Makefile b/src/cluster/Makefile
index 1193c17e2264ab14f5d88e482266ba7027cd28df..82cd5f888bcc5ea9deb024b67116031080b856f5 100644
--- a/src/cluster/Makefile
+++ b/src/cluster/Makefile
@@ -1,46 +1,32 @@
-BUILDDIR=../../build/cluster
+ifndef BUILDDIR
+override BUILDDIR=../../build/cluster
+endif
+ifndef OBJDIR
+override OBJDIR=../objects
+endif
 
 include ../make.inc
 
 
-all: clu edfb_clu np_cluster
+F_CLU_OBJS=$(OBJDIR)/clu.o $(OBJDIR)/edfb_clu.o
 
-clu: clu.o
-	$(FC) $(FCFLAGS) -o $(BUILDDIR)/clu $(BUILDDIR)/clu.o $(LDFLAGS)
+CXX_CLU_OBJS=$(OBJDIR)/np_cluster.o $(OBJDIR)/Commons.o $(OBJDIR)/Configuration.o $(OBJDIR)/file_io.o $(OBJDIR)/Parsers.o $(OBJDIR)/sph_subs.o $(OBJDIR)/clu_subs.o $(OBJDIR)/cluster.o $(OBJDIR)/TransitionMatrix.o
 
-edfb_clu: edfb_clu.o
-	$(FC) $(FCFLAGS) -o $(BUILDDIR)/edfb_clu $(BUILDDIR)/edfb_clu.o $(LDFLAGS)
 
-np_cluster: $(BUILDDIR)/np_cluster.o $(BUILDDIR)/Commons.o $(BUILDDIR)/Configuration.o $(BUILDDIR)/file_io.o $(BUILDDIR)/Parsers.o $(BUILDDIR)/sph_subs.o $(BUILDDIR)/clu_subs.o $(BUILDDIR)/cluster.o $(BUILDDIR)/TransitionMatrix.o
-	$(CXX) $(CXXFLAGS) -o $(BUILDDIR)/np_cluster $(BUILDDIR)/np_cluster.o $(BUILDDIR)/Commons.o $(BUILDDIR)/Configuration.o $(BUILDDIR)/file_io.o $(BUILDDIR)/Parsers.o $(BUILDDIR)/sph_subs.o $(BUILDDIR)/clu_subs.o $(BUILDDIR)/cluster.o $(BUILDDIR)/TransitionMatrix.o $(CXXLDFLAGS) 
+all: $(BUILDDIR)/clu $(BUILDDIR)/edfb_clu $(BUILDDIR)/np_cluster
 
-#$(BUILDDIR)/np_cluster.o:
-#	$(CXX) $(CXXFLAGS) -c np_cluster.cpp -o $(BUILDDIR)/np_cluster.o
+$(BUILDDIR)/clu: $(OBJDIR)/clu.o
+	$(FC) $(FCFLAGS) -o $(BUILDDIR)/clu $(OBJDIR)/clu.o $(LDFLAGS)
 
-#$(BUILDDIR)/Commons.o:
-#	$(CXX) $(CXXFLAGS) -c ../libnptm/Commons.cpp -o $(BUILDDIR)/Commons.o
+$(BUILDDIR)/edfb_clu: $(OBJDIR)/edfb_clu.o
+	$(FC) $(FCFLAGS) -o $(BUILDDIR)/edfb_clu $(OBJDIR)/edfb_clu.o $(LDFLAGS)
 
-#$(BUILDDIR)/Configuration.o:
-#	$(CXX) $(CXXFLAGS) -c ../libnptm/Configuration.cpp -o $(BUILDDIR)/Configuration.o
-
-#$(BUILDDIR)/file_io.o:
-#	$(CXX) $(CXXFLAGS) -c ../libnptm/file_io.cpp -o $(BUILDDIR)/file_io.o
-
-#$(BUILDDIR)/Parsers.o:
-#	$(CXX) $(CXXFLAGS) -c ../libnptm/Parsers.cpp -o $(BUILDDIR)/Parsers.o
-
-#$(BUILDDIR)/cluster.o:
-#	$(CXX) $(CXXFLAGS) -c cluster.cpp -o $(BUILDDIR)/cluster.o
-
-#$(BUILDDIR)/clu_subs.o:
-#	$(CXX) $(CXXFLAGS) -c ../libnptm/clu_subs.cpp -o $(BUILDDIR)/clu_subs.o
-
-#$(BUILDDIR)/sph_subs.o:
-#	$(CXX) $(CXXFLAGS) -c ../libnptm/sph_subs.cpp -o $(BUILDDIR)/sph_subs.o
+$(BUILDDIR)/np_cluster: $(CXX_CLU_OBJS)
+	$(CXX) $(CXXFLAGS) -o $(BUILDDIR)/np_cluster $(CXX_CLU_OBJS) $(CXXLDFLAGS) 
 
 clean:
-	rm -f $(BUILDDIR)/*.o
+	rm -f $(F_CLU_OBJS) $(CXX_CLU_OBJS)
 
 wipe:
-	rm -f $(BUILDDIR)/clu $(BUILDDIR)/edfb_clu $(BUILDDIR)/*.o
+	rm -f $(BUILDDIR)/clu $(BUILDDIR)/edfb_clu $(F_CLU_OBJS) $(CXX_CLU_OBJS)
 
diff --git a/src/make.inc b/src/make.inc
index 57b6bbe33e52dd940dd17bb378ecf9a524891efd..9fa72d6c59a85854b30450dc6b7814393e1ea0b5 100644
--- a/src/make.inc
+++ b/src/make.inc
@@ -41,13 +41,16 @@ override CXXLDFLAGS=-L/usr/lib64 -L$(HDF5_LIB) -lhdf5 $(LDFLAGS)
 endif
 
 %.o : %.f
-	$(FC) $(FCFLAGS) -c -o $(BUILDDIR)/$@ $<
+	$(FC) $(FCFLAGS) -c -o $@ $<
 
 %.o : %.cpp
-	$(CXX) $(CXXFLAGS) -c -o $(BUILDDIR)/$@ $<
+	$(CXX) $(CXXFLAGS) -c -o $@ $<
 
-$(BUILDDIR)/%.o : %.cpp
-	$(CXX) $(CXXFLAGS) -c -o $(BUILDDIR)/$@ $<
+$(OBJDIR)/%.o : %.f
+	$(FC) $(FCFLAGS) -c -o $@ $<
 
-$(BUILDDIR)/%.o : ../libnptm/%.cpp
-	$(CXX) $(CXXFLAGS) -c -o $(BUILDDIR)/$@ ../libnptm/$<
+$(OBJDIR)/%.o : %.cpp
+	$(CXX) $(CXXFLAGS) -c -o $@ $<
+
+$(OBJDIR)/%.o : ../libnptm/%.cpp
+	$(CXX) $(CXXFLAGS) -c -o $@ $<
diff --git a/src/objects/.gitkeep b/src/objects/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/sphere/Makefile b/src/sphere/Makefile
index 497411a77c6b36d7c059d1f24397df411c2620d6..47293efc5427725e04025e4e783e97243e32acd3 100644
--- a/src/sphere/Makefile
+++ b/src/sphere/Makefile
@@ -1,49 +1,31 @@
-BUILDDIR=../../build/sphere
+ifndef BUILDDIR
+override BUILDDIR=../../build/sphere
+endif
+ifndef OBJDIR
+override OBJDIR=../objects
+endif
 
 include ../make.inc
 
-#FC=gfortran
-#FCFLAGS=-std=legacy -O3
-#LFLAGS=
-#CXX=g++
-#CXXFLAGS=-O2 -ggdb -pg -coverage
-#CXXLFLAGS=-L/usr/lib64 -lhdf5_hl -lhdf5
 
-all: edfb_sph sph np_sphere
+F_SPH_OBJS=$(OBJDIR)/edfb_sph.o $(OBJDIR)/sph.o
 
-edfb_sph: edfb_sph.o
-	$(FC) $(FCFLAGS) -o $(BUILDDIR)/edfb_sph $(BUILDDIR)/edfb_sph.o $(LDFLAGS)
+CXX_SPH_OBJS=$(OBJDIR)/np_sphere.o $(OBJDIR)/Commons.o $(OBJDIR)/Configuration.o $(OBJDIR)/file_io.o $(OBJDIR)/Parsers.o $(OBJDIR)/sph_subs.o $(OBJDIR)/sphere.o $(OBJDIR)/TransitionMatrix.o
 
-sph: sph.o
-	$(FC) $(FCFLAGS) -o $(BUILDDIR)/sph $(BUILDDIR)/sph.o $(LDFLAGS)
+all: $(BUILDDIR)/edfb_sph $(BUILDDIR)/sph $(BUILDDIR)/np_sphere
 
-np_sphere: $(BUILDDIR)/np_sphere.o $(BUILDDIR)/Commons.o $(BUILDDIR)/Configuration.o $(BUILDDIR)/file_io.o $(BUILDDIR)/Parsers.o $(BUILDDIR)/sph_subs.o $(BUILDDIR)/sphere.o $(BUILDDIR)/TransitionMatrix.o
-	$(CXX) $(CXXFLAGS) -o $(BUILDDIR)/np_sphere $(BUILDDIR)/np_sphere.o $(BUILDDIR)/Commons.o $(BUILDDIR)/Configuration.o $(BUILDDIR)/file_io.o $(BUILDDIR)/Parsers.o $(BUILDDIR)/sph_subs.o $(BUILDDIR)/sphere.o $(BUILDDIR)/TransitionMatrix.o $(CXXLDFLAGS) 
+$(BUILDDIR)/edfb_sph: $(OBJDIR)/edfb_sph.o
+	$(FC) $(FCFLAGS) -o $(BUILDDIR)/edfb_sph $(OBJDIR)/edfb_sph.o $(LDFLAGS)
 
-#$(BUILDDIR)/np_sphere.o:
-#	$(CXX) $(CXXFLAGS) -c np_sphere.cpp -o $(BUILDDIR)/np_sphere.o
+$(BUILDDIR)/sph: $(OBJDIR)/sph.o
+	$(FC) $(FCFLAGS) -o $(BUILDDIR)/sph $(OBJDIR)/sph.o $(LDFLAGS)
 
-#$(BUILDDIR)/Commons.o:
-#	$(CXX) $(CXXFLAGS) -c ../libnptm/Commons.cpp -o $(BUILDDIR)/Commons.o
-
-#$(BUILDDIR)/Configuration.o:
-#	$(CXX) $(CXXFLAGS) -c ../libnptm/Configuration.cpp -o $(BUILDDIR)/Configuration.o
-
-#$(BUILDDIR)/file_io.o:
-#	$(CXX) $(CXXFLAGS) -c ../libnptm/file_io.cpp -o $(BUILDDIR)/file_io.o
-
-#$(BUILDDIR)/Parsers.o:
-#	$(CXX) $(CXXFLAGS) -c ../libnptm/Parsers.cpp -o $(BUILDDIR)/Parsers.o
-
-#$(BUILDDIR)/sph_subs.o:
-#	$(CXX) $(CXXFLAGS) -c ../libnptm/sph_subs.cpp -o $(BUILDDIR)/sph_subs.o
-
-#$(BUILDDIR)/sphere.o:
-#	$(CXX) $(CXXFLAGS) -c sphere.cpp -o $(BUILDDIR)/sphere.o
+$(BUILDDIR)/np_sphere: $(CXX_SPH_OBJS)
+	$(CXX) $(CXXFLAGS) -o $(BUILDDIR)/np_sphere $(CXX_SPH_OBJS) $(CXXLDFLAGS) 
 
 clean:
-	rm -f $(BUILDDIR)/*.o
+	rm -f $(F_SPH_OBJS) $(CXX_SPH_OBJS)
 
 wipe:
-	rm -f $(BUILDDIR)/edfb_sph $(BUILDDIR)/sph $(BUILDDIR)/*.o
+	rm -f $(BUILDDIR)/edfb_sph $(BUILDDIR)/sph $(F_SPH_OBJS) $(CXX_SPH_OBJS)
 
diff --git a/src/trapping/Makefile b/src/trapping/Makefile
index 10d5bb8b8e39f0b69326bb1ddfc378d0d076fc75..e9f114c692b2b985c7f34f9131e3bd70d4dff9d4 100644
--- a/src/trapping/Makefile
+++ b/src/trapping/Makefile
@@ -1,55 +1,31 @@
-BUILDDIR=../../build/trapping
+ifndef BUILDDIR
+override BUILDDIR=../../build/trapping
+endif
+ifndef OBJDIR
+override OBJDIR=../objects
+endif
 
 include ../make.inc
 
-#FC=gfortran
-#FCFLAGS=-std=legacy -O3
-#LFLAGS=
-#CXX=g++
-#CXXFLAGS=-O2 -ggdb -pg -coverage
-#CXXLFLAGS=-L/usr/lib64 -lhdf5_hl -lhdf5
 
-all: frfme lffft np_trapping
+F_TRAP_OBJS=$(OBJDIR)/frfme.o $(OBJDIR)/lffft.o
 
-frfme: frfme.o
-	$(FC) $(FCFLAGS) -o $(BUILDDIR)/frfme $(BUILDDIR)/frfme.o $(LDFLAGS)
+CXX_TRAP_OBJS=$(OBJDIR)/np_trapping.o $(OBJDIR)/cfrfme.o $(OBJDIR)/clffft.o $(OBJDIR)/Parsers.o $(OBJDIR)/Commons.o $(OBJDIR)/Configuration.o $(OBJDIR)/file_io.o $(OBJDIR)/sph_subs.o $(OBJDIR)/tra_subs.o
 
-lffft: lffft.o
-	$(FC) $(FCFLAGS) -o $(BUILDDIR)/lffft $(BUILDDIR)/lffft.o $(LDFLAGS)
+all: $(BUILDDIR)/frfme $(BUILDDIR)/lffft $(BUILDDIR)/np_trapping
 
-np_trapping: $(BUILDDIR)/np_trapping.o $(BUILDDIR)/cfrfme.o $(BUILDDIR)/clffft.o $(BUILDDIR)/Parsers.o $(BUILDDIR)/Commons.o $(BUILDDIR)/Configuration.o $(BUILDDIR)/file_io.o $(BUILDDIR)/sph_subs.o $(BUILDDIR)/tra_subs.o
-	$(CXX) $(CXXFLAGS) -o $(BUILDDIR)/np_trapping $(BUILDDIR)/np_trapping.o $(BUILDDIR)/cfrfme.o $(BUILDDIR)/clffft.o $(BUILDDIR)/file_io.o $(BUILDDIR)/Parsers.o $(BUILDDIR)/Commons.o $(BUILDDIR)/Configuration.o $(BUILDDIR)/sph_subs.o $(BUILDDIR)/tra_subs.o $(CXXLDFLAGS) 
+$(BUILDDIR)/frfme: $(OBJDIR)/frfme.o
+	$(FC) $(FCFLAGS) -o $(BUILDDIR)/frfme $(OBJDIR)/frfme.o $(LDFLAGS)
 
-#$(BUILDDIR)/np_trapping.o:
-#	$(CXX) $(CXXFLAGS) np_trapping.cpp -c -o $(BUILDDIR)/np_trapping.o
+$(BUILDDIR)/lffft: $(OBJDIR)/lffft.o
+	$(FC) $(FCFLAGS) -o $(BUILDDIR)/lffft $(OBJDIR)/lffft.o $(LDFLAGS)
 
-#$(BUILDDIR)/cfrfme.o:
-#	$(CXX) $(CXXFLAGS) frfme.cpp -c -o $(BUILDDIR)/cfrfme.o
-
-#$(BUILDDIR)/clffft.o:
-#	$(CXX) $(CXXFLAGS) lffft.cpp -c -o $(BUILDDIR)/clffft.o
-
-#$(BUILDDIR)/Commons.o:
-#	$(CXX) $(CXXFLAGS) ../libnptm/Commons.cpp -c -o $(BUILDDIR)/Commons.o
-
-#$(BUILDDIR)/Configuration.o:
-#	$(CXX) $(CXXFLAGS) ../libnptm/Configuration.cpp -c -o $(BUILDDIR)/Configuration.o
-
-#$(BUILDDIR)/file_io.o:
-#	$(CXX) $(CXXFLAGS) -c ../libnptm/file_io.cpp -o $(BUILDDIR)/file_io.o
-
-#$(BUILDDIR)/Parsers.o:
-#	$(CXX) $(CXXFLAGS) ../libnptm/Parsers.cpp -c -o $(BUILDDIR)/Parsers.o
-
-#$(BUILDDIR)/sph_subs.o:
-#	$(CXX) $(CXXFLAGS) ../libnptm/sph_subs.cpp -c -o $(BUILDDIR)/sph_subs.o
-
-#$(BUILDDIR)/tra_subs.o:
-#	$(CXX) $(CXXFLAGS) ../libnptm/tra_subs.cpp -c -o $(BUILDDIR)/tra_subs.o
+$(BUILDDIR)/np_trapping: $(CXX_TRAP_OBJS)
+	$(CXX) $(CXXFLAGS) -o $(BUILDDIR)/np_trapping $(CXX_TRAP_OBJS) $(CXXLDFLAGS) 
 
 clean:
-	rm -f $(BUILDDIR)/*.o
+	rm -f $(F_TRAP_OBJS) $(CXX_TRAP_OBJS)
 
 wipe:
-	rm -f $(BUILDDIR)/frfme $(BUILDDIR)/lffft $(BUILDDIR)/*.o
+	rm -f $(BUILDDIR)/frfme $(BUILDDIR)/lffft $(F_TRAP_OBJS) $(CXX_TRAP_OBJS)