diff --git a/web/gui/src/main/webapp/_sdh/trie-test.js b/web/gui/src/main/webapp/_sdh/trie-test.js
new file mode 100644
index 0000000..2c8716c
--- /dev/null
+++ b/web/gui/src/main/webapp/_sdh/trie-test.js
@@ -0,0 +1,116 @@
+/*
+ *  Copyright 2016 Open Networking Laboratory
+ *
+ *  Licensed 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.
+ */
+
+/*
+ ONOS GUI -- Test code illustrating use of trie functions
+ */
+
+(function () {
+    'use strict';
+
+    // injected refs
+    var $log, fs;
+
+    // internal state
+    var out,
+        trie = {},
+        counter = 5000;
+
+    function write(string) {
+        out.append('div').text(string);
+    }
+
+    function lookup(word) {
+        var result = fs.trieLookup(trie, word),
+            f = fs.isF(result),
+            show = f ? '{function}' : result;
+
+
+        write('------> ' + word + ' ==> ' + show);
+
+        f && f();
+    }
+
+    function add(word, data) {
+        var result = fs.addToTrie(trie, word, data);
+        write('   ADD> ' + word + ' [' + data + '] ==> ' + result);
+    }
+
+    function remove(word) {
+        var result = fs.removeFromTrie(trie, word);
+        write('REMOVE> ' + word + ' ==> ' + result);
+    }
+
+    function func1() {
+        counter++;
+        write('** function call **  ' + counter);
+    }
+
+    function func2() {
+        counter += 11;
+        write('** alternate call **  ' + counter);
+    }
+
+    function runTests() {
+        lookup('cat');
+
+        add('cat', 101);
+
+        lookup('ca');
+        lookup('cat');
+        lookup('cats');
+
+        add('cab', 103);
+        add('cog', 105);
+
+        lookup('cut');
+        lookup('cab');
+
+        remove('cab');
+
+        lookup('cab');
+        lookup('cat');
+
+        add('fun', func1);
+
+        lookup('fun');
+        lookup('fun');
+        lookup('fun');
+        lookup('cat');
+        lookup('fun');
+
+        add('fun', func2);
+
+        lookup('fun');
+        lookup('fun');
+        lookup('fun');
+
+        remove('fun');
+
+        lookup('fun');
+    }
+
+    angular.module('trie', ['onosUtil'])
+    .controller('OvTrieTest', ['$log', 'FnService',
+
+        function (_$log_, _fs_) {
+            $log = _$log_;
+            fs = _fs_;
+            out = d3.select('#output');
+
+            runTests();
+        }]);
+}());
