diff --git a/aconversions/src/fa2rg/fa2lrg/FAtoLRGConverter.cpp b/aconversions/src/fa2rg/fa2lrg/FAtoLRGConverter.cpp
index 7512a2c52f677b222784e4a6daeb112c1a827d46..ae572db176d242a77c0ecdbd5a40259213013538 100644
--- a/aconversions/src/fa2rg/fa2lrg/FAtoLRGConverter.cpp
+++ b/aconversions/src/fa2rg/fa2lrg/FAtoLRGConverter.cpp
@@ -61,7 +61,7 @@ LeftRegularGrammar FAtoLRGConverter::convert( void )
 
     for( const auto & rule : m_grammar.getRules( ) )
     {
-        const Symbol & leftSide = * rule.getLeftSide( ).begin( );
+        const Symbol & leftSide = rule.getLeftSide( ).front( );
 
         if( isInSet( State( leftSide.getSymbol( ) ), m_fsm.getFinalStates( ) ) )
         {
diff --git a/aconversions/src/fa2rg/fa2rrg/FAtoRRGConverter.cpp b/aconversions/src/fa2rg/fa2rrg/FAtoRRGConverter.cpp
index 3190b40932bdab36e12979ab8d41b4d6ad81372e..28b1db614752ab0cba3bb37be58a63d785de688e 100644
--- a/aconversions/src/fa2rg/fa2rrg/FAtoRRGConverter.cpp
+++ b/aconversions/src/fa2rg/fa2rrg/FAtoRRGConverter.cpp
@@ -43,7 +43,7 @@ RightRegularGrammar FAtoRRGConverter::convert( void )
 
             /*
              *  Rule might already in - consider case:
-             *  \delta(A,a) = F and \delta(B,a) = G, where both F and G are final states
+             *  \delta(A,a) = { F, G }, where both F and G are final states
              */
             if( ! isInSet( Rule( leftSide, rightSide), m_grammar.getRules( ) ) )
                 m_grammar.addRule( Rule( leftSide, rightSide ) );
@@ -54,7 +54,7 @@ RightRegularGrammar FAtoRRGConverter::convert( void )
     m_grammar.setStartSymbol( symbolMap.getNonTerminal( * m_fsm.getInitialStates( ).begin( ) ) );
 
     // step 4
-    if( isInSet( State( m_grammar.getStartSymbol( ).getSymbol( ) ), m_fsm.getFinalStates( ) ) )
+    if( isInSet( * m_fsm.getInitialStates( ).begin( ), m_fsm.getFinalStates( ) ) )
     {
         // 4a
         if( ! m_grammar.isNonTerminalOnRightSideOfAnyRule( m_grammar.getStartSymbol( ) ) )
@@ -69,7 +69,7 @@ RightRegularGrammar FAtoRRGConverter::convert( void )
 
             for( const auto & rule : m_grammar.getRules( ) )
             {
-                if( *( rule.getLeftSide( ).begin( ) ) == m_grammar.getStartSymbol( ) )
+                if( rule.getLeftSide( ).front( ) == m_grammar.getStartSymbol( ) )
                 {
                     list<Symbol> leftSide, rightSide( rule.getRightSide( ) );
                     leftSide.push_back( newStart );
diff --git a/aconversions/src/rg2fa/lrg2fa/LRGtoFAConverter.cpp b/aconversions/src/rg2fa/lrg2fa/LRGtoFAConverter.cpp
index 53d0c68b11dac2e3fc70d8f54623392629bc407d..81650e2418fe4e4ee92e4f14bd3aed947173fa17 100644
--- a/aconversions/src/rg2fa/lrg2fa/LRGtoFAConverter.cpp
+++ b/aconversions/src/rg2fa/lrg2fa/LRGtoFAConverter.cpp
@@ -33,20 +33,19 @@ FSM LRGtoFAConverter::convert( void )
         if( m_grammar.isEpsilonRule( rule ) )
             continue;
 
-        State current( rule.getLeftSide( ).begin( )->getSymbol( ) );
+        State current( rule.getLeftSide( ).front( ).getSymbol( ) );
 
         // if B->a => \delta(StartState,a)=B
         if( rule.getRightSide( ).size( ) == 1 )
         {
-            const Symbol & input( rule.getRightSide( ).begin( )->getSymbol( ) );
+            const Symbol & input( rule.getRightSide( ).front( ).getSymbol( ) );
             m_automaton.addTransition( startState, input, current );
         }
         // if B->Ca => \delta(C,a)=B
         else if( rule.getRightSide( ).size( ) == 2 )
         {
-            auto rightSideIter = rule.getRightSide( ).begin( );
-            State next( rightSideIter ++ ->getSymbol( ) );
-            const Symbol & input = * rightSideIter;
+            State next( rule.getRightSide( ).front( ).getSymbol( ) );
+            const Symbol & input = rule.getRightSide( ).back( );
 
             m_automaton.addTransition( next, input, current );
         }
diff --git a/aconversions/src/rg2fa/rrg2fa/RRGtoFAConverter.cpp b/aconversions/src/rg2fa/rrg2fa/RRGtoFAConverter.cpp
index 9788b5f3e7fc47189c31e6f84dcd60319113c9e7..30e6ee74edb6bb9d595840d145f85646754a1806 100644
--- a/aconversions/src/rg2fa/rrg2fa/RRGtoFAConverter.cpp
+++ b/aconversions/src/rg2fa/rrg2fa/RRGtoFAConverter.cpp
@@ -33,18 +33,17 @@ FSM RRGtoFAConverter::convert( void )
         if( m_grammar.isEpsilonRule( rule ) )
             continue;
 
-        State current( rule.getLeftSide( ).begin( )->getSymbol( ) );
+        State current( rule.getLeftSide( ).front( ).getSymbol( ) );
 
         if( rule.getRightSide( ).size( ) == 1 ) // if B->a => \delta(B,a)=AState
         {
-            const Symbol & input( rule.getRightSide( ).begin( )->getSymbol( ) );
+            const Symbol & input( rule.getRightSide( ).front( ).getSymbol( ) );
             m_automaton.addTransition( current, input, AState );
         }
         else if( rule.getRightSide( ).size( ) == 2 ) // if B->aC => \delta(B,a)=C
         {
-            auto rightSideIter = rule.getRightSide( ).begin( );
-            const Symbol & input = * rightSideIter ++;
-            State next( rightSideIter->getSymbol( ) );
+            const Symbol & input = rule.getRightSide( ).front( );
+            State next( rule.getRightSide( ).back( ).getSymbol( ) );
 
             m_automaton.addTransition( current, input, next );
         }
diff --git a/aconversions/src/rg2re/lrg2re/LRGAlgebraic.cpp b/aconversions/src/rg2re/lrg2re/LRGAlgebraic.cpp
index deb33731f0cf1fcdc59ab89e85bba7951562c887..d7036f06c30423de8de25085f6ebd533dda45d1b 100644
--- a/aconversions/src/rg2re/lrg2re/LRGAlgebraic.cpp
+++ b/aconversions/src/rg2re/lrg2re/LRGAlgebraic.cpp
@@ -31,20 +31,20 @@ RegExp LRGAlgebraic::convert( void )
 
     for( const auto & rule : m_grammar.getRules( ) )
     {
-        const Symbol & leftSide = * rule.getLeftSide( ).begin( );
+        const Symbol & leftSide = rule.getLeftSide( ).front( );
         if( rule.getRightSide( ).size( ) == 0 )
         {
             m_solver.addEquation( leftSide, new RegExpEpsilon( ) );
         }
         else if( rule.getRightSide( ).size( ) == 1 )
         {
-            const Symbol & input = * rule.getRightSide( ).begin( );
+            const Symbol & input = rule.getRightSide( ).front( );
             m_solver.addEquation( leftSide, new RegExpSymbol( input.getSymbol( ) ) );
         }
         else
         {
-            const Symbol nt = * rule.getRightSide( ).begin( );
-            const Symbol input = * ( std::next( rule.getRightSide( ).begin( ) ) );
+            const Symbol nt = rule.getRightSide( ).front( );
+            const Symbol input = rule.getRightSide( ).back( );
             m_solver.addEquation( leftSide, nt, new RegExpSymbol( input.getSymbol( ) ) );
         }
     }
diff --git a/aconversions/src/rg2re/rrg2re/RRGAlgebraic.cpp b/aconversions/src/rg2re/rrg2re/RRGAlgebraic.cpp
index 87a2b7a2d543853b9b4b37353ddba0e208abf7cf..71c92816fea4335e0ac2e13bc94f9e3142cc396e 100644
--- a/aconversions/src/rg2re/rrg2re/RRGAlgebraic.cpp
+++ b/aconversions/src/rg2re/rrg2re/RRGAlgebraic.cpp
@@ -31,20 +31,20 @@ RegExp RRGAlgebraic::convert( void )
 
     for( const auto & rule : m_grammar.getRules( ) )
     {
-        const Symbol & leftSide = * rule.getLeftSide( ).begin( );
+        const Symbol & leftSide = rule.getLeftSide( ).front( );
         if( rule.getRightSide( ).size( ) == 0 )
         {
             m_solver.addEquation( leftSide, new RegExpEpsilon( ) );
         }
         else if( rule.getRightSide( ).size( ) == 1 )
         {
-            const Symbol & input = * rule.getRightSide( ).begin( );
+            const Symbol & input = rule.getRightSide( ).front( );
             m_solver.addEquation( leftSide, new RegExpSymbol( input.getSymbol( ) ) );
         }
         else
         {
-            const Symbol input = * rule.getRightSide( ).begin( );
-            const Symbol nt = * ( std::next( rule.getRightSide( ).begin( ) ) );
+            const Symbol input = rule.getRightSide( ).front( );
+            const Symbol nt = rule.getRightSide( ).back( );
             m_solver.addEquation( leftSide, nt, new RegExpSymbol( input.getSymbol( ) ) );
         }
     }
diff --git a/aconversions/src/rg2rg/lrg2rrg/LeftToRightRegularGrammar.cpp b/aconversions/src/rg2rg/lrg2rrg/LeftToRightRegularGrammar.cpp
index cb576b7d89915ab004b88067310afed264375f94..80d5559eb2ca331b1feeb5e30b1b955957d1ab61 100644
--- a/aconversions/src/rg2rg/lrg2rrg/LeftToRightRegularGrammar.cpp
+++ b/aconversions/src/rg2rg/lrg2rrg/LeftToRightRegularGrammar.cpp
@@ -41,27 +41,27 @@ RightRegularGrammar LeftToRightRegularGrammar::convert( void )
     {
         if( rule.getRightSide( ).size( ) == 2 )
         {
-            list<Symbol> leftSide = { * rule.getRightSide( ).begin( ) };
-            list<Symbol> rightSide = { * std::next( rule.getRightSide( ).begin( ) ), * rule.getLeftSide( ).begin( ) };
+            list<Symbol> leftSide = { rule.getRightSide( ).front( ) };
+            list<Symbol> rightSide = { rule.getRightSide( ).back( ), rule.getLeftSide( ).front( ) };
             m_rrg.addRule( Rule( leftSide, rightSide ) );
 
-            if( * rule.getLeftSide( ).begin( ) == m_lrg.getStartSymbol( ) )
+            if( rule.getLeftSide( ).front( ) == m_lrg.getStartSymbol( ) )
             {
-                list<Symbol> leftSide = { * rule.getRightSide( ).begin( ) };
-                list<Symbol> rightSide = { * std::next( rule.getRightSide( ).begin( ) ) };
+                list<Symbol> leftSide = { rule.getRightSide( ).front( ) };
+                list<Symbol> rightSide = { rule.getRightSide( ).back( ) };
                 m_rrg.addRule( Rule( leftSide, rightSide ) );
             }
         }
         else if( rule.getRightSide( ).size( ) == 1 )
         {
             list<Symbol> leftSide = { m_rrg.getStartSymbol( ) };
-            list<Symbol> rightSide = { * rule.getRightSide( ).begin( ), *rule.getLeftSide( ).begin( ) };
+            list<Symbol> rightSide = { rule.getRightSide( ).front( ), rule.getLeftSide( ).front( ) };
             m_rrg.addRule( Rule( leftSide, rightSide ) );
 
-            if( * rule.getLeftSide( ).begin( ) == m_lrg.getStartSymbol( ) )
+            if( rule.getLeftSide( ).front( ) == m_lrg.getStartSymbol( ) )
             {
                 list<Symbol> leftSide = { m_rrg.getStartSymbol( ) };
-                list<Symbol> rightSide = { * rule.getRightSide( ).begin( ) };
+                list<Symbol> rightSide = { rule.getRightSide( ).front( ) };
                 m_rrg.addRule( Rule( leftSide, rightSide ) );
             }
         }
diff --git a/aconversions/src/rg2rg/rrg2lrg/RightToLeftRegularGrammar.cpp b/aconversions/src/rg2rg/rrg2lrg/RightToLeftRegularGrammar.cpp
index 75a62e6708a56cdfaee457d43d28b2fc80b82fad..35490051646cb43bad0ee5c55e624c7586cf1680 100644
--- a/aconversions/src/rg2rg/rrg2lrg/RightToLeftRegularGrammar.cpp
+++ b/aconversions/src/rg2rg/rrg2lrg/RightToLeftRegularGrammar.cpp
@@ -41,27 +41,27 @@ LeftRegularGrammar RightToLeftRegularGrammar::convert( void )
     {
         if( rule.getRightSide( ).size( ) == 2 )
         {
-            list<Symbol> leftSide = { * std::next( rule.getRightSide( ).begin( ) ) };
-            list<Symbol> rightSide = { * rule.getLeftSide( ).begin( ), * rule.getRightSide( ).begin( ) };
+            list<Symbol> leftSide = { rule.getRightSide( ).back( ) };
+            list<Symbol> rightSide = { rule.getLeftSide( ).front( ), rule.getRightSide( ).front( ) };
             m_lrg.addRule( Rule( leftSide, rightSide ) );
 
-            if( * rule.getLeftSide( ).begin( ) == m_rrg.getStartSymbol( ) )
+            if( rule.getLeftSide( ).front( ) == m_rrg.getStartSymbol( ) )
             {
-                list<Symbol> leftSide = { * std::next( rule.getRightSide( ).begin( ) ) };
-                list<Symbol> rightSide = { * rule.getRightSide( ).begin( ) };
+                list<Symbol> leftSide = { rule.getRightSide( ).back( ) };
+                list<Symbol> rightSide = { rule.getRightSide( ).front( ) };
                 m_lrg.addRule( Rule( leftSide, rightSide ) );
             }
         }
         else if( rule.getRightSide( ).size( ) == 1 )
         {
             list<Symbol> leftSide = { m_lrg.getStartSymbol( ) };
-            list<Symbol> rightSide = { * rule.getLeftSide( ).begin( ), *rule.getRightSide( ).begin( ) };
+            list<Symbol> rightSide = { rule.getLeftSide( ).front( ), rule.getRightSide( ).front( ) };
             m_lrg.addRule( Rule( leftSide, rightSide ) );
 
-            if( * rule.getLeftSide( ).begin( ) == m_rrg.getStartSymbol( ) )
+            if( rule.getLeftSide( ).front( ) == m_rrg.getStartSymbol( ) )
             {
                 list<Symbol> leftSide = { m_lrg.getStartSymbol( ) };
-                list<Symbol> rightSide = { * rule.getRightSide( ).begin( ) };
+                list<Symbol> rightSide = { rule.getRightSide( ).front( ) };
                 m_lrg.addRule( Rule( leftSide, rightSide ) );
             }
         }