further refactoring for promising