diff --git a/lib/scripts/require.js b/lib/scripts/require.js
index 9736dad..5ae09e2 100644
--- a/lib/scripts/require.js
+++ b/lib/scripts/require.js
@@ -3,10 +3,6 @@
 
 (function () {
     var modules = {};
-    // Stack of moduleIds currently being built.
-    var requireStack = [];
-    // Map of module ID -> index into requireStack of modules currently being built.
-    var inProgressModules = {};
 
     function build(module) {
         var factory = module.factory;
@@ -19,21 +15,8 @@
     require = function (id) {
         if (!modules[id]) {
             throw "module " + id + " not found";
-        } else if (id in inProgressModules) {
-            var cycle = requireStack.slice(inProgressModules[id]).join('->') + '->' + id;
-            throw "Cycle in require graph: " + cycle;
         }
-        if (modules[id].factory) {
-            try {
-                inProgressModules[id] = requireStack.length;
-                requireStack.push(id);
-                return build(modules[id]);
-            } finally {
-                delete inProgressModules[id];
-                requireStack.pop();
-            }
-        }
-        return modules[id].exports;
+        return modules[id].factory ? build(modules[id]) : modules[id].exports;
     };
 
     define = function (id, factory) {
@@ -57,4 +40,4 @@
 if (typeof module === "object" && typeof require === "function") {
     module.exports.require = require;
     module.exports.define = define;
-}
+}
\ No newline at end of file
diff --git a/test/test.require.js b/test/test.require.js
index 566ae05..b79dec4 100644
--- a/test/test.require.js
+++ b/test/test.require.js
@@ -35,38 +35,6 @@
             }).toThrow("module your mom not found");
         });
 
-        it("throws an exception when modules depend on each other", function () {
-            define("ModuleA", function(require, exports, module) {
-                require("ModuleB");
-            });
-            define("ModuleB", function(require, exports, module) {
-                require("ModuleA");
-            });
-            expect(function () {
-                require("ModuleA");
-            }).toThrow("Cycle in require graph: ModuleA->ModuleB->ModuleA");
-            define.remove("ModuleA");
-            define.remove("ModuleB");
-        });
-
-        it("throws an exception when a cycle of requires occurs", function () {
-            define("ModuleA", function(require, exports, module) {
-                require("ModuleB");
-            });
-            define("ModuleB", function(require, exports, module) {
-                require("ModuleC");
-            });
-            define("ModuleC", function(require, exports, module) {
-                require("ModuleA");
-            });
-            expect(function () {
-                require("ModuleA");
-            }).toThrow("Cycle in require graph: ModuleA->ModuleB->ModuleC->ModuleA");
-            define.remove("ModuleA");
-            define.remove("ModuleB");
-            define.remove("ModuleC");
-        });
-
         it("calls the factory method when requiring", function () {
             var factory = jasmine.createSpy();
             define("dino", factory);
