diff --git a/export/include/jit/jit-function.h b/export/include/jit/jit-function.h
index a24ac44..1c5ca00 100644
--- a/export/include/jit/jit-function.h
+++ b/export/include/jit/jit-function.h
@@ -53,6 +53,8 @@ JIT_EXPORT_FUNCTION jit_block_t jit_function_get_entry(jit_function_t func) JIT_
 JIT_EXPORT_FUNCTION jit_block_t jit_function_get_current(jit_function_t func) JIT_NOTHROW;
 JIT_EXPORT_FUNCTION jit_function_t jit_function_get_nested_parent(jit_function_t func) JIT_NOTHROW;
 JIT_EXPORT_FUNCTION int jit_function_compile(jit_function_t func) JIT_NOTHROW;
+JIT_EXPORT_FUNCTION int jit_function_compile_keep_build_data(jit_function_t func) JIT_NOTHROW;
+JIT_EXPORT_FUNCTION int jit_function_free_build_data(jit_function_t func) JIT_NOTHROW;
 JIT_EXPORT_FUNCTION int jit_function_is_compiled(jit_function_t func) JIT_NOTHROW;
 JIT_EXPORT_FUNCTION void jit_function_set_recompilable(jit_function_t func) JIT_NOTHROW;
 JIT_EXPORT_FUNCTION void jit_function_clear_recompilable(jit_function_t func) JIT_NOTHROW;
diff --git a/export/include/jit/jit-value.h b/export/include/jit/jit-value.h
index c0222bf..fff4311 100644
--- a/export/include/jit/jit-value.h
+++ b/export/include/jit/jit-value.h
@@ -56,7 +56,7 @@ typedef struct
 JIT_EXPORT_FUNCTION jit_value_t jit_value_create(jit_function_t func, jit_type_t type) JIT_NOTHROW;
 JIT_EXPORT_FUNCTION jit_value_t jit_value_create_nint_constant
 	(jit_function_t func, jit_type_t type, jit_nint const_value) JIT_NOTHROW;
-jit_value_t jit_value_create_long_constant
+JIT_EXPORT_FUNCTION jit_value_t jit_value_create_long_constant
 	(jit_function_t func, jit_type_t type, jit_long const_value) JIT_NOTHROW;
 jit_value_t jit_value_create_float32_constant
 	(jit_function_t func, jit_type_t type,
@@ -95,6 +95,7 @@ int jit_value_is_true(jit_value_t value) JIT_NOTHROW;
 int jit_constant_convert
 	(jit_constant_t *result, const jit_constant_t *value,
 	 jit_type_t type, int overflow_check) JIT_NOTHROW;
+JIT_EXPORT_FUNCTION jit_nint jit_value_get_frame_offset(jit_value_t value) JIT_NOTHROW;
 
 #ifdef	__cplusplus
 };
diff --git a/src/include64/jit/jit-function.h b/src/include64/jit/jit-function.h
index a24ac44..1c5ca00 100644
--- a/src/include64/jit/jit-function.h
+++ b/src/include64/jit/jit-function.h
@@ -53,6 +53,8 @@ JIT_EXPORT_FUNCTION jit_block_t jit_function_get_entry(jit_function_t func) JIT_
 JIT_EXPORT_FUNCTION jit_block_t jit_function_get_current(jit_function_t func) JIT_NOTHROW;
 JIT_EXPORT_FUNCTION jit_function_t jit_function_get_nested_parent(jit_function_t func) JIT_NOTHROW;
 JIT_EXPORT_FUNCTION int jit_function_compile(jit_function_t func) JIT_NOTHROW;
+JIT_EXPORT_FUNCTION int jit_function_compile_keep_build_data(jit_function_t func) JIT_NOTHROW;
+JIT_EXPORT_FUNCTION int jit_function_free_build_data(jit_function_t func) JIT_NOTHROW;
 JIT_EXPORT_FUNCTION int jit_function_is_compiled(jit_function_t func) JIT_NOTHROW;
 JIT_EXPORT_FUNCTION void jit_function_set_recompilable(jit_function_t func) JIT_NOTHROW;
 JIT_EXPORT_FUNCTION void jit_function_clear_recompilable(jit_function_t func) JIT_NOTHROW;
diff --git a/src/include64/jit/jit-value.h b/src/include64/jit/jit-value.h
index 239befe..fff4311 100644
--- a/src/include64/jit/jit-value.h
+++ b/src/include64/jit/jit-value.h
@@ -95,6 +95,7 @@ int jit_value_is_true(jit_value_t value) JIT_NOTHROW;
 int jit_constant_convert
 	(jit_constant_t *result, const jit_constant_t *value,
 	 jit_type_t type, int overflow_check) JIT_NOTHROW;
+JIT_EXPORT_FUNCTION jit_nint jit_value_get_frame_offset(jit_value_t value) JIT_NOTHROW;
 
 #ifdef	__cplusplus
 };
diff --git a/src/jit/jit-compile.c b/src/jit/jit-compile.c
index 33f7760..9cb508c 100644
--- a/src/jit/jit-compile.c
+++ b/src/jit/jit-compile.c
@@ -814,7 +814,7 @@ compile(_jit_compile_t *state, jit_function_t func)
  * @end deftypefun
 @*/
 int
-jit_compile(jit_function_t func)
+jit_compile(jit_function_t func, int free_builder)
 {
 	_jit_compile_t state;
 	int result;
@@ -847,8 +847,11 @@ jit_compile(jit_function_t func)
 		func->entry_point = state.code_start;
 		func->is_compiled = 1;
 
-		/* Free the builder structure, which we no longer require */
-		_jit_function_free_builder(func);
+		if ( free_builder )
+		{
+				/* Free the builder structure, which we no longer require */
+			_jit_function_free_builder(func);
+		}
 	}
 
 	return result;
@@ -954,7 +957,19 @@ jit_function_setup_entry(jit_function_t func, void *entry_point)
 JIT_EXPORT_FUNCTION int
 jit_function_compile(jit_function_t func)
 {
-	return (JIT_RESULT_OK == jit_compile(func));
+	return (JIT_RESULT_OK == jit_compile(func, 1));
+}
+
+JIT_EXPORT_FUNCTION int 
+jit_function_compile_keep_build_data(jit_function_t func)
+{
+	return (JIT_RESULT_OK == jit_compile(func, 0));
+}
+
+JIT_EXPORT_FUNCTION int
+jit_function_free_build_data(jit_function_t func)
+{
+	_jit_function_free_builder(func);
 }
 
 /*@
diff --git a/src/jit/jit-reg-alloc.c b/src/jit/jit-reg-alloc.c
index 24783cb..02839ae 100644
--- a/src/jit/jit-reg-alloc.c
+++ b/src/jit/jit-reg-alloc.c
@@ -1797,33 +1797,36 @@ bind_value(jit_gencode_t gen, jit_value_t value, int reg, int other_reg, int sti
 		still_in_frame = 0;
 	}
 
-#ifdef JIT_REG_DEBUG
-	if(gen->contents[reg].num_values == JIT_MAX_REG_VALUES)
+	if ( (jit_reg_flags(reg) & JIT_REG_FIXED) == 0 )	// PvB: So we can hack arround with fixed registers.
 	{
-		printf("*** Too many values for one register! ***\n");
-		abort();
-	}
+#ifdef JIT_REG_DEBUG
+		if ( gen->contents[reg].num_values == JIT_MAX_REG_VALUES )
+		{
+			printf("*** Too many values for one register! ***\n");
+			abort();
+}
 #endif
 
-	gen->contents[reg].values[gen->contents[reg].num_values] = value;
-	++(gen->contents[reg].num_values);
-	gen->contents[reg].age = gen->current_age;
-	gen->contents[reg].used_for_temp = 0;
-	gen->contents[reg].is_long_end = 0;
-	if(other_reg == -1)
-	{
-		gen->contents[reg].is_long_start = 0;
-	}
-	else
-	{
-		gen->contents[reg].is_long_start = 1;
-		gen->contents[other_reg].num_values = 0;
-		gen->contents[other_reg].age = gen->current_age;
-		gen->contents[other_reg].used_for_temp = 0;
-		gen->contents[other_reg].is_long_start = 0;
-		gen->contents[other_reg].is_long_end = 1;
+		gen->contents[reg].values[gen->contents[reg].num_values] = value;
+		++(gen->contents[reg].num_values);
+		gen->contents[reg].age = gen->current_age;
+		gen->contents[reg].used_for_temp = 0;
+		gen->contents[reg].is_long_end = 0;
+		if ( other_reg == -1 )
+		{
+			gen->contents[reg].is_long_start = 0;
+		}
+		else
+		{
+			gen->contents[reg].is_long_start = 1;
+			gen->contents[other_reg].num_values = 0;
+			gen->contents[other_reg].age = gen->current_age;
+			gen->contents[other_reg].used_for_temp = 0;
+			gen->contents[other_reg].is_long_start = 0;
+			gen->contents[other_reg].is_long_end = 1;
+		}
+		++(gen->current_age);
 	}
-	++(gen->current_age);
 
 	/* Adjust the value to reflect that it is in "reg", and maybe the frame */
 	value->in_register = 1;
diff --git a/src/jit/jit-rules-x86-64.c b/src/jit/jit-rules-x86-64.c
index ac22cdd..35bde64 100644
--- a/src/jit/jit-rules-x86-64.c
+++ b/src/jit/jit-rules-x86-64.c
@@ -2365,6 +2365,10 @@ _jit_gen_prolog(jit_gencode_t gen, jit_function_t func, void *buf)
 	/* Initialize EBP for the current frame */
 	x86_64_mov_reg_reg_size(inst, X86_64_RBP, X86_64_RSP, 8);
 
+#ifdef WIN64
+	// ToDo: Add UWOP_SET_FPREG here?
+#endif
+
 	/* Allocate space for the local variable frame */
 	if(func->builder->frame_size > 0)
 	{
diff --git a/src/jit/jit-value.c b/src/jit/jit-value.c
index 92037e4..22550d8 100644
--- a/src/jit/jit-value.c
+++ b/src/jit/jit-value.c
@@ -2474,3 +2474,8 @@ void _jit_value_free(void *_value)
 		jit_free((void *)(value->address));
 	}
 }
+
+JIT_EXPORT_FUNCTION jit_nint jit_value_get_frame_offset(jit_value_t value)
+{
+	return value->has_frame_offset ? value->frame_offset : 0;
+}
