add base classes
add unit testing cases