     
     // MARK: - public convenience methods
     
+    /// Asynchronously performs a given closure on the receiver’s queue.
+    ///
+    /// - parameter closure: The closure to perform.
+    ///
+    /// - note: Calling this method is the same as calling `performBlock:` method.
+    /// - seealso: `performBlock:`
     public func perform(closure: () -> Void) {
         self.performBlock(closure)
     }
     
+    /// Synchronously performs a given closure on the receiver’s queue.
+    ///
+    /// - parameter closure: The closure to perform
+    ///
+    /// - note: Calling this method is the same as calling `performBlockAndWait:` method.
+    /// - seealso: `performBlockAndWait:`
     public func performAndWait(closure: () -> Void) {
         self.performBlockAndWait(closure)
     }

    
    // MARK: - public overrided methods
    
    public override func save() throws {
        guard self.hasChanges else { return }
        

    
    // main thread context
    
    /// Initializes a main thread context with the default (inferred) options.
    ///
    /// - returns: An initialized main thread context with the default (inferred) options.
    ///
    /// - seealso: `DataContextOptions`
    public convenience init() {
        self.init(dataContextOptions: DataContextOptions())
    }
    
    /// Initializes a main thread context with the given options.
    ///
    /// - parameter dataContextOptions: The options that will be applied to the root context of the initialized context.
    ///
    /// - returns: An initialized main thread context with the given options.
    ///
    /// - seealso: `DataContextOptions`
    public convenience init(dataContextOptions: DataContextOptions) {
        self.init(concurrencyType: .MainQueueConcurrencyType)
        
