diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/recompile_lib.js b/dev/codeserver/java/com/google/gwt/dev/codeserver/recompile_lib.js
index c74d699..d97482f 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/recompile_lib.js
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/recompile_lib.js
@@ -280,3 +280,56 @@
 
 //Export Recompiler to namespace
 $namespace.lib.Recompiler = Recompiler;
+
+function MetaTagParser(moduleName) {
+  this.__parsed = false;
+  this.__metaProperties = null;
+  this.__moduleName = moduleName;
+}
+
+MetaTagParser.prototype.__getMetaTags = function() {
+  return $doc.getElementsByTagName('meta');
+};
+
+MetaTagParser.prototype.__parse = function() {
+  var metaProps = {};
+  var metas = this.__getMetaTags();
+
+  for (var i = 0, n = metas.length; i < n; ++i) {
+    var meta = metas[i];
+    var name = meta.getAttribute('name');
+    var content = meta.getAttribute('content');
+
+    if (name) {
+      name = name.replace(this.__moduleName + '::', '');
+      if (name.indexOf('::') >= 0) {
+        // It's for a different module
+        continue;
+      }
+    }
+    if (name == 'gwt:property' && content) {
+      var value;
+      var eq = content.indexOf('=');
+      if (eq >= 0) {
+        name = content.substring(0, eq);
+        value = content.substring(eq+1);
+      } else {
+        name = content;
+        value = '';
+      }
+      metaProps[name] = value;
+    }
+  }
+  return metaProps;
+};
+
+MetaTagParser.prototype.get = function() {
+  if (!this.__parsed) {
+    this.__metaProperties = this.__parse();
+    this.__parsed = true;
+  }
+  return this.__metaProperties;
+};
+
+//Export MetaTagParser to namespace
+$namespace.lib.MetaTagParser = MetaTagParser;
diff --git a/dev/codeserver/java/com/google/gwt/dev/codeserver/recompile_template.js b/dev/codeserver/java/com/google/gwt/dev/codeserver/recompile_template.js
index 48ce22b..a3988cd 100644
--- a/dev/codeserver/java/com/google/gwt/dev/codeserver/recompile_template.js
+++ b/dev/codeserver/java/com/google/gwt/dev/codeserver/recompile_template.js
@@ -18,10 +18,18 @@
   var $doc = $wnd.document;
   var $namespace = {};
   var moduleName = __MODULE_NAME__;
-  
+
   var executeMain = function(){
-    __PROPERTY_PROVIDERS__
     __LIB_JS__
+
+    var metaTagParser = new $namespace.lib.MetaTagParser(moduleName);
+
+    //Property providers need a certain environment to run
+    var __gwt_getMetaProperty = function(name) {
+      return metaTagParser.get()[name];
+    };
+
+    __PROPERTY_PROVIDERS__
     __MAIN__
   };
 
diff --git a/dev/codeserver/javatests/com/google/gwt/dev/codeserver/client/CodeServerGwtTest.java b/dev/codeserver/javatests/com/google/gwt/dev/codeserver/client/CodeServerGwtTest.java
index 6ebea95..9976999 100644
--- a/dev/codeserver/javatests/com/google/gwt/dev/codeserver/client/CodeServerGwtTest.java
+++ b/dev/codeserver/javatests/com/google/gwt/dev/codeserver/client/CodeServerGwtTest.java
@@ -111,6 +111,47 @@
     assertTrue(callbackCalled, 'callback for successful recompile was not executed');
   }-*/;
 
+  public native void testMetaTagParser() /*-{
+    var assertStringEquals = @CodeServerGwtTest::assertEquals(Ljava/lang/String;Ljava/lang/String;);
+    var assertTrue = @CodeServerGwtTest::assertTrue(Ljava/lang/String;Z);
+    var MetaTagParser = $wnd.namespace.lib.MetaTagParser;
+    var parser = new MetaTagParser('testModule');
+
+    parser.__getMetaTags = function() {
+      // provide mocks
+      var returnValues = [
+          'testModule::gwt:property',
+          'bar',
+          'testModule::gwt:property',
+          'test1=test2',
+          'ignored1',
+          'ignored2',
+          'otherModule::gwt:property',
+          'bar1=foo1'
+      ];
+      var index = 0;
+
+      var readEntry = function() {
+        return returnValues[index++];
+      };
+
+      return [
+          {getAttribute: readEntry},
+          {getAttribute: readEntry},
+          {getAttribute: readEntry},
+          {getAttribute: readEntry}
+      ];
+    };
+
+    var props = parser.get();
+    var len = Object.keys(props).length;
+    assertTrue('Wrong number of entries: ' + len, len == 2);
+
+    assertTrue('bar is missing', 'bar' in props);
+    assertTrue('test1 is missing', 'test1' in props);
+    assertStringEquals('test2', props.test1);
+  }-*/;
+
   private void ensureJsInjected() {
     if(injected) {
       return;
