       nativeStorage = native
     }
     if capacityChanged {
-      start = nativeStorage._bucket(key)
-      (index, found) = nativeStorage._find(key, start)
+      idealBucket = nativeStorage._bucket(key)
+      (index, found) = nativeStorage._find(key, idealBucket)
       _sanityCheck(found, "key was lost during storage migration")
     }
 
     let oldValue = nativeStorage[index.offset]!.value
-    nativeDeleteImpl(nativeStorage, start: start, offset: index.offset)
+    nativeDeleteImpl(nativeStorage, idealBucket: idealBucket,
+        offset: index.offset)
     return oldValue
   }
 


  mutating func nativeRemoveObjectForKey(key: KeyType) -> ValueType? {
    var nativeStorage = native
    var start = nativeStorage._bucket(key)
    var (index, found) = nativeStorage._find(key, start)

    // Fast path: if the key is not present, we will not mutate the dictionary,
    // so don't force unique storage.

    }

    let key = nativeStorage.assertingGet(nativeIndex).0
    nativeDeleteImpl(nativeStorage, idealBucket: nativeStorage._bucket(key),
        offset: nativeIndex.offset)
  }

  mutating func removeAtIndex(index: Index) {
