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/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 168ce0da7d7336a907d66c930772df3df627294f..6736e496f29cb335239c8553117f13df355f588d 100644
--- a/util/hell/cmd/hell/main.go
+++ b/util/hell/cmd/hell/main.go
@@ -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)
 		},
 	}