diff --git a/cmd/ethereum/flags.go b/cmd/ethereum/flags.go
index 8f414364aecb71efe94a280ee32facd50fe024bf..0866ef3dd7e7993d5e2efbfa11b0a46cf78f30cf 100644
--- a/cmd/ethereum/flags.go
+++ b/cmd/ethereum/flags.go
@@ -133,7 +133,6 @@ func Init() {
 
 	flag.StringVar(&BootNodes, "bootnodes", "", "space-separated node URLs for discovery bootstrap")
 	flag.IntVar(&MaxPeer, "maxpeer", 30, "maximum desired peers")
-	flag.IntVar(&MinerThreads, "minerthreads", runtime.NumCPU(), "number of miner threads")
 
 	flag.Parse()
 
diff --git a/vm/vm_jit.go b/vm/vm_jit.go
index 38cab57da68c332cae908dc808945d3c03c284ad..9d26957f04786b71a66e15e0654748cccd3c64f8 100644
--- a/vm/vm_jit.go
+++ b/vm/vm_jit.go
@@ -50,6 +50,7 @@ type RuntimeData struct {
 	timestamp    int64
 	code         *byte
 	codeSize     uint64
+	codeHash     i256
 }
 
 func hash2llvm(h []byte) i256 {
@@ -180,6 +181,7 @@ func (self *JitVm) Run(me, caller ContextRef, code []byte, value, gas, price *bi
 	self.data.timestamp = self.env.Time()
 	self.data.code = getDataPtr(code)
 	self.data.codeSize = uint64(len(code))
+	self.data.codeHash = hash2llvm(crypto.Sha3(code)) // TODO: Get already computed hash?
 
 	jit := C.evmjit_create()
 	retCode := C.evmjit_run(jit, unsafe.Pointer(&self.data), unsafe.Pointer(self))
@@ -197,12 +199,12 @@ func (self *JitVm) Run(me, caller ContextRef, code []byte, value, gas, price *bi
 			receiverAddr := llvm2hashRef(bswap(&self.data.address))
 			receiver := state.GetOrNewStateObject(receiverAddr)
 			balance := state.GetBalance(me.Address())
-			receiver.AddAmount(balance)
+			receiver.AddBalance(balance)
 			state.Delete(me.Address())
 		}
 	}
-	
-	C.evmjit_destroy(jit);
+
+	C.evmjit_destroy(jit)
 	return
 }
 
@@ -278,7 +280,7 @@ func env_blockhash(_vm unsafe.Pointer, _number unsafe.Pointer, _result unsafe.Po
 }
 
 //export env_call
-func env_call(_vm unsafe.Pointer, _gas unsafe.Pointer, _receiveAddr unsafe.Pointer, _value unsafe.Pointer, inDataPtr unsafe.Pointer, inDataLen uint64, outDataPtr *byte, outDataLen uint64, _codeAddr unsafe.Pointer) bool {
+func env_call(_vm unsafe.Pointer, _gas *int64, _receiveAddr unsafe.Pointer, _value unsafe.Pointer, inDataPtr unsafe.Pointer, inDataLen uint64, outDataPtr *byte, outDataLen uint64, _codeAddr unsafe.Pointer) bool {
 	vm := (*JitVm)(_vm)
 
 	//fmt.Printf("env_call (depth %d)\n", vm.Env().Depth())
@@ -297,8 +299,7 @@ func env_call(_vm unsafe.Pointer, _gas unsafe.Pointer, _receiveAddr unsafe.Point
 		inData := C.GoBytes(inDataPtr, C.int(inDataLen))
 		outData := llvm2bytesRef(outDataPtr, outDataLen)
 		codeAddr := llvm2hash((*i256)(_codeAddr))
-		llvmGas := (*i256)(_gas)
-		gas := llvm2big(llvmGas)
+		gas := big.NewInt(*_gas)
 		var out []byte
 		var err error
 		if bytes.Equal(codeAddr, receiveAddr) {
@@ -306,7 +307,7 @@ func env_call(_vm unsafe.Pointer, _gas unsafe.Pointer, _receiveAddr unsafe.Point
 		} else {
 			out, err = vm.env.CallCode(vm.me, codeAddr, inData, gas, vm.price, value)
 		}
-		*llvmGas = big2llvm(gas)
+		*_gas = gas.Int64()
 		if err == nil {
 			copy(outData, out)
 			return true
@@ -317,7 +318,7 @@ func env_call(_vm unsafe.Pointer, _gas unsafe.Pointer, _receiveAddr unsafe.Point
 }
 
 //export env_create
-func env_create(_vm unsafe.Pointer, _gas unsafe.Pointer, _value unsafe.Pointer, initDataPtr unsafe.Pointer, initDataLen uint64, _result unsafe.Pointer) {
+func env_create(_vm unsafe.Pointer, _gas *int64, _value unsafe.Pointer, initDataPtr unsafe.Pointer, initDataLen uint64, _result unsafe.Pointer) {
 	vm := (*JitVm)(_vm)
 
 	value := llvm2big((*i256)(_value))
@@ -325,9 +326,7 @@ func env_create(_vm unsafe.Pointer, _gas unsafe.Pointer, _value unsafe.Pointer,
 	result := (*i256)(_result)
 	*result = i256{}
 
-	llvmGas := (*i256)(_gas)
-	gas := llvm2big(llvmGas)
-
+	gas := big.NewInt(*_gas)
 	ret, suberr, ref := vm.env.Create(vm.me, nil, initData, gas, vm.price, value)
 	if suberr == nil {
 		dataGas := big.NewInt(int64(len(ret))) // TODO: Nto the best design. env.Create can do it, it has the reference to gas counter
@@ -335,7 +334,7 @@ func env_create(_vm unsafe.Pointer, _gas unsafe.Pointer, _value unsafe.Pointer,
 		gas.Sub(gas, dataGas)
 		*result = hash2llvm(ref.Address())
 	}
-	*llvmGas = big2llvm(gas)
+	*_gas = gas.Int64()
 }
 
 //export env_log
@@ -358,7 +357,7 @@ func env_log(_vm unsafe.Pointer, dataPtr unsafe.Pointer, dataLen uint64, _topic1
 		topics = append(topics, llvm2hash((*i256)(_topic4)))
 	}
 
-	vm.Env().AddLog(state.NewLog(vm.me.Address(), topics, data))
+	vm.Env().AddLog(state.NewLog(vm.me.Address(), topics, data, vm.env.BlockNumber().Uint64()))
 }
 
 //export env_extcode