add base classes
implement initialization and basic properties
Add static instantiation constructors
Refacor unit tests