implements contoller interface