file should really be optional