almost done except some exception