add version numbers and extra methods, also use parent constructors