generic planner