diff --git a/bin/gerrit.sh b/bin/gerrit.sh
index 8f6eac3..f436a44 120000
--- a/bin/gerrit.sh
+++ b/bin/gerrit.sh
@@ -1 +1 @@
-../gerrit/gerrit.sh
\ No newline at end of file
+../gerrit/bin/gerrit.sh
\ No newline at end of file
diff --git a/bin/jira-search.sh b/bin/jira-search.sh
new file mode 120000
index 0000000..03efcb2
--- /dev/null
+++ b/bin/jira-search.sh
@@ -0,0 +1 @@
+../jira/bin/jira-search.sh
\ No newline at end of file
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]
diff --git a/jira/jira-search.sh b/jira/bin/jira-search.sh
similarity index 93%
rename from jira/jira-search.sh
rename to jira/bin/jira-search.sh
index 31c22ce..97b8cc2 100755
--- a/jira/jira-search.sh
+++ b/jira/bin/jira-search.sh
@@ -3,6 +3,21 @@
 ## Intent: Construct a jira ticket query with attributes
 ## --------------------------------------------------------------------
 
+{ # loader
+    declare pgm=''
+    pgm="$(realpath --canonicalize-existing "$0")"
+
+    declare root=''
+    root="${pgm%%/jira/bin/jira-search.sh}"
+    source "$root/lf/onf-common/common.sh" '--common-args-begin--'
+
+    pgm_lib="${root}/jira/jira-search"
+    readonly pgm_lib
+
+    pgm_bin="${root}/bin"
+    readonly pgm_bin
+}
+
 # set -euo pipefail
 #source ~/.sandbox/trainlab-common/common.sh '--common-args-begin--'
 
@@ -22,9 +37,12 @@
 declare -g -a projects=()
 
 path="$(realpath $0 --canonicalize-existing)"
-source "${path%\.sh}/utils.sh"
-source "$pgmlib/fixversion.sh"
-source "$pgmlib/resolved.sh"
+# source "${path%\.sh}/utils.sh"
+source "${pgm_lib}/utils.sh"
+#source "$pgmlib/fixversion.sh"
+#source "$pgmlib/resolved.sh"
+source "${pgm_lib}/fixversion.sh"
+source "${pgm_lib}/resolved.sh"
 
 ## --------------------------------------------------------------------
 ## --------------------------------------------------------------------
@@ -55,7 +73,7 @@
 function conjunction()
 {
     return
-    
+
     local -n ref=$1; shift
     [[ $# -gt 0 ]] && { local literal="$1"; shift; }
 
@@ -96,7 +114,7 @@
     declare -n ans=$1; shift
 
     # [ -z ${args+word} ] && { args=(); }
-    
+
     if [[ ${#args[@]} -gt 0 ]]; then
 
         local modifier
@@ -270,7 +288,10 @@
     do
         _tmp+=("$val" 'AND')
     done
-    unset _tmp[-1]
+
+    if [[ ${#_tmp[@]} -gt 0 ]]; then
+        unset _tmp[-1]
+    fi
 
     ## -----------------------
     ## Massage with html codes
@@ -304,10 +325,12 @@
 Usage: $0 VOL-xxxx
   --debug       Enable script debug mode
   --dry-run     Simulate
+  --todo        Display future enhancements
 
   VOL-{xxxx}    View a jira ticket by ID
 
 [SERVER]
+  --server {cord,onf}
   --onf         jira.opennetworking.org (default)
   --opencord    jira.opencord.org
 
@@ -430,8 +453,17 @@
         ##------------------##
         ##---]  SERVER  [---##
         ##------------------##
-        -*onf) declare server='jira.opennetworking.org'; error "FOUND --onf" ;;
-        -*cord) declare server='jira.opencord.org' ;;
+        --serv*)
+            arg="$1"; shift
+            case "$arg" in
+                *cord*) server='jira.opencord.org' ;;
+                 *onf*) server='jira.opennetworking.org' ;;
+                 *) error "--server [$arg] expected opencord or onf" ;;
+            esac
+            ;;
+
+         --onf) declare server='jira.opennetworking.org' ;;
+        --cord) declare server='jira.opencord.org'     ;;
 
         ##---------------------##
         ##---]  SEARCH-BY  [---##
@@ -474,6 +506,7 @@
             ;;
 
         --all) set -- '--resolved-is-none' "$@" ;; # alias: --[un-]resolved
+        --todo) source "${pgm_lib}/todo.sh" ;;
 
         --proj*) projects+=("$1"); shift ;;
 
@@ -583,6 +616,11 @@
     esac
 done
 
+## --------------
+## Required check
+## --------------
+[[ ! -v server ]] && { error "--server={cord,onf} is required"; }
+
 ## ----------------------
 ## Construct query filter
 ## ----------------------
diff --git a/jira/resolved.sh b/jira/bin/resolved.sh
similarity index 100%
rename from jira/resolved.sh
rename to jira/bin/resolved.sh
diff --git a/jira/jira-search/todo.sh b/jira/jira-search/todo.sh
new file mode 100644
index 0000000..c083b77
--- /dev/null
+++ b/jira/jira-search/todo.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+function __anonymous()
+{
+    cat <<EOT
+
+** -----------------------------------------------------------------------
+** [TODO]
+** -----------------------------------------------------------------------
+    o --component bbsim --component ci-management
+      # Component not working unless project passed
+    project = VOL AND component in (bbsim, bbsim-sadis-server, ci-management)
+EOT
+    return
+}
+
+__anonymous
+unset __anonymous
+
+: # ($?==0) for source script return
+# [EOF]
diff --git a/makefile b/makefile
new file mode 100644
index 0000000..262c76f
--- /dev/null
+++ b/makefile
@@ -0,0 +1,15 @@
+# -*- makefile -*-
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+
+common-sh := lf/onf-common/common.sh
+
+all : $(common-sh)
+
+## -----------------------------------------------------------------------
+## Intent: On-demand submodule checkout
+## -----------------------------------------------------------------------
+$(common-sh) :
+	git submodule update --init --recursive
+
+# [EOF]
