consider fluent interface