magical constructors to support remain() option