add tests, nuget updates and internal restructuring