diff --git a/weinre.build/build.properties b/weinre.build/build.properties
index 14f8f76..1f3fdbf 100644
--- a/weinre.build/build.properties
+++ b/weinre.build/build.properties
@@ -8,7 +8,7 @@
 #-----------------------------------------------------------
 # weinre version
 #-----------------------------------------------------------
-WEINRE_VERSION: 1.4.0
+WEINRE_VERSION: 1.5.0
 
 #-----------------------------------------------------------
 # some common locations used in the ant scripts
diff --git a/weinre.build/scripts/changelog.sh b/weinre.build/scripts/changelog.sh
index 3b4c41c..af3a12f 100755
--- a/weinre.build/scripts/changelog.sh
+++ b/weinre.build/scripts/changelog.sh
@@ -8,7 +8,7 @@
 # ---
 
 git log "--pretty=format:- %s" $1.. | \
-    sed 's/#\([0-9]*\)/\<a href="https:\/\/github.com\/pmuellr\/weinre\/issues\/1"\>issue \1\<\/a\>./' |
+    sed 's/#\([0-9]*\)/\<a href="https:\/\/github.com\/phonegap\/weinre\/issues\/1"\>issue \1\<\/a\>./' |
     sed 's/^-/\<li\>/'
 
 #    sed 's/#\([0-9]*\)/[issue \1](https:\/\/github.com\/pmuellr\/weinre\/issues\/1)./'
diff --git a/weinre.doc/ChangeLog.body.html b/weinre.doc/ChangeLog.body.html
index 9429aba..432c26c 100644
--- a/weinre.doc/ChangeLog.body.html
+++ b/weinre.doc/ChangeLog.body.html
@@ -6,6 +6,52 @@
 -->
 
 <!-- ======================================================================= -->
+<h2>Downloads</h2>
+
+<p><a href="https://github.com/phonegap/weinre/downloads">https://github.com/phonegap/weinre/downloads</a>
+
+<!-- ======================================================================= -->
+<h2>2011/07/22 - version 1.5.0</h2>
+
+<ul>
+
+<li><p>The Resources panel now includes an active Databases section.  For any WebSQL
+database that you open, you should see an entry in the expanded section.  For each database,
+you'll see the list of tables owned by the database when the database section
+is expanded.  Note that you need to open
+the database to see it listed here.  Databases which you have previously created
+in other browsing sessions will not be displayed until they are first opened.
+
+<p>Clicking on a database table will dump the database contents to the panel.
+Clicking on the database itself will provide a prompter for you to run SQL 
+commands against that database.  For example, entering 
+<tt>"select * from YourTableNameHere"</tt> 
+will dump the table contents to the panel.
+
+<li><p>Some of the console functions, like <tt>console.log()</tt>, were not handling
+object arguments correctly.  You should now see a an object display.  For example,
+typing <tt>"window"</tt> or <tt>"console.log(window)"</tt> into the console 
+will show you the same object display for the window.
+
+<li><p>The ant build script did not have the correctly-cased file names for some 
+of the files, and the build failed.  This has been fixed.  You should be able
+to do a build on Linux, and other case-sensitive file systems.
+
+<li><p>While weinre already removes some of the Web Inspector panels wholesale,
+there were still a number of meaningless gee-gaws on the panels that we do show.  
+Those have been surgically removed with CSS.
+
+</ul>
+
+<p>issues closed:
+<ul>
+<li> <a href="https://github.com/phonegap/weinre/issues/7">issue 7</a> - support for WebSQL
+<li> <a href="https://github.com/phonegap/weinre/issues/8">issue 8</a> - console.log() etal don't handle object parameters
+<li> <a href="https://github.com/phonegap/weinre/issues/12">issue 12</a> - wrong-cased file names in ant scripts for Linux
+<li> <a href="https://github.com/phonegap/weinre/issues/16">issue 16</a> - hide stuff in the Web Inspector UI that's not used
+</ul>
+
+<!-- ======================================================================= -->
 <h2>2011/05/09 - version 1.4.0</h2>
 <ul>
 <li> better calculation of object's class name. closes <a href="https://github.com/pmuellr/weinre/issues/41">issue 41</a>.
diff --git a/weinre.doc/Home.body.html b/weinre.doc/Home.body.html
index 8812b72..5cf5dc2 100644
--- a/weinre.doc/Home.body.html
+++ b/weinre.doc/Home.body.html
@@ -10,6 +10,14 @@
 Pronounced like the word "winery".  Or maybe like the word "weiner".  Who knows,
 really.
 
+<p>Interesting places:
+<ul>
+<li>GitHub: <a href="https://github.com/phonegap/weinre">https://github.com/phonegap/weinre</a>
+<li>Google Group: <a href="http://groups.google.com/group/weinre">http://groups.google.com/group/weinre</a>
+<li>weinre documentation: <a href="http://phonegap.github.com/weinre">http://phonegap.github.com/weinre</a>
+<li>Google Chrome Developer Tools: <a href="http://code.google.com/chrome/devtools/docs/overview.html">http://code.google.com/chrome/devtools/docs/overview.html</a>
+</ul>
+
 <p>It's a debugger for web pages, like 
 FireBug (for FireFox)
 and 
@@ -22,7 +30,9 @@
 <span class="weinre">weinre</span> reuses the user interface code from the
 <a href="http://trac.webkit.org/wiki/WebInspector">Web Inspector project at WebKit</a>,
 so if you've used Safari's Web Inspector or Chrome's Developer Tools,  
-<span class="weinre">weinre</span> will be very familiar. 
+<span class="weinre">weinre</span> will be very familiar.  If you're not
+familiar with Web Inspector, the link above to Google Chrome Developer Tools
+provides some documentation Real Web Inspector, which <span class="weinre">weinre</span> is based on.
 
 <!--
 <div class="note">
@@ -97,15 +107,6 @@
 how to use it, visit the <a href="TestDrive.html">Test Drive</a>.
 
 <!-- ======================================================== -->
-<h2>Places</h2>
-
-<ul>
-<li>GitHub: <a href="https://github.com/phonegap/weinre">https://github.com/phonegap/weinre</a>
-<li>Documentation: <a href="http://phonegap.github.com/weinre">http://phonegap.github.com/weinre</a>
-<li>Google Group: <a href="http://groups.google.com/group/weinre">http://groups.google.com/group/weinre</a>
-</ul>
-
-<!-- ======================================================== -->
 <h2>Supported Libraries and Platforms</h2>
 
 <p>Generally version numbers listed here are the earliest
diff --git a/weinre.web/demo/weinre-demo.js b/weinre.web/demo/weinre-demo.js
index 2a68fd2..32c72b5 100644
--- a/weinre.web/demo/weinre-demo.js
+++ b/weinre.web/demo/weinre-demo.js
@@ -13,6 +13,7 @@
 var outputElement 
 var storageIndex = 0
 var db
+var otherDB 
 
 // set the id based on the hash
 var hash = location.href.split("#")[1]
@@ -29,6 +30,8 @@
         lastClickTime = new Date().toString()
         if (db) db.transaction(addClick)
         
+        openTheOtherDatabase()
+        
         if (!started) {
             buttonStartStuff.value = "stop stuff"
             startStuff()
@@ -134,14 +137,32 @@
 }
 
 //------------------------------------------------------------------------------
+function createDatabase_other(tx) {
+    var schema = "clicks_other (id integer primary key, other text)"
+    var sql = "create table if not exists " + schema
+    
+    tx.executeSql(sql, null, null, sqlError);
+}
+
+//------------------------------------------------------------------------------
 function openTheDatabase() {
     if (window.openDatabase) {
-        db = window.openDatabase("clicks_db", "1.0", "clicks", 8192)
+        db = window.openDatabase("clicks_db", "1.0", "clicks_db", 8192)
         db.transaction(createDatabase)
     }
 }
 
 //------------------------------------------------------------------------------
+function openTheOtherDatabase() {
+    if (otherDB) return
+    
+    if (window.openDatabase) {
+        otherDB = window.openDatabase("clicks_other_db", "1.0", "clicks_other_db", 8192)
+        otherDB.transaction(createDatabase_other)
+    }
+}
+
+//------------------------------------------------------------------------------
 function output(string) {
     var element = document.createElement("div")
     element.innerHTML = string
