Design changes, uses C++11 constructors