refactor order and its subclasses