most of the lazy stuffs and ->>/-> macros done