diff --git a/config/dump_config_test.go b/config/dump_config_test.go
index 66e3f1f1a0e0be290bf8bed656ca8167ce60336d..4ea3dd0598fa3b78cdffeae44e95c4d8d35212a5 100644
--- a/config/dump_config_test.go
+++ b/config/dump_config_test.go
@@ -4,9 +4,10 @@
 package config
 
 import (
-	"github.com/stretchr/testify/assert"
 	"io/ioutil"
 	"testing"
+
+	"github.com/stretchr/testify/assert"
 )
 
 // This is a little convenience for getting a config file dump. Just run:
diff --git a/config/viper.go b/config/viper.go
index fd56d89e67a20fa55cf1bcfd1e2487071acb5318..cb59f540c3548177a1bbb23a356ed28c61583aff 100644
--- a/config/viper.go
+++ b/config/viper.go
@@ -2,6 +2,7 @@ package config
 
 import (
 	"fmt"
+
 	"github.com/spf13/viper"
 )
 
diff --git a/event/event_cache.go b/event/event_cache.go
index 08db30116ea20225cb27875fb79fd103b0165070..7b6bc356cdf528a390730daa1ac0cabcb2d5749e 100644
--- a/event/event_cache.go
+++ b/event/event_cache.go
@@ -2,9 +2,10 @@ package event
 
 import (
 	"fmt"
-	"github.com/eris-ltd/eris-db/txs"
 	"sync"
 	"time"
+
+	"github.com/eris-ltd/eris-db/txs"
 )
 
 var (
diff --git a/hell b/hell
new file mode 100644
index 0000000000000000000000000000000000000000..392907b3a74800038d60cc899e866c97f0afc28d
--- /dev/null
+++ b/hell
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+
+go run ./util/hell/cmd/hell/main.go "$@"
\ No newline at end of file
diff --git a/keys/key_client.go b/keys/key_client.go
index a4a14e0aa639ee4fee572fc25317f636555c11a9..2431bc643500016bc5859d91c8a48955d451dbf2 100644
--- a/keys/key_client.go
+++ b/keys/key_client.go
@@ -19,6 +19,7 @@ package keys
 import (
 	"encoding/hex"
 	"fmt"
+
 	"github.com/eris-ltd/eris-db/logging"
 	"github.com/eris-ltd/eris-db/logging/loggers"
 )
diff --git a/logging/loggers/channel_logger_test.go b/logging/loggers/channel_logger_test.go
index 5473c0d31b6b1b103bd0a3b4d38495ed7428826a..14b50fa0edc621761e7f9e78df2c304478a4a31e 100644
--- a/logging/loggers/channel_logger_test.go
+++ b/logging/loggers/channel_logger_test.go
@@ -4,6 +4,7 @@ import (
 	"testing"
 
 	"fmt"
+
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/rpc/tendermint/client/client_test.go b/rpc/tendermint/client/client_test.go
index 52e0125e7645dd9d87e101c65c68dc60fa9b5faa..3fe36f9795c6fe4fd68b6935ba33bf73f690b2b4 100644
--- a/rpc/tendermint/client/client_test.go
+++ b/rpc/tendermint/client/client_test.go
@@ -1,8 +1,9 @@
 package client
 
 import (
-	"github.com/stretchr/testify/assert"
 	"testing"
+
+	"github.com/stretchr/testify/assert"
 )
 
 func TestMapsAndValues(t *testing.T) {
diff --git a/util/hell/README.md b/util/hell/README.md
index 8fe7fdb9ee299488204c8a9dda55a9b7542ce2dc..715cb5522ca5a98143a45edf7e9ec49517b6778d 100644
--- a/util/hell/README.md
+++ b/util/hell/README.md
@@ -1,4 +1,11 @@
 > Hell is other people's packages
 
 While we wait for working package management in go we need a way to make
-maintaining the glide.lock by hand less painful.
\ No newline at end of file
+maintaining the glide.lock by hand less painful.
+
+To interactively add a package run from the root:
+
+```bash
+go run ./util/hell/cmd/hell/main.go get --interactive github.com/tendermint/tendermint
+```
+
diff --git a/util/hell/cmd/hell/main.go b/util/hell/cmd/hell/main.go
index 6b1bba7f0786cd67fec90dd8cc460cd7ebe348fa..6736e496f29cb335239c8553117f13df355f588d 100644
--- a/util/hell/cmd/hell/main.go
+++ b/util/hell/cmd/hell/main.go
@@ -3,9 +3,10 @@ package main
 import (
 	"fmt"
 	"os"
-
 	"path/filepath"
 
+	"github.com/eris-ltd/eris-db/util/hell"
+
 	"github.com/Masterminds/glide/action"
 	"github.com/Masterminds/glide/cache"
 	"github.com/Masterminds/glide/cfg"
@@ -13,7 +14,6 @@ import (
 	"github.com/Masterminds/glide/path"
 	"github.com/Masterminds/glide/repo"
 	"github.com/Masterminds/glide/util"
-	"github.com/eris-ltd/eris-db/util/hell"
 	"github.com/spf13/cobra"
 )
 
@@ -74,37 +74,52 @@ func main() {
 			}
 			rootPackage, _ := util.NormalizeName(args[0])
 			// Add dependency to glide
-			action.Get(args, repo.NewInstaller(), false, true, false, !interactive, false)
+			installer := repo.NewInstaller()
+			action.Get(args, installer, false, true, false, !interactive, false)
 			// Now hunt down the repo cache
 			dep := action.EnsureConfig().Imports.Get(rootPackage)
+
 			key, err := cache.Key(dep.Remote())
 			if err != nil {
 				msg.Die("%s requires a single argument of the remote dependency\n", cmd.Name())
 			}
 			cacheDir := filepath.Join(cache.Location(), "src", key)
-
+			repos, err := dep.GetRepo(cacheDir)
+			if err != nil {
+				msg.Die("Could not get repo: %s", err)
+			}
+			version, err := repos.Version()
+			if err != nil {
+				msg.Die("Could not get version: %s", err)
+			}
+			dep.Pin = version
+			lockPath := filepath.Join(".", path.LockFile)
+			baseLockFile, err := cfg.ReadLockFile(lockPath)
+			if err != nil {
+				msg.Die("Could not read base lock file: %s", err)
+			}
+			overrideLockFile := &cfg.Lockfile{}
 			if path.HasLock(cacheDir) {
-				msg.Info("Found dependency lock file, merging into project lock file")
-				lockPath := filepath.Join(".", path.LockFile)
-				baseLockFile, err := cfg.ReadLockFile(lockPath)
-				if err != nil {
-					msg.Die("Could not read base lock file: %s", err)
-				}
-				overrideLockFile, err := cfg.ReadLockFile(filepath.Join(cacheDir, path.LockFile))
+				msg.Info("Found dependency lock file so merging into project lock file")
+				overrideLockFile, err = cfg.ReadLockFile(filepath.Join(cacheDir, path.LockFile))
 				if err != nil {
 					msg.Die("Could not read dependency lock file: %s", err)
 				}
-				mergedLockFile, err := hell.MergeGlideLockFiles(baseLockFile, overrideLockFile)
-				if err != nil {
-					msg.Die("Could not merge lock files: %s\n", err)
-				}
-				err = mergedLockFile.WriteFile(lockPath)
-				if err != nil {
-					msg.Die("Could not write merged lock file: %s", err)
-				}
-			} else {
-				msg.Info("Did not find dependency lock file, so nothing merged intoo project lock file")
 			}
+			// Add the package to glide lock too!
+			overrideLockFile.Imports = append(overrideLockFile.Imports, cfg.LockFromDependency(dep))
+
+			mergedLockFile, err := hell.MergeGlideLockFiles(baseLockFile, overrideLockFile)
+			fmt.Printf("%#v\n", mergedLockFile.Imports)
+			if err != nil {
+				msg.Die("Could not merge lock files: %s\n", err)
+			}
+			err = mergedLockFile.WriteFile(lockPath)
+			if err != nil {
+				msg.Die("Could not write merged lock file: %s", err)
+			}
+
+			action.Install(installer, false)
 		},
 	}
 
diff --git a/util/hell/merge.go b/util/hell/merge.go
index f8fa01b68d9dd335fa6fde73ed606a0915f53c27..915001f398d7fa229df015f4d03e13f2a87ade5a 100644
--- a/util/hell/merge.go
+++ b/util/hell/merge.go
@@ -3,7 +3,6 @@ package hell
 import (
 	"crypto/sha256"
 	"fmt"
-
 	"sort"
 
 	"github.com/Masterminds/glide/cfg"
diff --git a/util/hell/merge_test.go b/util/hell/merge_test.go
index cd59f4d07e309e87bdf2be42ec64528ca73d4a09..df44045a7d6ab111c441bdaa8d6d96e6fcd58517 100644
--- a/util/hell/merge_test.go
+++ b/util/hell/merge_test.go
@@ -1,9 +1,8 @@
 package hell
 
 import (
-	"testing"
-
 	"strings"
+	"testing"
 
 	"github.com/Masterminds/glide/cfg"
 	"github.com/stretchr/testify/assert"