diff --git a/aconversions/Makefile b/aconversions/Makefile
deleted file mode 100644
index 4d5c0a5b0fb078353029bcc565cf50417b609fc7..0000000000000000000000000000000000000000
--- a/aconversions/Makefile
+++ /dev/null
@@ -1,25 +0,0 @@
-OUT_DIR = bin
-export ALIB_SRC = $(realpath ../alib/src)
-export ALIB_LIB = $(realpath ../alib/lib)
-export DERLIB_SRC = $(realpath ../libaderivation/src)
-export DERLIB_LIB = $(realpath ../libaderivation/lib)
-export RELIB_SRC = $(realpath ../libaregexptree/src)
-export RELIB_LIB = $(realpath ../libaregexptree/lib)
-export BIN_DIR = $(addsuffix /$(OUT_DIR), $(realpath .))
-
-export CXX=g++
-export CXXFLAGS=-O2 -g -std=c++11 -c -Wall -pedantic -I/usr/include/libxml2 -I$(ALIB_SRC) -I$(DERLIB_SRC) -I$(RELIB_SRC)
-export LD=g++
-export LDFLAGS=-L$(ALIB_LIB) -L$(DERLIB_LIB) -L$(RELIB_LIB) -lalib -laderivation -laregexptree
-
-.PHONY: clean
-
-all:
-	@mkdir -p $(OUT_DIR)
-	@$(MAKE) -C src/conversions
-
-clean:
-	@echo "[Clean] Cleaning up"
-	@$(MAKE) -C src/conversions clean
-	@rm -f $(OUT_DIR)/*
-	@rm -rf $(OUT_DIR)
\ No newline at end of file
diff --git a/aconversions/makefile b/aconversions/makefile
new file mode 100644
index 0000000000000000000000000000000000000000..61302d97d7a00421ccd1b406744397d5ff7e1e16
--- /dev/null
+++ b/aconversions/makefile
@@ -0,0 +1,26 @@
+BIN_DIR = bin
+SRC_DIR = src
+
+CONVERSIONS = fa2re fa2rg re2fa re2rg rg2fa rg2re
+EXCEPTIONS = exception
+
+SUBDIRS_WITH_MAKE = $(dir $(wildcard */makefile))
+
+.PHONY: $(CONVERSIONS)
+
+all: $(CORE_LIB) $(SUBDIRS_LIBS) $(SUBDIRS_BINS) copy
+
+$(CONVERSIONS):
+	$(MAKE) -C $(SRC_DIR)/$@
+
+clean:
+	for dir in $(addprefix $(SRC_DIR)/, $(CONVERSIONS)); do \
+		$(MAKE) -C $$dir clean; \
+	done
+
+copy: $(CONVERSIONS)
+	mkdir -p $(BIN_DIR)
+	rm -rf $(BIN_DIR)/*
+	for dir in $(addprefix $(SRC_DIR)/, $(CONVERSIONS)); do \
+		cp $$dir/bin/* $(BINFOLDER); \
+	done
diff --git a/aconversions/src/conversions/Makefile b/aconversions/src/conversions/Makefile
deleted file mode 100644
index d8910754dcee61f5dee626eb227de1e88041f5f8..0000000000000000000000000000000000000000
--- a/aconversions/src/conversions/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-CONVERSIONS_DIRS = fa2re fa2rg re2fa re2rg rg2fa rg2re
-
-.PHONY: clean $(CONVERSIONS_DIRS)
-
-
-all: $(CONVERSIONS_DIRS) 
-
-$(CONVERSIONS_DIRS):
-	@$(MAKE) -C $@
-
-clean:
-	@$(MAKE) -C fa2rg/ clean
-	@$(MAKE) -C fa2re/ clean
-	@$(MAKE) -C re2fa/ clean
-	@$(MAKE) -C re2rg/ clean
-	@$(MAKE) -C rg2fa/ clean
-	@$(MAKE) -C rg2re/ clean
\ No newline at end of file
diff --git a/aconversions/src/utils/ConversionException.cpp b/aconversions/src/exception/ConversionException.cpp
similarity index 100%
rename from aconversions/src/utils/ConversionException.cpp
rename to aconversions/src/exception/ConversionException.cpp
diff --git a/aconversions/src/utils/ConversionException.h b/aconversions/src/exception/ConversionException.h
similarity index 100%
rename from aconversions/src/utils/ConversionException.h
rename to aconversions/src/exception/ConversionException.h
diff --git a/aconversions/src/conversions/fa2re/AbstractFAtoREConverter.cpp b/aconversions/src/fa2re/AbstractFAtoREConverter.cpp
similarity index 100%
rename from aconversions/src/conversions/fa2re/AbstractFAtoREConverter.cpp
rename to aconversions/src/fa2re/AbstractFAtoREConverter.cpp
diff --git a/aconversions/src/conversions/fa2re/AbstractFAtoREConverter.h b/aconversions/src/fa2re/AbstractFAtoREConverter.h
similarity index 100%
rename from aconversions/src/conversions/fa2re/AbstractFAtoREConverter.h
rename to aconversions/src/fa2re/AbstractFAtoREConverter.h
diff --git a/aconversions/src/conversions/fa2re/BrzozowskiAlgebraic.cpp b/aconversions/src/fa2re/BrzozowskiAlgebraic.cpp
similarity index 100%
rename from aconversions/src/conversions/fa2re/BrzozowskiAlgebraic.cpp
rename to aconversions/src/fa2re/BrzozowskiAlgebraic.cpp
diff --git a/aconversions/src/conversions/fa2re/BrzozowskiAlgebraic.h b/aconversions/src/fa2re/BrzozowskiAlgebraic.h
similarity index 100%
rename from aconversions/src/conversions/fa2re/BrzozowskiAlgebraic.h
rename to aconversions/src/fa2re/BrzozowskiAlgebraic.h
diff --git a/aconversions/src/conversions/fa2re/Makefile b/aconversions/src/fa2re/Makefile
similarity index 100%
rename from aconversions/src/conversions/fa2re/Makefile
rename to aconversions/src/fa2re/Makefile
diff --git a/aconversions/src/conversions/fa2re/StateElimination.cpp b/aconversions/src/fa2re/StateElimination.cpp
similarity index 100%
rename from aconversions/src/conversions/fa2re/StateElimination.cpp
rename to aconversions/src/fa2re/StateElimination.cpp
diff --git a/aconversions/src/conversions/fa2re/StateElimination.h b/aconversions/src/fa2re/StateElimination.h
similarity index 100%
rename from aconversions/src/conversions/fa2re/StateElimination.h
rename to aconversions/src/fa2re/StateElimination.h
diff --git a/aconversions/src/conversions/fa2re/afa2re.brzozowski.cpp b/aconversions/src/fa2re/afa2re.brzozowski.cpp
similarity index 100%
rename from aconversions/src/conversions/fa2re/afa2re.brzozowski.cpp
rename to aconversions/src/fa2re/afa2re.brzozowski.cpp
diff --git a/aconversions/src/conversions/fa2re/afa2re.elimination.cpp b/aconversions/src/fa2re/afa2re.elimination.cpp
similarity index 100%
rename from aconversions/src/conversions/fa2re/afa2re.elimination.cpp
rename to aconversions/src/fa2re/afa2re.elimination.cpp
diff --git a/aconversions/src/conversions/fa2rg/AbstractFAtoRGConverter.cpp b/aconversions/src/fa2rg/AbstractFAtoRGConverter.cpp
similarity index 100%
rename from aconversions/src/conversions/fa2rg/AbstractFAtoRGConverter.cpp
rename to aconversions/src/fa2rg/AbstractFAtoRGConverter.cpp
diff --git a/aconversions/src/conversions/fa2rg/AbstractFAtoRGConverter.h b/aconversions/src/fa2rg/AbstractFAtoRGConverter.h
similarity index 100%
rename from aconversions/src/conversions/fa2rg/AbstractFAtoRGConverter.h
rename to aconversions/src/fa2rg/AbstractFAtoRGConverter.h
diff --git a/aconversions/src/conversions/fa2rg/FAtoLRGConverter.cpp b/aconversions/src/fa2rg/FAtoLRGConverter.cpp
similarity index 100%
rename from aconversions/src/conversions/fa2rg/FAtoLRGConverter.cpp
rename to aconversions/src/fa2rg/FAtoLRGConverter.cpp
diff --git a/aconversions/src/conversions/fa2rg/FAtoLRGConverter.h b/aconversions/src/fa2rg/FAtoLRGConverter.h
similarity index 100%
rename from aconversions/src/conversions/fa2rg/FAtoLRGConverter.h
rename to aconversions/src/fa2rg/FAtoLRGConverter.h
diff --git a/aconversions/src/conversions/fa2rg/FAtoRRGConverter.cpp b/aconversions/src/fa2rg/FAtoRRGConverter.cpp
similarity index 100%
rename from aconversions/src/conversions/fa2rg/FAtoRRGConverter.cpp
rename to aconversions/src/fa2rg/FAtoRRGConverter.cpp
diff --git a/aconversions/src/conversions/fa2rg/FAtoRRGConverter.h b/aconversions/src/fa2rg/FAtoRRGConverter.h
similarity index 100%
rename from aconversions/src/conversions/fa2rg/FAtoRRGConverter.h
rename to aconversions/src/fa2rg/FAtoRRGConverter.h
diff --git a/aconversions/src/conversions/fa2rg/Makefile b/aconversions/src/fa2rg/Makefile
similarity index 100%
rename from aconversions/src/conversions/fa2rg/Makefile
rename to aconversions/src/fa2rg/Makefile
diff --git a/aconversions/src/conversions/fa2rg/afa2lrg.cpp b/aconversions/src/fa2rg/afa2lrg.cpp
similarity index 100%
rename from aconversions/src/conversions/fa2rg/afa2lrg.cpp
rename to aconversions/src/fa2rg/afa2lrg.cpp
diff --git a/aconversions/src/conversions/fa2rg/afa2rg.cpp b/aconversions/src/fa2rg/afa2rg.cpp
similarity index 100%
rename from aconversions/src/conversions/fa2rg/afa2rg.cpp
rename to aconversions/src/fa2rg/afa2rg.cpp
diff --git a/aconversions/src/conversions/fa2rg/afa2rrg.cpp b/aconversions/src/fa2rg/afa2rrg.cpp
similarity index 100%
rename from aconversions/src/conversions/fa2rg/afa2rrg.cpp
rename to aconversions/src/fa2rg/afa2rrg.cpp
diff --git a/aconversions/src/macros.h b/aconversions/src/macros.h
new file mode 100644
index 0000000000000000000000000000000000000000..cdb1197e58e6abf2d4e53af0c921f28e0bcfd419
--- /dev/null
+++ b/aconversions/src/macros.h
@@ -0,0 +1,17 @@
+#ifndef MACROS_H_
+#define MACROS_H_
+
+#include <algorithm>
+#include <set>
+#include <list>
+
+namespace conversions
+{
+
+#define isInSet(x,set) ( (set).find((x)) != (set).end() )
+#define isInList(x,list) ( find(list.begin(), list.end(), x) )
+#define isKeyInMap(key,map) ( (map).find((key)) != (map).end() )
+
+} /* namespace conversions */
+
+#endif /* MACROS_H_ */
diff --git a/aconversions/src/conversions/re2fa/AbstractREtoFAConverter.cpp b/aconversions/src/re2fa/AbstractREtoFAConverter.cpp
similarity index 100%
rename from aconversions/src/conversions/re2fa/AbstractREtoFAConverter.cpp
rename to aconversions/src/re2fa/AbstractREtoFAConverter.cpp
diff --git a/aconversions/src/conversions/re2fa/AbstractREtoFAConverter.h b/aconversions/src/re2fa/AbstractREtoFAConverter.h
similarity index 100%
rename from aconversions/src/conversions/re2fa/AbstractREtoFAConverter.h
rename to aconversions/src/re2fa/AbstractREtoFAConverter.h
diff --git a/aconversions/src/conversions/re2fa/Brzozowski.cpp b/aconversions/src/re2fa/Brzozowski.cpp
similarity index 100%
rename from aconversions/src/conversions/re2fa/Brzozowski.cpp
rename to aconversions/src/re2fa/Brzozowski.cpp
diff --git a/aconversions/src/conversions/re2fa/Brzozowski.h b/aconversions/src/re2fa/Brzozowski.h
similarity index 100%
rename from aconversions/src/conversions/re2fa/Brzozowski.h
rename to aconversions/src/re2fa/Brzozowski.h
diff --git a/aconversions/src/conversions/re2fa/Glushkov.cpp b/aconversions/src/re2fa/Glushkov.cpp
similarity index 100%
rename from aconversions/src/conversions/re2fa/Glushkov.cpp
rename to aconversions/src/re2fa/Glushkov.cpp
diff --git a/aconversions/src/conversions/re2fa/Glushkov.h b/aconversions/src/re2fa/Glushkov.h
similarity index 100%
rename from aconversions/src/conversions/re2fa/Glushkov.h
rename to aconversions/src/re2fa/Glushkov.h
diff --git a/aconversions/src/conversions/re2fa/Makefile b/aconversions/src/re2fa/Makefile
similarity index 100%
rename from aconversions/src/conversions/re2fa/Makefile
rename to aconversions/src/re2fa/Makefile
diff --git a/aconversions/src/conversions/re2fa/RegExpComparator.cpp b/aconversions/src/re2fa/RegExpComparator.cpp
similarity index 100%
rename from aconversions/src/conversions/re2fa/RegExpComparator.cpp
rename to aconversions/src/re2fa/RegExpComparator.cpp
diff --git a/aconversions/src/conversions/re2fa/RegExpComparator.h b/aconversions/src/re2fa/RegExpComparator.h
similarity index 100%
rename from aconversions/src/conversions/re2fa/RegExpComparator.h
rename to aconversions/src/re2fa/RegExpComparator.h
diff --git a/aconversions/src/conversions/re2fa/Thompson.cpp b/aconversions/src/re2fa/Thompson.cpp
similarity index 100%
rename from aconversions/src/conversions/re2fa/Thompson.cpp
rename to aconversions/src/re2fa/Thompson.cpp
diff --git a/aconversions/src/conversions/re2fa/Thompson.h b/aconversions/src/re2fa/Thompson.h
similarity index 100%
rename from aconversions/src/conversions/re2fa/Thompson.h
rename to aconversions/src/re2fa/Thompson.h
diff --git a/aconversions/src/conversions/re2fa/are2fa.brzozowski.cpp b/aconversions/src/re2fa/are2fa.brzozowski.cpp
similarity index 100%
rename from aconversions/src/conversions/re2fa/are2fa.brzozowski.cpp
rename to aconversions/src/re2fa/are2fa.brzozowski.cpp
diff --git a/aconversions/src/conversions/re2fa/are2fa.glushkov.cpp b/aconversions/src/re2fa/are2fa.glushkov.cpp
similarity index 100%
rename from aconversions/src/conversions/re2fa/are2fa.glushkov.cpp
rename to aconversions/src/re2fa/are2fa.glushkov.cpp
diff --git a/aconversions/src/conversions/re2fa/are2fa.thompson.cpp b/aconversions/src/re2fa/are2fa.thompson.cpp
similarity index 100%
rename from aconversions/src/conversions/re2fa/are2fa.thompson.cpp
rename to aconversions/src/re2fa/are2fa.thompson.cpp
diff --git a/aconversions/src/conversions/re2rg/Makefile b/aconversions/src/re2rg/Makefile
similarity index 100%
rename from aconversions/src/conversions/re2rg/Makefile
rename to aconversions/src/re2rg/Makefile
diff --git a/aconversions/src/conversions/rg2fa/AbstractRGtoFAConverter.cpp b/aconversions/src/rg2fa/AbstractRGtoFAConverter.cpp
similarity index 100%
rename from aconversions/src/conversions/rg2fa/AbstractRGtoFAConverter.cpp
rename to aconversions/src/rg2fa/AbstractRGtoFAConverter.cpp
diff --git a/aconversions/src/conversions/rg2fa/AbstractRGtoFAConverter.h b/aconversions/src/rg2fa/AbstractRGtoFAConverter.h
similarity index 100%
rename from aconversions/src/conversions/rg2fa/AbstractRGtoFAConverter.h
rename to aconversions/src/rg2fa/AbstractRGtoFAConverter.h
diff --git a/aconversions/src/conversions/rg2fa/LRGtoFAConverter.cpp b/aconversions/src/rg2fa/LRGtoFAConverter.cpp
similarity index 100%
rename from aconversions/src/conversions/rg2fa/LRGtoFAConverter.cpp
rename to aconversions/src/rg2fa/LRGtoFAConverter.cpp
diff --git a/aconversions/src/conversions/rg2fa/LRGtoFAConverter.h b/aconversions/src/rg2fa/LRGtoFAConverter.h
similarity index 100%
rename from aconversions/src/conversions/rg2fa/LRGtoFAConverter.h
rename to aconversions/src/rg2fa/LRGtoFAConverter.h
diff --git a/aconversions/src/conversions/rg2fa/Makefile b/aconversions/src/rg2fa/Makefile
similarity index 100%
rename from aconversions/src/conversions/rg2fa/Makefile
rename to aconversions/src/rg2fa/Makefile
diff --git a/aconversions/src/conversions/rg2fa/RRGtoFAConverter.cpp b/aconversions/src/rg2fa/RRGtoFAConverter.cpp
similarity index 100%
rename from aconversions/src/conversions/rg2fa/RRGtoFAConverter.cpp
rename to aconversions/src/rg2fa/RRGtoFAConverter.cpp
diff --git a/aconversions/src/conversions/rg2fa/RRGtoFAConverter.h b/aconversions/src/rg2fa/RRGtoFAConverter.h
similarity index 100%
rename from aconversions/src/conversions/rg2fa/RRGtoFAConverter.h
rename to aconversions/src/rg2fa/RRGtoFAConverter.h
diff --git a/aconversions/src/conversions/rg2fa/alrg2fa.cpp b/aconversions/src/rg2fa/alrg2fa.cpp
similarity index 100%
rename from aconversions/src/conversions/rg2fa/alrg2fa.cpp
rename to aconversions/src/rg2fa/alrg2fa.cpp
diff --git a/aconversions/src/conversions/rg2fa/arg2fa.cpp b/aconversions/src/rg2fa/arg2fa.cpp
similarity index 100%
rename from aconversions/src/conversions/rg2fa/arg2fa.cpp
rename to aconversions/src/rg2fa/arg2fa.cpp
diff --git a/aconversions/src/conversions/rg2fa/arrg2fa.cpp b/aconversions/src/rg2fa/arrg2fa.cpp
similarity index 100%
rename from aconversions/src/conversions/rg2fa/arrg2fa.cpp
rename to aconversions/src/rg2fa/arrg2fa.cpp
diff --git a/aconversions/src/conversions/rg2re/Makefile b/aconversions/src/rg2re/Makefile
similarity index 100%
rename from aconversions/src/conversions/rg2re/Makefile
rename to aconversions/src/rg2re/Makefile
diff --git a/aconversions/src/utils/utils.h b/aconversions/src/utils/utils.h
deleted file mode 100644
index 609a4e61b10e0bda7e2aea54f66631f3fa5f504a..0000000000000000000000000000000000000000
--- a/aconversions/src/utils/utils.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef UTILS_H_
-#define UTILS_H_
-
-#include <climits>
-#include <sstream>
-#include <string>
-#include <algorithm>
-#include <set>
-#include <list>
-
-namespace conversions
-{
-
-#define isInSet(x,set) ( (set).find((x)) != (set).end())
-#define isKeyInMap(key,map) ( (map).find((key)) != (map).end())
-
-enum SuffixType
-{
-    INTEGER,
-    APOSTROPHE,
-    UNDEFINED
-};
-
-} /* namespace conversions */
-
-#endif /* UTILS_H_ */