fix bug and abstraction