make Shot.newInstance functional by not assuming properties of argument