implement base logic
implement base logic