Tidied up implementation by removing copy constructors