(function() {

  var God, DNA, Species;

  God = function God() { };
  God.meaningOfLife = 42;
  God.speak = function() { return "I AM GOD" };
  God.prototype = God;
  God.prototype.constructor = God;

  God.grantFaithInGodTo = function(species) {
    species.prototype.constructor = God;
  };

  God.copyAttributes = function(whatToCopy){
    var blueprint = whatToCopy.from
    var object = whatToCopy.to
    for (attribute in blueprint) {
      if (blueprint.hasOwnProperty(attribute)) {
          object.prototype[attribute] = blueprint[attribute];
      }
    }
  };

  God.copyDNA =  function(whereToCopy) {
    var ancestorSpecies = whereToCopy.from
    var species = whereToCopy.to

    DNA = function DNA() {};
    DNA.prototype = ancestorSpecies.prototype;
    species.prototype = new DNA();
    species.ancestorSpecies = ancestorSpecies.prototype;
  };

  God.breathLifeInto = function() {

    var getIdentitiesFor = function(self, selfCount) {
      return Array.apply(null, new Array(selfCount)).map(Object.prototype.valueOf, self);
    };

    var grantHeritageAwareness = function(species) {
      var lifeForce = species.ancestorSpecies.bringToLife;
      var selfAwareness = getIdentitiesFor(this, lifeForce.length);
      var selfAwareBeing = [this].concat(selfAwareness);
      var powerOfLife = lifeForce.apply(this, selfAwareBeing)
      if (typeof powerOfLife === 'function'){
        var args = Array.prototype.slice.call(arguments, 1)
        return powerOfLife.apply(this, args);
      } else {
        return powerOfLife;
      }
    };

    var grantSelfAwareness = function(species) {
      var lifeForce = species.prototype.bringToLife;
      var selfAwareness = getIdentitiesFor(this, lifeForce.length);
      var selfAwareBeing = [this].concat(selfAwareness);
      var powerOfLife = lifeForce.apply(this, selfAwareBeing)
      if (typeof powerOfLife === 'function'){
        var args = Array.prototype.slice.call(arguments, 1)
        return powerOfLife.apply(this, args);
      } else {
        return powerOfLife;
      }
    };

    var speciesType = arguments[0]
    var params = [speciesType].concat(Array.prototype.slice.call(arguments, 1))

    if (speciesType.ancestorSpecies && speciesType.ancestorSpecies.hasOwnProperty("bringToLife")) {
      grantHeritageAwareness.apply(this, params);
    }

    if (speciesType.prototype.hasOwnProperty("bringToLife")) {
      grantSelfAwareness.apply(this, params);
    }
  };

  Species = function(blueprint) {
    var Species, ancestorSpecies

    Species = function Species() {
      var params = [Species].concat(Array.prototype.slice.call(arguments))
      God.breathLifeInto.apply(this, params);
    };

    if (blueprint && blueprint.ancestorSpecies) {
      ancestorSpecies = blueprint.ancestorSpecies;
    } else {
      ancestorSpecies = Object;
    }

    God.copyDNA({from: ancestorSpecies, to: Species});
    God.copyAttributes({from: blueprint, to: Species});
    God.grantFaithInGodTo(Species);

    return Species;
  };

  this.Species = Species
})()
@@ -568,27 +568,28 @@
   %7D;%0A%0A  God.
-cop
+appl
 yDNA =  func
@@ -597,99 +597,40 @@
 ion(
-whereToCopy) %7B%0A    var ancestorSpecies = whereToCopy.from%0A    var species = whereToCopy.to%0A
+ancestorSpecies, childSpecies) %7B
 %0A   
@@ -702,25 +702,30 @@
 totype;%0A    
-s
+childS
 pecies.proto
@@ -742,25 +742,30 @@
  DNA();%0A    
-s
+childS
 pecies.ances
@@ -2801,23 +2801,17 @@
 God.
-cop
+appl
 yDNA(
-%7Bfrom: 
 ance
@@ -2822,28 +2822,24 @@
 Species,
- to:
  Species
 %7D);%0A    
@@ -2822,33 +2822,32 @@
 Species, Species
-%7D
 );%0A    God.copyA
@@ -2977,12 +2977,13 @@
 Species%0A
+%0A
 %7D)()

Change copyDNA function to applyDNA