use unless because it forces all arguments to go to open()