Rather than pass around mode, I think using subclasses makes sense, sorry if this was unclear before.