tidied up interface