diff --git a/cmd/ethtest/main.go b/cmd/ethtest/main.go
deleted file mode 100644
index fcae668c61af81b25375fc0b0e2a21a3ef64360b..0000000000000000000000000000000000000000
--- a/cmd/ethtest/main.go
+++ /dev/null
@@ -1,224 +0,0 @@
-// Copyright 2014 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
-
-// ethtest executes Ethereum JSON tests.
-package main
-
-import (
-	"fmt"
-	"io"
-	"io/ioutil"
-	"os"
-	"path/filepath"
-	"strings"
-
-	"github.com/ethereum/go-ethereum/log"
-	"github.com/ethereum/go-ethereum/params"
-	"github.com/ethereum/go-ethereum/tests"
-	"gopkg.in/urfave/cli.v1"
-)
-
-var (
-	continueOnError = false
-	testExtension   = ".json"
-	defaultTest     = "all"
-	defaultDir      = "."
-	allTests        = []string{"BlockTests", "StateTests", "TransactionTests", "VMTests", "RLPTests"}
-	testDirMapping  = map[string]string{"BlockTests": "BlockchainTests"}
-	skipTests       = []string{}
-
-	TestFlag = cli.StringFlag{
-		Name:  "test",
-		Usage: "Test type (string): VMTests, TransactionTests, StateTests, BlockTests",
-		Value: defaultTest,
-	}
-	FileFlag = cli.StringFlag{
-		Name:   "file",
-		Usage:  "Test file or directory. Directories are searched for .json files 1 level deep",
-		Value:  defaultDir,
-		EnvVar: "ETHEREUM_TEST_PATH",
-	}
-	ContinueOnErrorFlag = cli.BoolFlag{
-		Name:  "continue",
-		Usage: "Continue running tests on error (true) or [default] exit immediately (false)",
-	}
-	ReadStdInFlag = cli.BoolFlag{
-		Name:  "stdin",
-		Usage: "Accept input from stdin instead of reading from file",
-	}
-	SkipTestsFlag = cli.StringFlag{
-		Name:  "skip",
-		Usage: "Tests names to skip",
-	}
-	TraceFlag = cli.BoolFlag{
-		Name:  "trace",
-		Usage: "Enable VM tracing",
-	}
-)
-
-func runTestWithReader(test string, r io.Reader) error {
-	log.Info("Running test", "test", test)
-
-	var err error
-	switch strings.ToLower(test) {
-	case "bk", "block", "blocktest", "blockchaintest", "blocktests", "blockchaintests":
-		err = tests.RunBlockTestWithReader(params.MainNetHomesteadBlock, params.MainNetDAOForkBlock, params.MainNetHomesteadGasRepriceBlock, r, skipTests)
-	case "st", "state", "statetest", "statetests":
-		rs := &params.ChainConfig{HomesteadBlock: params.MainNetHomesteadBlock, DAOForkBlock: params.MainNetDAOForkBlock, DAOForkSupport: true, EIP150Block: params.MainNetHomesteadGasRepriceBlock}
-		err = tests.RunStateTestWithReader(rs, r, skipTests)
-	case "tx", "transactiontest", "transactiontests":
-		rs := &params.ChainConfig{HomesteadBlock: params.MainNetHomesteadBlock, DAOForkBlock: params.MainNetDAOForkBlock, DAOForkSupport: true, EIP150Block: params.MainNetHomesteadGasRepriceBlock}
-		err = tests.RunTransactionTestsWithReader(rs, r, skipTests)
-	case "vm", "vmtest", "vmtests":
-		err = tests.RunVmTestWithReader(r, skipTests)
-	case "rlp", "rlptest", "rlptests":
-		err = tests.RunRLPTestWithReader(r, skipTests)
-	default:
-		err = fmt.Errorf("Invalid test type specified: %v", test)
-	}
-	return err
-}
-
-func getFiles(path string) ([]string, error) {
-	log.Info("Listing files", "path", path)
-
-	var files []string
-	f, err := os.Open(path)
-	if err != nil {
-		return nil, err
-	}
-	defer f.Close()
-
-	fi, err := f.Stat()
-	if err != nil {
-		return nil, err
-	}
-
-	switch mode := fi.Mode(); {
-	case mode.IsDir():
-		fi, _ := ioutil.ReadDir(path)
-		files = make([]string, len(fi))
-		for i, v := range fi {
-			// only go 1 depth and leave directory entires blank
-			if !v.IsDir() && v.Name()[len(v.Name())-len(testExtension):len(v.Name())] == testExtension {
-				files[i] = filepath.Join(path, v.Name())
-				log.Info("Found test file", "file", files[i])
-			}
-		}
-	case mode.IsRegular():
-		files = make([]string, 1)
-		files[0] = path
-	}
-
-	return files, nil
-}
-
-func runSuite(test, file string) {
-	var tests []string
-
-	if test == defaultTest {
-		tests = allTests
-	} else {
-		tests = []string{test}
-	}
-
-	for _, curTest := range tests {
-		suiteLogger := log.New("suite", file, "test", curTest)
-		suiteLogger.Info("Running test suite")
-
-		var err error
-		var files []string
-		if test == defaultTest {
-			// check if we have an explicit directory mapping for the test
-			if _, ok := testDirMapping[curTest]; ok {
-				files, err = getFiles(filepath.Join(file, testDirMapping[curTest]))
-			} else {
-				// otherwise assume test name
-				files, err = getFiles(filepath.Join(file, curTest))
-			}
-		} else {
-			files, err = getFiles(file)
-		}
-		if err != nil {
-			suiteLogger.Crit("Failed to gather files", "error", err)
-		}
-
-		if len(files) == 0 {
-			suiteLogger.Warn("No files matched path")
-		}
-		for _, curFile := range files {
-			// Skip blank entries
-			if len(curFile) == 0 {
-				continue
-			}
-			testLogger := suiteLogger.New("file", curFile)
-
-			r, err := os.Open(curFile)
-			if err != nil {
-				testLogger.Crit("Failed to open file")
-			}
-			defer r.Close()
-
-			err = runTestWithReader(curTest, r)
-			if err != nil {
-				if continueOnError {
-					testLogger.Error("Test failed, continuing", "error", err)
-				} else {
-					testLogger.Crit("Test failed, aborting", "error", err)
-				}
-			}
-		}
-	}
-}
-
-func setupApp(c *cli.Context) error {
-	flagTest := c.GlobalString(TestFlag.Name)
-	flagFile := c.GlobalString(FileFlag.Name)
-	continueOnError = c.GlobalBool(ContinueOnErrorFlag.Name)
-	useStdIn := c.GlobalBool(ReadStdInFlag.Name)
-	skipTests = strings.Split(c.GlobalString(SkipTestsFlag.Name), " ")
-
-	if !useStdIn {
-		runSuite(flagTest, flagFile)
-	} else {
-		return runTestWithReader(flagTest, os.Stdin)
-	}
-	return nil
-}
-
-func main() {
-	log.Root().SetHandler(log.StreamHandler(os.Stderr, log.TerminalFormat()))
-
-	app := cli.NewApp()
-	app.Name = "ethtest"
-	app.Usage = "go-ethereum test interface"
-	app.Action = setupApp
-	app.Version = "0.2.0"
-	app.Author = "go-ethereum team"
-
-	app.Flags = []cli.Flag{
-		TestFlag,
-		FileFlag,
-		ContinueOnErrorFlag,
-		ReadStdInFlag,
-		SkipTestsFlag,
-		TraceFlag,
-	}
-
-	if err := app.Run(os.Args); err != nil {
-		log.Crit("Failed to run the tester", "error", err)
-	}
-}
diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go
index 74950697c6ae351c8e35441cfd67ec0fde41b2aa..1c21c4ded42f5930ca04b8f33736c7fc3a54ba4a 100644
--- a/cmd/geth/chaincmd.go
+++ b/cmd/geth/chaincmd.go
@@ -19,7 +19,6 @@ package main
 import (
 	"fmt"
 	"os"
-	"path/filepath"
 	"runtime"
 	"strconv"
 	"sync/atomic"
@@ -72,16 +71,6 @@ Requires a first argument of the file to write to.
 Optional second and third arguments control the first and
 last block to write. In this mode, the file will be appended
 if already existing.
-`,
-	}
-	upgradedbCommand = cli.Command{
-		Action:    upgradeDB,
-		Name:      "upgradedb",
-		Usage:     "Upgrade chainblock database",
-		ArgsUsage: " ",
-		Category:  "BLOCKCHAIN COMMANDS",
-		Description: `
-TODO: Please write this
 `,
 	}
 	removedbCommand = cli.Command{
@@ -255,49 +244,6 @@ func removeDB(ctx *cli.Context) error {
 	return nil
 }
 
-func upgradeDB(ctx *cli.Context) error {
-	log.Info(fmt.Sprint("Upgrading blockchain database"))
-
-	stack := utils.MakeNode(ctx, clientIdentifier, gitCommit)
-	chain, chainDb := utils.MakeChain(ctx, stack)
-	bcVersion := core.GetBlockChainVersion(chainDb)
-	if bcVersion == 0 {
-		bcVersion = core.BlockChainVersion
-	}
-
-	// Export the current chain.
-	filename := fmt.Sprintf("blockchain_%d_%s.chain", bcVersion, time.Now().Format("20060102_150405"))
-	exportFile := filepath.Join(ctx.GlobalString(utils.DataDirFlag.Name), filename)
-	if err := utils.ExportChain(chain, exportFile); err != nil {
-		utils.Fatalf("Unable to export chain for reimport %s", err)
-	}
-	chainDb.Close()
-	if dir := dbDirectory(chainDb); dir != "" {
-		os.RemoveAll(dir)
-	}
-
-	// Import the chain file.
-	chain, chainDb = utils.MakeChain(ctx, stack)
-	core.WriteBlockChainVersion(chainDb, core.BlockChainVersion)
-	err := utils.ImportChain(chain, exportFile)
-	chainDb.Close()
-	if err != nil {
-		utils.Fatalf("Import error %v (a backup is made in %s, use the import command to import it)", err, exportFile)
-	} else {
-		os.Remove(exportFile)
-		log.Info(fmt.Sprint("Import finished"))
-	}
-	return nil
-}
-
-func dbDirectory(db ethdb.Database) string {
-	ldb, ok := db.(*ethdb.LDBDatabase)
-	if !ok {
-		return ""
-	}
-	return ldb.Path()
-}
-
 func dump(ctx *cli.Context) error {
 	stack := makeFullNode(ctx)
 	chain, chainDb := utils.MakeChain(ctx, stack)
@@ -329,9 +275,3 @@ func hashish(x string) bool {
 	_, err := strconv.Atoi(x)
 	return err != nil
 }
-
-func closeAll(dbs ...ethdb.Database) {
-	for _, db := range dbs {
-		db.Close()
-	}
-}
diff --git a/cmd/geth/main.go b/cmd/geth/main.go
index 803a618f1b7b391b6fa82760488f62f3fb798f84..fa61f73866d1d8083e7d8b9522250fabfd580865 100644
--- a/cmd/geth/main.go
+++ b/cmd/geth/main.go
@@ -65,7 +65,6 @@ func init() {
 		initCommand,
 		importCommand,
 		exportCommand,
-		upgradedbCommand,
 		removedbCommand,
 		dumpCommand,
 		// See monitorcmd.go:
diff --git a/cmd/gethrpctest/main.go b/cmd/gethrpctest/main.go
deleted file mode 100644
index 69a6074e705e69c7ee27623f8eb663e06ca9c5a4..0000000000000000000000000000000000000000
--- a/cmd/gethrpctest/main.go
+++ /dev/null
@@ -1,161 +0,0 @@
-// Copyright 2015 The go-ethereum Authors
-// This file is part of go-ethereum.
-//
-// go-ethereum is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// go-ethereum is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
-
-// gethrpctest is a command to run the external RPC tests.
-package main
-
-import (
-	"flag"
-	"fmt"
-	"os"
-	"os/signal"
-
-	"github.com/ethereum/go-ethereum/accounts/keystore"
-	"github.com/ethereum/go-ethereum/crypto"
-	"github.com/ethereum/go-ethereum/eth"
-	"github.com/ethereum/go-ethereum/ethdb"
-	"github.com/ethereum/go-ethereum/log"
-	"github.com/ethereum/go-ethereum/node"
-	"github.com/ethereum/go-ethereum/params"
-	"github.com/ethereum/go-ethereum/tests"
-	whisper "github.com/ethereum/go-ethereum/whisper/whisperv2"
-)
-
-const defaultTestKey = "b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291"
-
-var (
-	testFile = flag.String("json", "", "Path to the .json test file to load")
-	testName = flag.String("test", "", "Name of the test from the .json file to run")
-	testKey  = flag.String("key", defaultTestKey, "Private key of a test account to inject")
-)
-
-func main() {
-	flag.Parse()
-
-	// Enable logging errors, we really do want to see those
-	log.Root().SetHandler(log.LvlFilterHandler(log.LvlError, log.StreamHandler(os.Stderr, log.TerminalFormat())))
-
-	// Load the test suite to run the RPC against
-	tests, err := tests.LoadBlockTests(*testFile)
-	if err != nil {
-		log.Crit(fmt.Sprintf("Failed to load test suite: %v", err))
-	}
-	test, found := tests[*testName]
-	if !found {
-		log.Crit(fmt.Sprintf("Requested test (%s) not found within suite", *testName))
-	}
-
-	stack, err := MakeSystemNode(*testKey, test)
-	if err != nil {
-		log.Crit(fmt.Sprintf("Failed to assemble test stack: %v", err))
-	}
-	if err := stack.Start(); err != nil {
-		log.Crit(fmt.Sprintf("Failed to start test node: %v", err))
-	}
-	defer stack.Stop()
-
-	log.Info("Test node started...")
-
-	// Make sure the tests contained within the suite pass
-	if err := RunTest(stack, test); err != nil {
-		log.Crit(fmt.Sprintf("Failed to run the pre-configured test: %v", err))
-	}
-	log.Info("Initial test suite passed...")
-
-	quit := make(chan os.Signal, 1)
-	signal.Notify(quit, os.Interrupt)
-	<-quit
-}
-
-// MakeSystemNode configures a protocol stack for the RPC tests based on a given
-// keystore path and initial pre-state.
-func MakeSystemNode(privkey string, test *tests.BlockTest) (*node.Node, error) {
-	// Create a networkless protocol stack
-	stack, err := node.New(&node.Config{
-		UseLightweightKDF: true,
-		IPCPath:           node.DefaultIPCEndpoint(""),
-		HTTPHost:          node.DefaultHTTPHost,
-		HTTPPort:          node.DefaultHTTPPort,
-		HTTPModules:       []string{"admin", "db", "eth", "debug", "miner", "net", "shh", "txpool", "personal", "web3"},
-		WSHost:            node.DefaultWSHost,
-		WSPort:            node.DefaultWSPort,
-		WSModules:         []string{"admin", "db", "eth", "debug", "miner", "net", "shh", "txpool", "personal", "web3"},
-		NoDiscovery:       true,
-	})
-	if err != nil {
-		return nil, err
-	}
-	// Create the keystore and inject an unlocked account if requested
-	ks := stack.AccountManager().Backends(keystore.KeyStoreType)[0].(*keystore.KeyStore)
-
-	if len(privkey) > 0 {
-		key, err := crypto.HexToECDSA(privkey)
-		if err != nil {
-			return nil, err
-		}
-		a, err := ks.ImportECDSA(key, "")
-		if err != nil {
-			return nil, err
-		}
-		if err := ks.Unlock(a, ""); err != nil {
-			return nil, err
-		}
-	}
-	// Initialize and register the Ethereum protocol
-	db, _ := ethdb.NewMemDatabase()
-	if _, err := test.InsertPreState(db); err != nil {
-		return nil, err
-	}
-	ethConf := &eth.Config{
-		TestGenesisState: db,
-		TestGenesisBlock: test.Genesis,
-		ChainConfig:      &params.ChainConfig{HomesteadBlock: params.MainNetHomesteadBlock},
-	}
-	if err := stack.Register(func(ctx *node.ServiceContext) (node.Service, error) { return eth.New(ctx, ethConf) }); err != nil {
-		return nil, err
-	}
-	// Initialize and register the Whisper protocol
-	if err := stack.Register(func(*node.ServiceContext) (node.Service, error) { return whisper.New(), nil }); err != nil {
-		return nil, err
-	}
-	return stack, nil
-}
-
-// RunTest executes the specified test against an already pre-configured protocol
-// stack to ensure basic checks pass before running RPC tests.
-func RunTest(stack *node.Node, test *tests.BlockTest) error {
-	var ethereum *eth.Ethereum
-	stack.Service(&ethereum)
-	blockchain := ethereum.BlockChain()
-
-	// Process the blocks and verify the imported headers
-	blocks, err := test.TryBlocksInsert(blockchain)
-	if err != nil {
-		return err
-	}
-	if err := test.ValidateImportedHeaders(blockchain, blocks); err != nil {
-		return err
-	}
-	// Retrieve the assembled state and validate it
-	stateDb, err := blockchain.State()
-	if err != nil {
-		return err
-	}
-	if err := test.ValidatePostState(stateDb); err != nil {
-		return err
-	}
-	return nil
-}