tidied up the constructor new instance logic