reworked entire design pattern