# File lib/ruote/part/storage_participant.rb, line 377
    def reserve(workitem_or_fei, owner)

      hwi = fetch(workitem_or_fei)

      fail ArgumentError.new("workitem not found") if hwi.nil?

      return nil if hwi['owner'] && hwi['owner'] != owner

      hwi['owner'] = owner

      r = @context.storage.put(hwi, :update_rev => true)

      fail ArgumentError.new("workitem is gone") if r == true
      fail ArgumentError.new("workitem got modified meanwhile") if r != nil

      Workitem.new(hwi)
    end