this should be private or protected