diff --git a/rpc/api.go b/rpc/api.go
index aa5b54199f96b0f3f1002704e430a5aa43740fc9..8d1a412d148bc1c86789ab80290ea04df09313be 100644
--- a/rpc/api.go
+++ b/rpc/api.go
@@ -245,7 +245,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
 			return err
 		}
 
-		block := api.xeth().EthBlockByHash(args.Hash)
+		block := api.xeth().EthBlockByHexstring(args.Hash)
 		br := NewBlockRes(block)
 		br.fullTx = true
 
@@ -273,14 +273,14 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
 			return err
 		}
 
-		br := NewBlockRes(api.xeth().EthBlockByHash(args.Hash))
+		br := NewBlockRes(api.xeth().EthBlockByHexstring(args.Hash))
 
 		if args.Index > int64(len(br.Uncles)) || args.Index < 0 {
 			return NewValidationError("Index", "does not exist")
 		}
 
 		uhash := br.Uncles[args.Index].Hex()
-		uncle := NewBlockRes(api.xeth().EthBlockByHash(uhash))
+		uncle := NewBlockRes(api.xeth().EthBlockByHexstring(uhash))
 
 		*reply = uncle
 	case "eth_getUncleByBlockNumberAndIndex":
@@ -298,7 +298,7 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
 		}
 
 		uhash := v.Uncles[args.Index].Hex()
-		uncle := NewBlockRes(api.xeth().EthBlockByHash(uhash))
+		uncle := NewBlockRes(api.xeth().EthBlockByHexstring(uhash))
 
 		*reply = uncle
 	case "eth_getCompilers":
diff --git a/rpc/args.go b/rpc/args.go
index 5b655024caa63ec59b498533bbfff887f66987fc..9a51959f41925837dd3b355008f8acefe82c6f3d 100644
--- a/rpc/args.go
+++ b/rpc/args.go
@@ -35,7 +35,7 @@ func blockHeight(raw interface{}, number *int64) (err error) {
 }
 
 type GetBlockByHashArgs struct {
-	BlockHash  string
+	BlockHash  common.Hash
 	IncludeTxs bool
 }
 
@@ -54,7 +54,7 @@ func (args *GetBlockByHashArgs) UnmarshalJSON(b []byte) (err error) {
 	if !ok {
 		return NewDecodeParamError("BlockHash not a string")
 	}
-	args.BlockHash = argstr
+	args.BlockHash = common.HexToHash(argstr)
 
 	if len(obj) > 1 {
 		args.IncludeTxs = obj[1].(bool)
diff --git a/rpc/args_test.go b/rpc/args_test.go
index 5cbafd4b2fe9d5fd0237d8b223e4e768ba96d635..c6d3a558b5662dac1811d0f51891bf87509e9864 100644
--- a/rpc/args_test.go
+++ b/rpc/args_test.go
@@ -83,7 +83,7 @@ func TestGetBalanceEmptyArgs(t *testing.T) {
 func TestGetBlockByHashArgs(t *testing.T) {
 	input := `["0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331", true]`
 	expected := new(GetBlockByHashArgs)
-	expected.BlockHash = "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
+	expected.BlockHash = common.HexToHash("0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331")
 	expected.IncludeTxs = true
 
 	args := new(GetBlockByHashArgs)
diff --git a/xeth/xeth.go b/xeth/xeth.go
index bf30fc2fcc0c5bd855e997a2a69ea872d2a62f4a..92e73c7d5c0d576a618c07fc58cfeffc298e0585 100644
--- a/xeth/xeth.go
+++ b/xeth/xeth.go
@@ -160,13 +160,16 @@ func (self *XEth) BlockByHash(strHash string) *Block {
 	return NewBlock(block)
 }
 
-func (self *XEth) EthBlockByHash(strHash string) *types.Block {
-	hash := common.HexToHash(strHash)
+func (self *XEth) EthBlockByHash(hash common.Hash) *types.Block {
 	block := self.backend.ChainManager().GetBlock(hash)
 
 	return block
 }
 
+func (self *XEth) EthBlockByHexstring(strHash string) *types.Block {
+	return self.EthBlockByHash(common.HexToHash(strHash))
+}
+
 func (self *XEth) EthTransactionByHash(hash string) *types.Transaction {
 	data, _ := self.backend.ExtraDb().Get(common.FromHex(hash))
 	if len(data) != 0 {