diff --git a/aconversions/src/aconversion/ConversionHandler.cpp b/aconversions/src/aconversion/ConversionHandler.cpp
index 85b86fa48635030eee8af3997201a6c2c6b182ef..983e8944ba42cc2adbf1fc50f1d9208ff8d1ac38 100644
--- a/aconversions/src/aconversion/ConversionHandler.cpp
+++ b/aconversions/src/aconversion/ConversionHandler.cpp
@@ -103,7 +103,7 @@ void ConversionHandler::convertFSMtoRE( void )
 
 void ConversionHandler::convertFSMtoRG( void )
 {
-    if( m_target == RIGHT_REGULAR_GRAMMAR || REGULAR_GRAMMAR )
+    if( m_target == RIGHT_REGULAR_GRAMMAR )
         convertFSMtoRRG( );
     else if( m_target == LEFT_REGULAR_GRAMMAR )
         convertFSMtoLRG( );
@@ -172,7 +172,7 @@ void ConversionHandler::convertREtoFSM( void )
 
 void ConversionHandler::convertREtoRG( void )
 {
-    if( m_target == RIGHT_REGULAR_GRAMMAR || REGULAR_GRAMMAR )
+    if( m_target == RIGHT_REGULAR_GRAMMAR )
         convertREtoRRG( );
     else if( m_target == LEFT_REGULAR_GRAMMAR )
         throw AlibException( "ConversionHandler:: RE to LRG is not implemented. Please convert to RRG and then to LRG." );
@@ -361,10 +361,7 @@ ConversionHandler::TFormalism ConversionHandler::parseFormalismFromString( const
     if( target == "re" || target == "regexp" || target == "regex" )
         return REGULAR_EXPRESSION;
 
-    if( target == "rg" || target == "grammar" )
-        return REGULAR_GRAMMAR;
-
-    if( target == "rrg" )
+    if( target == "rrg" || target == "rg" || target == "grammar" )
         return RIGHT_REGULAR_GRAMMAR;
 
     if( target == "lrg" )
diff --git a/aconversions/src/fa2rg/fa2lrg/FAtoLRGConverter.cpp b/aconversions/src/fa2rg/fa2lrg/FAtoLRGConverter.cpp
index 7cc7fe416aa55122bbb8bf1c49c3253f65e146b5..253fcf940a4c15ecf7e34ff6ac6bdfbc9743a767 100644
--- a/aconversions/src/fa2rg/fa2lrg/FAtoLRGConverter.cpp
+++ b/aconversions/src/fa2rg/fa2lrg/FAtoLRGConverter.cpp
@@ -51,9 +51,12 @@ LeftRegularGrammar FAtoLRGConverter::convert( void )
         {
             list<Symbol> leftSide, rightSide;
             leftSide.push_back( grammar.getStartSymbol( ) );
-            grammar.addRule( Rule( leftSide, rightSide ) );
             rightSide.push_back( nonterminalMap.find( transition.getFrom( ) )->second );
             rightSide.push_back( transition.getInput( ) );
+
+            Rule r( leftSide, rightSide );
+            if( ! isInSet( r, grammar.getRules( ) ) )
+                grammar.addRule( Rule( leftSide, rightSide ) );
         }
 
 
@@ -69,7 +72,10 @@ LeftRegularGrammar FAtoLRGConverter::convert( void )
                 list<Symbol> leftSide, rightSide;
                 leftSide.push_back( grammar.getStartSymbol( ) );
                 rightSide.push_back( transition.getInput( ) );
-                grammar.addRule( Rule( leftSide, rightSide ) );
+
+                Rule r( leftSide, rightSide );
+                if( ! isInSet( r, grammar.getRules( ) ) )
+                    grammar.addRule( Rule( leftSide, rightSide ) );
             }
         }
     }
diff --git a/aconversions/src/re2fa/Brzozowski.cpp b/aconversions/src/re2fa/Brzozowski.cpp
index e6779762db520c4fc5f43cd6acf9aacf8e0ad09e..8009aec9a1266487482fbb9befbb60dec1a6f74c 100644
--- a/aconversions/src/re2fa/Brzozowski.cpp
+++ b/aconversions/src/re2fa/Brzozowski.cpp
@@ -76,7 +76,7 @@ FSM Brzozowski::convert( void )
 
     for( const auto & r : Q )
     {
-        State q( toBase26( ++ stateId ) );
+        State q( toBase26( stateId ++ ) );
         stateMap.insert( std::pair<RegExp,State>( r, q ) );
         automaton.addState( q );
     }
diff --git a/aconversions/src/re2fa/Glushkov.cpp b/aconversions/src/re2fa/Glushkov.cpp
index 9c86441c799467e15cee42359c929aceb76c9337..b2a847223bec7e25e7de8ac6c510b395b2d9fee5 100644
--- a/aconversions/src/re2fa/Glushkov.cpp
+++ b/aconversions/src/re2fa/Glushkov.cpp
@@ -50,9 +50,10 @@ FSM Glushkov::convert( void )
     State q0( "q0" );
     automaton.addState( q0 );
     automaton.addInitialState( q0 );
+    int stateId = 0;
     for( auto const& symbol : GlushkovTraversal::getSymbols( m_re ) )
     {
-        State q( to_string( symbol.getId( ) ) );
+        State q( toBase26( stateId ++ ) + to_string( symbol.getId( ) ) );
 
         m_stateMap.insert( std::pair<GlushkovSymbol, State>( symbol, q ) );
         automaton.addState( q );
diff --git a/aconversions/src/re2fa/Glushkov.h b/aconversions/src/re2fa/Glushkov.h
index b6ec1109e8dbc06ec26373a9e28287cf42294d51..a1ba5e329a25e6fdd537cbb342182305f076d1f8 100644
--- a/aconversions/src/re2fa/Glushkov.h
+++ b/aconversions/src/re2fa/Glushkov.h
@@ -17,6 +17,7 @@
 
 #include "../interface/IConversionFSM.h"
 #include "../shared/glushkov/GlushkovTraversal.h"
+#include "../shared/Hexavigesimal.h"
 
 namespace conversions
 {
diff --git a/aconversions/src/re2fa/Thompson.cpp b/aconversions/src/re2fa/Thompson.cpp
index c92832ec6e99cf2a6e330786433606910ff0685f..b23f79c9e4009f7493915461674668114c482624 100644
--- a/aconversions/src/re2fa/Thompson.cpp
+++ b/aconversions/src/re2fa/Thompson.cpp
@@ -27,6 +27,7 @@ Thompson::~Thompson( void )
 FSM Thompson::convert( void )
 {
     m_fsm = FSM( );
+    m_stateId = 0;
 
     for( const auto & symbol : m_re.getAlphabet( ) )
         m_fsm.addInputSymbol( symbol.getSymbol( ) );
@@ -66,8 +67,8 @@ Thompson::SubexpressionTails Thompson::processRegExpNode( const RegExpElement *
 
 Thompson::SubexpressionTails Thompson::processRegExpNode( const Iteration * node )
 {
-    State head = m_fsm.createUniqueState( "iter__head", true );
-    State tail = m_fsm.createUniqueState( "iter__tail", true );
+    State head = m_fsm.createUniqueState( toBase26( m_stateId    ) + "0", true );
+    State tail = m_fsm.createUniqueState( toBase26( m_stateId ++ ) + "1", true );
 
     SubexpressionTails st = processRegExpNode( node->getElement( ) );
 
@@ -81,8 +82,8 @@ Thompson::SubexpressionTails Thompson::processRegExpNode( const Iteration * node
 
 Thompson::SubexpressionTails Thompson::processRegExpNode( const Alternation * node )
 {
-    State head = m_fsm.createUniqueState( "alt__head", true );
-    State tail = m_fsm.createUniqueState( "alt__tail", true );
+    State head = m_fsm.createUniqueState( toBase26( m_stateId    ) + "0", true );
+    State tail = m_fsm.createUniqueState( toBase26( m_stateId ++ ) + "1", true );
 
     for( const auto & element : node->getElements( ) )
     {
@@ -110,8 +111,8 @@ Thompson::SubexpressionTails Thompson::processRegExpNode( const Concatenation *
 Thompson::SubexpressionTails Thompson::processRegExpNode( const RegExpSymbol * node )
 {
     Symbol symb( node->getSymbol( ) );
-    State head = m_fsm.createUniqueState( "sym__start", true );
-    State tail = m_fsm.createUniqueState( "sym__end", true );
+    State head = m_fsm.createUniqueState( toBase26( m_stateId    ) + "0", true );
+    State tail = m_fsm.createUniqueState( toBase26( m_stateId ++ ) + "1", true );
 
     m_fsm.addTransition( head, symb, tail );
 
@@ -121,8 +122,8 @@ Thompson::SubexpressionTails Thompson::processRegExpNode( const RegExpSymbol * n
 Thompson::SubexpressionTails Thompson::processRegExpNode( const RegExpEpsilon * node )
 {
     Symbol symb( "" );
-    State head = m_fsm.createUniqueState( "epssym__start", true );
-    State tail = m_fsm.createUniqueState( "epssym__end", true );
+    State head = m_fsm.createUniqueState( toBase26( m_stateId    ) + "0", true );
+    State tail = m_fsm.createUniqueState( toBase26( m_stateId ++ ) + "1", true );
 
     m_fsm.addTransition( head, symb, tail );
 
@@ -131,8 +132,8 @@ Thompson::SubexpressionTails Thompson::processRegExpNode( const RegExpEpsilon *
 
 Thompson::SubexpressionTails Thompson::processRegExpNode( const RegExpEmpty * node )
 {
-    State head = m_fsm.createUniqueState( "empty__start", true );
-    State tail = m_fsm.createUniqueState( "empty__end", true );
+    State head = m_fsm.createUniqueState( toBase26( m_stateId    ) + "0", true );
+    State tail = m_fsm.createUniqueState( toBase26( m_stateId ++ ) + "1", true );
 
     return SubexpressionTails( head, tail );
 }
diff --git a/aconversions/src/re2fa/Thompson.h b/aconversions/src/re2fa/Thompson.h
index 970c77d399d1f7d7ca61a8fd46582a78a067b861..ae2f5452bbe7a6a09e694cc29d920cc56f493f34 100644
--- a/aconversions/src/re2fa/Thompson.h
+++ b/aconversions/src/re2fa/Thompson.h
@@ -18,6 +18,7 @@
 
 #include "../interface/IConversionFSM.h"
 #include "../include/macros.h"
+#include "../shared/Hexavigesimal.h"
 
 
 namespace conversions
@@ -56,6 +57,7 @@ private:
      * output FSM ($\varepsilon$--NFA)
      */
     automaton::FSM m_fsm;
+    int m_stateId;
 
     /**
      * Stores head and tail state of "subautomaton" created in regexp subtree.
diff --git a/aconversions/src/re2rg/re2rrg/BrzozowskiDerivationRRG.cpp b/aconversions/src/re2rg/re2rrg/BrzozowskiDerivationRRG.cpp
index 8ba4a892b59764d0452a6e32a577e515650a26da..246199f696901126e8f74da72ebf99102ebfa994 100644
--- a/aconversions/src/re2rg/re2rrg/BrzozowskiDerivationRRG.cpp
+++ b/aconversions/src/re2rg/re2rrg/BrzozowskiDerivationRRG.cpp
@@ -75,7 +75,7 @@ RightRegularGrammar BrzozowskiDerivationRRG::convert( void )
 
     for( const auto & r : N )
     {
-        Symbol nt = grammar.createUniqueNonTerminalSymbol( toBase26( ++ nonterminalId ) );
+        Symbol nt = grammar.createUniqueNonTerminalSymbol( toBase26( nonterminalId ++ ) );
         nonterminalMap.insert( pair<RegExp, Symbol>( r, nt ) );
     }
 
diff --git a/aconversions/src/re2rg/re2rrg/GlushkovRRG.cpp b/aconversions/src/re2rg/re2rrg/GlushkovRRG.cpp
index e7dc539e770b096837b60ae5c921efec09f357ae..f28ec8c92762289f3a261da597668f2ca86cf4b4 100644
--- a/aconversions/src/re2rg/re2rrg/GlushkovRRG.cpp
+++ b/aconversions/src/re2rg/re2rrg/GlushkovRRG.cpp
@@ -46,9 +46,11 @@ RightRegularGrammar GlushkovRRG::convert( void )
     Symbol S = grammar.createUniqueNonTerminalSymbol( "S" );
     grammar.setStartSymbol( S );
 
+    int nonterminalId = 0;
+
     for( auto const& symbol : GlushkovTraversal::getSymbols( m_re ) )
     {
-        Symbol a = grammar.createUniqueNonTerminalSymbol( symbol.getInputSymbol( ).getSymbol( ) + to_string( symbol.getId( ) ) );
+        Symbol a = grammar.createUniqueNonTerminalSymbol( toBase26( nonterminalId ++ ) + to_string( symbol.getId( ) ) );
 
         m_symbolMap.insert( std::pair<GlushkovSymbol, Symbol>( symbol, a ) );
     }
diff --git a/aconversions/src/re2rg/re2rrg/GlushkovRRG.h b/aconversions/src/re2rg/re2rrg/GlushkovRRG.h
index fa9b74747070e8bcb1dcd228f3616f8f947590f9..f464aad0d70676be35e8e6ee2c282034195eecdd 100644
--- a/aconversions/src/re2rg/re2rrg/GlushkovRRG.h
+++ b/aconversions/src/re2rg/re2rrg/GlushkovRRG.h
@@ -16,6 +16,8 @@
 #include "../../interface/IConversionRRG.h"
 #include "../../shared/glushkov/GlushkovTraversal.h"
 
+#include "../../shared/Hexavigesimal.h"
+
 namespace conversions
 {
 
diff --git a/aconversions/src/rg2fa/rrg2fa/RRGtoFAConverter.cpp b/aconversions/src/rg2fa/rrg2fa/RRGtoFAConverter.cpp
index ea121d2fdbc81a8f4af7859f2b38e1ec8dc65ea2..8c81927b11d68116e1a96fa4593484655f09a27e 100644
--- a/aconversions/src/rg2fa/rrg2fa/RRGtoFAConverter.cpp
+++ b/aconversions/src/rg2fa/rrg2fa/RRGtoFAConverter.cpp
@@ -28,7 +28,7 @@ FSM RRGtoFAConverter::convert( void )
     for( const auto & symbol : m_grammar.getNonTerminalSymbols( ) )
         automaton.addState( State( symbol.getSymbol( ) ) );
 
-    const State & AState = automaton.createUniqueState( "A", true );
+    const State & AState = automaton.createUniqueState( "A", false );
 
     for( const auto & rule : m_grammar.getRules( ) )
     {
diff --git a/tests.aconversion.sh b/tests.aconversion.sh
index 67d0c0975d263d94a4e05c0f1788329f3669011f..60d3d62f4ae6c463287f927cd5396d8ead302dcc 100755
--- a/tests.aconversion.sh
+++ b/tests.aconversion.sh
@@ -2,7 +2,7 @@
 
 set -o pipefail
 
-TESTCASE_ITERATIONS=200
+TESTCASE_ITERATIONS=100
 TESTCASE_TIMEOUT=5
 LOGFILE="log_tests.txt"
 
@@ -58,7 +58,7 @@ function runTest2 {
 	RETTMP=$?
 
 	# segfault
-	if [ $RETTMP -eq 139 ]; then
+	if [ $RETTMP -eq 134 ]; then
 		return 3
 	fi