this should be private method