drop macro
implement method
simplify require