diff --git a/alib2/makefile b/alib2/makefile
index 96101b6a7b29b9fe30efffbc8f2c7817bf4134d2..f7b812d12c6c678cb1ff4bea2491d438a92e3482 100644
--- a/alib2/makefile
+++ b/alib2/makefile
@@ -1,52 +1,56 @@
 SHELL:=/bin/bash
 LIBRARY:=libalib2.so 
 TESTBIN:=alib2test
-CXXFLAGS:= -std=c++11 -O2 -g -c -Wall -pedantic -Wextra -fPIC -I/usr/include/libxml2/ 
+
 LDFLAGS:= -shared -lxml2
-TEST_CXXFLAGS:= -std=c++11 -O2 -g -c -Wall -pedantic -Wextra -I../alib2/src -I/usr/include/libxml2/ 
 TEST_LDFLAGS:= -L../alib2/lib -lxml2 -lalib2 -lcppunit -Wl,-rpath,.
 
-SOURCES:=$(shell find src/ -name *cpp)
-OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(SOURCES))
-DEPENDENCIES:=$(patsubst src/%.cpp, obj/%.d, $(SOURCES))
-
-TEST_SOURCES:=$(shell find test-src/ -name *cpp)
-TEST_OBJECTS:=$(patsubst test-src/%.cpp, test-obj/%.o, $(TEST_SOURCES))
-TEST_DEPENDENCIES:=$(patsubst test-src/%.cpp, test-obj/%.d, $(TEST_SOURCES))
+OBJECTS:=$(patsubst src/%.cpp, obj/%.o, $(shell find src/ -name *cpp))
+TEST_OBJECTS:=$(patsubst test-src/%.cpp, test-obj/%.o, $(shell find test-src/ -name *cpp))
 
 .PHONY: all build test clean
-.PRECIOUS: $(DEPENDENCIES) $(TEST_DEPENDENCIES)
 
 all: build test
 
-lib/$(LIBRARY): $(OBJECTS)
+
+
+lib/$(LIBRARY): obj/
 	mkdir -p lib;
-	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS);
+	$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
 
-obj/%.d:
+obj/makefile:
 	mkdir -p $(dir $@)
-	echo "$(shell sha1sum <<< "$@" | sed "s/  -//g") = \$$(shell \$$(CXX) -MM \$$(CXXFLAGS) $(patsubst obj/%.d,src/%.cpp, $@) | sed \"s/.*://g;s/\\\\\\\\//g\")" >> $@
-	echo "$(patsubst %.d,%.o, $@): \$$($(shell sha1sum <<< "$@" | sed "s/  -//g"))" >> $@
-	echo "	\$$(CXX) \$$(CXXFLAGS) \$$< -o $(patsubst %.d,%.o, $@)" >> $@
+	cp objMakefile $@
+
+obj/: FORCE | obj/makefile
+	$(MAKE) -C $@
+
+
 
 build: lib/$(LIBRARY)
 
-test-bin/$(TESTBIN): $(TEST_OBJECTS) lib/$(LIBRARY)
-	mkdir -p test-bin; \
-	$(CXX) $(TEST_OBJECTS) -o $@ $(TEST_LDFLAGS); \
 
-test-obj/%.d:
+
+test-bin/$(TESTBIN): test-obj/ lib/$(LIBRARY)
+	mkdir -p test-bin;
+	$(CXX) $(TEST_OBJECTS) -o $@ $(TEST_LDFLAGS)
+
+test-obj/makefile:
 	mkdir -p $(dir $@)
-	echo "$(shell sha1sum <<< "$@" | sed "s/  -//g") = \$$(shell \$$(CXX) -MM \$$(TEST_CXXFLAGS) $(patsubst test-obj/%.d,test-src/%.cpp, $@) | sed \"s/.*://g;s/\\\\\\\\//g\")" >> $@
-	echo "$(patsubst %.d,%.o, $@): \$$($(shell sha1sum <<< "$@" | sed "s/  -//g"))" >> $@
-	echo "	\$$(CXX) \$$(TEST_CXXFLAGS) \$$< -o $(patsubst %.d,%.o, $@)" >> $@
+	cp testMakefile $@
+
+test-obj/: FORCE | test-obj/makefile
+	$(MAKE) -C $@
+
+
 
 test: test-bin/$(TESTBIN)
 	LD_LIBRARY_PATH=lib test-bin/$(TESTBIN)
 
+
+
 clean:
 	$(RM) -r *.o *.d lib obj test-bin test-obj
 
--include $(DEPENDENCIES)
--include $(TEST_DEPENDENCIES)
+FORCE:
 
diff --git a/alib2/objMakefile b/alib2/objMakefile
new file mode 100644
index 0000000000000000000000000000000000000000..91ec62602ebdab4ea8bcbf2c6c44ea5fea5532bb
--- /dev/null
+++ b/alib2/objMakefile
@@ -0,0 +1,33 @@
+SHELL:=/bin/bash
+SRCDIR:=
+DEPTH:=
+
+CXXFLAGS:= -std=c++11 -O2 -g -c -Wall -pedantic -Wextra -fPIC -I/usr/include/libxml2/
+
+SOURCES:= $(shell find ../$(DEPTH)src/$(SRCDIR) -maxdepth 1 -type f -name "*.cpp")
+DEPENDENCIES:= $(patsubst ../$(DEPTH)src/$(SRCDIR)%.cpp, ../$(DEPTH)obj/$(SRCDIR)%.d, $(SOURCES))
+OBJECTS:= $(patsubst %.d, %.o, $(DEPENDENCIES))
+SOURCES_DIRS:= $(shell find ../$(DEPTH)src/$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)
+OBJECTS_DIRS:= $(patsubst ../$(DEPTH)src/$(SRCDIR)%, %/, $(SOURCES_DIRS))
+OBJECTS_DIRS_MAKEFILES:= $(patsubst %, %makefile, $(OBJECTS_DIRS))
+
+.PHONY: all
+.PRECIOUS: $(DEPENDECIES) $(OBJECTS_DIRS_MAKEFILES)
+
+all: $(OBJECTS_DIRS) $(OBJECTS)
+
+%.d:
+	@echo "$(shell sha1sum <<< "$@" | sed "s/  -//g") = \$$(shell \$$(CXX) -MM \$$(CXXFLAGS) $(patsubst ../$(DEPTH)obj/$(SRCDIR)%.d,../$(DEPTH)src/$(SRCDIR)%.cpp, $@) | sed \"s/.*://g;s/\\\\\\\\//g\")" >> $@
+	@echo "$(patsubst %.d,%.o, $@): \$$($(shell sha1sum <<< "$@" | sed "s/  -//g"))" >> $@
+	@echo "	\$$(CXX) \$$(CXXFLAGS) \$$< -o $(patsubst %.d,%.o, $@)" >> $@
+
+%/makefile:
+	mkdir -p $(dir $@)
+	cp makefile $@
+
+%/: FORCE | %/makefile
+	$(MAKE) -C $@ SRCDIR=$(SRCDIR)$(notdir $(patsubst %/, %, $@))/ DEPTH=$(DEPTH)../
+
+FORCE:
+
+-include $(DEPENDENCIES)
diff --git a/alib2/testMakefile b/alib2/testMakefile
new file mode 100644
index 0000000000000000000000000000000000000000..670c4bd889472716d6059a73973517316df1598f
--- /dev/null
+++ b/alib2/testMakefile
@@ -0,0 +1,33 @@
+SHELL:=/bin/bash
+SRCDIR:=
+DEPTH:=
+
+CXXFLAGS:= -std=c++11 -Og -g -c -Wall -pedantic -Wextra -I../$(DEPTH)src/ -I/usr/include/libxml2/ 
+
+SOURCES:= $(shell find ../$(DEPTH)test-src/$(SRCDIR) -maxdepth 1 -type f -name "*.cpp")
+DEPENDENCIES:= $(patsubst ../$(DEPTH)test-src/$(SRCDIR)%.cpp, ../$(DEPTH)test-obj/$(SRCDIR)%.d, $(SOURCES))
+OBJECTS:= $(patsubst %.d, %.o, $(DEPENDENCIES))
+SOURCES_DIRS:= $(shell find ../$(DEPTH)test-src/$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)
+OBJECTS_DIRS:= $(patsubst ../$(DEPTH)test-src/$(SRCDIR)%, %/, $(SOURCES_DIRS))
+OBJECTS_DIRS_MAKEFILES:= $(patsubst %, %makefile, $(OBJECTS_DIRS))
+
+.PHONY: all
+.PRECIOUS: $(DEPENDECIES) $(OBJECTS_DIRS_MAKEFILES)
+
+all: $(OBJECTS_DIRS) $(OBJECTS)
+
+%.d: $(OBJECT_DIRS)
+	@echo "$(shell sha1sum <<< "$@" | sed "s/  -//g") = \$$(shell \$$(CXX) -MM \$$(CXXFLAGS) $(patsubst ../$(DEPTH)test-obj/$(SRCDIR)%.d,../$(DEPTH)test-src/$(SRCDIR)%.cpp, $@) | sed \"s/.*://g;s/\\\\\\\\//g\")" >> $@
+	@echo "$(patsubst %.d,%.o, $@): \$$($(shell sha1sum <<< "$@" | sed "s/  -//g"))" >> $@
+	@echo "	\$$(CXX) \$$(CXXFLAGS) \$$< -o $(patsubst %.d,%.o, $@)" >> $@
+
+%/makefile:
+	mkdir -p $(dir $@)
+	cp makefile $@
+
+%/: FORCE | %/makefile
+	$(MAKE) -C $@ SRCDIR=$(SRCDIR)$(notdir $(patsubst %/, %, $@))/ DEPTH=$(DEPTH)../
+
+FORCE:
+
+-include $(DEPENDENCIES)