diff --git a/action/install.go b/action/install.go
index 2248460..a719cc0 100644
--- a/action/install.go
+++ b/action/install.go
@@ -182,7 +182,12 @@
 		if gw.lock == nil {
 			writeLock, writeVendor = true, true
 		} else {
-			rlf := cfg.LockfileFromSolverLock(gw.resultLock)
+			rlf, err := cfg.LockfileFromSolverLock(gw.resultLock)
+			// This err really shouldn't occur, but could if we get an unpaired
+			// version back from gps somehow
+			if err != nil {
+				return err
+			}
 			if !locksAreEquivalent(rlf, gw.lock) {
 				writeLock, writeVendor = true, true
 			}
@@ -228,7 +233,12 @@
 				return fmt.Errorf("Failed to write glide lock file: %s", err)
 			}
 		} else {
-			rlf := cfg.LockfileFromSolverLock(gw.resultLock)
+			rlf, err := cfg.LockfileFromSolverLock(gw.resultLock)
+			// As with above, this case really shouldn't get hit unless there's
+			// a bug in gps, or guarantees change
+			if err != nil {
+				return err
+			}
 			if err := rlf.WriteFile(filepath.Join(td, gpath.LockFile)); err != nil {
 				return fmt.Errorf("Failed to write glide lock file: %s", err)
 			}
diff --git a/cfg/lock.go b/cfg/lock.go
index 0d91363..89f6e19 100644
--- a/cfg/lock.go
+++ b/cfg/lock.go
@@ -23,9 +23,9 @@
 }
 
 // LockfileFromSolverLock transforms a gps.Lock into a glide *Lockfile.
-func LockfileFromSolverLock(r gps.Lock) *Lockfile {
+func LockfileFromSolverLock(r gps.Lock) (*Lockfile, error) {
 	if r == nil {
-		return nil
+		return nil, fmt.Errorf("no gps lock data provided to transform")
 	}
 
 	// Create and write out a new lock file from the result
@@ -50,18 +50,26 @@
 		//
 		// TODO might still be better to check and return out with an err if
 		// not, though
-		l.Revision = v.(gps.PairedVersion).Underlying().String()
-		switch v.Type() {
-		case "branch":
-			l.Branch = v.String()
-		case "semver", "version":
-			l.Version = v.String()
+		switch tv := v.(type) {
+		case gps.Revision:
+			l.Revision = tv.String()
+		case gps.PairedVersion:
+			l.Revision = v.(gps.PairedVersion).Underlying().String()
+			switch v.Type() {
+			case "branch":
+				l.Branch = v.String()
+			case "semver", "version":
+				l.Version = v.String()
+			}
+		case gps.UnpairedVersion:
+			// this should not be possible - error if we hit it
+			return nil, fmt.Errorf("should not be possible - gps returned an unpaired version for %s", pi)
 		}
 
 		lf.Imports = append(lf.Imports, l)
 	}
 
-	return lf
+	return lf, nil
 }
 
 // LockfileFromYaml returns an instance of Lockfile from YAML
