designing abstract CAN pump