With multi-threading