diff --git a/src/backend/access/common/heaptuple.c b/src/backend/access/common/heaptuple.c
index 1d03b7dd136e516fcca787246c6de913e7c411fe..170ef176cdcffbff48011c68a12dd9dca5fdcb83 100644
--- a/src/backend/access/common/heaptuple.c
+++ b/src/backend/access/common/heaptuple.c
@@ -1608,7 +1608,6 @@ slot_getallattrs(TupleTableSlot *slot)
 	/* Quick out if we have 'em all already */
 	if (slot->tts_nvalid == tdesc_natts)
 		return;
-
 	/*
 	 * otherwise we had better have a physical tuple (tts_nvalid should equal
 	 * natts in all virtual-tuple cases)
diff --git a/src/backend/jit/llvm/llvmjit_expr.c b/src/backend/jit/llvm/llvmjit_expr.c
index c594d3084e9d2eb1906e6a2fd38cb94f3a044385..e404d9f3db1dbcdcc506dda84744e3aeab372f1c 100644
--- a/src/backend/jit/llvm/llvmjit_expr.c
+++ b/src/backend/jit/llvm/llvmjit_expr.c
@@ -2974,13 +2974,21 @@ ExecRunCompiledExpr(ExprState *state, ExprContext *econtext, bool *isNull)
 {
 	CompiledExprState *cstate = state->evalfunc_private;
 	ExprStateEvalFunc func;
-
+	instr_time start, it, end;
 	CheckExprStillValid(state, econtext);
 
+	INSTR_TIME_SET_CURRENT(start);
+
 	llvm_enter_fatal_on_oom();
 	func = (ExprStateEvalFunc) llvm_get_function(cstate->context,
 												 cstate->funcname);
 	llvm_leave_fatal_on_oom();
+
+	INSTR_TIME_SET_CURRENT(end);
+	INSTR_TIME_ACCUM_DIFF(it, end, start);
+
+	printf("compiled: %f\n", INSTR_TIME_GET_DOUBLE(it));
+
 	Assert(func);
 
 	/* remove indirection via this function for future calls */
diff --git a/src/backend/jit/llvm/llvmjit_inline.cpp b/src/backend/jit/llvm/llvmjit_inline.cpp
index d80b4b84c1d630b23a5643b6f5d8fdc9716b0ece..966a31f983ae916aae0824ff8378d360b96ac3ca 100644
--- a/src/backend/jit/llvm/llvmjit_inline.cpp
+++ b/src/backend/jit/llvm/llvmjit_inline.cpp
@@ -107,7 +107,7 @@ typedef llvm::StringMap<llvm::StringSet<> > ImportMapTy;
 
 
 const float inline_cost_decay_factor = 0.5;
-const int inline_initial_cost = 0;
+int inline_initial_cost = 0;
 
 /*
  * These are managed statics so LLVM knows to deallocate them during an
@@ -376,6 +376,10 @@ Datum (*llvm_prepare_lambda_tablefunc(LLVMJitContext *context,
 }
 
 
+void set_initial_cost(int cost)
+{
+	inline_initial_cost = cost;
+}
 
 /*
  * JIT-compiles a simple lambda expression.
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index c8d95800f2cf09eae0dc15863c78a3279b84e0d7..5eb3ec3e205758a875244cb586b6500eb08c4d51 100644
--- a/src/backend/parser/analyze.c
+++ b/src/backend/parser/analyze.c
@@ -120,8 +120,6 @@ parse_analyze(RawStmt *parseTree, const char *sourceText,
 
 	free_parsestate(pstate);
 
-	printf("Parsing done.\n");
-
 	return query;
 }
 
diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c
index 4d9186abdbb99792af26af9c97a2b8241cea9ab0..1f7ba7393c0bebe805962acefeb47e6a50c55750 100644
--- a/src/backend/parser/parse_func.c
+++ b/src/backend/parser/parse_func.c
@@ -185,8 +185,6 @@ ParseFuncOrColumn(ParseState *pstate, List *funcname, List *fargs,
 	char		aggkind = 0;
 	ParseCallbackState pcbstate;
 
-	printf("Parsing func\n");
-
 	/*
 	 * If there's an aggregate filter, transform it using transformWhereClause
 	 */
diff --git a/src/ext/kmeans_ext.c b/src/ext/kmeans_ext.c
index 49177d4dd97b4a5feed0b9d6a8e67a8e00705d99..e29ed4daf5451cec8676659cbbe76b21e4749334 100644
--- a/src/ext/kmeans_ext.c
+++ b/src/ext/kmeans_ext.c
@@ -101,7 +101,8 @@ void *kmeans_worker(void *arg)
 
         for(cluster = args->clusterStates; cluster < args->clusterStates + args->clusterCount; cluster++)
         {      
-            args->lambdaArgs[0] = args->clusters + c * args->clusterDesc->natts;           
+            args->lambdaArgs[0] = args->clusters + c * args->clusterDesc->natts; 
+        
             /*float8 dist = DatumGetFloat8(castNode(ExprState,
                 args->distFunc->exprstate)->evalfunc_simple(args->lambdaArgs));*/
             //float8 dist = pow(node->x - cluster->x, 2) + pow(node->y - cluster->y, 2);
diff --git a/src/ext/lambda_ext.c b/src/ext/lambda_ext.c
index 3253b13ac1718ab1b1d68ef759bb0ef3b83fa879..3efe56c38d8f9281962c087ec625714a37f2ebf8 100644
--- a/src/ext/lambda_ext.c
+++ b/src/ext/lambda_ext.c
@@ -41,7 +41,7 @@ extern TupleDesc label_record_type(List *args)
 PG_MODULE_MAGIC;
 PG_FUNCTION_INFO_V1_RECTYPE(label, label_record_type);
 PG_FUNCTION_INFO_V1_RECTYPE(label_fast, label_record_type);
-
+PG_FUNCTION_INFO_V1(set_inlining_cost);
 
 Datum
 label_internal(PG_FUNCTION_ARGS)
@@ -102,10 +102,12 @@ label_internal(PG_FUNCTION_ARGS)
 
     for (slot = ExecProcNode(planState); !TupIsNull(slot); slot = ExecProcNode(planState))
     {     
+
         bool isnull;
         Datum *val_ptr = oldVal;
         bool *null_ptr = oldIsNull;
 
+        HeapTuple t;
         HeapTupleHeader hdr;
 
         if (slot->tts_mintuple)
@@ -114,12 +116,12 @@ label_internal(PG_FUNCTION_ARGS)
             heap_deform_tuple(slot->tts_tuple, inDesc, val_ptr, null_ptr);
         }
         else
-        {
+        {  
             slot_getallattrs(slot);
-
+            t = heap_form_tuple(inDesc, slot->tts_values, slot->tts_isnull);
             val_ptr = slot->tts_values;
             null_ptr = slot->tts_isnull;
-            hdr = slot->tts_tuple->t_data;
+            hdr = t->t_data;
         }
 
         PG_LAMBDA_SETARG(lambda, 0, HeapTupleHeaderGetDatum(hdr));
@@ -296,9 +298,21 @@ label(PG_FUNCTION_ARGS)
 
     llvm_leave_tmp_context(rsinfo->econtext->ecxt_estate);
 
+    if (fcinfo->nargs == 3)
+    {
+        int threshold = PG_GETARG_INT32(2);
+    }
+
     return label_internal(fcinfo);
 }
 
+Datum 
+set_inlining_cost(PG_FUNCTION_ARGS)
+{
+    set_initial_cost(PG_GETARG_INT32(0));
+    return (Datum) 0;
+}
+
 
 Datum
 label_fast(PG_FUNCTION_ARGS)
diff --git a/src/ext/pagerank_ext.c b/src/ext/pagerank_ext.c
index 08b112002355e7d2f9dc4c5e6248d388009c5456..11a2bf2fa8a23f7f39ba98515c115cd4b03ca620 100644
--- a/src/ext/pagerank_ext.c
+++ b/src/ext/pagerank_ext.c
@@ -135,6 +135,7 @@ pagerank_internal(PG_FUNCTION_ARGS, int nthreads)
     int64 *csrOffsets;
     struct PageRankHash* hashLookup;
     struct PageRankNode* it;
+    bool byVal;
     int dataCursor = 0, csrCursor = 0;
     bool replIsNull[2];
     Datum replVal[2];
@@ -166,12 +167,12 @@ pagerank_internal(PG_FUNCTION_ARGS, int nthreads)
             (errcode(ERRCODE_INTERNAL_ERROR),
              errmsg("src and dst lambda return types must be the same")));
     }
-    else if (lambdaSrc->rettypmod != -1 || lambdaDst->rettypmod != -1)
+    /*else if (lambdaSrc->rettypmod != -1 || lambdaDst->rettypmod != -1)
     {
         ereport(ERROR,
             (errcode(ERRCODE_INTERNAL_ERROR),
              errmsg("Only base types can be used as keys.")));
-    }
+    }*/
 
     oldcontext = MemoryContextSwitchTo(per_query_ctx);
     TupleTableSlot *slot = MakeTupleTableSlot(NULL);
@@ -188,7 +189,10 @@ pagerank_internal(PG_FUNCTION_ARGS, int nthreads)
     TupleDescInitEntry(outDesc, 2, "pagerank",
                FLOAT8OID, -1, 0);
 
+    byVal = get_typbyval(lambdaSrc->rettype);
     ctl.keysize = get_typlen(lambdaSrc->rettype);
+
+    printf("Typlen: %i\n", lambdaSrc->rettypmod);
     ctl.entrysize = sizeof(struct PageRankHash);
 
     mapping = hash_create("pagerank_mapping",
@@ -212,7 +216,7 @@ pagerank_internal(PG_FUNCTION_ARGS, int nthreads)
 
         struct PageRankHash hash;
         hash.origKey = srcId;
-        hashLookup = (struct PageRankHash *) hash_search(mapping, &srcId, HASH_ENTER, &found);
+        hashLookup = (struct PageRankHash *) hash_search(mapping, byVal ? &srcId : srcId, HASH_ENTER, &found);
 
         if (!found)
         {
@@ -230,7 +234,7 @@ pagerank_internal(PG_FUNCTION_ARGS, int nthreads)
         (edges + x)->src = hashLookup->node->aliasKey;
 
         hash.origKey = dstId;
-        hashLookup = (struct PageRankHash *) hash_search(mapping, &dstId, HASH_ENTER, &found);
+        hashLookup = (struct PageRankHash *) hash_search(mapping, byVal ? &dstId : dstId, HASH_ENTER, &found);
 
         if (!found)
         {
diff --git a/src/include/jit/llvmjit.h b/src/include/jit/llvmjit.h
index 4881ddf60eee39169957940561d7ae592ecb8a76..96bba812b6d1d4d2cb83ffe8a139fb6d5550468c 100644
--- a/src/include/jit/llvmjit.h
+++ b/src/include/jit/llvmjit.h
@@ -137,9 +137,9 @@ extern LLVMValueRef llvm_function_reference(LLVMJitContext *context,
 						LLVMModuleRef mod,
 						FunctionCallInfo fcinfo);
 extern Datum (*llvm_prepare_lambda_tablefunc(LLVMJitContext *context, char* bcModule,char* funcName, int numLambdas))(PG_FUNCTION_ARGS);
-
 extern Datum (*llvm_prepare_simple_expression(ExprState *state))(Datum **);
 extern void llvm_inline(LLVMModuleRef mod);
+extern void set_initial_cost(int cost);
 
 /*
  ****************************************************************************