diff --git a/.travis.yml b/.travis.yml
index 1b31048267cfa15e8b67d24ff8a78692cb961e9b..5499cf2571041d2a174c9309d1f580445de4e1c4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,10 +6,15 @@ before_install:
   - sudo apt-get update -qq
   - sudo apt-get install -yqq libgmp3-dev libreadline6-dev qt54quickcontrols qt54webengine
 install:
+  # - go get code.google.com/p/go.tools/cmd/goimports
+  # - go get github.com/golang/lint/golint
   # - go get golang.org/x/tools/cmd/vet 
   - if ! go get code.google.com/p/go.tools/cmd/cover; then go get golang.org/x/tools/cmd/cover; fi
   - go get github.com/mattn/goveralls
 before_script:
+  # - gofmt -l -w .
+  # - goimports -l -w .
+  # - golint .
   # - go vet ./...
   # - go test -race ./...
 script:
diff --git a/eth/backend.go b/eth/backend.go
index b57e9fd69e5c1c961353d3a2d05ed0e170a18c53..0e5d2442971dd7a859a0994cc7009a1119a114e8 100644
--- a/eth/backend.go
+++ b/eth/backend.go
@@ -3,6 +3,8 @@ package eth
 import (
 	"crypto/ecdsa"
 	"fmt"
+	"io/ioutil"
+	"path"
 	"strings"
 
 	"github.com/ethereum/go-ethereum/core"
@@ -25,7 +27,10 @@ var (
 	jsonlogger = ethlogger.NewJsonLogger()
 
 	defaultBootNodes = []*discover.Node{
+		// ETH/DEV cmd/bootnode
 		discover.MustParseNode("enode://6cdd090303f394a1cac34ecc9f7cda18127eafa2a3a06de39f6d920b0e583e062a7362097c7c65ee490a758b442acd5c80c6fce4b148c6a391e946b45131365b@54.169.166.226:30303"),
+		// ETH/DEV cpp-ethereum (poc-8.ethdev.com)
+		discover.MustParseNode("enode://4a44599974518ea5b0f14c31c4463692ac0329cb84851f3435e6d1b18ee4eae4aa495f846a0fa1219bd58035671881d44423876e57db2abd57254d0197da0ebe@5.1.83.226:30303"),
 	}
 )
 
@@ -77,6 +82,27 @@ func (cfg *Config) parseBootNodes() []*discover.Node {
 	return ns
 }
 
+func (cfg *Config) nodeKey() (*ecdsa.PrivateKey, error) {
+	// use explicit key from command line args if set
+	if cfg.NodeKey != nil {
+		return cfg.NodeKey, nil
+	}
+	// use persistent key if present
+	keyfile := path.Join(cfg.DataDir, "nodekey")
+	key, err := crypto.LoadECDSA(keyfile)
+	if err == nil {
+		return key, nil
+	}
+	// no persistent key, generate and store a new one
+	if key, err = crypto.GenerateKey(); err != nil {
+		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)
+	}
+	return key, nil
+}
+
 type Ethereum struct {
 	// Channel for shutting down the ethereum
 	shutdownChan chan bool
@@ -161,18 +187,16 @@ func New(config *Config) (*Ethereum, error) {
 	insertChain := eth.chainManager.InsertChain
 	eth.blockPool = NewBlockPool(hasBlock, insertChain, ezp.Verify)
 
+	netprv, err := config.nodeKey()
+	if err != nil {
+		return nil, err
+	}
 	ethProto := EthProtocol(eth.txPool, eth.chainManager, eth.blockPool)
 	protocols := []p2p.Protocol{ethProto}
 	if config.Shh {
 		protocols = append(protocols, eth.whisper.Protocol())
 	}
 
-	netprv := config.NodeKey
-	if netprv == nil {
-		if netprv, err = crypto.GenerateKey(); err != nil {
-			return nil, fmt.Errorf("could not generate server key: %v", err)
-		}
-	}
 	eth.net = &p2p.Server{
 		PrivateKey:     netprv,
 		Name:           config.Name,
diff --git a/gocoverage.sh b/gocoverage.sh
index e54a5cab0328784341c4d5935a90f88f0498a522..5479d8d3b72c33effbe920c814713758c1ff5dcf 100755
--- a/gocoverage.sh
+++ b/gocoverage.sh
@@ -29,6 +29,3 @@ if ls $dir/*.go &> /dev/null; then
     fi
 fi
 done
-
-go tool cover -func profile.cov
-