diff --git a/.wr b/.wr
new file mode 100644
index 0000000..265dd0a
--- /dev/null
+++ b/.wr
@@ -0,0 +1,14 @@
+weinre.build/build-dev.sh
+
+weinre.build/build.properties
+weinre.build/build.xml
+weinre.build/package.json.template
+weinre.build/scripts
+
+weinre.doc
+weinre.server/interfaces
+weinre.server/lib
+weinre.server/package.json
+weinre.server/README.md
+
+weinre.web
diff --git a/README.md b/README.md
index 27d006b..dc45f47 100644
--- a/README.md
+++ b/README.md
@@ -124,8 +124,8 @@
 
 ### other fun development-time hacks ###
 
-If you have the [grunt tool](https://github.com/cowboy/grunt) installed, there is
-a `grunt.js` file available to run the development builds when a source file
+If you have the [wr tool](https://npmjs.org/package/wr) installed, there is
+a `.wr` file available to run the development builds when a source file
 changes.
 
 The build is growl-enabled, so you can see a quick message when the build
@@ -137,7 +137,7 @@
 weinre server generated by the development build, whenever a weinre build
 completes.
 
-Putting this altogether, you can open two terminal windows, run `grunt` in the
+Putting this altogether, you can open two terminal windows, run `wr` in the
 main directory to have a development build run whenever you change
 the source, and then run `weinre-hot` in the `weinre.server` directory to have
 the weinre server restart whenever a build completes, getting a growl
diff --git a/grunt.js b/grunt.js
deleted file mode 100644
index 0876003..0000000
--- a/grunt.js
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-// open "http://search.npmjs.org/#/grunt" ; sudo npm -g install grunt
-
-var child_process = require("child_process")
-
-//------------------------------------------------------------------------------
-// list of source files to watch
-//------------------------------------------------------------------------------
-var sourceFiles = [
-    "grunt.js",
-    
-    "weinre.build/*.sh", 
-    "weinre.build/*.properties", 
-    "weinre.build/*.xml", 
-    "weinre.build/*.template", 
-    "weinre.build/scripts/**/*", 
-    
-    "weinre.doc/**/*",
-    
-    "weinre.server/interfaces/**/*",
-    "weinre.server/lib/**/*",
-    "weinre.server/package.json",
-    "weinre.server/README.md",
-
-    "weinre.web/**/*"
-]
-
-//------------------------------------------------------------------------------
-var gruntConfig = {
-    watch: {
-        make: {
-            files: sourceFiles,
-            tasks: ["runAnt"]
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-module.exports = function(grunt) {
-    grunt.initConfig(gruntConfig)
-    
-    grunt.registerTask("default", "watch")
-    grunt.registerTask("runAnt", "run ant", function(){task_runAnt(this, grunt)})
-}
-
-//------------------------------------------------------------------------------
-// run "make"
-//------------------------------------------------------------------------------
-function task_runAnt(task, grunt) {
-    var done = task.async()
-    var make = child_process.spawn('ant', ['-f', 'weinre.build/build.xml'])
-    
-    make.stdout.on("data", function(data) {
-        grunt.log.write("" + data)
-    })
-    
-    make.stderr.on("data", function(data) {
-        grunt.log.error("" + data)
-    })
-    
-    make.on("exit", function(code) {
-        if (code === 0) return done(true)
-        
-        grunt.log.writeln("error running ant", code)
-        return done(false)
-    })
-}
-
diff --git a/weinre.doc/ChangeLog.body.html b/weinre.doc/ChangeLog.body.html
index 3bbbcf0..1849d5a 100644
--- a/weinre.doc/ChangeLog.body.html
+++ b/weinre.doc/ChangeLog.body.html
@@ -53,6 +53,7 @@
 <li><a href="https://issues.apache.org/jira/browse/CB-1193">CB-1193</a> - add Windows Phone support
 <li><a href="https://issues.apache.org/jira/browse/CB-1800">CB-1800</a> - remove references to "incubator"
 <li><a href="https://issues.apache.org/jira/browse/CB-1494">CB-1494</a> - Supports running server behind a proxy, such as Heroku Cedar
+<li><a href="https://issues.apache.org/jira/browse/CB-3328">CB-3328</a> - chrome version >= 27 breaks flex-box usage
 </ul>
 
 <!-- ======================================================================= -->
diff --git a/weinre.web/client/weinre/hacks.js b/weinre.web/client/weinre/hacks.js
index 28b12ad..6f0290b 100644
--- a/weinre.web/client/weinre/hacks.js
+++ b/weinre.web/client/weinre/hacks.js
@@ -18,3 +18,26 @@
  */
 
 // a place for hacks
+
+;(function(){
+
+var version = navigator.appVersion.match(/^.*Chrome\/(\d+)\..*$/)
+if (!version) return
+
+version = parseInt(version[1])
+if (version <= 26) return
+
+setTimeout(fixToolbarItem, 1000)
+
+function fixToolbarItem() {
+    var toolbarItems = document.querySelectorAll(".toolbar-item.toggleable")
+
+    for (var i=0; i<toolbarItems.length; i++) {
+        var style = toolbarItems[i].style
+        if (style.display != "none") {
+            toolbarItems[i].style.display = "inline-block"
+        }
+    }
+}
+
+})();
