Added an optional callback parameter