diff --git a/Athos/SeeDot/Compiler.py b/Athos/SeeDot/Compiler.py
index 6cbc18ca3c8dcb511d77318a5a553ca9bb2b68e5..258c95e77fa42b2f54ebde2f21388e0a16bce10a 100644
--- a/Athos/SeeDot/Compiler.py
+++ b/Athos/SeeDot/Compiler.py
@@ -83,7 +83,7 @@ class Compiler:
 		prog = res[0]
 		expr = res[1]
 		output_scale = compiler.scaleFacMapping[expr.idf]
-		if output_scale == Util.Config.consSF:
+		if output_scale == -1 or output_scale == Util.Config.consSF:
 			return (prog, expr)
 		elif output_scale > Util.Config.consSF:
 			scale_down =  output_scale - Util.Config.consSF
@@ -105,7 +105,7 @@ class Compiler:
 			prog = IRUtil.prog_merge(prog, new_prog)
 			return (prog, expr)
 		else:
-			assert False, "Scale up shouldnt be required of final output. We lost precision somewhere"
+			assert False, "Scale up shouldnt be required of final output {} -> {}. We lost precision somewhere".format(output_scale, Util.Config.consSF)
 
 	def run(self):
 		with open(Util.Config.astFile, 'rb') as ff:
diff --git a/Athos/SeeDot/IR/IRBuilderCSF.py b/Athos/SeeDot/IR/IRBuilderCSF.py
index e1fc8430d61047dc0bdda2adc952969e810adf8d..fb0ce8f18c72c89a670d8b3fb700c2a97d880a3e 100644
--- a/Athos/SeeDot/IR/IRBuilderCSF.py
+++ b/Athos/SeeDot/IR/IRBuilderCSF.py
@@ -814,8 +814,8 @@ class IRBuilderCSF(IRBuilderAST):
 		return (prog_3, expr_3)
 
 	def visitBopConv(self, node:AST.BOp, args=None):
-		(prog1, expr1) = self.visit(node.expr1)
-		(prog2, expr2) = self.visit(node.expr2)
+		(prog1, expr_1) = self.visit(node.expr1)
+		(prog2, expr_2) = self.visit(node.expr2)
 		
 		convDim = 2
 		if (AST.PaddingKeysDict.ConvDim in node.options):
@@ -831,7 +831,7 @@ class IRBuilderCSF(IRBuilderAST):
 			assert(False)
 
 		returnExpr = self.getTempVar()
-		comment = IR.Comment(expr1.idf + ' # ' + expr2.idf + ', convDim = ' + str(convDim))
+		comment = IR.Comment(expr_1.idf + ' # ' + expr_2.idf + ', convDim = ' + str(convDim))
 		funcCallArgsDict = OrderedDict()
 		funcCallArgsDict[IR.Int(N, 32)] = "N"
 		if convDim == 3:
@@ -861,8 +861,8 @@ class IRBuilderCSF(IRBuilderAST):
 			funcCallArgsDict[IR.Int(node.options[AST.PaddingKeysDict.group], 32)] = "G"
 			isGroupConv = True
 
-		funcCallArgsDict[expr1] = "input"
-		funcCallArgsDict[expr2] = "filter"
+		funcCallArgsDict[expr_1] = "input"
+		funcCallArgsDict[expr_2] = "filter"
 		if convDim == 3:
 			funcCallArgsDict[IR.Int(Util.Config.consSF, 32)] = "consSF"
 		funcCallArgsDict[returnExpr] = "output"
@@ -886,13 +886,13 @@ class IRBuilderCSF(IRBuilderAST):
 			progExtraAfter = self.addTruncateFunctionCall(node, "Conv", returnExpr, Util.Config.consSF)
 		else:
 			inputs_same = (expr_1.idf == expr_2.idf)
-			expr1_sf = self.scaleFacMapping[expr1.idf]
-			expr2_sf = self.scaleFacMapping[expr2.idf]
+			expr1_sf = self.scaleFacMapping[expr_1.idf]
+			expr2_sf = self.scaleFacMapping[expr_2.idf]
 			if (expr1_sf > self.scaleFac):
-				progExtraBefore = self.addTruncateFunctionCall(node.expr1, "Conv", expr1, expr1_sf-self.scaleFac)
+				progExtraBefore = self.addTruncateFunctionCall(node.expr1, "Conv", expr_1, expr1_sf-self.scaleFac)
 				self.scaleFacMapping[expr1.idf] = self.scaleFac
 			if (not inputs_same) and (expr2_sf > self.scaleFac):
-				progExtraBefore = IRUtil.prog_merge(progExtraBefore, self.addTruncateFunctionCall(node.expr2, "Conv", expr2, expr2_sf-self.scaleFac))
+				progExtraBefore = IRUtil.prog_merge(progExtraBefore, self.addTruncateFunctionCall(node.expr2, "Conv", expr_2, expr2_sf-self.scaleFac))
 				self.scaleFacMapping[expr_2.idf] = self.scaleFac
 			self.scaleFacMapping[returnExpr.idf] = 2*self.scaleFac
 
@@ -901,8 +901,8 @@ class IRBuilderCSF(IRBuilderAST):
 		return (returnProg, returnExpr)
 
 	def visitBopConvTranspose(self, node:AST.BOp, args=None):
-		(prog1, expr1) = self.visit(node.expr1)
-		(prog2, expr2) = self.visit(node.expr2)
+		(prog1, expr_1) = self.visit(node.expr1)
+		(prog2, expr_2) = self.visit(node.expr2)
 
 		convDim = 2
 		if (AST.PaddingKeysDict.ConvDim in node.options):
@@ -942,7 +942,7 @@ class IRBuilderCSF(IRBuilderAST):
 			assert(AST.Operators.findConvOutputImgSize(d_prime_tilde, pad_d_tr_total, FD, stride_d_tr) == D)
 
 		returnExpr = self.getTempVar()
-		comment = IR.Comment(expr1.idf + ' #T ' + expr2.idf + ', convDim = ' + str(convDim))
+		comment = IR.Comment(expr_1.idf + ' #T ' + expr2.idf + ', convDim = ' + str(convDim))
 		funcCallArgsDict = OrderedDict()
 		funcCallArgsDict[IR.Int(N, 32)] = "N"
 		if convDim==3:
@@ -971,8 +971,8 @@ class IRBuilderCSF(IRBuilderAST):
 		funcCallArgsDict[IR.Int(strideH, 32)] = "strideH"
 		funcCallArgsDict[IR.Int(strideW, 32)] = "strideW"
 
-		funcCallArgsDict[expr1] = "input"
-		funcCallArgsDict[expr2] = "filter"
+		funcCallArgsDict[expr_1] = "input"
+		funcCallArgsDict[expr_2] = "filter"
 		if convDim == 3:
 			funcCallArgsDict[IR.Int(Util.Config.consSF, 32)] = "consSF"
 		funcCallArgsDict[returnExpr] = "output"
@@ -992,13 +992,13 @@ class IRBuilderCSF(IRBuilderAST):
 			progExtraAfter = self.addTruncateFunctionCall(node, "ConvTranspose", returnExpr, self.scaleFac)
 		else:
 			inputs_same = (expr_1.idf == expr_2.idf)
-			expr1_sf = self.scaleFacMapping[expr1.idf]
-			expr2_sf = self.scaleFacMapping[expr2.idf]
+			expr1_sf = self.scaleFacMapping[expr_1.idf]
+			expr2_sf = self.scaleFacMapping[expr_2.idf]
 			if (expr1_sf > self.scaleFac):
-				progExtraBefore = self.addTruncateFunctionCall(node.expr1, "ConvTranspose", expr1, expr1_sf-self.scaleFac)
-				self.scaleFacMapping[expr1.idf] = self.scaleFac
+				progExtraBefore = self.addTruncateFunctionCall(node.expr1, "ConvTranspose", expr_1, expr1_sf-self.scaleFac)
+				self.scaleFacMapping[expr_1.idf] = self.scaleFac
 			if (not inputs_same) and (expr2_sf > self.scaleFac):
-				progExtraBefore = IRUtil.prog_merge(progExtraBefore, self.addTruncateFunctionCall(node.expr2, "ConvTranspose", expr2, expr2_sf-self.scaleFac))
+				progExtraBefore = IRUtil.prog_merge(progExtraBefore, self.addTruncateFunctionCall(node.expr2, "ConvTranspose", expr_2, expr2_sf-self.scaleFac))
 				self.scaleFacMapping[expr2.idf] = self.scaleFac
 			self.scaleFacMapping[returnExpr.idf] = 2*self.scaleFac
 		
@@ -1216,7 +1216,7 @@ class IRBuilderCSF(IRBuilderAST):
 		funcArgsList[tmpExpr] = "outArr"
 
 		if not(Util.Config.disableTruncOpti):
-			self.scaleFacMapping[tmpExpr.idf] = 0 #TODO -- is this the right thing to do?
+			self.scaleFacMapping[tmpExpr.idf] = -1
 
 		funcCall = IR.FuncCall("ArgMax" + self.varNameDelim + str(len(outputShape)), funcArgsList)
 		comment = IR.Comment(str(node.metadata))
diff --git a/Athos/SeeDot/Optimizations/GarbageCollector.py b/Athos/SeeDot/Optimizations/GarbageCollector.py
index f0b99d68b35ca286cdab087d12310d1d1454a62b..27a2dcafb19d59fa1b302a21554df9cf621d035c 100644
--- a/Athos/SeeDot/Optimizations/GarbageCollector.py
+++ b/Athos/SeeDot/Optimizations/GarbageCollector.py
@@ -263,4 +263,10 @@ class GarbageCollector(ASTVisitor):
 
 	def visitReduce(self, node:AST.Reduce, args):
 		usedVars = self.visit(node.expr, args)
+		return usedVars
+
+	def visitFusedBatchNorm(self, node:AST.FusedBatchNorm, args):
+		usedVars = self.visit(node.expr, args)
+		usedVars |= self.visit(node.multExpr, args)
+		usedVars |= self.visit(node.addExpr, args)
 		return usedVars
\ No newline at end of file
diff --git a/Athos/TFCompiler/Graph.py b/Athos/TFCompiler/Graph.py
index 7acbd1d3bfc6a5dd5a345a16729e9654962783aa..4c6bed8d4e261f3385eb21232db1307d91ec1adb 100644
--- a/Athos/TFCompiler/Graph.py
+++ b/Athos/TFCompiler/Graph.py
@@ -404,7 +404,7 @@ class Value:
                 return (True, cnt)
             elif (curToken == "s:"):
                 if (errIfTokensNotMinLen(tokens, 2, cnt, "Value")): return (False, cnt)
-                self.__val = tokens[1]
+                self.__val = tokens[1][1:-1]
             elif (curToken == "i:"):
                 if (errIfTokensNotMinLen(tokens, 2, cnt, "Value")): return (False, cnt)
                 self.__val = int(tokens[1])