diff --git a/src/main/java/dk/camelot64/kickc/model/ControlFlowGraph.java b/src/main/java/dk/camelot64/kickc/model/ControlFlowGraph.java
index 9f714d0ab..7a38df5b0 100644
--- a/src/main/java/dk/camelot64/kickc/model/ControlFlowGraph.java
+++ b/src/main/java/dk/camelot64/kickc/model/ControlFlowGraph.java
@@ -84,27 +84,6 @@ public class ControlFlowGraph implements Serializable {
       return null;
    }
 
-   /**
-    * Get all assignments of the passed variable.
-    *
-    * @param variable The variable to find the assignment for
-    * @return All assignments.
-    */
-   public List<StatementLValue> getAssignments(SymbolVariableRef variable) {
-      ArrayList<StatementLValue> assignments = new ArrayList<>();
-      for(ControlFlowBlock block : getAllBlocks()) {
-         for(Statement statement : block.getStatements()) {
-            if(statement instanceof StatementLValue) {
-               StatementLValue assignment = (StatementLValue) statement;
-               if(variable.equals(assignment.getlValue())) {
-                  assignments.add(assignment);
-               }
-            }
-         }
-      }
-      return assignments;
-   }
-
    /** Any assignment of a value to a SymbolVariable.
     * Potential assignments include StatementLValue, StatementPhi and Variable.initValue
     * */
@@ -174,33 +153,6 @@ public class ControlFlowGraph implements Serializable {
       return varAssignments;
    }
 
-   /**
-    * Get the block containing the assignment of the passed variable. Assumes that only a single assignment exists.
-    *
-    * @param variable The variable to find the assignment for
-    * @return The block containing the assignment. null if the variable is not assigned.
-    */
-   public ControlFlowBlock getAssignmentBlock(VariableRef variable) {
-      for(ControlFlowBlock block : getAllBlocks()) {
-         for(Statement statement : block.getStatements()) {
-            if(statement instanceof StatementLValue) {
-               StatementLValue assignment = (StatementLValue) statement;
-               if(variable.equals(assignment.getlValue())) {
-                  return block;
-               }
-            } else if(statement instanceof StatementPhiBlock) {
-               for(StatementPhiBlock.PhiVariable phiVariable : ((StatementPhiBlock) statement).getPhiVariables()) {
-                  if(phiVariable.getVariable().equals(variable)) {
-                     return block;
-                  }
-               }
-            }
-         }
-      }
-      return null;
-   }
-
-
    public ControlFlowBlock getDefaultSuccessor(ControlFlowBlock block) {
       if(block.getDefaultSuccessor() != null) {
          return getBlock(block.getDefaultSuccessor());
diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2ConstantIdentification.java b/src/main/java/dk/camelot64/kickc/passes/Pass2ConstantIdentification.java
index 332468b19..fe196cf84 100644
--- a/src/main/java/dk/camelot64/kickc/passes/Pass2ConstantIdentification.java
+++ b/src/main/java/dk/camelot64/kickc/passes/Pass2ConstantIdentification.java
@@ -1,9 +1,6 @@
 package dk.camelot64.kickc.passes;
 
-import dk.camelot64.kickc.model.CompileError;
-import dk.camelot64.kickc.model.ConstantNotLiteral;
-import dk.camelot64.kickc.model.ControlFlowBlock;
-import dk.camelot64.kickc.model.Program;
+import dk.camelot64.kickc.model.*;
 import dk.camelot64.kickc.model.iterator.ProgramValueIterator;
 import dk.camelot64.kickc.model.operators.OperatorBinary;
 import dk.camelot64.kickc.model.operators.OperatorUnary;
@@ -170,13 +167,13 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
          if(variable.isVolatile() || !variable.isKindLoadStore())
             // Do not examine volatiles, non-constants or versioned variables
             continue;
-         List<StatementLValue> assignments = getGraph().getAssignments(variable.getRef());
-         if(assignments.size() == 1) {
-            StatementLValue statementLValue = assignments.get(0);
-            if(!(statementLValue instanceof StatementAssignment))
+         final List<ControlFlowGraph.VarAssignment> varAssignments = ControlFlowGraph.getVarAssignments(variable.getRef(), getGraph(), getScope());
+         if(varAssignments.size() == 1) {
+            final ControlFlowGraph.VarAssignment varAssignment = varAssignments.get(0);
+            if(!ControlFlowGraph.VarAssignment.Type.STATEMENT_LVALUE.equals(varAssignment.type) || !(varAssignment.statementLValue instanceof StatementAssignment))
                // Only look at assignments
                continue;
-            StatementAssignment assignment = (StatementAssignment) statementLValue;
+            StatementAssignment assignment = (StatementAssignment) varAssignment.statementLValue;
             LValue lValue = assignment.getlValue();
             if(lValue instanceof VariableRef) {
                VariableRef varRef = (VariableRef) lValue;