(function (global, factory) {
  if (typeof exports === 'object') {
    module.exports = factory(require('moment'));
  } else if (typeof define === 'function' && define.amd) {
    define(['moment'], factory);
  } else {
    global.moment = factory(global.moment);
  }
}(this, function(moment) {

  var patchMethods = ['add', /* other methods here */];
  var frozenProto = Object.create(moment.fn);
  function frozenMethodGenerator(orig) {
    return function () {
      return orig.apply(this.freeze(), arguments);
    };
  }
  function mixin(dest, props) {
    for (var prop in props) {
      if (props.hasOwnProperty(prop)) {
        dest[prop] = props[prop];
      }
    }
  }
  for (var i = 0, len = patchMethods.length; i < len; i++) {
    var methodToPatch = patchMethods[i];
    var originalMethod = moment.fn[methodToPatch];
    frozenProto[methodToPatch] = frozenMethodGenerator(originalMethod);
  }
  moment.fn.isFrozen = function () {
    return this.__frozen;
  };
  moment.fn.freeze = function () {
    var props = this.clone();
    var frozen = Object.create(frozenProto);
    mixin(frozen, props);
    return frozen;
  };
  frozenProto.thaw = function () {
    return this.clone();
  };
  frozenProto.__frozen = true;

  return moment;

}));

@@ -294,21 +294,25 @@
 %0A%0A  var 
-patch
+immutable
 Methods 
@@ -318,42 +318,318 @@
  = %5B
-'add', /* other methods here */
+%0A    // Display%0A    'format',%0A    'fromNow',%0A    'from',%0A    'calendar',%0A    'diff',%0A    'valueOf',%0A    'unix',%0A    'daysInMonth',%0A    'toArray',%0A    'toJSON',%0A    'toISOString',%0A    // Query%0A    'isBefore',%0A    'isSame',%0A    'isAfter',%0A    'isBetween',%0A    'isLeapYear',%0A    'isDST',%0A    'isDSTShifted'%0A  
 %5D;%0A
+%0A
   va
@@ -952,16 +952,17 @@
   %7D%0A  %7D%0A
+%0A
   for (v
@@ -968,154 +968,188 @@
 var 
-i = 0, len = patchMethods.length; i %3C len; i++) %7B%0A    var methodToPatch = patchMethods%5Bi%5D;%0A    var originalMethod = moment.fn%5BmethodToPatch%5D;%0A
+key in moment.fn) %7B%0A    var func = moment.fn%5Bkey%5D;%0A    if (moment.fn.hasOwnProperty(key) && typeof func === 'function') %7B%0A      if (immutableMethods.indexOf(key) === -1) %7B%0A 
     
+   
 froz
@@ -1160,21 +1160,11 @@
 oto%5B
-methodToPatch
+key
 %5D = 
@@ -1189,24 +1189,28 @@
 tor(
-originalMethod);
+func);%0A      %7D%0A    %7D
 %0A  %7D
@@ -1329,27 +1329,42 @@
 props = 
-this.clone(
+moment.fn.clone.apply(this
 );%0A    v

Add a list of immutable moment methods; wrap all the others