implement base feature