First commit: initial and add base functional