diff --git a/ethchain/state_object.go b/ethchain/state_object.go
index 5fc738fee61254bc32b794ad25f86f6c1f28bf7f..5b64c3b372c101cd8a914e5fa5f77594a044047d 100644
--- a/ethchain/state_object.go
+++ b/ethchain/state_object.go
@@ -48,7 +48,7 @@ func MakeContract(tx *Transaction, state *State) *StateObject {
 }
 
 func NewStateObject(addr []byte) *StateObject {
-	return &StateObject{address: addr, Amount: new(big.Int)}
+	return &StateObject{address: addr, Amount: new(big.Int), gasPool: new(big.Int)}
 }
 
 func NewContract(address []byte, Amount *big.Int, root []byte) *StateObject {
@@ -176,6 +176,26 @@ func (self *StateObject) RefundGas(gas, price *big.Int) {
 	self.Amount.Sub(self.Amount, rGas)
 }
 
+func (self *StateObject) Copy() *StateObject {
+	stateObject := NewStateObject(self.Address())
+	stateObject.Amount.Set(self.Amount)
+	stateObject.ScriptHash = ethutil.CopyBytes(self.ScriptHash)
+	stateObject.Nonce = self.Nonce
+	if self.state != nil {
+		stateObject.state = self.state.Copy()
+	}
+	stateObject.script = ethutil.CopyBytes(self.script)
+	stateObject.initScript = ethutil.CopyBytes(self.initScript)
+	//stateObject.gasPool.Set(self.gasPool)
+
+	return self
+}
+
+func (self *StateObject) Set(stateObject *StateObject) {
+	self = stateObject
+}
+
+/*
 func (self *StateObject) Copy() *StateObject {
 	stCopy := &StateObject{}
 	stCopy.address = make([]byte, len(self.address))
@@ -194,6 +214,7 @@ func (self *StateObject) Copy() *StateObject {
 
 	return stCopy
 }
+*/
 
 // Returns the address of the contract/account
 func (c *StateObject) Address() []byte {