 				break;
 		}
 		
-		x *= mmToStep * scale;
-		y *= mmToStep * scale;
-		
-	}
-	
+		x *= scale;
+		y *= scale;
+		
+	}
+	
+	x *= mmToStep;
+	y *= mmToStep;
 	if ( current_pos.x == x && current_pos.y == y) {
 		// it's a useless move to!
 		return;

	for ( int i = 0; i < length - 1; i++) { // length-1 because we always parse from the position after the comma: atof(input[i+1])
		c = input[i];
		if ( c == ',' && v < MAX_PARSE_VALUES) {
			lVals[v] = mmToStep * atof(&input[i + 1]);
			v ++;
		}
	}

				break;
		}
		
		x *= scale;
		y *= scale;
		
	}
	
	x *= mmToStep;
	y *= mmToStep;
	
	if (current_pos.z != z) {
		moveTo(current_pos.x, current_pos.y, z);
