diff --git a/weinre.build/scripts/gen-changelog.py b/weinre.build/scripts/gen-changelog.py
new file mode 100755
index 0000000..afaed0f
--- /dev/null
+++ b/weinre.build/scripts/gen-changelog.py
@@ -0,0 +1,83 @@
+#!/usr/bin/env python
+
+#-------------------------------------------------------------------------------
+# 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.
+#-------------------------------------------------------------------------------
+
+import os
+import re
+import sys
+import urllib2
+import xml.dom
+import xml.dom.minidom
+
+Node = xml.dom.Node
+
+URL = "https://issues.apache.org/jira/sr/jira.issueviews:searchrequest-xml/temp/SearchRequest.xml?jqlQuery=project+%3D+CB+AND+component+%3D+weinre+AND+status+%3D+Resolved+ORDER+BY+key+ASC&tempMax=1000"
+
+#-------------------------------------------------------------------------------
+def main():
+    iFile = urllib2.urlopen(URL)
+    contents = iFile.read()
+    iFile.close()
+    
+    dom = xml.dom.minidom.parseString(contents)
+    items = dom.getElementsByTagName("item")
+    
+    for item in items:
+        title = getText(item, "title").strip()
+        link  = getText(item, "link").strip()
+        key   = getText(item, "key").strip()
+        
+        
+        title = re.sub(r'^\[.*?\]',"",title,1).strip()
+        title = re.sub(r'^\[.*?\]',"",title,1).strip()
+        
+        print '<li><a href="%s">%s</a>  - %s' % (link, key, title)
+    
+#-------------------------------------------------------------------------------
+def getText(element, childTag=None):
+    result = []
+    
+    if None == childTag:
+        elements = element.childNodes
+    else:
+        elements = element.getElementsByTagName(childTag)
+    
+    for element in elements:
+        if element.nodeType == Node.TEXT_NODE:          result.append(element.data)
+        if element.nodeType == Node.CDATA_SECTION_NODE: result.append(element.data)
+        if element.nodeType == Node.ENTITY_NODE:        result.append(element.nodeValue)
+        if element.nodeType == Node.ELEMENT_NODE:       result.append(getText(element))
+            
+    return "".join(result)
+
+#-------------------------------------------------------------------------------
+def log(message):
+    message = "%s: %s" % (PROGRAM_NAME, message)
+    print >>sys.stderr, message
+
+#-------------------------------------------------------------------------------
+def error(message):
+    log(message)
+    sys.exit(-1)
+
+#-------------------------------------------------------------------------------
+PROGRAM_NAME = os.path.basename(sys.argv[0])
+
+main()
diff --git a/weinre.doc/ChangeLog.body.html b/weinre.doc/ChangeLog.body.html
index 6d52e57..b5167a7 100644
--- a/weinre.doc/ChangeLog.body.html
+++ b/weinre.doc/ChangeLog.body.html
@@ -28,22 +28,23 @@
 
 <p>issues resolved:
 <ul>
-<li><a href="https://issues.apache.org/jira/browse/CB-10" >CB-10</a>  - Apache source headers in callback-weinre
-<li><a href="https://issues.apache.org/jira/browse/CB-36" >CB-36</a>  - move/delete GitHub issues at phonegap/weinre and callback/callback-weinre into the Apache Callback JIRA
-<li><a href="https://issues.apache.org/jira/browse/CB-83" >CB-83</a>  - implement the server in node
-<li><a href="https://issues.apache.org/jira/browse/CB-100">CB-100</a> - fix issues regarding pre-req licenses for weinre distribution
-<li><a href="https://issues.apache.org/jira/browse/CB-175">CB-175</a> - error when XHR contentType is null
-<li><a href="https://issues.apache.org/jira/browse/CB-176">CB-176</a> - add vendor files to weinre instead of pulling in at build time
-<li><a href="https://issues.apache.org/jira/browse/CB-182">CB-182</a> - error when XHR contentType is null
-<li><a href="https://issues.apache.org/jira/browse/CB-232">CB-232</a> - rename assets from PhoneGap to Cordova
-<li><a href="https://issues.apache.org/jira/browse/CB-257">CB-257</a> - the README.md in the weinre-node distribution is bogus
-<li><a href="https://issues.apache.org/jira/browse/CB-259">CB-259</a> - create a weinre tarball as a build archive that is npm install-able
-<li><a href="https://issues.apache.org/jira/browse/CB-266">CB-266</a> - weinre runtime error if you don't have a ~/.weinre/server.settings file	Unassigned
-<li><a href="https://issues.apache.org/jira/browse/CB-284">CB-284</a> - invocation exception on WeinreClientEventsImpl.connectionCreated(): TypeError: Cannot read property 'url' of undefined
-<li><a href="https://issues.apache.org/jira/browse/CB-288">CB-288</a> - re-version as 2.0.0
-<li><a href="https://issues.apache.org/jira/browse/CB-293">CB-293</a> - bullet-proof modjewel
-<li><a href="https://issues.apache.org/jira/browse/CB-294">CB-294</a> - various exceptions thrown in the target in WeinreTargetEventsImpl.connectionCreated()
-<li><a href="https://issues.apache.org/jira/browse/CB-315">CB-315</a> - generate valid Apache release artifact names
+<li><a href="https://issues.apache.org/jira/browse/CB-10">CB-10</a>  - Apache source headers in callback-weinre
+<li><a href="https://issues.apache.org/jira/browse/CB-36">CB-36</a>  - move/delete GitHub issues at phonegap/weinre and callback/callback-weinre into the Apache Callback JIRA
+<li><a href="https://issues.apache.org/jira/browse/CB-83">CB-83</a>  - implement the server in node
+<li><a href="https://issues.apache.org/jira/browse/CB-100">CB-100</a>  - fix issues regarding pre-req licenses for weinre distribution
+<li><a href="https://issues.apache.org/jira/browse/CB-175">CB-175</a>  - error when XHR contentType is null
+<li><a href="https://issues.apache.org/jira/browse/CB-176">CB-176</a>  - add vendor files to weinre instead of pulling in at build time
+<li><a href="https://issues.apache.org/jira/browse/CB-182">CB-182</a>  - error when XHR contentType is null
+<li><a href="https://issues.apache.org/jira/browse/CB-232">CB-232</a>  - rename assets from PhoneGap to Cordova
+<li><a href="https://issues.apache.org/jira/browse/CB-257">CB-257</a>  - the README.md in the weinre-node distribution is bogus
+<li><a href="https://issues.apache.org/jira/browse/CB-259">CB-259</a>  - create a weinre tarball as a build archive that is npm install-able
+<li><a href="https://issues.apache.org/jira/browse/CB-266">CB-266</a>  - weinre runtime error if you don't have a ~/.weinre/server.settings file
+<li><a href="https://issues.apache.org/jira/browse/CB-284">CB-284</a>  - invocation exception on WeinreClientEventsImpl.connectionCreated(): TypeError: Cannot read property 'url' of undefined
+<li><a href="https://issues.apache.org/jira/browse/CB-288">CB-288</a>  - re-version as 2.0.0
+<li><a href="https://issues.apache.org/jira/browse/CB-293">CB-293</a>  - bullet-proof modjewel
+<li><a href="https://issues.apache.org/jira/browse/CB-294">CB-294</a>  - various exceptions thrown in the target in WeinreTargetEventsImpl.connectionCreated()
+<li><a href="https://issues.apache.org/jira/browse/CB-315">CB-315</a>  - generate valid Apache release artifact names
+<li><a href="https://issues.apache.org/jira/browse/CB-540">CB-540</a>  - ability to easily navigate to particular place in DOM via bookmarks/jump to selector
 </ul>
 
 <!-- ======================================================================= -->
