add base files. improve api. add tests