cleaned up interface