more extensible command structure