after chao refactored