diff --git a/cmd/geth/admin.go b/cmd/geth/admin.go
index 17d71129759b68948f89533f41394ef5fcff19f0..b0cb7507ac3678ce1d89afc73e7d6901d3d2c9f0 100644
--- a/cmd/geth/admin.go
+++ b/cmd/geth/admin.go
@@ -275,10 +275,19 @@ func (js *jsre) verbosity(call otto.FunctionCall) otto.Value {
 }
 
 func (js *jsre) startMining(call otto.FunctionCall) otto.Value {
-	threads, err := call.Argument(0).ToInteger()
-	if err != nil {
-		fmt.Println(err)
-		return otto.FalseValue()
+	var (
+		threads int64
+		err     error
+	)
+
+	if len(call.ArgumentList) > 0 {
+		threads, err = call.Argument(0).ToInteger()
+		if err != nil {
+			fmt.Println(err)
+			return otto.FalseValue()
+		}
+	} else {
+		threads = 4
 	}
 
 	err = js.ethereum.StartMining(int(threads))
diff --git a/miner/worker.go b/miner/worker.go
index d801a98394717da748da1bb63a19e37a8d36741b..8698bb90d629ae14f9c87cd02ab2e7f993a81007 100644
--- a/miner/worker.go
+++ b/miner/worker.go
@@ -21,21 +21,41 @@ import (
 
 var jsonlogger = logger.NewJsonLogger()
 
+// Work holds the current work
+type Work struct {
+	Number    uint64
+	Nonce     uint64
+	MixDigest []byte
+	SeedHash  []byte
+}
+
+// Agent can register themself with the worker
+type Agent interface {
+	Work() chan<- *types.Block
+	SetReturnCh(chan<- *types.Block)
+	Stop()
+	Start()
+	GetHashRate() int64
+}
+
+// environment is the workers current environment and holds
+// all of the current state information
 type environment struct {
-	totalUsedGas       *big.Int
-	state              *state.StateDB
-	coinbase           *state.StateObject
-	block              *types.Block
-	family             *set.Set
-	uncles             *set.Set
-	remove             *set.Set
-	tcount             int
+	totalUsedGas       *big.Int           // total gas usage in the cycle
+	state              *state.StateDB     // apply state changes here
+	coinbase           *state.StateObject // the miner's account
+	block              *types.Block       // the new block
+	family             *set.Set           // family set (used for checking uncles)
+	uncles             *set.Set           // uncle set
+	remove             *set.Set           // tx which will be removed
+	tcount             int                // tx count in cycle
 	ignoredTransactors *set.Set
 	lowGasTransactors  *set.Set
 	ownedAccounts      *set.Set
 	lowGasTxs          types.Transactions
 }
 
+// env returns a new environment for the current cycle
 func env(block *types.Block, eth core.Backend) *environment {
 	state := state.New(block.Root(), eth.StateDb())
 	env := &environment{
@@ -50,21 +70,7 @@ func env(block *types.Block, eth core.Backend) *environment {
 	return env
 }
 
-type Work struct {
-	Number    uint64
-	Nonce     uint64
-	MixDigest []byte
-	SeedHash  []byte
-}
-
-type Agent interface {
-	Work() chan<- *types.Block
-	SetReturnCh(chan<- *types.Block)
-	Stop()
-	Start()
-	GetHashRate() int64
-}
-
+// worker is the main object which takes care of applying messages to the new state
 type worker struct {
 	mu sync.Mutex
 
@@ -375,8 +381,8 @@ func (self *worker) commitTransactions(transactions types.Transactions) {
 		// We can skip err. It has already been validated in the tx pool
 		from, _ := tx.From()
 
-		// check if it falls within margin
-		if tx.GasPrice().Cmp(self.gasPrice) < 0 {
+		// Check if it falls within margin. Txs from owned accounts are always processed.
+		if tx.GasPrice().Cmp(self.gasPrice) < 0 && !current.ownedAccounts.Has(from) {
 			// ignore the transaction and transactor. We ignore the transactor
 			// because nonce will fail after ignoring this transaction so there's
 			// no point