diff --git a/machines/unsp/machine.c b/machines/unsp/machine.c
index 2c99b6c..a2791b7 100644
--- a/machines/unsp/machine.c
+++ b/machines/unsp/machine.c
@@ -519,33 +519,38 @@
 		}
 	}
 
-	if (ic->code != PUSH) {
-		// no register is available, we need to push/pop one, making sure it is not used by the IC
-		// For PUSH IC this is not possible, because the IC needs to use the stack, so the push/pop
-		// sequence won't be correct. Maybe we can use R1 since it's also used for the return value
-		// and so it is possibly corrupt by the called function?
-		for (int reg = 2; reg <= 5; reg++) {
-			if ((ic->q1.flags & REG) && (ic->q1.reg == reg))
-				continue;
-			if ((ic->q2.flags & REG) && (ic->q2.reg == reg))
-				continue;
-			if ((ic->z.flags & REG) && (ic->z.reg == reg))
-				continue;
+	// no register is available, we need to push/pop one, making sure it is not used by the IC
+	// For PUSH IC this is not possible, because the IC needs to use the stack, so the push/pop
+	// sequence won't be correct. Maybe we can use R1 since it's also used for the return value
+	// and so it is possibly corrupt by the called function?
+	for (int reg = 2; reg <= 5; reg++) {
+		if ((ic->q1.flags & REG) && (ic->q1.reg == reg))
+			continue;
+		if ((ic->q2.flags & REG) && (ic->q2.reg == reg))
+			continue;
+		if ((ic->z.flags & REG) && (ic->z.reg == reg))
+			continue;
 
-			if (regs[reg] < 3)
-				regs[reg] = 3;
-			else
-				regs[reg]++;
+		if (regs[reg] < 3)
+			regs[reg] = 3;
+		else
+			regs[reg]++;
 
+		if (ic->code == PUSH) {
+			// No register is available, and this is a PUSH IC so we can't use the stack to temporarily
+			// save one. Instead, use a preset memory address (at top of stack) which is reserved for
+			// this usage.
+			emit(f, "\tST %s, (0x27FF)\n", regnames[reg]);
+		} else {
 			emit(f, "\tPUSH %s, %s, (SP)\n", regnames[reg], regnames[reg]);
-			return reg;
 		}
+		return reg;
 	}
 	fprintf(stderr, "No more registers!\n");
 	return 0;
 }
 
-static void cg_freereg(FILE* f, int r)
+static void cg_freereg(FILE* f, int r, struct IC* ic)
 {
 	if (regs[r] < 2) {
 		fprintf(stderr, "oops\n");
@@ -555,7 +560,11 @@
 
 	if (regs[r] >= 3) {
 		regs[r] --;
-		emit(f, "\tPOP %s, %s, (SP)\n", regnames[r], regnames[r]);
+		if (ic->code == PUSH) {
+				emit(f, "\tLD %s, (0x27FF)\n", regnames[r]);
+		} else {
+			emit(f, "\tPOP %s, %s, (SP)\n", regnames[r], regnames[r]);
+		}
 	} else {
 		regs[r] = 0;
 	}
@@ -649,7 +658,7 @@
 				emit(f, "\tST\t%s, ", regnames[tmpreg]);
 				emitvar(f, p, &p->z, offset, true, 0);
 				emit(f, "\n");
-				cg_freereg(f, tmpreg);
+				cg_freereg(f, tmpreg, p);
 			}
 		}
 		return 1;
@@ -676,7 +685,7 @@
 		emitval(f, &p->z.val, ztyp(p));
 		emit(f, ")\n");
 
-		cg_freereg(f, tmpreg);
+		cg_freereg(f, tmpreg, p);
 		
 		return 1;
 	}
@@ -739,7 +748,7 @@
 			emitvar(f, p, &p->z, offset, true, 0);
 			emit(f, "\n");
 
-			cg_freereg(f, tmpreg);
+			cg_freereg(f, tmpreg, p);
 		}
 		return 1;
 	}
@@ -769,7 +778,7 @@
 			emitvar(f, p, &p->z, offset, true, 0);
 			emit(f, "\n");
 
-			cg_freereg(f, tmpreg);
+			cg_freereg(f, tmpreg, p);
 		}
 		return 1;
 	}
@@ -870,7 +879,7 @@
 							emitvar(f, p, &p->z, offset, true, 0);
 							emit(f, " ; ASSIGN DREFOBJ\n");
 							emit(f, "\tST\t%s, (%s)\n", regnames[tmpreg], regnames[tmpreg2]);
-							cg_freereg(f, tmpreg2);
+							cg_freereg(f, tmpreg2, p);
 						}
 					} else {
 						emit(f, "# MOVE2 %d\n", p->z.flags);
@@ -879,7 +888,7 @@
 						emit(f, "\n");
 					}
 
-					cg_freereg(f, tmpreg);
+					cg_freereg(f, tmpreg, p);
 
 					continue;
 				}
@@ -899,7 +908,7 @@
 					emit(f, "\tST\t%s, ", regnames[tmpreg]);
 					emitvar(f, p, &p->z, offset, true, 0);
 					emit(f, "\n");
-					cg_freereg(f, tmpreg);
+					cg_freereg(f, tmpreg, p);
 					continue;
 				}
 				if (p->z.flags == (REG|DREFOBJ)) {
@@ -907,7 +916,7 @@
 					int tmpreg = cg_getreg(f, p);
 					emit(f, "\tLD\t%s, ", regnames[tmpreg]); emitval(f, &p->q1.val, q1typ(p)); emit(f, " # ASSIGNT6\n");
 					emit(f, "\tST\t%s, (%s)\n", regnames[tmpreg], regnames[p->z.reg]);
-					cg_freereg(f, tmpreg);
+					cg_freereg(f, tmpreg, p);
 					continue;
 				}
 				if (p->z.flags & REG) {
@@ -919,12 +928,12 @@
 						int tmpreg = cg_getreg(f, p);
 						emit(f, "\tLD\t%s, ", regnames[tmpreg]); emitval(f, &p->q1.val, q1typ(p)); emit(f, "\t# ASSIGN T7\n");
 						emit(f, "\tST\t%s, (%s)\n", regnames[tmpreg], regnames[p->z.reg]);
-						cg_freereg(f, tmpreg);
+						cg_freereg(f, tmpreg, p);
 					} else {
 						if (p->q1.flags & DREFOBJ) {
 							emit(f, "\tLD\t%s, (", regnames[p->z.reg]);
 							emitval(f, &p->q1.val, q1typ(p));
-							emit(f, ")\n");
+							emit(f, ") # ASSIGN T7.5\n");
 						} else {
 							emit(f, "\tLD\t%s, ", regnames[p->z.reg]);
 							emitval(f, &p->q1.val, q1typ(p));
@@ -936,22 +945,25 @@
 				if (p->z.flags == (VAR|DREFOBJ)) {
 					// Constant to external variable
 					int tmpreg = cg_getreg(f, p);
+					int tmpreg2 = cg_getreg(f, p);
 					emit(f, "\tLD\t%s, ", regnames[tmpreg]); emitval(f, &p->q1.val, q1typ(p)); emit(f, " # ASSIGNT8\n");
-					emit(f, "\tST\t%s, ", regnames[tmpreg]);
+					emit(f, "\tLD\t%s, ", regnames[tmpreg2]);
 					emitvar(f, p, &p->z, offset, true, 0);
 					emit(f, "\n");
-					cg_freereg(f, tmpreg);
+					emit(f, "\tST\t%s, (%s)\n", regnames[tmpreg], regnames[tmpreg2]);
+					cg_freereg(f, tmpreg, p);
+					cg_freereg(f, tmpreg2, p);
 					continue;
 				}
 				if ((p->q1.flags == KONST) && (p->z.flags == KONST | DREFOBJ)) {
 					int tmpreg = cg_getreg(f, p);
 					emit(f, "\tLD\t%s, ", regnames[tmpreg]);
 					emitval(f, &p->q1.val, q1typ(p));
-					emit(f, "\n");
+					emit(f, " # ASSIGNT9\n");
 					emit(f, "\tST\t%s, (", regnames[tmpreg]);
 					emitval(f, &p->z.val, ztyp(p));
 					emit(f, ")\n");
-					cg_freereg(f, tmpreg);
+					cg_freereg(f, tmpreg, p);
 					continue;
 				}
 				printf("ASSIGN q1flags: %d zflags %d\n", p->q1.flags, p->z.flags);
@@ -1057,7 +1069,7 @@
 							emit(f, "\tST\t%s, ", regnames[tmpreg]);
 							emitvar(f, p, &p->z, offset, true, 0);
 							emit(f, "\n");
-							cg_freereg(f, tmpreg);
+							cg_freereg(f, tmpreg, p);
 						}
 						continue;
 					}
@@ -1166,7 +1178,7 @@
 								shift -= 4;
 								source = &p->z;
 							}
-							cg_freereg(f, tmpreg);
+							cg_freereg(f, tmpreg, p);
 							continue;
 						} else {
 							emit(f, "\tLD\t%s, ", regnames[tmpreg]);
@@ -1183,7 +1195,7 @@
 								emit(f, "\tST\t%s, ", regnames[tmpreg]);
 								emitvar(f, p, &p->z, offset, true, 0);
 								emit(f, "\n");
-								cg_freereg(f, tmpreg);
+								cg_freereg(f, tmpreg, p);
 							}
 							continue;
 						}
@@ -1232,7 +1244,7 @@
 						if (!(p->z.flags & REG)) {
 							emit(f, "# MULT64\n");
 							emit(f, "\tST\t%s, (BP+%d)\n", regnames[tmpreg], localslot(offset, p->z.v->offset));
-							cg_freereg(f, tmpreg);
+							cg_freereg(f, tmpreg, p);
 						}
 						continue;
 					}
@@ -1307,7 +1319,7 @@
 						printf("flags: %x class %x\n", p->z.flags, p->z.v->storage_class);
 						ierror(0);
 					}
-					cg_freereg(f, tmpreg);
+					cg_freereg(f, tmpreg, p);
 				}
 				continue;
 			}
@@ -1330,7 +1342,7 @@
 							emitvar(f, p, &p->q1, offset, false, 0);
 							emit(f, "\n");
 							emit(f, "\tLD\tPC, %s\n", regnames[tmpreg]);
-							cg_freereg(f, tmpreg);
+							cg_freereg(f, tmpreg, p);
 						} else {
 							emit(f, "\tPUSH\tSR, PC, (SP)\n");
 							emit(f, "\tLD\tPC, ");
@@ -1355,10 +1367,10 @@
 				// FIXME also check if q1 and z are DREFOBJ to use this code, otherwise it's simpler
 				if ((p->q1.flags & REG) && (p->z.flags & REG)) {
 					int tmpreg = cg_getreg(f, p);
-					emit(f, "# CONVERT\n");
+					emit(f, "# CONVERT RR\n");
 					emit(f, "\tLD\t%s, (%s)\n", regnames[tmpreg], regnames[p->q1.reg]);
 					emit(f, "\tST\t%s, (%s)\n", regnames[tmpreg], regnames[p->z.reg]);
-					cg_freereg(f, tmpreg);
+					cg_freereg(f, tmpreg, p);
 					continue;
 				}
 
@@ -1383,24 +1395,33 @@
 							emit(f, "#");
 							emitval(f, &p->q1.val, q1typ(p));
 						}
-						emit(f, "\n");
+						emit(f, "; CONVERT T1\n");
 					}
 
 					if (store) {
-						emit(f, "\tST\t%s, ", regnames[tmpreg]);
-						// TODO use emitoperand?
-						if (p->z.flags & VAR) {
-							emitvar(f, p, &p->z, offset, true, 0);
+						if ((p->z.flags & VAR|DREFOBJ) == VAR|DREFOBJ) {
+							int tmpreg2 = cg_getreg(f, p);
+							emit(f, "\tLD\t%s, ", regnames[tmpreg2]);
+							emitoperand(f, p, &p->z, 0, false, 0);
 							emit(f, "\n");
-						} else if (p->z.flags & (KONST | DREFOBJ)) {
-							emit(f, "(");
-							emitval(f, &p->z.val, ztyp(p));
-							emit(f, ")\n");
+							emit(f, "\tST\t%s, (%s)\n", regnames[tmpreg], regnames[tmpreg2]);
+							cg_freereg(f, tmpreg2, p);
+						} else {
+							emit(f, "\tST\t%s, ", regnames[tmpreg]);
+							// TODO use emitoperand?
+							if (p->z.flags & VAR) {
+								emitvar(f, p, &p->z, offset, true, 0);
+								emit(f, " ; CONVERT T2\n");
+							} else if (p->z.flags & (KONST | DREFOBJ)) {
+								emit(f, "(");
+								emitval(f, &p->z.val, ztyp(p));
+								emit(f, ") ; CONVERT T3\n");
+							}
 						}
 					}
 
 					if (allocreg) {
-						cg_freereg(f, tmpreg);
+						cg_freereg(f, tmpreg, p);
 					}
 					continue;
 				}
@@ -1408,7 +1429,7 @@
 				if ((p->q1.flags == KONST|DREFOBJ) && (p->z.flags & ~SCRATCH == REG|VAR)) {
 					emit(f, "\tLD\t%s, (", regnames[p->z.reg]);
 					emitval(f, &p->q1.val, ztyp(p));
-					emit(f, ")\n");
+					emit(f, ") # CONVERT T4\n");
 					continue;
 				}
 
@@ -1467,7 +1488,7 @@
 						emit(f, "\tCMP\t%s, ", regnames[tmpreg]);
 						emitval(f, &p->q2.val, q2typ(p));
 						emit(f, "\n");
-						cg_freereg(f, tmpreg);
+						cg_freereg(f, tmpreg, p);
 					}
 					continue;
 				}
@@ -1479,7 +1500,7 @@
 					emitvar(f, p, &p->q1, offset, false, 0);
 					emit(f, "\n");
 					emit(f, "\tCMP\t%s, %s\n", regnames[tmpreg], regnames[p->q2.reg]);
-					cg_freereg(f, tmpreg);
+					cg_freereg(f, tmpreg, p);
 					continue;
 				}
 
@@ -1491,7 +1512,7 @@
 					emit(f, "\tCMP\t%s, ", regnames[tmpreg]);
 					emitvar(f, p, &p->q2, offset, false, 0);
 					emit(f, "\n");
-					cg_freereg(f, tmpreg);
+					cg_freereg(f, tmpreg, p);
 					continue;
 				}
 
@@ -1501,7 +1522,7 @@
 					emit(f, "\tCMP\t%s, ", regnames[tmpreg]);
 					emitvar(f, p, &p->q2, offset, false, 0);
 					emit(f, "\n");
-					cg_freereg(f, tmpreg);
+					cg_freereg(f, tmpreg, p);
 					continue;
 				}
 
@@ -1530,7 +1551,7 @@
 						emit(f, "\tLD\t%s, (%s)\n", regnames[tmpreg], regnames[p->q1.reg]);
 						// LD already sets the Z flag, no need to do an explicit compare here
 						//emit(f, "\tCMP\t%s, 0\n", regnames[tmpreg]);
-						cg_freereg(f, tmpreg);
+						cg_freereg(f, tmpreg, p);
 					} else {
 						emit(f, "\tCMP\t%s, 0\n", regnames[p->q1.reg]);
 					}
@@ -1543,7 +1564,7 @@
 					emit(f, "\n");
 					// LD already sets the Z flag, no need to do an explicit compare here
 					//emit(f, "\tCMP\t%s, 0\n", regnames[tmpreg]);
-					cg_freereg(f, tmpreg);
+					cg_freereg(f, tmpreg, p);
 					continue;
 				}
 				break;
@@ -1621,7 +1642,7 @@
 					emitvar(f, p, &p->q1, offset, false, 0);
 					emit(f, "\n");
 					emit(f, "\tPUSH\t%s, %s, (SP)\n", regnames[tmpreg], regnames[tmpreg]);
-					cg_freereg(f, tmpreg);
+					cg_freereg(f, tmpreg, p);
 					continue;
 				}
 
@@ -1633,7 +1654,7 @@
 						emit(f, "\tLD\t%s, %d\n", regnames[tmpreg], p->q1.val.vint >> 16);
 						emit(f, "\tPUSH\t%s, %s, (SP)\n", regnames[tmpreg], regnames[tmpreg]);
 					}
-					cg_freereg(f, tmpreg);
+					cg_freereg(f, tmpreg, p);
 					continue;
 				}
 				break;
@@ -1677,10 +1698,10 @@
 					}
 					continue;
 				} else {
-					// Transfer return code into memory
+					// Transfer return code from R1 into memory
 					if (p->z.flags & VAR) {
 						emit(f, "; GETRETURN\n");
-						emit(f, "\tST\t%s, ", regnames[p->q1.reg]);
+						emit(f, "\tST\tR1, ");
 						emitvar(f, p, &p->z, offset, true, 0);
 						emit(f, "\n");
 						continue;
