diff --git a/hyde/ext/plugins/rjs.py b/hyde/ext/plugins/requirejs.py
similarity index 66%
rename from hyde/ext/plugins/rjs.py
rename to hyde/ext/plugins/requirejs.py
index f225e78..b1a3d5e 100644
--- a/hyde/ext/plugins/rjs.py
+++ b/hyde/ext/plugins/requirejs.py
@@ -11,9 +11,6 @@ import subprocess
 
 
 class RequireJSPlugin(CLTransformer):
-    """
-    The plugin class for requirejs
-    """
 
     def __init__(self, site):
         super(RequireJSPlugin, self).__init__(site)
@@ -30,37 +27,29 @@ class RequireJSPlugin(CLTransformer):
         Find the rjs conf file and set their relative deploy path.
         """
         for resource in self.site.content.walk_resources():
-            if resource.source_file.name_without_extension == "rjs" and resource.source_file.kind == "conf":
+            if resource.source_file.name == "rjs.conf":
                 new_name = "app.js"
                 target_folder = File(resource.relative_deploy_path).parent
                 resource.relative_deploy_path = target_folder.child(new_name)
 
     @property
     def plugin_name(self):
-        """
-        The name of the plugin.
-        """
-        return "rjs"
+        return "requirejs"
 
     def text_resource_complete(self, resource, text):
-        """
-        Save the file to a temporary place and run less compiler.
-        Read the generated file and return the text as output.
-        Set the target path to have a css extension.
-        """
-        if not resource.source_file.kind == 'conf' and not resource.source_file.name_without_extension == "rjs":
+        if not resource.source_file.name == 'rjs.conf':
             return
 
         rjs = self.app
         target = File.make_temp('')
         args = [unicode(rjs)]
-        args.extend(['-o'])
-        args.extend([unicode(resource)])
-        args.extend([("out=" + target.fully_expanded_path)])
+        args.extend(['-o', unicode(resource), ("out=" + target.fully_expanded_path)])
+
         try:
             self.call_app(args)
         except subprocess.CalledProcessError:
              raise self.template.exception_class(
                     "Cannot process %s. Error occurred when "
                     "processing [%s]" % (self.app.name, resource.source_file))
+
         return target.read_all()
diff --git a/hyde/tests/ext/requirejs/app.js b/hyde/tests/ext/requirejs/app.js
new file mode 100644
index 0000000..653b39b
--- /dev/null
+++ b/hyde/tests/ext/requirejs/app.js
@@ -0,0 +1 @@
+require(["lib/more"],function(e){return e("require")}),define("main",function(){});
\ No newline at end of file
diff --git a/hyde/tests/ext/requirejs/lib/less.js b/hyde/tests/ext/requirejs/lib/less.js
new file mode 100644
index 0000000..96349b8
--- /dev/null
+++ b/hyde/tests/ext/requirejs/lib/less.js
@@ -0,0 +1,3 @@
+define(['lib/more'], function(more){
+  return more(s) + " or less";
+});
diff --git a/hyde/tests/ext/requirejs/lib/more.js b/hyde/tests/ext/requirejs/lib/more.js
new file mode 100644
index 0000000..0c5c364
--- /dev/null
+++ b/hyde/tests/ext/requirejs/lib/more.js
@@ -0,0 +1,5 @@
+define(function(){
+  return function(s){
+    return s + " more";
+  };
+});
diff --git a/hyde/tests/ext/requirejs/main.js b/hyde/tests/ext/requirejs/main.js
new file mode 100644
index 0000000..999498e
--- /dev/null
+++ b/hyde/tests/ext/requirejs/main.js
@@ -0,0 +1,3 @@
+require(['lib/more'], function(more){
+  return more("require");
+});
diff --git a/hyde/tests/ext/requirejs/rjs.conf b/hyde/tests/ext/requirejs/rjs.conf
new file mode 100644
index 0000000..86d26a5
--- /dev/null
+++ b/hyde/tests/ext/requirejs/rjs.conf
@@ -0,0 +1,6 @@
+({
+  name: 'main',
+  include: ['lib/more'],
+  exclude: ['lib/less'],
+  logLevel: 3
+})
diff --git a/hyde/tests/ext/test_requirejs.py b/hyde/tests/ext/test_requirejs.py
new file mode 100644
index 0000000..c5f73dc
--- /dev/null
+++ b/hyde/tests/ext/test_requirejs.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+"""
+Use nose
+`$ pip install nose`
+`$ nosetests`
+"""
+from hyde.fs import File, Folder
+from hyde.model import Expando
+from hyde.generator import Generator
+from hyde.site import Site
+
+RJS_SOURCE = File(__file__).parent.child_folder('requirejs')
+TEST_SITE = File(__file__).parent.parent.child_folder('_test')
+
+class TestRequireJS(object):
+    def setUp(self):
+        TEST_SITE.make()
+        TEST_SITE.parent.child_folder('sites/test_jinja').copy_contents_to(TEST_SITE)
+        RJS_SOURCE.copy_contents_to(TEST_SITE.child('content/media/js'))
+        File(TEST_SITE.child('content/media/js/app.js')).delete()
+
+    def tearDown(self):
+        TEST_SITE.delete()
+
+    def test_can_execute_rjs(self):
+        s = Site(TEST_SITE)
+        s.config.plugins = ['hyde.ext.plugins.requirejs.RequireJSPlugin']
+        source = TEST_SITE.child('content/media/js/rjs.conf')
+        target = File(Folder(s.config.deploy_root_path).child('media/js/app.js'))
+        gen = Generator(s)
+        gen.generate_resource_at_path(source)
+
+        assert target.exists
+        text = target.read_all()
+        expected_text = File(RJS_SOURCE.child('app.js')).read_all()
+
+        assert text == expected_text
+        return