<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>assets/jquery.livequery.js</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -73,7 +73,7 @@ $(b9j_bootstrap_css): $(bootstrap_css) source/b9jTest/source.css
 	cat $^ &gt; $@
 	$(call yuicompress,$@,$@)
 
-$(bootstrap_js): $(jquery_js) $(yui_js)
+$(bootstrap_js): $(jquery_js) assets/jquery.livequery.js $(yui_js)
 	cat $^ &gt; $@
 	$(call yuicompress_js,$@,$@)
 </diff>
      <filename>Makefile</filename>
    </modified>
    <modified>
      <diff>@@ -340,12 +340,18 @@
                     ;
                 else if (extension[0] != &quot;.&quot;)
                     extension = &quot;.&quot; + extension
+
                 if (this.isEmpty() || this.isRoot())
                     this.append(extension);
                 else {
-                    ending = ending.replace(matcher, extension);
-                    this.pop();
-                    this.push(ending);
+                    if (matcher.test(ending)) {
+                        ending = ending.replace(matcher, extension);
+                        this.pop();
+                        this.push(ending);
+                    }
+                    else {
+                        this.append(extension);
+                    }
                 }
                 return this;
             }</diff>
      <filename>source/path/source.js</filename>
    </modified>
    <modified>
      <diff>@@ -158,6 +158,10 @@ b9jTest(function(test) {
         test.is(&quot;a/b/c.zip&quot;, new b9j.path.Path( &quot;a/b/c.html&quot; ).extension( &quot;zip&quot; ));
         test.is(&quot;a/b/c&quot;, new b9j.path.Path( &quot;a/b/c.html&quot; ).extension( &quot;&quot; ));
         test.is(&quot;a/b/c.&quot;, new b9j.path.Path( &quot;a/b/c.html&quot; ).extension( &quot;.&quot; ));
+
+        path = new b9j.path.Path(&quot;a/b/c&quot;);
+        test.is(&quot;a/b/c.html&quot;, path.extension(&quot;.html&quot;) + &quot;&quot;);
+        test.is(&quot;a/b/c.html&quot;, path.extension(&quot;.html&quot;) + &quot;&quot;);
     }
 
     {</diff>
      <filename>source/path/test.js</filename>
    </modified>
    <modified>
      <diff>@@ -13,6 +13,9 @@ body {
 }
 #uri {
     font-size: 167%;
+    background: #def;
+    padding: 4px;
+    border: 1px solid #bcd;
 }
 .uri-function {
     float: left;
@@ -36,6 +39,13 @@ body {
 .uri-function a:hover {
     background: #348;
 }
+a.uri-from-history {
+    text-decoration: none;
+    color: blue;
+}
+a:hover.uri-from-history {
+    text-decoration: underline;
+}
 .clear {
     clear: both;
 }
@@ -48,6 +58,13 @@ body {
     padding: 0.2em;
 }
 
+.bd {
+}
+
+hr {
+    color: #ccc;
+}
+
 .source-history {
     padding: 0.2em;
     background: #eee;
@@ -59,40 +76,158 @@ body {
 
     &lt;div id=&quot;doc&quot;&gt;
 
-        &lt;div class=&quot;uri-function&quot;&gt;
-            &lt;a href=&quot;#&quot;id=&quot;uri-button-parent&quot;&gt;parent&lt;/a&gt;
+        &lt;div id=&quot;uri&quot; class=&quot;bd&quot;&gt;
         &lt;/div&gt;
 
-        &lt;div class=&quot;uri-function&quot;&gt;
-            &lt;a href=&quot;#&quot; id=&quot;uri-button-child&quot;&gt;child&lt;/a&gt;
-            &lt;input id=&quot;uri-input-child&quot; type=&quot;text&quot;/&gt;
-        &lt;/div&gt;
+        &lt;hr noshade&gt;
 
-        &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;bd&quot;&gt;
 
-        &lt;div class=&quot;uri-function&quot;&gt;
-            &lt;a href=&quot;#&quot; id=&quot;uri-button-scheme&quot;&gt;scheme&lt;/a&gt;
-            &lt;input id=&quot;uri-input-scheme&quot; type=&quot;text&quot;/&gt;
-        &lt;/div&gt;
+            &lt;!-- scheme --&gt;
+                &lt;div class=&quot;uri-function&quot;&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-scheme&quot;&gt;scheme&lt;/a&gt;
+                    &lt;input id=&quot;uri-input-scheme&quot; type=&quot;text&quot; style=&quot;width: 6em;&quot;/&gt;
 
-        &lt;div class=&quot;uri-function&quot;&gt;
-            &lt;a href=&quot;#&quot; id=&quot;uri-button-scheme-http&quot;&gt;http&lt;/a&gt;
-            &lt;a href=&quot;#&quot; id=&quot;uri-button-scheme-https&quot;&gt;https&lt;/a&gt;
-            &lt;a href=&quot;#&quot; id=&quot;uri-button-scheme-ftp&quot;&gt;ftp&lt;/a&gt;
-        &lt;/div&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-scheme-http&quot;&gt;http&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-scheme-https&quot;&gt;https&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-scheme-ftp&quot;&gt;ftp&lt;/a&gt;
+                &lt;/div&gt;
 
-        &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
+            &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
 
-        &lt;div class=&quot;uri-function&quot;&gt;
-            &lt;a href=&quot;#&quot; id=&quot;uri-button-fragment&quot;&gt;fragment&lt;/a&gt;
-            &lt;input id=&quot;uri-input-fragment&quot; type=&quot;text&quot;/&gt;
-        &lt;/div&gt;
+            &lt;!-- host --&gt;
+                &lt;div class=&quot;uri-function&quot;&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-host&quot;&gt;host&lt;/a&gt;
+                    &lt;input id=&quot;uri-input-host&quot; type=&quot;text&quot; style=&quot;width: 10em;&quot;/&gt;
 
-        &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-host-example-com&quot;&gt;example.com&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-host-www-example-org&quot;&gt;www.example.org&lt;/a&gt;
+                &lt;/div&gt;
+
+            &lt;!-- port --&gt;
+                &lt;div class=&quot;uri-function&quot;&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-port&quot;&gt;port&lt;/a&gt;
+                    &lt;input id=&quot;uri-input-port&quot; type=&quot;text&quot; style=&quot;width: 4em;&quot;/&gt;
+
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-port-80&quot;&gt;80&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-port-443&quot;&gt;443&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-port-8080&quot;&gt;8080&lt;/a&gt;
+                &lt;/div&gt;
+
+            &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
+
+            &lt;!-- user/password --&gt;
+                &lt;div class=&quot;uri-function&quot;&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-user&quot;&gt;user&lt;/a&gt;
+                    &lt;input id=&quot;uri-input-user&quot; type=&quot;text&quot; style=&quot;width: 6em;&quot;/&gt;
+
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-user-alice&quot;&gt;alice&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-user-bob&quot;&gt;bob&lt;/a&gt;
+                &lt;/div&gt;
+
+                &lt;div class=&quot;uri-function&quot;&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-password&quot;&gt;password&lt;/a&gt;
+                    &lt;input id=&quot;uri-input-password&quot; type=&quot;text&quot; style=&quot;width: 6em;&quot;/&gt;
+
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-password-xyzzy&quot;&gt;xyzzy&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-password-frobozz&quot;&gt;frobozz&lt;/a&gt;
+                &lt;/div&gt;
+
+            &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
+
+            &lt;!-- path --&gt;
+                &lt;div class=&quot;uri-function&quot;&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-path&quot;&gt;path&lt;/a&gt;
+                    &lt;input id=&quot;uri-input-path&quot; type=&quot;text&quot;/&gt;
+
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-path-a-b-c&quot;&gt;a/b/c&lt;/a&gt;
+                &lt;/div&gt;
+
+                &lt;div class=&quot;uri-function&quot;&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-append&quot;&gt;append&lt;/a&gt;
+                    &lt;input id=&quot;uri-input-append&quot; type=&quot;text&quot;/&gt;
+
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-append-d-e-f&quot;&gt;d/e/f&lt;/a&gt;
+                &lt;/div&gt;
+
+            &lt;!-- parent/child --&gt;
+                &lt;div class=&quot;uri-function&quot;&gt;
+                    &lt;a href=&quot;#&quot;id=&quot;uri-button-parent&quot;&gt;parent&lt;/a&gt;
+                &lt;/div&gt;
+
+                &lt;div class=&quot;uri-function&quot;&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-child&quot;&gt;child&lt;/a&gt;
+                    &lt;input id=&quot;uri-input-child&quot; type=&quot;text&quot;/&gt;
+                &lt;/div&gt;
+
+            &lt;!-- extension --&gt;
+                &lt;div class=&quot;uri-function&quot;&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-extension&quot;&gt;extension&lt;/a&gt;
+                    &lt;input id=&quot;uri-input-extension&quot; type=&quot;text&quot; style=&quot;width: 6em;&quot;/&gt;
+
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-extension-html&quot;&gt;html&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-extension-txt&quot;&gt;txt&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-extension-js&quot;&gt;js&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-extension-css&quot;&gt;css&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-extension-pl&quot;&gt;pl&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-extension-php&quot;&gt;php&lt;/a&gt;
+                &lt;/div&gt;
+
+            &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
+
+            &lt;!-- fragment --&gt;
+                &lt;div class=&quot;uri-function&quot;&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-fragment&quot;&gt;fragment&lt;/a&gt;
+                    &lt;input id=&quot;uri-input-fragment&quot; type=&quot;text&quot; style=&quot;width: 10em;&quot;/&gt;
+
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-fragment-top&quot;&gt;#top&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-fragment-bottom&quot;&gt;#bottom&lt;/a&gt;
+                &lt;/div&gt;
+
+            &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
+
+            &lt;hr noshade&gt;
+
+            &lt;!-- query set --&gt;
+                &lt;div class=&quot;uri-function&quot;&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-query-set&quot;&gt;set&lt;/a&gt;
+                    &lt;input id=&quot;uri-input-query-set&quot; type=&quot;text&quot;/&gt;
+
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-query-set-a-b-c&quot;&gt;a=1&amp;amp;b=2&amp;amp;c=3&amp;amp;c=4&amp;amp;c=5&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-query-set-hello-world&quot;&gt;a=&quot;Hello, World!&quot;&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-query-set-a-6&quot;&gt;a=6&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-query-set-b-7&quot;&gt;b=7&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-query-set-c-8&quot;&gt;c=8&lt;/a&gt;
+
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-query-clear&quot;&gt;clear&lt;/a&gt;
+                &lt;/div&gt;
+
+            &lt;!-- query add --&gt;
+                &lt;div class=&quot;uri-function&quot;&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-query-add&quot;&gt;add&lt;/a&gt;
+                    &lt;input id=&quot;uri-input-query-add&quot; type=&quot;text&quot;/&gt;
+
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-query-add-a-b-c&quot;&gt;a=1&amp;amp;b=2&amp;amp;c=3&amp;amp;c=4&amp;amp;c=5&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-query-add-hello-world&quot;&gt;a=&quot;Hello, World!&quot;&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-query-add-a-6&quot;&gt;a=6&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-query-add-b-7&quot;&gt;b=7&lt;/a&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-query-add-c-8&quot;&gt;c=8&lt;/a&gt;
+                &lt;/div&gt;
+
+            &lt;!-- query append --&gt;
+                &lt;div class=&quot;uri-function&quot;&gt;
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-query-append&quot;&gt;append&lt;/a&gt;
+                    &lt;input id=&quot;uri-input-query-append&quot; type=&quot;text&quot;/&gt;
+
+                    &lt;a href=&quot;#&quot; id=&quot;uri-button-query-append-hello-world&quot;&gt;a=&quot;Hello, World!&quot;&lt;/a&gt;
+                &lt;/div&gt;
+
+            &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
 
-        &lt;div id=&quot;uri&quot; class=&quot;bd&quot;&gt;
         &lt;/div&gt;
 
+        &lt;hr noshade&gt;
+
         &lt;div id=&quot;uri-source-history&quot; class=&quot;bd&quot;&gt;
         &lt;/div&gt;
 </diff>
      <filename>source/uri/example.html</filename>
    </modified>
    <modified>
      <diff>@@ -2,11 +2,17 @@ var uriSourceHistory = [];
 var uri = new b9j.uri.URI();
 
 function example_addHistory(uri, source) {
+    if (null == uri)
+        uri = &quot;&quot;;
+    else
+        uri = &quot;&lt;a class=\&quot;uri-from-history\&quot; href=\&quot;#\&quot;&gt;&quot; + uri + &quot;&lt;/a&gt;&quot;;
+
     var html =  &quot;&lt;div class=\&quot;yui-g\ uri-source-history-line\&quot;&gt;&lt;div class=\&quot;yui-u first uri-history\&quot;&gt;&quot; +
-                uri +
+                uri + 
                 &quot;&lt;/div&gt;&lt;div class=\&quot;yui-u source-history\&quot;&gt;&lt;pre&gt;&quot; + 
                 source +
                 &quot;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&quot;;
+
     $(&quot;#uri-source-history&quot;).prepend(html);
 }
 
@@ -18,49 +24,309 @@ function uri_function(fn, arguments_, fn_name) {
     if (! fn_name)
         fn_name = fn;
     uri[fn].apply(uri, arguments_);
-    var arguments_string = arguments_[0] || arguments_.length &gt; 1 ? &quot; &quot; + Array.prototype.slice.call(arguments_).join(&quot;,&quot;) + &quot; &quot; : &quot;&quot;;
+    if (1 == arguments_.length &amp;&amp; &quot;&quot; == arguments_[0])
+        arguments_[0] = '&quot;&quot;'
+    var arguments_string = b9j.isValue(arguments_[0]) || arguments_.length &gt; 1 ? &quot; &quot; + Array.prototype.slice.call(arguments_).join(&quot;,&quot;) + &quot; &quot; : &quot;&quot;;
     example_addHistory(uri, &quot;uri.&quot; + fn_name + &quot;(&quot; + arguments_string + &quot;);&quot;);
     example_update();
 }
 
+function uri_query_function(fn, arguments_, fn_name) {
+    if (! fn_name)
+        fn_name = fn;
+    var query = uri.query();
+    query[fn].apply(query, arguments_);
+    if (1 == arguments_.length &amp;&amp; &quot;&quot; == arguments_[0])
+        arguments_[0] = '&quot;&quot;'
+    var arguments_string = b9j.isValue(arguments_[0]) || arguments_.length &gt; 1 ? &quot; &quot; + Array.prototype.slice.call(arguments_).join(&quot;,&quot;) + &quot; &quot; : &quot;&quot;;
+    example_addHistory(uri, &quot;uri.query().&quot; + fn_name + &quot;(&quot; + arguments_string + &quot;);&quot;);
+    console.log(query, query.toString());
+    example_update();
+}
+
 $(document).ready(function(){
 
-    $(&quot;#uri-button-parent&quot;).bind(&quot;click&quot;, function(){
-        arguments_ = [ ];
-        uri_function(&quot;up&quot;, arguments_, &quot;parent&quot;); 
+    $(&quot;a.uri-from-history&quot;).livequery(&quot;click&quot;, function() {
+        arguments_ = [ this.innerHTML ];
+        uri_function(&quot;set&quot;, arguments_);
     });
 
-    $(&quot;#uri-button-child&quot;).bind(&quot;click&quot;, function(){
-        arguments_ = [ $(&quot;#uri-input-child&quot;).val() ];
-        uri_function(&quot;down&quot;, arguments_, &quot;child&quot;); 
-    });
+    function _default(value, default_) {
+        if (1 == arguments.length)
+            default_ = &quot;&quot;;
+        return null == value || &quot;&quot; == value ? value : default_;
+    }
 
-    $(&quot;#uri-button-scheme&quot;).bind(&quot;click&quot;, function(){
-        arguments_ = [ $(&quot;#uri-input-scheme&quot;).val() ];
-        uri_function(&quot;scheme&quot;, arguments_);
-    });
+    {
+        $(&quot;#uri-button-parent&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ ];
+            uri_function(&quot;up&quot;, arguments_, &quot;parent&quot;); 
+        });
 
-    $(&quot;#uri-button-scheme-ftp&quot;).bind(&quot;click&quot;, function(){
-        arguments_ = [ &quot;ftp&quot; ];
-        uri_function(&quot;scheme&quot;, arguments_); 
-    });
+        $(&quot;#uri-button-child&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ $(&quot;#uri-input-child&quot;).val() ];
+            uri_function(&quot;down&quot;, arguments_, &quot;child&quot;); 
+        });
+    }
 
-    $(&quot;#uri-button-scheme-http&quot;).bind(&quot;click&quot;, function(){
-        arguments_ = [ &quot;http&quot; ];
-        uri_function(&quot;scheme&quot;, arguments_); 
-    });
+    {
+        $(&quot;#uri-button-path&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ $(&quot;#uri-input-path&quot;).val() ];
+            uri_function(&quot;path&quot;, arguments_);
+        });
 
-    $(&quot;#uri-button-scheme-https&quot;).bind(&quot;click&quot;, function(){
-        arguments_ = [ &quot;https&quot; ];
-        uri_function(&quot;scheme&quot;, arguments_); 
-    });
+        $(&quot;#uri-button-path-a-b-c&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;a/b/c&quot; ];
+            uri_function(&quot;path&quot;, arguments_);
+        });
 
-    $(&quot;#uri-button-fragment&quot;).bind(&quot;click&quot;, function(){
-        arguments_ = [ $(&quot;#uri-input-fragment&quot;).val() ];
-        uri_function(&quot;fragment&quot;, arguments_);
-    });
+        $(&quot;#uri-button-append&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ $(&quot;#uri-input-append&quot;).val() ];
+            uri_function(&quot;append&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-append-d-e-f&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;d/e/f&quot; ];
+            uri_function(&quot;append&quot;, arguments_);
+        });
+
+    }
+
+    {
+        $(&quot;#uri-button-extension&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ _default( $(&quot;#uri-input-extension&quot;).val() ) ];
+            uri_function(&quot;extension&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-extension-html&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;html&quot; ];
+            uri_function(&quot;extension&quot;, arguments_); 
+        });
+
+        $(&quot;#uri-button-extension-txt&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;txt&quot; ];
+            uri_function(&quot;extension&quot;, arguments_); 
+        });
+
+        $(&quot;#uri-button-extension-js&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;js&quot; ];
+            uri_function(&quot;extension&quot;, arguments_); 
+        });
+
+        $(&quot;#uri-button-extension-css&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;css&quot; ];
+            uri_function(&quot;extension&quot;, arguments_); 
+        });
+
+        $(&quot;#uri-button-extension-pl&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;pl&quot; ];
+            uri_function(&quot;extension&quot;, arguments_); 
+        });
+
+        $(&quot;#uri-button-extension-php&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;php&quot; ];
+            uri_function(&quot;extension&quot;, arguments_); 
+        });
+    }
+
+    {
+        $(&quot;#uri-button-scheme&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ $(&quot;#uri-input-scheme&quot;).val() ];
+            uri_function(&quot;scheme&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-scheme-ftp&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;ftp&quot; ];
+            uri_function(&quot;scheme&quot;, arguments_); 
+        });
+
+        $(&quot;#uri-button-scheme-http&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;http&quot; ];
+            uri_function(&quot;scheme&quot;, arguments_); 
+        });
+
+        $(&quot;#uri-button-scheme-https&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;https&quot; ];
+            uri_function(&quot;scheme&quot;, arguments_); 
+        });
+    }
+
+    {
+        $(&quot;#uri-button-host&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ $(&quot;#uri-input-host&quot;).val() ];
+            uri_function(&quot;host&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-host-example-com&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;example.com&quot; ];
+            uri_function(&quot;host&quot;, arguments_); 
+        });
+
+        $(&quot;#uri-button-host-www-example-org&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;www.example.org&quot; ];
+            uri_function(&quot;host&quot;, arguments_); 
+        });
+    }
+
+    {
+        $(&quot;#uri-button-port&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ $(&quot;#uri-input-port&quot;).val() ];
+            uri_function(&quot;port&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-port-80&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ 80 ];
+            uri_function(&quot;port&quot;, arguments_); 
+        });
+
+        $(&quot;#uri-button-port-443&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ 443 ];
+            uri_function(&quot;port&quot;, arguments_); 
+        });
+
+        $(&quot;#uri-button-port-8080&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ 8080 ];
+            uri_function(&quot;port&quot;, arguments_); 
+        });
+    }
+
+    {
+        $(&quot;#uri-button-user&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ $(&quot;#uri-input-user&quot;).val() ];
+            uri_function(&quot;user&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-user-alice&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;alice&quot; ];
+            uri_function(&quot;user&quot;, arguments_); 
+        });
+
+        $(&quot;#uri-button-user-bob&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;bob&quot; ];
+            uri_function(&quot;user&quot;, arguments_); 
+        });
+    }
+
+    {
+        $(&quot;#uri-button-password&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ $(&quot;#uri-input-password&quot;).val() ];
+            uri_function(&quot;password&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-password-xyzzy&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;xyzzy&quot; ];
+            uri_function(&quot;password&quot;, arguments_); 
+        });
+
+        $(&quot;#uri-button-password-frobozz&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;frobozz&quot; ];
+            uri_function(&quot;password&quot;, arguments_); 
+        });
+    }
+
+    {
+        $(&quot;#uri-button-fragment&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ $(&quot;#uri-input-fragment&quot;).val() ];
+            uri_function(&quot;fragment&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-fragment-top&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;top&quot; ];
+            uri_function(&quot;fragment&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-fragment-bottom&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;bottom&quot; ];
+            uri_function(&quot;fragment&quot;, arguments_);
+        });
+    }
+
+    {
+        $(&quot;#uri-button-query-clear&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ ]
+            uri_query_function(&quot;clear&quot;, arguments_);
+        });
+    }
+
+    {
+        $(&quot;#uri-button-query-set&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ $(&quot;#uri-input-query-set&quot;).val() ];
+            uri_query_function(&quot;set&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-query-set-a-b-c&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;a=1&amp;b=2&amp;c=3&amp;c=4&amp;c=5&quot; ];
+            uri_query_function(&quot;set&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-query-set-hello-world&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;a=\&quot;Hello, World!\&quot;&quot; ];
+            uri_query_function(&quot;set&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-query-set-a-6&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;a&quot;, 6 ];
+            uri_query_function(&quot;set&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-query-set-b-7&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;b&quot;, 7 ];
+            uri_query_function(&quot;set&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-query-set-c-8&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;c&quot;, 8 ];
+            uri_query_function(&quot;set&quot;, arguments_);
+        });
+    }
+
+    {
+        $(&quot;#uri-button-query-add&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ $(&quot;#uri-input-query-add&quot;).val() ];
+            uri_query_function(&quot;add&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-query-add-a-b-c&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;a=1&amp;b=2&amp;c=3&amp;c=4&amp;c=5&quot; ];
+            uri_query_function(&quot;add&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-query-add-hello-world&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;a=\&quot;Hello, World!\&quot;&quot; ];
+            uri_query_function(&quot;add&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-query-add-a-6&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;a&quot;, 6 ];
+            uri_query_function(&quot;add&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-query-add-b-7&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;b&quot;, 7 ];
+            uri_query_function(&quot;add&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-query-add-c-8&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;c&quot;, 8 ];
+            uri_query_function(&quot;add&quot;, arguments_);
+        });
+    }
+
+    {
+        $(&quot;#uri-button-query-append&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ $(&quot;#uri-input-query-append&quot;).val() ];
+            uri_query_function(&quot;append&quot;, arguments_);
+        });
+
+        $(&quot;#uri-button-query-append-hello-world&quot;).bind(&quot;click&quot;, function(){
+            arguments_ = [ &quot;a=\&quot;Hello, World!\&quot;&quot; ];
+            uri_query_function(&quot;append&quot;, arguments_);
+        });
+    }
 
-    uri_function(&quot;set&quot;, [ &quot;http://example.com/a/b/c&quot; ]);
+    example_addHistory(null, &quot;&amp;lt;script src=\&quot;http://appengine.bravo9.com/b9j/b9j.uri.js\&quot;\n        type=\&quot;text/javascript\&quot;&amp;gt;&amp;lt;/script&amp;gt;&quot;);
+    example_addHistory(null, &quot;var uri = new b9j.uri.URI()&quot;);
+    uri_function(&quot;set&quot;, [ &quot;http://example.com/a/b/c?a=1#top&quot; ]);
 
 });
 </diff>
      <filename>source/uri/example.js</filename>
    </modified>
    <modified>
      <diff>@@ -439,6 +439,8 @@
             if (this._dirtyUserInformation) {
                 var userInformation = &quot;&quot;;
                 userInformation = this.user() + &quot;:&quot; + this.password();
+                if (&quot;:&quot; == userInformation)
+                    userInformation = &quot;&quot;;
                 this._uri.userInformation = userInformation;
                 this._dirtyUserInformation = false;
             }
@@ -1020,7 +1022,7 @@
             for (var key in this._store) {
                 return false;
             }
-            return true;
+            return b9j.isEmpty(this._queryString);
         },
 
 /*</diff>
      <filename>source/uri/source.js</filename>
    </modified>
    <modified>
      <diff>@@ -211,6 +211,17 @@ function _testURI(test) {
         test.is(&quot;http://example.net/.html.gz#top&quot;, uri.clone().extension(&quot;.html.gz&quot;) + &quot;&quot;);
         test.is(&quot;http://example.net/#top&quot;, uri.clone().extension(&quot;&quot;) + &quot;&quot;);
     }
+
+    {
+        uri.set(&quot;http://alice:xyzzy@example.net/&quot;);
+        test.is(&quot;http://alice:xyzzy@example.net/&quot;, uri + &quot;&quot;);
+
+        uri.user(&quot;&quot;);
+        test.is(&quot;http://:xyzzy@example.net/&quot;, uri + &quot;&quot;);
+
+        uri.password(&quot;&quot;);
+        test.is(&quot;http://example.net/&quot;, uri + &quot;&quot;);
+    }
 }
 
 function _testURIQuery(test) {
@@ -321,6 +332,17 @@ function _testURIQuery(test) {
         query.append(null);
         test.is(&quot;a=1&amp;b=2&amp;c=3&amp;c=4&amp;c=5&amp;c=6&quot;, query);
     }
+
+    {
+        query = new b9j.uri.query.Query(&quot;&quot;);
+        test.isTrue(query.isEmpty());
+
+        query.append(&quot;d=7&amp;d=1&quot;);
+        test.is(&quot;d=7&amp;d=1&quot;, query + &quot;&quot;);
+
+        query.append(null);
+        test.is(&quot;&quot;, query + &quot;&quot;);
+    }
 }
 
 b9jTest(function(test) {</diff>
      <filename>source/uri/test.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>15d4adca2a768d0f16f65970cb94ec9732d77dff</id>
    </parent>
  </parents>
  <author>
    <name>robertkrimen</name>
    <email>robertkrimen@gmail.com</email>
  </author>
  <url>http://github.com/robertkrimen/b9j/commit/5ad990d4a9b81b23cd048539c497d0cc755834d0</url>
  <id>5ad990d4a9b81b23cd048539c497d0cc755834d0</id>
  <committed-date>2008-09-10T14:10:42-07:00</committed-date>
  <authored-date>2008-09-10T14:10:42-07:00</authored-date>
  <message>Finished up uri/example.* and fixed some bugs along the way</message>
  <tree>fb83402c33cda082b25711c18fefcd923d62cd39</tree>
  <committer>
    <name>robertkrimen</name>
    <email>robertkrimen@gmail.com</email>
  </committer>
</commit>
