function geminus(src, dst) {

var key, val;

dst = dst || world;

for (key in src) {
  if (!src.hasOwnProperty(key)) {
    continue;
  }

  val = src[key];

  if (typeof val === "object") {
    val = geminus(val, dst[key] || {});
  }

  Object.defineProperty(dst, key, {
    configurable: true, // set to false once geminus() will not be redefining props
    enumerable:   true,
    writable:     false,
    value:        val
  });
}

return dst;

}