add base structure, added tests