this should be a private method