add some multi-threading