abstract and some little changes