fix a bug and add an optional argument