optimize Singleton.chain()
ws