diff --git a/accounts/scwallet/wallet.go b/accounts/scwallet/wallet.go
index 548bc9e2e2e143aa98e9d95a5627966fc4cef511..0496ccc15c1ddca35f98d2760ecefd846e120985 100644
--- a/accounts/scwallet/wallet.go
+++ b/accounts/scwallet/wallet.go
@@ -635,7 +635,7 @@ func (w *Wallet) SelfDerive(base accounts.DerivationPath, chain ethereum.ChainSt
 	w.deriveChain = chain
 }
 
-// SignHash requests the wallet to sign the given hash.
+// SignData requests the wallet to sign the hash of the given data.
 //
 // It looks up the account specified either solely via its address contained within,
 // or optionally with the aid of any location metadata from the embedded URL field.
@@ -644,9 +644,13 @@ func (w *Wallet) SelfDerive(base accounts.DerivationPath, chain ethereum.ChainSt
 // a password to decrypt the account, or a PIN code o verify the transaction),
 // an AuthNeededError instance will be returned, containing infos for the user
 // about which fields or actions are needed. The user may retry by providing
-// the needed details via SignHashWithPassphrase, or by other means (e.g. unlock
+// the needed details via SignDataWithPassphrase, or by other means (e.g. unlock
 // the account in a keystore).
-func (w *Wallet) SignHash(account accounts.Account, hash []byte) ([]byte, error) {
+func (w *Wallet) SignData(account accounts.Account, mimeType string, data []byte) ([]byte, error) {
+	return w.signHash(account, crypto.Keccak256(data))
+}
+
+func (w *Wallet) signHash(account accounts.Account, hash []byte) ([]byte, error) {
 	w.lock.Lock()
 	defer w.lock.Unlock()
 
@@ -672,26 +676,51 @@ func (w *Wallet) SignHash(account accounts.Account, hash []byte) ([]byte, error)
 func (w *Wallet) SignTx(account accounts.Account, tx *types.Transaction, chainID *big.Int) (*types.Transaction, error) {
 	signer := types.NewEIP155Signer(chainID)
 	hash := signer.Hash(tx)
-	sig, err := w.SignHash(account, hash[:])
+	sig, err := w.signHash(account, hash[:])
 	if err != nil {
 		return nil, err
 	}
 	return tx.WithSignature(signer, sig)
 }
 
-// SignHashWithPassphrase requests the wallet to sign the given hash with the
+// SignDataWithPassphrase requests the wallet to sign the given hash with the
 // given passphrase as extra authentication information.
 //
 // It looks up the account specified either solely via its address contained within,
 // or optionally with the aid of any location metadata from the embedded URL field.
-func (w *Wallet) SignHashWithPassphrase(account accounts.Account, passphrase string, hash []byte) ([]byte, error) {
+func (w *Wallet) SignDataWithPassphrase(account accounts.Account, passphrase, mimeType string, data []byte) ([]byte, error) {
+	return w.signHashWithPassphrase(account, passphrase, crypto.Keccak256(data))
+}
+
+func (w *Wallet) signHashWithPassphrase(account accounts.Account, passphrase string, hash []byte) ([]byte, error) {
 	if !w.session.verified {
 		if err := w.Open(passphrase); err != nil {
 			return nil, err
 		}
 	}
 
-	return w.SignHash(account, hash)
+	return w.signHash(account, hash)
+}
+
+// SignText requests the wallet to sign the hash of a given piece of data, prefixed
+// by the Ethereum prefix scheme
+// It looks up the account specified either solely via its address contained within,
+// or optionally with the aid of any location metadata from the embedded URL field.
+//
+// If the wallet requires additional authentication to sign the request (e.g.
+// a password to decrypt the account, or a PIN code o verify the transaction),
+// an AuthNeededError instance will be returned, containing infos for the user
+// about which fields or actions are needed. The user may retry by providing
+// the needed details via SignHashWithPassphrase, or by other means (e.g. unlock
+// the account in a keystore).
+func (w *Wallet) SignText(account accounts.Account, text []byte) ([]byte, error) {
+	return w.signHash(account, accounts.TextHash(text))
+}
+
+// SignTextWithPassphrase implements accounts.Wallet, attempting to sign the
+// given hash with the given account using passphrase as extra authentication
+func (w *Wallet) SignTextWithPassphrase(account accounts.Account, passphrase string, text []byte) ([]byte, error) {
+	return w.signHashWithPassphrase(account, passphrase, crypto.Keccak256(accounts.TextHash(text)))
 }
 
 // SignTxWithPassphrase requests the wallet to sign the given transaction, with the
diff --git a/console/bridge.go b/console/bridge.go
index e90991dc6bd0c825473abb19f87cf5bb61762a6d..b022a465dde2e45a00a32109e13b04f2528c7b28 100644
--- a/console/bridge.go
+++ b/console/bridge.go
@@ -175,7 +175,6 @@ func (b *bridge) OpenWallet(call otto.FunctionCall) (response otto.Value) {
 		throwJSException(err.Error())
 	}
 	return val
->>>>>>> accounts/scwallet, console: user friendly card opening
 }
 
 func (b *bridge) readPassphraseAndReopenWallet(call otto.FunctionCall) (otto.Value, error) {