diff --git a/core/chain_manager.go b/core/chain_manager.go
index 2f6c36382154454ceb221061b21b9d99c056dbb7..13edeea951c7e8e7ddce76faa3fcead75730cd2a 100644
--- a/core/chain_manager.go
+++ b/core/chain_manager.go
@@ -14,7 +14,10 @@ import (
 	"github.com/ethereum/go-ethereum/state"
 )
 
-var chainlogger = logger.NewLogger("CHAIN")
+var (
+	chainlogger = logger.NewLogger("CHAIN")
+	jsonlogger  = logger.NewJsonLogger()
+)
 
 type ChainEvent struct {
 	Block *types.Block
@@ -124,7 +127,7 @@ func (self *ChainManager) Status() (td *big.Int, currentBlock []byte, genesisBlo
 	self.mu.RLock()
 	defer self.mu.RUnlock()
 
-	return self.td, self.currentBlock.Hash(), self.Genesis().Hash()
+	return self.td, self.currentBlock.Hash(), self.genesisBlock.Hash()
 }
 
 func (self *ChainManager) SetProcessor(proc types.BlockProcessor) {
@@ -397,11 +400,11 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error {
 
 		var canonical, split bool
 		self.mu.Lock()
+		cblock := self.currentBlock
 		{
 			// Write block to database. Eventually we'll have to improve on this and throw away blocks that are
 			// not in the canonical chain.
 			self.write(block)
-			cblock := self.currentBlock
 			// Compare the TD of the last known block in the canonical chain to make sure it's greater.
 			// At this point it's possible that a different chain (fork) becomes the new canonical chain.
 			if td.Cmp(self.td) > 0 {
@@ -419,6 +422,12 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error {
 		self.mu.Unlock()
 
 		if canonical {
+			jsonlogger.LogJson(&logger.EthChainNewHead{
+				BlockHash:     ethutil.Bytes2Hex(block.Hash()),
+				BlockNumber:   block.Number(),
+				ChainHeadHash: ethutil.Bytes2Hex(cblock.Hash()),
+				BlockPrevHash: ethutil.Bytes2Hex(block.ParentHash()),
+			})
 			self.setTransState(state.New(block.Root(), self.db))
 			self.eventMux.Post(ChainEvent{block, td})
 		}
diff --git a/eth/backend.go b/eth/backend.go
index 50fb707203f6ba2fbfec3106b94fd47c9234309b..8673a265a59b32a8885ee6f29d7043fc4af7e19c 100644
--- a/eth/backend.go
+++ b/eth/backend.go
@@ -14,7 +14,7 @@ import (
 	"github.com/ethereum/go-ethereum/ethdb"
 	"github.com/ethereum/go-ethereum/ethutil"
 	"github.com/ethereum/go-ethereum/event"
-	ethlogger "github.com/ethereum/go-ethereum/logger"
+	"github.com/ethereum/go-ethereum/logger"
 	"github.com/ethereum/go-ethereum/miner"
 	"github.com/ethereum/go-ethereum/p2p"
 	"github.com/ethereum/go-ethereum/p2p/discover"
@@ -25,8 +25,8 @@ import (
 )
 
 var (
-	logger     = ethlogger.NewLogger("SERV")
-	jsonlogger = ethlogger.NewJsonLogger()
+	ethlogger  = logger.NewLogger("SERV")
+	jsonlogger = logger.NewJsonLogger()
 
 	defaultBootNodes = []*discover.Node{
 		// ETH/DEV cmd/bootnode
@@ -76,7 +76,7 @@ func (cfg *Config) parseBootNodes() []*discover.Node {
 		}
 		n, err := discover.ParseNode(url)
 		if err != nil {
-			logger.Errorf("Bootstrap URL %s: %v\n", url, err)
+			ethlogger.Errorf("Bootstrap URL %s: %v\n", url, err)
 			continue
 		}
 		ns = append(ns, n)
@@ -100,7 +100,7 @@ func (cfg *Config) nodeKey() (*ecdsa.PrivateKey, error) {
 		return nil, fmt.Errorf("could not generate server key: %v", err)
 	}
 	if err := ioutil.WriteFile(keyfile, crypto.FromECDSA(key), 0600); err != nil {
-		logger.Errorln("could not persist nodekey: ", err)
+		ethlogger.Errorln("could not persist nodekey: ", err)
 	}
 	return key, nil
 }
@@ -132,14 +132,14 @@ type Ethereum struct {
 	WsServer   rpc.RpcServer
 	keyManager *crypto.KeyManager
 
-	logger ethlogger.LogSystem
+	logger logger.LogSystem
 
 	Mining bool
 }
 
 func New(config *Config) (*Ethereum, error) {
 	// Boostrap database
-	logger := ethlogger.New(config.DataDir, config.LogFile, config.LogLevel, config.LogFormat)
+	ethlogger := logger.New(config.DataDir, config.LogFile, config.LogLevel, config.LogFormat)
 	db, err := ethdb.NewLDBDatabase("blockchain")
 	if err != nil {
 		return nil, err
@@ -176,7 +176,7 @@ func New(config *Config) (*Ethereum, error) {
 		keyManager:   keyManager,
 		blacklist:    p2p.NewBlacklist(),
 		eventMux:     &event.TypeMux{},
-		logger:       logger,
+		logger:       ethlogger,
 	}
 
 	eth.chainManager = core.NewChainManager(db, eth.EventMux())
@@ -220,7 +220,7 @@ func New(config *Config) (*Ethereum, error) {
 }
 
 func (s *Ethereum) KeyManager() *crypto.KeyManager       { return s.keyManager }
-func (s *Ethereum) Logger() ethlogger.LogSystem          { return s.logger }
+func (s *Ethereum) Logger() logger.LogSystem             { return s.logger }
 func (s *Ethereum) Name() string                         { return s.net.Name }
 func (s *Ethereum) ChainManager() *core.ChainManager     { return s.chainManager }
 func (s *Ethereum) BlockProcessor() *core.BlockProcessor { return s.blockProcessor }
@@ -238,7 +238,7 @@ func (s *Ethereum) Coinbase() []byte                     { return nil } // TODO
 
 // Start the ethereum
 func (s *Ethereum) Start() error {
-	jsonlogger.LogJson(&ethlogger.LogStarting{
+	jsonlogger.LogJson(&logger.LogStarting{
 		ClientString:    s.net.Name,
 		ProtocolVersion: ProtocolVersion,
 	})
@@ -264,7 +264,7 @@ func (s *Ethereum) Start() error {
 	s.blockSub = s.eventMux.Subscribe(core.NewMinedBlockEvent{})
 	go s.blockBroadcastLoop()
 
-	logger.Infoln("Server started")
+	ethlogger.Infoln("Server started")
 	return nil
 }
 
@@ -299,7 +299,7 @@ func (s *Ethereum) Stop() {
 		s.whisper.Stop()
 	}
 
-	logger.Infoln("Server stopped")
+	ethlogger.Infoln("Server stopped")
 	close(s.shutdownChan)
 }
 
diff --git a/eth/protocol.go b/eth/protocol.go
index 67ed8f9e58d06624c07b05fda2cfba97c2144071..d394ba739774ca74c960e539b7bdc09182459117 100644
--- a/eth/protocol.go
+++ b/eth/protocol.go
@@ -9,6 +9,7 @@ import (
 	"github.com/ethereum/go-ethereum/core/types"
 	"github.com/ethereum/go-ethereum/errs"
 	"github.com/ethereum/go-ethereum/ethutil"
+	"github.com/ethereum/go-ethereum/logger"
 	"github.com/ethereum/go-ethereum/p2p"
 	"github.com/ethereum/go-ethereum/rlp"
 )
@@ -165,6 +166,12 @@ func (self *ethProtocol) handle() error {
 		if err := msg.Decode(&txs); err != nil {
 			return self.protoError(ErrDecode, "msg %v: %v", msg, err)
 		}
+		for _, tx := range txs {
+			jsonlogger.LogJson(&logger.EthTxReceived{
+				TxHash:   ethutil.Bytes2Hex(tx.Hash()),
+				RemoteId: self.peer.ID().String(),
+			})
+		}
 		self.txPool.AddTransactions(txs)
 
 	case GetBlockHashesMsg:
@@ -243,6 +250,15 @@ func (self *ethProtocol) handle() error {
 			return self.protoError(ErrDecode, "msg %v: %v", msg, err)
 		}
 		hash := request.Block.Hash()
+		_, chainHead, _ := self.chainManager.Status()
+
+		jsonlogger.LogJson(&logger.EthChainReceivedNewBlock{
+			BlockHash:     ethutil.Bytes2Hex(hash),
+			BlockNumber:   request.Block.Number(), // this surely must be zero
+			ChainHeadHash: ethutil.Bytes2Hex(chainHead),
+			BlockPrevHash: ethutil.Bytes2Hex(request.Block.ParentHash()),
+			RemoteId:      self.peer.ID().String(),
+		})
 		// to simplify backend interface adding a new block
 		// uses AddPeer followed by AddBlock only if peer is the best peer
 		// (or selected as new best peer)
diff --git a/eth/protocol_test.go b/eth/protocol_test.go
index f499d033efe1877e5bfd9c92d128ab2c91edb3a4..c4e3e9f1b31b8730115f584ab79bc7bc1ff6e7a1 100644
--- a/eth/protocol_test.go
+++ b/eth/protocol_test.go
@@ -13,7 +13,6 @@ import (
 	"github.com/ethereum/go-ethereum/crypto"
 	"github.com/ethereum/go-ethereum/errs"
 	"github.com/ethereum/go-ethereum/ethutil"
-	ethlogger "github.com/ethereum/go-ethereum/logger"
 	"github.com/ethereum/go-ethereum/p2p"
 	"github.com/ethereum/go-ethereum/p2p/discover"
 )
diff --git a/logger/types.go b/logger/types.go
index 7ab4a2b8c28a6b3d748a3960d341d6959beba151..d98f0874a5c7719df7625a065abb8e842caa6e0a 100644
--- a/logger/types.go
+++ b/logger/types.go
@@ -1,6 +1,7 @@
 package logger
 
 import (
+	"math/big"
 	"time"
 )
 
@@ -53,10 +54,10 @@ func (l *P2PDisconnected) EventName() string {
 }
 
 type EthMinerNewBlock struct {
-	BlockHash     string `json:"block_hash"`
-	BlockNumber   int    `json:"block_number"`
-	ChainHeadHash string `json:"chain_head_hash"`
-	BlockPrevHash string `json:"block_prev_hash"`
+	BlockHash     string   `json:"block_hash"`
+	BlockNumber   *big.Int `json:"block_number"`
+	ChainHeadHash string   `json:"chain_head_hash"`
+	BlockPrevHash string   `json:"block_prev_hash"`
 	LogEvent
 }
 
@@ -65,11 +66,11 @@ func (l *EthMinerNewBlock) EventName() string {
 }
 
 type EthChainReceivedNewBlock struct {
-	BlockHash     string `json:"block_hash"`
-	BlockNumber   int    `json:"block_number"`
-	ChainHeadHash string `json:"chain_head_hash"`
-	BlockPrevHash string `json:"block_prev_hash"`
-	RemoteId      int    `json:"remote_id"`
+	BlockHash     string   `json:"block_hash"`
+	BlockNumber   *big.Int `json:"block_number"`
+	ChainHeadHash string   `json:"chain_head_hash"`
+	BlockPrevHash string   `json:"block_prev_hash"`
+	RemoteId      string   `json:"remote_id"`
 	LogEvent
 }
 
@@ -78,10 +79,10 @@ func (l *EthChainReceivedNewBlock) EventName() string {
 }
 
 type EthChainNewHead struct {
-	BlockHash     string `json:"block_hash"`
-	BlockNumber   int    `json:"block_number"`
-	ChainHeadHash string `json:"chain_head_hash"`
-	BlockPrevHash string `json:"block_prev_hash"`
+	BlockHash     string   `json:"block_hash"`
+	BlockNumber   *big.Int `json:"block_number"`
+	ChainHeadHash string   `json:"chain_head_hash"`
+	BlockPrevHash string   `json:"block_prev_hash"`
 	LogEvent
 }
 
diff --git a/miner/worker.go b/miner/worker.go
index 012353fa1a9e08c808aa2ccdacf48b4095963ade..1388b22b0a10a16dd2c1f85c9e7219c7d599db28 100644
--- a/miner/worker.go
+++ b/miner/worker.go
@@ -11,11 +11,14 @@ import (
 	"github.com/ethereum/go-ethereum/core/types"
 	"github.com/ethereum/go-ethereum/ethutil"
 	"github.com/ethereum/go-ethereum/event"
+	"github.com/ethereum/go-ethereum/logger"
 	"github.com/ethereum/go-ethereum/pow"
 	"github.com/ethereum/go-ethereum/state"
 	"gopkg.in/fatih/set.v0"
 )
 
+var jsonlogger = logger.NewJsonLogger()
+
 type environment struct {
 	totalUsedGas *big.Int
 	state        *state.StateDB
@@ -152,6 +155,13 @@ func (self *worker) wait() {
 				self.current.block.Header().MixDigest = work.MixDigest
 				self.current.block.Header().SeedHash = work.SeedHash
 
+				jsonlogger.LogJson(&logger.EthMinerNewBlock{
+					BlockHash:     ethutil.Bytes2Hex(block.Hash()),
+					BlockNumber:   block.Number(),
+					ChainHeadHash: ethutil.Bytes2Hex(block.ParentHeaderHash),
+					BlockPrevHash: ethutil.Bytes2Hex(block.ParentHeaderHash),
+				})
+
 				if err := self.chain.InsertChain(types.Blocks{self.current.block}); err == nil {
 					self.mux.Post(core.NewMinedBlockEvent{self.current.block})
 					fmt.Println("GOOD BLOCK", self.current.block)