added mode parameter