         let queue = DispatchQueue.global(qos: .userInitiated)
         let places = getPlaceKeys(aroundPoint: location).andThen(upon: queue) { (placeKeyToLoc) -> Future<[DatabaseResult<Place>]> in
             // TODO: limit the number of place details we look up. X closest places?
-            // TODO: can we assume all queries will finish?
             // TODO: These should be ordered by display order
             return self.getPlaceDetails(fromKeys: Array(placeKeyToLoc.keys)).allFilled()
         }


        let childRef = placeDetailsRef.child(placeKey)
        childRef.queryOrderedByKey().observeSingleEvent(of: .value) { (data: FIRDataSnapshot) in
            if let place = Place(fromFirebaseSnapshot: data) {
                deferred.fill(with: DatabaseResult.succeed(value: place))
            } else {
                // TODO: make better than optional; handle correctly.
                // Note: I tried to return an optional here and the Deferred lib crashes.
                deferred.fill(with: DatabaseResult.fail(withMessage: "Unable to create place"))
            }
        }


        geofire = GeoFire(firebaseRef: rootRef.child(GEOFIRE_PATH))
    }

    // TODO: handle version in DB
    /*
     * Queries GeoFire to get the place keys around the given location and then queries Firebase to
