   /// Save NSManagedObjectContext
   ///
   /// - Parameters:
-  ///   - block: execute block of code before save
-  ///   - completion: context to save
+  ///   - block: closure invoked before saving NSManagedObjectContext, perform changes on NSManagedObject instances here
+  ///   - completion: closure that will be executed after save operation is finished
   static func saveWithBlock(_ block: @escaping (_ localContext: NSManagedObjectContext) -> Void, completion: @escaping (_ success: Bool) -> Void) {
     let backgroundContext = NSManagedObjectContext.backgroundContext
     

public extension NSManagedObjectContext {
  
  /// Main NSManagedObjectContext of the app.
  /// You can use it safely with UIKit, works on the main thread of the app.
  /// It's a singleton - always returns the same instance.
  public static var mainContext: NSManagedObjectContext {
    return CoreDuck.quack.mainContext

  /// Save NSManagedObjectContext and wait
  ///
  /// - Parameters:
  ///   - block: closure invoked before saving NSManagedObjectContext, perform changes on NSManagedObject instances here
  ///   - completion: closure that will be executed after save operation is finished
  static func saveWithBlockAndWait(_ block: @escaping (_ localContext: NSManagedObjectContext) -> Void, completion: @escaping (_ success: Bool) -> Void) {
    let backgroundContext = NSManagedObjectContext.backgroundContext
    
