diff --git a/gerrit/gerrit.sh b/gerrit/bin/gerrit.sh
similarity index 80%
rename from gerrit/gerrit.sh
rename to gerrit/bin/gerrit.sh
index adabf93..4900ab1 100755
--- a/gerrit/gerrit.sh
+++ b/gerrit/bin/gerrit.sh
@@ -6,30 +6,36 @@
 { # loader
     declare pgm=''
     pgm="$(realpath --canonicalize-existing "$0")"
-    root="${pgm%/*}" # path -= /bin/
-    root="${root%/*}" # path is parent
-    source "$root/lf/onf-common/common.sh" '--common-args-begin--'
+    readonly pgm
 
-    # lib_root="${pgm/.sh}" gerrit.sh => gerrit/
+    declare libdir="${pgm%/*}"
+    libdir="${libdir%/*}/gerrit"
+    readonly libdir
+
+    declare root=''
+    root="${pgm%%/gerrit/bin/gerrit.sh}"
+    source "$root/lf/onf-common/common.sh" '--common-args-begin--'
 }
 
 ##-------------------##
 ##---]  GLOBALS  [---##
 ##-------------------##
 declare -g serv='gerrit.opencord.org'
-declare -x -g BROWSER="${BROWSER:-opera}"
+declare -x -g BROWSER="${BROWSER:-/usr/local/bin/firefox}"
+declare -g -a me=()
+
+##--------------------##
+##---]  INCLUDES  [---##
+##--------------------##
+source "${libdir}/filters/status.sh"
+source "${libdir}/usage/include.sh"
+# source "${libdir}/usage/main.sh"
+
 
 ## -----------------------------------------------------------------------
 ## -----------------------------------------------------------------------
-function error_orig()
-{
-    echo "${FUNCNAME[1]} ERROR: $*"
-    exit 1
-}
-
-## -----------------------------------------------------------------------
-## -----------------------------------------------------------------------
-function join_by_orig()
+# function join_by_orig()
+function join_by()
 {
     local d=${1-} f=${2-}; if shift 2; then printf %s "$f" "${@/#/$d}"; fi;
 }
@@ -43,35 +49,41 @@
     local -n ref_repos=$1   ; shift
     local -n ref_status=$1 ; shift
 
+    ref_urls=()
+
     # local stem='https://gerrit.opencord.org/q/project:voltha-go+status:open'
     local stem='https://gerrit.opencord.org/q/'
 
+    local -a common=()
+    [[ -v me ]] && { common+=("${me[@]}"); }
+    common+=("${ref_status[@]}")
+
     local repo
     for repo in "${ref_repos[@]}";
-    do 
-       local -a args=()
+    do
+        local -a args=()
         args+=("project:${repo}")
-
-        if [[ -v argv_me ]]; then
-            args+=("owner:${USER}@opennetworking.org")
-        fi
-
-        local status
-        for status in "${ref_status[@]}";
-        do
-            args+=("$status")
-        done
+        args+=("${common[@]}")
 
         local url="$stem"
         url+="$(join_by '+' "${args[@]}")"
         ref_urls+=("$url")
     done
 
+    if [[ ${#ref_urls[@]} -eq 0 ]]; then
+        local -a args=()
+        args=("${common[@]}")
 
-    
+        local url="$stem"
+        url+="$(join_by '+' "${args[@]}")"
+        ref_urls+=("$url")
+    fi
+
 	# --debug)  declare -g -i debug=1 ;;
     # --search) declare -g -i search=1 ;;
     # --wip)    declare -g -i status_is_open=1 ;;
+
+    return
 }
 
 
@@ -100,12 +112,12 @@
                     ;;
                 *) error "Unknown --admin type [$admin]" ;;
             esac
-                
+
         done # admins[@]
     done # repos[@]
     return
 }
-     
+
 ## -----------------------------------------------------------------------
 ## Intent: Iterate over --admin values and generate repositories
 ## -----------------------------------------------------------------------
@@ -119,16 +131,14 @@
     local stem0="https://gerrit.opencord.org/plugins/gitiles"
 
     # https://gerrit.opencord.org/plugins/gitiles/ofagent-go
-    
+
     local repo
     for repo in "${_repos[@]}";
     do
-        declare -p repo
         local stem="${stem0}/$repo"
         local view
         for view in "${view_keys[@]}";
         do
-            declare -p view
             # https://gerrit.opencord.org/admin/repos/voltha-go
             case "$view" in
                 # https://gerrit.opencord.org/plugins/gitiles/voltha-system-tests
@@ -139,11 +149,11 @@
                   master)
                       ref+=("$stem/+/refs/heads/master")
                       ;;
-                     
+
                   voltha-*)
                       echo "STEM: $stem"
                       if false; then
-                          ref+=("$stem/+/refs/tags/${view}") 
+                          ref+=("$stem/+/refs/tags/${view}")
                           ref+=("$stem/+/refs/heads/${view}")
                       fi
                       # ref+=("$stem/+/refs/heads/${view}")
@@ -163,7 +173,7 @@
 
     return
 }
-     
+
 ## -----------------------------------------------------------------------
 ## -----------------------------------------------------------------------
 function get_urls()
@@ -198,9 +208,6 @@
 function browse()
 {
     local -n _urls=$1; shift
-
-    # declare -p _urls
-    # echo "${_urls[@]}"
     "${BROWSER}" "${_urls[@]}" >/dev/null 2>/dev/null &
     return
 }
@@ -239,74 +246,12 @@
 function do_gerrit_dashboard()
 {
     local -n ref=$1; shift
-    
+
     declare -A data=()
     get_urls data "$serv"
     ref+=("${data['dashboard']}")
     return
 }
- 
-## -----------------------------------------------------------------------
-## -----------------------------------------------------------------------
-function usage()
-{
-    cat <<EOH
-Usage: $0
-  --all r          Load all metadata for a repository
-  --reviews        Load pending code review requests
-
-  --access         Display gerrit ACLs
-  --dash(boad)     Display my patch dashboard
-  --branch         Admin branch URL
-
-  --crowd          View crowd access roles for group
-  --crowd-all      Group search (crowd)
-
-  --groups [g]     View access roles for group.
-  --groups-all     Group search (gerrit)
-
-  --repo           Repository name
-  --serv           Gerrit server name
-
-  --me             Query for my patches
-  --wip
-  --search
-
-  --admins a
-    a=branches     View repository branches
-    a=tags         View repository tags
-
-  --patch [repo]    Search for repository patches
-  --version v       Artifact versions(s) to act on
-     v=master       Mainline development
-     v=voltha-2.12  Artifact branch from a release
-     v=v2.12.0      Artifact tag derived from a release
-     v=v3.5.4       Artifact tag derived from VERSION file
-
-  --view v          View a code repository:
-    repo             View top level gerrit repository page (w/branch & tag)
-    search           Gerrit repo search page
-    master           View a branch
-    voltha-2.12      View a branch
-    v2.3.3           View a tag
-
-[FILTERS]
-  --status s         Filter query by open/merge/closed status
-    s=open (is:open)
-    s=merged
-
-  --debug
-  --help
-
-% gerrit.sh --repo voltha-go --admin tags --admin branches
-
-## Search for umerged patches in repo:voltha-go
-% gerrit.sh --repo voltha-go --search --wip
-EOH
-    return
-}
-
-# 
 
 # https://gerrit.opencord.org/q/status:open+-is:wip
 
@@ -322,6 +267,13 @@
     arg="$1"; shift
     case "$arg" in
         --help) usage; exit 0 ;;
+        --help-*)
+            case "$arg" in
+                --help-status) usage_verbose "$arg" ;;
+                *) usage ;;
+            esac
+            exit 0
+            ;;
 
         ## Modes
 	    --debug)
@@ -329,11 +281,19 @@
             declare -g -i debug=1
             ;;
         --search) declare -g -i argv_search=1 ;;
-        --me) declare -g -i argv_me=1 ;;
-        
+
+        --me)
+            # declare -g -i argv_me=1
+            me+=("owner:${USER}@opennetworking.org")
+            ;;
+
+        --todo) source "$root/gerrit/todo.sh" ;;
+
         --wip)
-            [[ ! -v argv_status ]] && { declare -g -a argv_status=(); }
-            argv_status+=('status:open')
+            declare -a args=()
+            args=('--status' 'open')
+            [[ $# -gt 0 ]] && { args+=("$@"); }
+            set -- "${args[@]}"
             ;;
 
         --admin)
@@ -352,7 +312,7 @@
             repo="$1"; shift
             declare -a args=()
             args+=('--repo'  "$repo")
-            # 
+            #
             args+=('--admin' 'branches')
             args+=('--admin' 'tags')
 
@@ -367,14 +327,14 @@
             set -- "${args[@]}" "$@"
             ;;
 
-        --repo) 
+        --repo)
             repo="$1"; shift
             [[ ! -v repos ]] && { declare -a repos=(); }
             repos+=("$repo")
             ;;
-        
+
         --serv) serv="$1"; shift
-                case "$serv" in 
+                case "$serv" in
                     *cord*) serv='gerrit.opencord.org'    ;;
                     *onos*) serv='gerrit.onosproject.org' ;;
                     *) error "Detected invalid --serv $serv" ;;
@@ -409,9 +369,10 @@
             esac
             ;;
 
+        --*desk) error "Try --dashboard instead" ;;
         --dash*) do_gerrit_dashboard urls ;;
-    
-        # 
+
+        #
         --group*)
             case "$arg" in
                 --group*)
@@ -432,8 +393,11 @@
             ;;
 
         --status)
-            status="$1"; shift # open, closed, merged
-            urls[-1]+="+status:${status}"
+            arg="$1"; shift # open, closed, merged
+            case "$arg" in
+                closed|open|merged) add_filter_status "$arg";;
+                *) error "Detected invalid --status [$arg]" ;;
+            esac
             ;;
 
         --patch*)
@@ -465,7 +429,7 @@
                     ;;
 
                 repo) views['repository']=1 ;;
-                
+
                 # https://gerrit.opencord.org/plugins/gitiles/voltha-go
                 master) views['master']=1 ;;
                 voltha*) views["$arg"]=1  ;;
@@ -477,19 +441,19 @@
                     ;;
             esac
             ;;
-    
-	    -*) 
+
+	    -*)
 	        echo "ERROR: Unknown argument [$arg]"
 	        exit 1
 	        ;;
-    
+
 	    [[:alnum:]]*)
             declare -a what=()
             # whats+=('patches')
             whats+=('versions')
 
             stem="https://gerrit.opencord.org/q/${arg}"
-            
+
             for what in "${whats[@]}";
             do
                 case "$what" in
@@ -507,18 +471,24 @@
 done
 
 [[ -v argv_search ]] && { do_gerrit_search urls repos argv_status; }
-
 [[ -v admins ]] && { gen_admin_urls urls repos admins; }
 
 ## are --views working ?
 [[ "${#views[@]}" -gt 0 ]] && { gen_view_urls  urls repos views;  }
 # [[ ! -v views  ]] && { echo 'called'; gen_view_urls  urls repos views;  }
 
+if [[ ${#urls[@]} -eq 0 ]]; then
+    declare -a show_all=() # show all for visiblity
+    do_gerrit_search urls repos show_all
+fi
+
+
 [[ -v debug ]] && { echo "$BROWSER" "${urls[@]}"; }
-# "$BROWSER" "${urls[@]}" >/dev/null 2>/dev/null
-[[ -v argv_debug ]] && { set -x; }
-"$BROWSER" "${urls[@]}"
-[[ -v argv_debug ]] && { set +x; }
+
+if [[ ${#urls[@]} -gt 0 ]]; then
+    apply_filter_status urls
+    browse urls
+fi
 
 ## -----------------------------------------------------------------------
 ## [TODO]
@@ -531,3 +501,17 @@
 ## -----------------------------------------------------------------------
 
 # [EOF]
+
+
+# 1) gerrit.sh --search --me --wip
+#    query> owner:joey@opennetworking.org status:open
+
+# --search --me
+#            args+=("owner:${USER}@opennetworking.org")
+
+#        --wip)
+#            argv_status+=('status:open')
+#            ;;
+
+
+# [EOF]
diff --git a/gerrit/gerrit/filters/status.sh b/gerrit/gerrit/filters/status.sh
new file mode 100644
index 0000000..01ae340
--- /dev/null
+++ b/gerrit/gerrit/filters/status.sh
@@ -0,0 +1,66 @@
+#!/bin/bash
+# -----------------------------------------------------------------------
+# Copyright 2024 Open Networking Foundation Contributors
+#
+# 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.
+# -----------------------------------------------------------------------
+# SPDX-FileCopyrightText: 2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
+# -----------------------------------------------------------------------
+
+## -----------------------------------------------------------------------
+## Intent: Update gerrit query to filter based on status.
+## -----------------------------------------------------------------------
+function add_filter_status()
+{
+    local val="$1"; shift
+
+    case "$val" in
+        closed|open|merged)
+            [[ ! -v argv_status ]] && { declare -g -a argv_status=(); }
+            argv_status+=("$val")
+            ;;
+        *) error "Detected invalid --status [$arg]" ;;
+    esac
+
+    return
+} # add_status_filter()
+
+## -----------------------------------------------------------------------
+## Intent: Merge status attributes into a URL query
+## -----------------------------------------------------------------------
+function apply_filter_status()
+{
+    local -n ref=$1; shift
+
+    [[ ! -v argv_status ]] && { return; }
+    
+    local status
+    for status in "${argv_status[@]}";
+    do
+        if [[ "${ref[-1]: -1:1}" != '/' ]]; then
+           ref[-1]+='+' # "+status:${status}"
+        fi
+
+        # https://gerrit.opencord.org/q/status:open
+        # TODO: Do not apply + when
+        # ref[-1]+="+status:${status}"
+        ref[-1]+="status:${status}"
+    done
+
+    return
+}
+
+: # ($?==0) for source script
+
+# [EOF]
diff --git a/gerrit/gerrit/todo.sh b/gerrit/gerrit/todo.sh
new file mode 100644
index 0000000..93521ee
--- /dev/null
+++ b/gerrit/gerrit/todo.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+function show_todo()
+{
+    cat <<EOT
+
+** -----------------------------------------------------------------------
+** [TODO]
+** -----------------------------------------------------------------------
+1) gerrit.sh --search --me --wip
+   query> owner:joey@opennetworking.org status:open
+
+EOT
+}
+show_todo
+unset todo
+
+: # ($?==0)
+
+# [EOF]
diff --git a/gerrit/gerrit/usage/include.sh b/gerrit/gerrit/usage/include.sh
new file mode 100644
index 0000000..5dbcefa
--- /dev/null
+++ b/gerrit/gerrit/usage/include.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+# -----------------------------------------------------------------------
+# Copyright 2024 Open Networking Foundation Contributors
+#
+# 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.
+# -----------------------------------------------------------------------
+# SPDX-FileCopyrightText: 2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
+# -----------------------------------------------------------------------
+
+##--------------------##
+##---]  INCLUDES  [---##
+##--------------------##
+source "${libdir}/usage/main.sh"
+source "${libdir}/usage/status.sh"
+
+# [EOF]
diff --git a/gerrit/gerrit/usage/main.sh b/gerrit/gerrit/usage/main.sh
new file mode 100644
index 0000000..94f822b
--- /dev/null
+++ b/gerrit/gerrit/usage/main.sh
@@ -0,0 +1,112 @@
+#!/bin/bash
+# -----------------------------------------------------------------------
+# Copyright 2024 Open Networking Foundation Contributors
+#
+# 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.
+# -----------------------------------------------------------------------
+# SPDX-FileCopyrightText: 2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
+# -----------------------------------------------------------------------
+# Intent: Display command help
+# -----------------------------------------------------------------------
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+function usage()
+{
+    cat <<EOH
+Usage: $0
+  --all r          Load all metadata for a repository
+  --reviews        Load pending code review requests
+
+  --access         Display gerrit ACLs
+  --dash(boad)     Display my patch dashboard
+  --branch         Admin branch URL
+
+  --crowd          View crowd access roles for group
+  --crowd-all      Group search (crowd)
+
+  --groups [g]     View access roles for group.
+  --groups-all     Group search (gerrit)
+
+  --me             Alias for --user $USER
+
+  --repo           Repository name
+  --serv           Gerrit server name
+
+  --search
+  --wip            Query for open/unmerged patches.
+
+  --admins a
+    a=branches     View repository branches
+    a=tags         View repository tags
+
+  --patch [repo]    Search for repository patches
+  --version v       Artifact versions(s) to act on
+     v=master       Mainline development
+     v=voltha-2.12  Artifact branch from a release
+     v=v2.12.0      Artifact tag derived from a release
+     v=v3.5.4       Artifact tag derived from VERSION file
+
+  --view v          View a code repository:
+    repo             View top level gerrit repository page (w/branch & tag)
+    search           Gerrit repo search page
+    master           View a branch
+    voltha-2.12      View a branch
+    v2.3.3           View a tag
+
+[FILTER(s)]
+  --status [s]       Filter query results by status={open,merged,closed}
+    s=open (is:open)
+    s=merged
+  -- user [u]        Filter results by a list of users
+
+[MODE(s)]
+  --debug
+  --help
+
+
+[USAGE]
+  % gerrit.sh --wip
+      Display unmerged patches
+
+  % gerrit.sh --wip --me
+      Display my unmerged patches
+
+  % gerrit.sh --repo voltha-go --admin tags --admin branches
+
+  ## Search for umerged patches in repo:voltha-go
+  % gerrit.sh --repo voltha-go --search --wip
+
+[HELP: Extended]
+  --help-status
+
+EOH
+    return
+}
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+function usage_verbose()
+{
+    local switch="$1"; shift
+
+    case "$switch" in
+        --help-status) usage_status ;;
+        *) usage ;;
+    esac
+
+    return
+}
+
+# [EOF]
diff --git a/gerrit/gerrit/usage/status.sh b/gerrit/gerrit/usage/status.sh
new file mode 100644
index 0000000..5ceaa0f
--- /dev/null
+++ b/gerrit/gerrit/usage/status.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+## -----------------------------------------------------------------------
+## Intent: Display command use cases
+## -----------------------------------------------------------------------
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+function usage_status()
+{
+    cat <<EOH
+
+[SHOW: My unmerged patches]
+  % gerrit.sh --me --status open
+
+[SHOW: All records of type status]
+  % gerrit.sh --status open
+  % gerrit.sh --status merged
+  % gerrit.sh --status closed
+
+  % gerrit.sh --status merged --status closed
+EOH
+    return
+}
+
+# [EOF]
diff --git a/gerrit/makefile b/gerrit/makefile
new file mode 100644
index 0000000..73f6aec
--- /dev/null
+++ b/gerrit/makefile
@@ -0,0 +1,11 @@
+# -*- makefile -*-
+
+all:
+
+test ::
+
+clean ::
+
+sterile :: clean
+
+# [EOF]
