diff --git a/cpu/cpujit.py b/cpu/cpujit.py
index 20d414aeb3979c8461b176356d708d7a07ff5111..459359e3a347c113d389e60434b1d02362de284a 100644
--- a/cpu/cpujit.py
+++ b/cpu/cpujit.py
@@ -170,7 +170,8 @@ def compile(code, tmpDir, libFile, createAssemblyCode=False):
 def compileAndLoad(kernelFunctionNode):
     tmpDir = tempfile.mkdtemp()
     libFile = os.path.join(tmpDir, "jit.so")
-    compile(generateC(kernelFunctionNode), tmpDir, libFile)
+    sourceCode = generateC(kernelFunctionNode)
+    compile(sourceCode, tmpDir, libFile)
     loadedJitLib = cdll.LoadLibrary(libFile)
     shutil.rmtree(tmpDir)
 
diff --git a/sympyextensions.py b/sympyextensions.py
index 687f97d79b7fbefdbdf7df471df054d966124eda..73dc9e2faa4751b79366dffc08e617ec2eac6963 100644
--- a/sympyextensions.py
+++ b/sympyextensions.py
@@ -129,7 +129,7 @@ def replaceSecondOrderProducts(expr, searchSymbols, positive=None, replaceMixed=
             else:
                 otherFactors *= t
         if len(distinctVelTerms) == 2 and nrOfVelTerms == 2:
-            u, v = list(distinctVelTerms)
+            u, v = sorted(list(distinctVelTerms), key=lambda symbol: symbol.name)
             if positive is None:
                 otherFactorsWithoutSymbols = otherFactors
                 for s in otherFactors.atoms(sp.Symbol):
diff --git a/transformations.py b/transformations.py
index e026cd3797a9c0e3388680387761256282fbf1b6..e07b1de9c7015507384dc3af15001fcff63d0aa2 100644
--- a/transformations.py
+++ b/transformations.py
@@ -1,4 +1,4 @@
-from collections import defaultdict
+from collections import defaultdict, OrderedDict
 from operator import attrgetter
 
 import sympy as sp
@@ -62,7 +62,7 @@ def makeLoopOverDomain(body, functionName, iterationSlice=None, ghostLayers=None
         if len(shapeSet) != 1:
             raise ValueError("Differently sized field accesses in loop body: " + str(shapeSet))
 
-    shape = list(shapeSet)[0]
+    shape = list(sorted(shapeSet, key=lambda e: str(e[0])))[0]
 
     if iterationSlice is not None:
         iterationSlice = normalizeSlice(iterationSlice, shape)
@@ -222,6 +222,9 @@ def resolveFieldAccesses(astNode, readOnlyFieldNames=set(), fieldToBasePointerIn
                                     counters to index the field these symbols are used as coordinates
     :return: transformed AST
     """
+    fieldToBasePointerInfo = OrderedDict(sorted(fieldToBasePointerInfo.items(), key=lambda pair: pair[0]))
+    fieldToFixedCoordinates = OrderedDict(sorted(fieldToFixedCoordinates.items(), key=lambda pair: pair[0]))
+
     def visitSympyExpr(expr, enclosingBlock, sympyAssignment):
         if isinstance(expr, Field.Access):
             fieldAccess = expr
@@ -359,9 +362,8 @@ def splitInnerLoop(astNode, symbolGroups):
     assert len(outerLoop) == 1, "Error in AST, multiple outermost loops."
     outerLoop = outerLoop[0]
 
-    symbolsWithTemporaryArray = dict()
-
-    assignmentMap = {a.lhs: a for a in innerLoop.body.args}
+    symbolsWithTemporaryArray = OrderedDict()
+    assignmentMap = OrderedDict((a.lhs, a) for a in innerLoop.body.args)
 
     assignmentGroups = []
     for symbolGroup in symbolGroups: