         assert(Thread.isMainThread)
 
         let context = self.container.viewContext
-        let token = self.willSave(context)
-        defer { self.didSave(token) }
 
         let tag = CD_Tag(context: context)
         tag.cd_name = name
+        tag.willSave()
         return context.datum_save().map {
             AnyElement(CD_Element(tag, { AnyTag($0) }))
         }

            return .failure(.unknown)
        }
        let context = self.container.viewContext
        let token = self.willSave(context)
        defer { self.didSave(token) }

        var changesMade = false
        if let newName = name {
            changesMade = true
            tag.cd_name = newName
        }

        return changesMade ? context.datum_save() : .success(())

            return .failure(.unknown)
        }
        let context = self.container.viewContext
        context.delete(tag)
        return context.datum_save()
    }
