accept already-instantiated source objects, in a style most janky