diff --git a/personal/q3k/shipstuck/main.go b/personal/q3k/shipstuck/main.go
index 70ee459..a43c5e7 100644
--- a/personal/q3k/shipstuck/main.go
+++ b/personal/q3k/shipstuck/main.go
@@ -22,19 +22,24 @@
 
 // get retrieves the current status of the ship - returns true if stack, false
 // otherwise.
-func get(ctx context.Context) (bool, error) {
+func get(ctx context.Context) (shipState, error) {
 	// Sorry vesselfinder, if you made it easy to set up an account I would
 	// gladly pay for the API instead of doing this. Limiting requests to once
 	// every 15 minutes though, that seems fair enough.
 	req, err := http.NewRequestWithContext(ctx, "GET", "https://www.vesselfinder.com/api/pub/click/353136000", nil)
 	if err != nil {
-		return false, fmt.Errorf("NewRequestWithContext: %w", err)
+		return shipStateUnknown, fmt.Errorf("NewRequestWithContext: %w", err)
 	}
 	req.Header.Set("User-Agent", "Mozilla/5.0 (X11; Linux x86_64; rv:86.0) Gecko/20100101 Firefox/86.0")
 
 	res, err := http.DefaultClient.Do(req)
 	if err != nil {
-		return false, fmt.Errorf("Do: %w", err)
+		// vesselfinder.com down on 2021/03/29, add a 'cached' status for one hour as a hack.
+		if time.Now().Unix() < (1617024611 + 3600) {
+			return shipStateTowed, nil
+			glog.Warningf("Faking vesselfinder return.")
+		}
+		return shipStateUnknown, fmt.Errorf("Do: %w", err)
 	}
 
 	defer res.Body.Close()
@@ -42,15 +47,16 @@
 	v := &vessel{}
 	err = json.NewDecoder(res.Body).Decode(v)
 	if err != nil {
-		return false, fmt.Errorf("Decode: %w", err)
+		return shipStateUnknown, fmt.Errorf("Decode: %w", err)
 	}
 
-	if v.Speed < 0.5 {
-		return true, nil
-	} else {
-		glog.Infof("Freed! %+v", v)
-		return false, nil
+	if v.Speed > 10.0 {
+		return shipStateFreed, nil
 	}
+	if v.Speed > 0.5 {
+		return shipStateTowed, nil
+	}
+	return shipStateStuck, nil
 }
 
 type shipState string
@@ -59,6 +65,7 @@
 	shipStateUnknown shipState = "UNKNOWN"
 	shipStateStuck   shipState = "STUCK"
 	shipStateFreed   shipState = "FREED"
+	shipStateTowed   shipState = "TOWED"
 )
 
 type service struct {
@@ -84,11 +91,7 @@
 					break
 				}
 			} else {
-				if stuck {
-					state = shipStateStuck
-				} else {
-					state = shipStateFreed
-				}
+				state = stuck
 				break
 			}
 		}
@@ -143,6 +146,9 @@
 		res.Elapsed = time.Since(timeStuck).Nanoseconds()
 	case shipStateFreed:
 		res.Current = pb.StatusResponse_STUCKNESS_FREE
+	case shipStateTowed:
+		res.Current = pb.StatusResponse_STUCKNESS_TOWED
+		res.Elapsed = time.Since(timeStuck).Nanoseconds()
 	}
 
 	return res, nil
diff --git a/personal/q3k/shipstuck/proto/shipstuck.proto b/personal/q3k/shipstuck/proto/shipstuck.proto
index f0836e1..a76d199 100644
--- a/personal/q3k/shipstuck/proto/shipstuck.proto
+++ b/personal/q3k/shipstuck/proto/shipstuck.proto
@@ -23,8 +23,9 @@
         STUCKNESS_STUCK = 1;
         STUCKNESS_FREE = 2;
         STUCKNESS_UNKNOWN = 3;
+        STUCKNESS_TOWED = 4;
     };
     Stuckness current = 2;
-    // If STUCK, how many nanoseconds have elapsed since the whoopsie?
+    // If STUCK or TOWED, how many nanoseconds have elapsed since the whoopsie?
     int64 elapsed = 3;
 }
