adopted controller structure