diff --git a/adeterminize.vpa/src/VPADeterminizer.cpp b/adeterminize.vpa/src/VPADeterminizer.cpp
index 62c916db74edde4aca65cb5ee806262516cac227..8227d968fa1f77d09a9aee8975841dafc4760d56 100644
--- a/adeterminize.vpa/src/VPADeterminizer.cpp
+++ b/adeterminize.vpa/src/VPADeterminizer.cpp
@@ -147,6 +147,21 @@ void VPADeterminizer::buildStackAlphabet() {
 }
 
 
+VPADeterminizer::StateData* VPADeterminizer::getUnmarkedState() {
+    StateData* unmarkedStateData = NULL;
+    for (map<string, StateData>::iterator stateIter = this->states.begin();
+            stateIter != this->states.end();
+            stateIter++) {
+        if (!stateIter->second.isMarked) {
+            unmarkedStateData = &stateIter->second;
+            unmarkedStateData->isMarked = true;
+            return unmarkedStateData;
+        }
+    }
+    return NULL;
+}
+
+
 VPADeterminizer::VPADeterminizer(PDA* automaton) {
     this->nondeterministicVPA = automaton;
 }
@@ -168,16 +183,7 @@ PDA* VPADeterminizer::determinize() {
     set<TransitionPDA> transitions = this->nondeterministicVPA->getTransitions();
     
     while (true) {
-        StateData* unmarkedStateData = NULL;
-        for (map<string, StateData>::iterator stateIter = this->states.begin();
-                stateIter != this->states.end();
-                stateIter++) {
-            if (!stateIter->second.isMarked) {
-                unmarkedStateData = &stateIter->second;
-                unmarkedStateData->isMarked = true;
-                break;
-            }
-        }
+        StateData* unmarkedStateData = this->getUnmarkedState();
         if (unmarkedStateData == NULL) {
             break;
         }
@@ -214,8 +220,9 @@ PDA* VPADeterminizer::determinize() {
                     }
                 }
             }
+            const State& fromState = unmarkedStateData->state;
             const State& toState = this->getOrCreateState(sPrimed, rPrimed);
-            const TransitionPDA transition(unmarkedStateData->state, *internalSymbol, toState);
+            const TransitionPDA transition(fromState, *internalSymbol, toState);
             this->deterministicVPA->addTransition(transition);
         }
         
@@ -236,11 +243,12 @@ PDA* VPADeterminizer::determinize() {
                 }
             }
             SComponent& s = unmarkedStateData->s;
+            const State& fromState = unmarkedStateData->state;
             const State& toState = this->getOrCreateState(this->getSComponentWithStatesIdentity(), rPrimed);
             string stackSymbolName = this->buildStackSymbolName(s, r, *callSymbol);
             list<Symbol> pop;
             list<Symbol> push(1, Symbol(stackSymbolName));
-            const TransitionPDA transition(unmarkedStateData->state, *callSymbol, toState, pop, push);
+            const TransitionPDA transition(fromState, *callSymbol, toState, pop, push);
             this->deterministicVPA->addTransition(transition);
         }
         
@@ -281,10 +289,11 @@ PDA* VPADeterminizer::determinize() {
                     }
                 }
             }
+            const State& fromState = unmarkedStateData->state;
             const State& toState = this->getOrCreateState(sPrimed, rPrimed);
             list<Symbol> pop(1, BOTTOM_OF_STACK_SYMBOL);
             list<Symbol> push;
-            const TransitionPDA transition(unmarkedStateData->state, *returnSymbol, toState, pop, push);
+            const TransitionPDA transition(fromState, *returnSymbol, toState, pop, push);
             this->deterministicVPA->addTransition(transition);
             
             // Otherwise
@@ -351,11 +360,12 @@ PDA* VPADeterminizer::determinize() {
                         }
                     }
 
+                    const State& fromState = unmarkedStateData->state;
                     const State& toState = this->getOrCreateState(sDoublePrimed, rDoublePrimed);
                     string stackSymbolName = this->buildStackSymbolName(sPrimed, rPrimed, *callSymbol);
                     list<Symbol> pop(1, Symbol(stackSymbolName));
                     list<Symbol> push;
-                    const TransitionPDA transition(unmarkedStateData->state, *returnSymbol, toState, pop, push);
+                    const TransitionPDA transition(fromState, *returnSymbol, toState, pop, push);
                     this->deterministicVPA->addTransition(transition);
                 }
             }
diff --git a/adeterminize.vpa/src/VPADeterminizer.h b/adeterminize.vpa/src/VPADeterminizer.h
index 1ddcfcbfce2e8be69a87364c9b75d0cc4f696fc3..fee14797e9acd326538b588cbe1e87cd87d2b6e6 100644
--- a/adeterminize.vpa/src/VPADeterminizer.h
+++ b/adeterminize.vpa/src/VPADeterminizer.h
@@ -93,6 +93,7 @@ protected:
     void divideInputAlphabet();
     string buildStackSymbolName(const SComponent& s, const RComponent& r, const Symbol& input);
     void buildStackAlphabet();
+    StateData* getUnmarkedState();
     
 public:
     static const Symbol BOTTOM_OF_STACK_SYMBOL;