some little adds
make function abstract