added a version without shared pointers and templates
some user data