add several improvements