can handle empty files