make fn0 callback optional in put!