OO but not quite functional