'use strict';

var copy       = require('es5-ext/object/copy')
  , map        = require('es5-ext/object/map')
  , callable   = require('es5-ext/object/valid-callable')
  , validValue = require('es5-ext/object/valid-value')

  , bind = Function.prototype.bind, defineProperty = Object.defineProperty
  , hasOwnProperty = Object.prototype.hasOwnProperty
  , define;

define = function (name, desc, bindTo) {
	var value = validValue(desc) && callable(desc.value), dgs;
	dgs = copy(desc);
	delete dgs.writable;
	delete dgs.value;
	dgs.get = function () {
		if (hasOwnProperty.call(this, name)) return value;
		desc.value = bind.call(value, (bindTo == null) ? this : this[bindTo]);
		defineProperty(this, name, desc);
		return this[name];
	};
	return dgs;
};

module.exports = function (props/*, bindTo*/) {
	var bindTo = arguments[1];
	return map(props, function (desc, name) {
		return define(name, desc, bindTo);
	});
};

@@ -19,24 +19,28 @@
  copy       
+    
 = require('e
@@ -68,19 +68,84 @@
   , 
-map
+ensureCallable = require('es5-ext/object/valid-callable')%0A  , map   
         
 = re
@@ -132,32 +132,33 @@
 , map           
+ 
 = require('es5-e
@@ -188,16 +188,20 @@
 lable   
+    
 = requir
@@ -250,16 +250,20 @@
 idValue 
+    
 = requir
@@ -467,22 +467,30 @@
 , desc, 
-bindTo
+resolveContext
 ) %7B%0A%09var
@@ -719,46 +719,52 @@
 ue, 
-(bindTo == null) ? 
+resolveContext ? resolveContext(
 this
+)
  : this
-%5BbindTo%5D
 );%0A%09
@@ -876,22 +876,23 @@
 rops/*, 
-bindTo
+options
 */) %7B%0A%09v
@@ -898,29 +898,152 @@
 var 
-bindTo = arguments%5B1%5D
+options = Object(arguments%5B1%5D)%0A%09  , resolveContext;%0A%09if (options.resolveContext != null) resolveContext = ensureCallable(options.resolveContext)
 ;%0A%09r
@@ -1082,19 +1082,17 @@
  name) %7B
-%0A%09%09
+ 
 return d
@@ -1113,18 +1113,25 @@
 sc, 
-bindTo);%0A%09
+resolveContext); 
 %7D);%0A

Reconfigure bindTo support into options.resolveContext