more constraints on implementation