      - parameter itemIDs: the object identifiers for the objects to insert
      - parameter beforeItemID: an existing identifier to insert items after of. Specifying an invalid value will raise an exception.
      */
-    public mutating func insertItems<C: Collection>(withIDs itemIDs: C, afterItemID: ItemID) where C.Element == ItemID {
-
-        self.diffableSnapshot.insertItems(itemIDs, afterItem: afterItemID)
+    public mutating func insertItems<C: Collection>(
+        withIDs itemIDs: C,
+        afterItemID: ItemID
+    ) where C.Element == ItemID {
+
+        self.mutate {
+
+            $0.insertItems(itemIDs, afterItem: afterItemID)
+        }
     }
     
     /**

     */
    public mutating func reloadSections<C: Collection>(withIDs sectionIDs: C) where C.Element == SectionID {

        self.diffableSnapshot.reloadSections(sectionIDs)
    }
    
    /**

     - parameter indices: the positions of the itemIDs to return. Specifying an invalid value will raise an exception.
     - returns: the `ItemID` array belonging to the given `SectionID` at the specified indices
     */
    public func itemIDs<S: Sequence>(
        inSectionWithID sectionID: SectionID,
        atIndices indices: S
    ) -> [ItemID] where S.Element == Int {

        let itemIDs = self.diffableSnapshot.itemIdentifiers(inSection: sectionID)
        return indices.map({ itemIDs[$0] })
