Bus systems are naturally unstable. Without control, the slightest disturbance to bus motion can cause buses to bunch, reducing schedule reliability. Holding strategies can eliminate this instability. However, the conventional schedule-based holding method requires too much slack time, which slows buses. This delays on-board passengers and increases operating costs. This paper studies a family of dynamic holding strategies that use the current state of all buses, as well as a virtual schedule. The virtual schedule is introduced whether the system is run with a published schedule or not. We found that with this control method, which we term general control method, buses can both closely adhere to schedule and maintain regular headways without too much slack. Thus the general control idea is applicable to bus lines with both long and short headways. Although the optimal set of control parameters can be found numerically, a one-parameter version of the control method can be optimized in closed form. This simple method was shown to be near-optimal. To put it in practice, one only needs the arrival times of the current bus and the preceding bus relative to the virtual schedule. This simple method was found to outperform alternative control methods (i.e., require less slack for the same headway variance). While the paper mostly focuses on recurrent small disturbances under quasi-deterministic demand, it also shows that the proposed control method can deal with large disturbances.