For the benefit of others reading this that haven't worked it out, it composes properly. I'm getting Futures of Options. Since those are incompatible monads there's a lot of boiler plate to unpick it all. By using FutureOpt this evaporates and you can write a simple (and easy to understand) for comprehension instead. The cost is having to write FutureOpt but as you can see it's very simple. It's also extremely reusable. There's a scalaz version that works with arbitrary monads but I think it would provoke tears (and wouldn't have the handy getOrElse stuff).

The FutureOpt code comes from the one and only @bmjames!