diff --git a/rpc/api.go b/rpc/api.go
index 6154a0b286bada30246f0a494486925869ffba89..79249854711b0f5349ab9586c9a400c23075624b 100644
--- a/rpc/api.go
+++ b/rpc/api.go
@@ -208,7 +208,7 @@ func (self *EthereumApi) FilterChanged(id int, reply *interface{}) error {
 	defer self.logMut.Unlock()
 
 	if self.logs[id] != nil {
-		*reply = toLogs(self.logs[id].get())
+		*reply = NewLogsRes(self.logs[id].get())
 	}
 
 	return nil
@@ -220,7 +220,7 @@ func (self *EthereumApi) Logs(id int, reply *interface{}) error {
 
 	filter := self.filterManager.GetFilter(id)
 	if filter != nil {
-		*reply = toLogs(filter.Find())
+		*reply = NewLogsRes(filter.Find())
 	}
 
 	return nil
@@ -230,7 +230,7 @@ func (self *EthereumApi) AllLogs(args *FilterOptions, reply *interface{}) error
 	filter := core.NewFilter(self.xeth().Backend())
 	filter.SetOptions(toFilterOptions(args))
 
-	*reply = toLogs(filter.Find())
+	*reply = NewLogsRes(filter.Find())
 
 	return nil
 }
diff --git a/rpc/responses.go b/rpc/responses.go
index eec483fb7b0ad552ffbd0fe72f8aa893454f105a..a3613f3809d3d72eb318705d789fe7b584d91b06 100644
--- a/rpc/responses.go
+++ b/rpc/responses.go
@@ -7,6 +7,7 @@ import (
 
 	"github.com/ethereum/go-ethereum/common"
 	"github.com/ethereum/go-ethereum/core/types"
+	"github.com/ethereum/go-ethereum/state"
 )
 
 type BlockRes struct {
@@ -211,3 +212,28 @@ type FilterWhisperRes struct {
 	Payload    string `json:"payload"`
 	WorkProved string `json:"workProved"`
 }
+
+type LogRes struct {
+	Address string   `json:"address"`
+	Topic   []string `json:"topic"`
+	Data    string   `json:"data"`
+	Number  uint64   `json:"number"`
+}
+
+func NewLogsRes(logs state.Logs) (ls []LogRes) {
+	ls = make([]LogRes, len(logs))
+
+	for i, log := range logs {
+		var l LogRes
+		l.Topic = make([]string, len(log.Topics()))
+		l.Address = common.ToHex(log.Address())
+		l.Data = common.ToHex(log.Data())
+		l.Number = log.Number()
+		for j, topic := range log.Topics() {
+			l.Topic[j] = common.ToHex(topic)
+		}
+		ls[i] = l
+	}
+
+	return
+}
diff --git a/rpc/util.go b/rpc/util.go
index 0798ae1d22a9f70909c68ea3c1b64dc07688c649..9a1d11bf16129bc380a327d45930325c2dde2601 100644
--- a/rpc/util.go
+++ b/rpc/util.go
@@ -19,7 +19,6 @@ package rpc
 import (
 	"time"
 
-	"github.com/ethereum/go-ethereum/common"
 	"github.com/ethereum/go-ethereum/logger"
 	"github.com/ethereum/go-ethereum/state"
 	"github.com/ethereum/go-ethereum/xeth"
@@ -27,31 +26,6 @@ import (
 
 var rpclogger = logger.NewLogger("RPC")
 
-type Log struct {
-	Address string   `json:"address"`
-	Topic   []string `json:"topic"`
-	Data    string   `json:"data"`
-	Number  uint64   `json:"number"`
-}
-
-func toLogs(logs state.Logs) (ls []Log) {
-	ls = make([]Log, len(logs))
-
-	for i, log := range logs {
-		var l Log
-		l.Topic = make([]string, len(log.Topics()))
-		l.Address = common.ToHex(log.Address())
-		l.Data = common.ToHex(log.Data())
-		l.Number = log.Number()
-		for j, topic := range log.Topics() {
-			l.Topic[j] = common.ToHex(topic)
-		}
-		ls[i] = l
-	}
-
-	return
-}
-
 type whisperFilter struct {
 	messages []xeth.WhisperMessage
 	timeout  time.Time