Add MSVC support
Clean up interface by providing reasonable defaults