diff --git a/examples2/grammar/anormalization.test.1.xml b/examples2/grammar/anormalization.test.1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9b53cf09c2f659a20741f7dc82521529b3888470
--- /dev/null
+++ b/examples2/grammar/anormalization.test.1.xml
@@ -0,0 +1,32 @@
+<EpsilonFreeCFG>
+	<nonterminalAlphabet>
+		<LabeledSymbol><PrimitiveLabel><Character>S</Character></PrimitiveLabel></LabeledSymbol>
+	</nonterminalAlphabet>
+	<terminalAlphabet>
+		<LabeledSymbol><PrimitiveLabel><Character>[</Character></PrimitiveLabel></LabeledSymbol>
+		<LabeledSymbol><PrimitiveLabel><String>text</String></PrimitiveLabel></LabeledSymbol>
+		<LabeledSymbol><PrimitiveLabel><Character>]</Character></PrimitiveLabel></LabeledSymbol>
+	</terminalAlphabet>
+	<initialSymbol><LabeledSymbol><PrimitiveLabel><Character>S</Character></PrimitiveLabel></LabeledSymbol></initialSymbol>
+	<rules>
+		<rule>
+			<lhs>
+				<LabeledSymbol><PrimitiveLabel><Character>S</Character></PrimitiveLabel></LabeledSymbol>
+			</lhs>
+			<rhs>
+				<LabeledSymbol><PrimitiveLabel><String>text</String></PrimitiveLabel></LabeledSymbol>
+			</rhs>
+		</rule>
+		<rule>
+			<lhs>
+				<LabeledSymbol><PrimitiveLabel><Character>S</Character></PrimitiveLabel></LabeledSymbol>
+			</lhs>
+			<rhs>
+				<LabeledSymbol><PrimitiveLabel><Character>[</Character></PrimitiveLabel></LabeledSymbol>
+				<LabeledSymbol><PrimitiveLabel><Character>S</Character></PrimitiveLabel></LabeledSymbol>
+				<LabeledSymbol><PrimitiveLabel><Character>]</Character></PrimitiveLabel></LabeledSymbol>
+			</rhs>
+		</rule>
+	</rules>
+	<generatesEpsilon><false /></generatesEpsilon>
+</EpsilonFreeCFG>
diff --git a/examples2/grammar/anormalization.test.2.xml b/examples2/grammar/anormalization.test.2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e0a7d6a1d81b4fa2bf85714d6603848699c66f08
--- /dev/null
+++ b/examples2/grammar/anormalization.test.2.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+<EpsilonFreeCFG>
+	<nonterminalAlphabet>
+		<LabeledSymbol>
+			<PrimitiveLabel>
+				<String>M</String>
+			</PrimitiveLabel>
+		</LabeledSymbol>
+		<LabeledSymbol>
+			<PrimitiveLabel>
+				<String>V</String>
+			</PrimitiveLabel>
+		</LabeledSymbol>
+	</nonterminalAlphabet>
+	<terminalAlphabet>
+		<LabeledSymbol>
+			<PrimitiveLabel>
+				<String>i</String>
+			</PrimitiveLabel>
+		</LabeledSymbol>
+	</terminalAlphabet>
+	<initialSymbol>
+		<LabeledSymbol>
+			<PrimitiveLabel>
+				<String>V</String>
+			</PrimitiveLabel>
+		</LabeledSymbol>
+	</initialSymbol>
+	<rules>
+		<rule>
+			<lhs>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>M</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+			</lhs>
+			<rhs>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>V</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>M</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>V</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>V</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+			</rhs>
+		</rule>
+	</rules>
+	<generatesEpsilon>
+		<false/>
+	</generatesEpsilon>
+</EpsilonFreeCFG>
diff --git a/examples2/grammar/anormalization.test.3.xml b/examples2/grammar/anormalization.test.3.xml
new file mode 100644
index 0000000000000000000000000000000000000000..390d5d48c7f3e8827b5585cb2300bce25dc76973
--- /dev/null
+++ b/examples2/grammar/anormalization.test.3.xml
@@ -0,0 +1,164 @@
+<?xml version="1.0"?>
+<EpsilonFreeCFG>
+	<nonterminalAlphabet>
+		<LabeledSymbol>
+			<PrimitiveLabel>
+				<String>C</String>
+			</PrimitiveLabel>
+		</LabeledSymbol>
+		<LabeledSymbol>
+			<PrimitiveLabel>
+				<String>X</String>
+			</PrimitiveLabel>
+		</LabeledSymbol>
+	</nonterminalAlphabet>
+	<terminalAlphabet>
+		<LabeledSymbol>
+			<PrimitiveLabel>
+				<String>d</String>
+			</PrimitiveLabel>
+		</LabeledSymbol>
+		<LabeledSymbol>
+			<PrimitiveLabel>
+				<String>l</String>
+			</PrimitiveLabel>
+		</LabeledSymbol>
+	</terminalAlphabet>
+	<initialSymbol>
+		<LabeledSymbol>
+			<PrimitiveLabel>
+				<String>C</String>
+			</PrimitiveLabel>
+		</LabeledSymbol>
+	</initialSymbol>
+	<rules>
+		<rule>
+			<lhs>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>C</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+			</lhs>
+			<rhs>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>l</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>l</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+			</rhs>
+		</rule>
+		<rule>
+			<lhs>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>X</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+			</lhs>
+			<rhs>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>X</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+			</rhs>
+		</rule>
+		<rule>
+			<lhs>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>X</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+			</lhs>
+			<rhs>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>d</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>d</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>d</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>l</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+			</rhs>
+		</rule>
+		<rule>
+			<lhs>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>X</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+			</lhs>
+			<rhs>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>l</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>X</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>d</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+			</rhs>
+		</rule>
+		<rule>
+			<lhs>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>X</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+			</lhs>
+			<rhs>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>l</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>X</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>d</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+				<LabeledSymbol>
+					<PrimitiveLabel>
+						<String>C</String>
+					</PrimitiveLabel>
+				</LabeledSymbol>
+			</rhs>
+		</rule>
+	</rules>
+	<generatesEpsilon>
+		<true/>
+	</generatesEpsilon>
+</EpsilonFreeCFG>
diff --git a/makefile b/makefile
index a214f3afbf26abb55cc37da70e549908c0ff9b37..86715e7e1fec6039c82f25c0d481dbe614c32199 100644
--- a/makefile
+++ b/makefile
@@ -63,7 +63,7 @@ all:
 
 
 
-debug  : all-debug
+debug: all-debug
 	mkdir -p $(addsuffix -debug, $(BINFOLDER))
 	rm -rf $(addsuffix -debug, $(BINFOLDER))/*
 	for dir in $(CORE_LIB) $(SUBDIRS_LIBS); do \
diff --git a/tests.anormalize.sh b/tests.anormalize.sh
new file mode 100755
index 0000000000000000000000000000000000000000..d69423a3fdd3b5acd0279aa0ef3ff58cd335b5d2
--- /dev/null
+++ b/tests.anormalize.sh
@@ -0,0 +1,152 @@
+#!/usr/bin/env bash
+
+# $1 test dir suffix (debug / release)
+
+# SETTINGS
+TESTCASE_ITERATIONS=100
+TESTCASE_TIMEOUT=10
+LOGFILE="log_tests.txt"
+
+RAND_NONTERMINALS=2
+RAND_DENSITY="50"
+RAND_TERMINALS=4
+STRING_LENGHTS=6
+
+EXECUTABLES="arand2 atrim2 anormalize2 agenerate2 aepsilon2"
+TESTS_DIR="../examples2/grammar"
+
+RES_GOOD=0
+RES_FAIL=0
+RES_TIME=0
+RES_SEGV=0
+RES_UNKN=0
+
+
+# ----------------------------
+
+for FILE in $EXECUTABLES; do
+	if [ ! -f bin-$1/$FILE ]; then
+		echo "Executable $FILE is required for testing. Make sure it is in bin-$1 folder."
+		exit 1
+	fi
+done
+
+cd bin-$1/
+rm -f $LOGFILE
+
+# ----------------------------
+
+# $1 = conv command
+# $2 = return code
+# $3 = input automaton
+# $4 = output of conversion
+function log {
+	echo "----------------------------------------------------------" >> $LOGFILE
+	echo "conv: " $1 >> $LOGFILE
+	echo "ret: " $2 >> $LOGFILE
+	echo "input automaton:" >> $LOGFILE
+	cat  "$3" >> $LOGFILE
+	echo "command out:" >> $LOGFILE
+	echo "$4" >> $LOGFILE
+}
+
+function generateCFG {
+	./arand2 -t CFG --density $RAND_DENSITY --nonterminals $(( $RANDOM % $RAND_NONTERMINALS + 1 )) --terminals $(( $RANDOM % $RAND_TERMINALS + 1 )) 2>/dev/null | ./aepsilon2
+}
+
+# $1 = command for conversion. Output of such command must be a grammar !!
+# $2 = original grammar
+function runTest2 {
+	GENERATED_STRINGS="./agenerate2 --upto $STRING_LENGHTS"
+
+	OUT=`timeout $TESTCASE_TIMEOUT bash -c "diff <(cat $2 | $1 | $GENERATED_STRINGS ) <(cat $2 | $GENERATED_STRINGS)"`
+	RET=$?
+
+	if [ $RET == 0 ]; then # ok
+		return 0
+	fi
+
+	log "$1" $RET "$2" "$OUT"
+
+	if [ $RET == 124 ]; then # timeout
+		return 2
+	elif [ $RET -ge 124 ]; then #segv
+		return 3
+	else
+		return 1
+	fi
+}
+
+function registerResult {
+	case $1 in
+		0)
+			echo -n "."
+			((RES_GOOD++))
+			;;
+		1)
+			echo -n "x"
+			((RES_FAIL++))
+			;;
+		2)
+			echo -n "T"
+			((RES_TIME++))
+			;;
+		3)
+			echo -n "E"
+			((RES_SEGV++))
+			;;
+		*)
+			echo -n "?"
+			((RES_UNKN++))
+			;;
+	esac
+}
+
+function clearResults {
+	RES_GOOD=0
+	RES_FAIL=0
+	RES_TIME=0
+	RES_SEGV=0
+	RES_UNKN=0
+}
+
+function outputResults {
+	# summary
+	echo -ne "\n\t"
+	echo "RES: GOOD:" $RES_GOOD ", FAIL:" $RES_FAIL ", TIME:" $RES_TIME ", SEGV:" $RES_SEGV, "UNKN:" $RES_UNKN
+	echo ""
+}
+
+# $1 - aconversions2 sequence
+function runTest {
+	echo $1
+	echo -ne "\t"
+
+	clearResults
+
+	# predefined tests first
+	for FILE in `ls $TESTS_DIR/anormalization.test*`; do
+		runTest2 "$1" "$FILE"
+		registerResult $?
+	done
+
+	echo -n " | "
+
+	# random tests
+	CFG_FILE=cfg.xml
+	for i in $(seq 1 $TESTCASE_ITERATIONS );
+	do
+		cat <(generateCFG) > $CFG_FILE
+
+		runTest2 "$1" "$CFG_FILE"
+		registerResult $?
+	done
+
+	rm $CFG_FILE
+
+	outputResults
+}
+
+# Chomsky normal form and Greibach normal form
+runTest "./anormalize2 -f GNF"
+runTest "./anormalize2 -f CNF"