diff --git a/cmd/mist/gui.go b/cmd/mist/gui.go
index 3ab307174f990bf8ed818d5c56722ec8bde57820..e858d7c61c830d4e9f8b0c78861b6f4a1840ea16 100644
--- a/cmd/mist/gui.go
+++ b/cmd/mist/gui.go
@@ -301,7 +301,7 @@ func (gui *Gui) insertTransaction(window string, tx *types.Transaction) {
 	addr := gui.address()
 
 	var inout string
-	if bytes.Compare(tx.Sender(), addr) == 0 {
+	if bytes.Compare(tx.From(), addr) == 0 {
 		inout = "send"
 	} else {
 		inout = "recv"
@@ -321,7 +321,7 @@ func (gui *Gui) insertTransaction(window string, tx *types.Transaction) {
 	if send.Len() != 0 {
 		s = strings.Trim(send.Str(), "\x00")
 	} else {
-		s = ethutil.Bytes2Hex(tx.Sender())
+		s = ethutil.Bytes2Hex(tx.From())
 	}
 	if rec.Len() != 0 {
 		r = strings.Trim(rec.Str(), "\x00")
@@ -453,7 +453,7 @@ func (gui *Gui) update() {
 					tx := ev.Tx
 					object := state.GetAccount(gui.address())
 
-					if bytes.Compare(tx.Sender(), gui.address()) == 0 {
+					if bytes.Compare(tx.From(), gui.address()) == 0 {
 						object.SubAmount(tx.Value())
 
 						gui.txDb.Put(tx.Hash(), tx.RlpEncode())
diff --git a/core/transaction_pool.go b/core/transaction_pool.go
index 17fcdb86a933f6168e9ce6867606a8f4a7386a24..1149d4cfb87179359f0ff96d86d0b945858e5dbc 100644
--- a/core/transaction_pool.go
+++ b/core/transaction_pool.go
@@ -116,7 +116,11 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error {
 	}
 
 	// Get the sender
-	sender := pool.chainManager.State().GetAccount(tx.Sender())
+	senderAddr := tx.From()
+	if senderAddr == nil {
+		return fmt.Errorf("invalid sender")
+	}
+	sender := pool.chainManager.State().GetAccount(senderAddr)
 
 	totAmount := new(big.Int).Set(tx.Value())
 	// Make sure there's enough in the sender's account. Having insufficient
@@ -193,7 +197,7 @@ func (pool *TxPool) RemoveInvalid(state *state.StateDB) {
 
 	for e := pool.pool.Front(); e != nil; e = e.Next() {
 		tx := e.Value.(*types.Transaction)
-		sender := state.GetAccount(tx.Sender())
+		sender := state.GetAccount(tx.From())
 		err := pool.ValidateTransaction(tx)
 		if err != nil || sender.Nonce >= tx.Nonce() {
 			pool.pool.Remove(e)
diff --git a/core/types/transaction.go b/core/types/transaction.go
index c64fb69f0333f16f71d311ae9f2c7d344f0d71d7..95a256a763d9c09e8db95977fa4e58f899b5f894 100644
--- a/core/types/transaction.go
+++ b/core/types/transaction.go
@@ -77,7 +77,7 @@ func (self *Transaction) SetNonce(nonce uint64) {
 }
 
 func (self *Transaction) From() []byte {
-	return self.Sender()
+	return self.sender()
 }
 
 func (self *Transaction) To() []byte {
@@ -114,12 +114,12 @@ func (tx *Transaction) PublicKey() []byte {
 	return pubkey
 }
 
-func (tx *Transaction) Sender() []byte {
+func (tx *Transaction) sender() []byte {
 	pubkey := tx.PublicKey()
 
 	// Validate the returned key.
 	// Return nil if public key isn't in full format
-	if len(pubkey) != 0 && pubkey[0] != 4 {
+	if len(pubkey) == 0 || pubkey[0] != 4 {
 		return nil
 	}
 
@@ -187,7 +187,7 @@ func (tx *Transaction) String() string {
 	`,
 		tx.Hash(),
 		len(tx.recipient) == 0,
-		tx.Sender(),
+		tx.From(),
 		tx.recipient,
 		tx.nonce,
 		tx.gasPrice,
diff --git a/xeth/js_types.go b/xeth/js_types.go
index 987edce379b949af2e5d0222f53865aecb0239fd..04018f6a5fde447ceabbb4aabd0412861ae18b14 100644
--- a/xeth/js_types.go
+++ b/xeth/js_types.go
@@ -100,7 +100,7 @@ func NewJSTx(tx *types.Transaction, state *state.StateDB) *JSTransaction {
 	if receiver == "0000000000000000000000000000000000000000" {
 		receiver = ethutil.Bytes2Hex(core.AddressFromMessage(tx))
 	}
-	sender := ethutil.Bytes2Hex(tx.Sender())
+	sender := ethutil.Bytes2Hex(tx.From())
 	createsContract := core.MessageCreatesContract(tx)
 
 	var data string