add opts.open and opts.close