update by HaoL