diff --git a/ethchain/state_object.go b/ethchain/state_object.go
index 337c5a3944972d76cb362236ee48dc944ea5b425..2c9dfb713c1d316b32c7349535b5643002ac60d1 100644
--- a/ethchain/state_object.go
+++ b/ethchain/state_object.go
@@ -163,6 +163,15 @@ func (self *StateObject) BuyGas(gas, price *big.Int) error {
 	return nil
 }
 
+func (self *StateObject) RefundGas(gas, price *big.Int) {
+	self.gasPool.Add(self.gasPool, gas)
+
+	rGas := new(big.Int).Set(gas)
+	rGas.Mul(rGas, price)
+
+	self.Amount.Sub(self.Amount, rGas)
+}
+
 func (self *StateObject) Copy() *StateObject {
 	stCopy := &StateObject{}
 	stCopy.address = make([]byte, len(self.address))
diff --git a/ethchain/state_transition.go b/ethchain/state_transition.go
index c88f4727f7efe0a28a7d0b81fc013236c0438fda..25efd64cc14d359c254cc460fb96aa6a6252eb9b 100644
--- a/ethchain/state_transition.go
+++ b/ethchain/state_transition.go
@@ -110,6 +110,15 @@ func (self *StateTransition) BuyGas() error {
 	return nil
 }
 
+func (self *StateTransition) RefundGas() {
+	coinbase, sender := self.Coinbase(), self.Sender()
+	coinbase.RefundGas(self.gas, self.tx.GasPrice)
+
+	// Return remaining gas
+	remaining := new(big.Int).Mul(self.gas, self.tx.GasPrice)
+	sender.AddAmount(remaining)
+}
+
 func (self *StateTransition) TransitionState() (err error) {
 	//snapshot := st.state.Snapshot()
 
@@ -141,6 +150,8 @@ func (self *StateTransition) TransitionState() (err error) {
 	// XXX Transactions after this point are considered valid.
 
 	defer func() {
+		self.RefundGas()
+
 		if sender != nil {
 			self.state.UpdateStateObject(sender)
 		}
@@ -148,6 +159,8 @@ func (self *StateTransition) TransitionState() (err error) {
 		if receiver != nil {
 			self.state.UpdateStateObject(receiver)
 		}
+
+		self.state.UpdateStateObject(self.Coinbase())
 	}()
 
 	// Increment the nonce for the next transaction
@@ -203,10 +216,6 @@ func (self *StateTransition) TransitionState() (err error) {
 		}
 	}
 
-	// Return remaining gas
-	remaining := new(big.Int).Mul(self.gas, tx.GasPrice)
-	sender.AddAmount(remaining)
-
 	return nil
 }