diff --git a/Parser/Makefile b/Parser/Makefile
index 27b7fb61e9b91c25611ae7d8b9b9baedaacc189a..f68b38bec061e1957117dd52a3100ec2aa7e016f 100644
--- a/Parser/Makefile
+++ b/Parser/Makefile
@@ -2,22 +2,20 @@
 all: rats jastadd
 
 ast:
-	mkdir -p spec-gen
-	for f in spec/*.rats ; do f=$$(basename "$$f"); grep "^////" spec/$$f > spec-gen/$${f%.*}.ast ; done ; echo
-	sed -i 's|//// ||' spec-gen/*.ast
+	mkdir -p spec-gen/ast
+	for f in spec/parser/*.rats ; do f=$$(basename "$$f"); grep "^////" spec/parser/$$f > spec-gen/ast/$${f%.*}.ast ; done ; echo
+	sed -i 's|//// ||' spec-gen/ast/*.ast
 
 jastadd: ast
 	mkdir -p src-gen/org/tud/forty/ast
 	rm -f src-gen/org/tud/forty/ast/*
-	sed -i 's|class PrettyPrint|aspect PrettyPrint|' spec/Printing.jadd
-	sed -i 's|class PrettyPrint|aspect PrettyPrint|' spec/OmpPrinting.jadd
-	cd src-gen; java -jar ../tools/jastadd/jastadd2.jar --package="org.tud.forty.ast" --indent='2space' --rewrite=regular ../spec/*.ast ../spec-gen/*.ast ../spec/*.jadd ../spec/*.jrag
-	sed -i 's|aspect PrettyPrint|class PrettyPrint|' spec/Printing.jadd
-	sed -i 's|aspect PrettyPrint|class PrettyPrint|' spec/OmpPrinting.jadd
+	sed -i 's|class PrettyPrint |aspect PrettyPrint |' spec/printer/*.jadd
+	cd src-gen; java -jar ../tools/jastadd/jastadd2.jar --package="org.tud.forty.ast" --indent='2space' --rewrite=regular ../spec-gen/ast/* ../spec/printer/* ../spec/rewrites/* ../spec/semantics/*
+	sed -i 's|aspect PrettyPrint|class PrettyPrint|' spec/printer/*.jadd
 
 rats:
 	mkdir -p src-gen/org/tud/forty/parser
-	cd spec; java -jar ../tools/rats.jar -lgpl -out ../src-gen/org/tud/forty/parser SlottableFortranParser.rats
+	cd spec/parser; java -jar ../../tools/rats.jar -lgpl -out ../../src-gen/org/tud/forty/parser SlottableFortranParser.rats
 	./minify.sh
 
 doc:
@@ -26,15 +24,13 @@ doc:
 
 clean:
 	rm -rf doc/*
-	rm -f spec-gen/*
+	rm -rf spec-gen/*
 	rm -rf src-gen/*
 
 dot:
-	sed -i 's|class PrettyPrint|aspect PrettyPrint|' spec/Printing.jadd
-	sed -i 's|class PrettyPrint|aspect PrettyPrint|' spec/OmpPrinting.jadd
-	cd src-gen; java -jar ../tools/jastadd/jastadd2.jar --dot --package="org.tud.forty.ast" --indent='4space' ../spec/*.ast ../spec-gen/*.ast ../spec/*.jadd
-	sed -i 's|aspect PrettyPrint|class PrettyPrint|' spec/Printing.jadd
-	sed -i 's|aspect PrettyPrint|class PrettyPrint|' spec/OmpPrinting.jadd
+	sed -i 's|class PrettyPrint |aspect PrettyPrint |' spec/printer/*.jadd
+	cd src-gen; java -jar ../tools/jastadd/jastadd2.jar --dot --package="org.tud.forty.ast" --indent='4space' ../spec-gen/ast/* ../spec/printer/* ../spec/rewrites/* ../spec/semantics/*
+	sed -i 's|aspect PrettyPrint|class PrettyPrint|' spec/printer/*.jadd
 
 drfort:
 	javac -cp tools/rats.jar -d tools/DrFort/ src-gen/org/tud/forty/ast/* src-gen/org/tud/forty/parser/* src/DrFort.java
diff --git a/Parser/spec/SimpleExpr.ast b/Parser/spec/SimpleExpr.ast
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/Parser/spec/ConditionalLines.rats b/Parser/spec/parser/ConditionalLines.rats
similarity index 100%
rename from Parser/spec/ConditionalLines.rats
rename to Parser/spec/parser/ConditionalLines.rats
diff --git a/Parser/spec/ConditionalLinesTokens.rats b/Parser/spec/parser/ConditionalLinesTokens.rats
similarity index 100%
rename from Parser/spec/ConditionalLinesTokens.rats
rename to Parser/spec/parser/ConditionalLinesTokens.rats
diff --git a/Parser/spec/Fortran2008.rats b/Parser/spec/parser/Fortran2008.rats
similarity index 100%
rename from Parser/spec/Fortran2008.rats
rename to Parser/spec/parser/Fortran2008.rats
diff --git a/Parser/spec/FortranParser.rats b/Parser/spec/parser/FortranParser.rats
similarity index 100%
rename from Parser/spec/FortranParser.rats
rename to Parser/spec/parser/FortranParser.rats
diff --git a/Parser/spec/FortranTokens.rats b/Parser/spec/parser/FortranTokens.rats
similarity index 100%
rename from Parser/spec/FortranTokens.rats
rename to Parser/spec/parser/FortranTokens.rats
diff --git a/Parser/spec/OpenAcc.rats b/Parser/spec/parser/OpenAcc.rats
similarity index 100%
rename from Parser/spec/OpenAcc.rats
rename to Parser/spec/parser/OpenAcc.rats
diff --git a/Parser/spec/OpenAccTokens.rats b/Parser/spec/parser/OpenAccTokens.rats
similarity index 100%
rename from Parser/spec/OpenAccTokens.rats
rename to Parser/spec/parser/OpenAccTokens.rats
diff --git a/Parser/spec/OpenMp.rats b/Parser/spec/parser/OpenMp.rats
similarity index 100%
rename from Parser/spec/OpenMp.rats
rename to Parser/spec/parser/OpenMp.rats
diff --git a/Parser/spec/OpenMpTokens.rats b/Parser/spec/parser/OpenMpTokens.rats
similarity index 100%
rename from Parser/spec/OpenMpTokens.rats
rename to Parser/spec/parser/OpenMpTokens.rats
diff --git a/Parser/spec/SlottableFortranParser.rats b/Parser/spec/parser/SlottableFortranParser.rats
similarity index 100%
rename from Parser/spec/SlottableFortranParser.rats
rename to Parser/spec/parser/SlottableFortranParser.rats
diff --git a/Parser/spec/ASTPrinting.jadd b/Parser/spec/printer/ASTPrinting.jadd
similarity index 100%
rename from Parser/spec/ASTPrinting.jadd
rename to Parser/spec/printer/ASTPrinting.jadd
diff --git a/Parser/spec/AccPrinting.jadd b/Parser/spec/printer/AccPrinting.jadd
similarity index 100%
rename from Parser/spec/AccPrinting.jadd
rename to Parser/spec/printer/AccPrinting.jadd
diff --git a/Parser/spec/ConditionalLinesPrinting.jadd b/Parser/spec/printer/ConditionalLinesPrinting.jadd
similarity index 95%
rename from Parser/spec/ConditionalLinesPrinting.jadd
rename to Parser/spec/printer/ConditionalLinesPrinting.jadd
index fe15880fbf7bb8f859d67e1f841e7eb152799ddd..fb0909db6552293fa446dc7cf682f37363e79e13 100644
--- a/Parser/spec/ConditionalLinesPrinting.jadd
+++ b/Parser/spec/printer/ConditionalLinesPrinting.jadd
@@ -1,4 +1,4 @@
-aspect PrettyPrint {
+class PrettyPrint {
     //// ConditionalExecutableConstruct:ExecutableConstruct ::= ExecutableConstruct;
     public void ConditionalExecutableConstruct.prettyPrint(PrettyPrinter s) {
         s.append("!$ ");
diff --git a/Parser/spec/OmpPrinting.jadd b/Parser/spec/printer/OmpPrinting.jadd
similarity index 100%
rename from Parser/spec/OmpPrinting.jadd
rename to Parser/spec/printer/OmpPrinting.jadd
diff --git a/Parser/spec/Printing.jadd b/Parser/spec/printer/Printing.jadd
similarity index 100%
rename from Parser/spec/Printing.jadd
rename to Parser/spec/printer/Printing.jadd
diff --git a/Parser/spec/PrintingCore.jadd b/Parser/spec/printer/PrintingCore.jadd
similarity index 100%
rename from Parser/spec/PrintingCore.jadd
rename to Parser/spec/printer/PrintingCore.jadd
diff --git a/Parser/spec/SlotPrinting.jadd b/Parser/spec/printer/SlotPrinting.jadd
similarity index 100%
rename from Parser/spec/SlotPrinting.jadd
rename to Parser/spec/printer/SlotPrinting.jadd
diff --git a/Parser/spec/ExprRewrites.jrag b/Parser/spec/rewrites/ExprRewrites.jrag
similarity index 100%
rename from Parser/spec/ExprRewrites.jrag
rename to Parser/spec/rewrites/ExprRewrites.jrag
diff --git a/Parser/spec/Fortran2008Rewrites.jrag b/Parser/spec/rewrites/Fortran2008Rewrites.jrag
similarity index 100%
rename from Parser/spec/Fortran2008Rewrites.jrag
rename to Parser/spec/rewrites/Fortran2008Rewrites.jrag
diff --git a/Parser/spec/OpenAccRewrites.jrag b/Parser/spec/rewrites/OpenAccRewrites.jrag
similarity index 100%
rename from Parser/spec/OpenAccRewrites.jrag
rename to Parser/spec/rewrites/OpenAccRewrites.jrag
diff --git a/Parser/spec/Helpers.jadd b/Parser/spec/semantics/Helpers.jadd
similarity index 100%
rename from Parser/spec/Helpers.jadd
rename to Parser/spec/semantics/Helpers.jadd
diff --git a/Parser/spec/Types.jrag b/Parser/spec/semantics/Types.jrag
similarity index 100%
rename from Parser/spec/Types.jrag
rename to Parser/spec/semantics/Types.jrag