From 6377e4fb2e30df51a1ebd38c4eb46b3777d44f75 Mon Sep 17 00:00:00 2001
From: rbalocca <rbalocca@vyatta.com>
Date: Mon, 24 Mar 2008 18:14:04 -0700
Subject: Set dependencies on either bash or vyatta-bash

---
 debian/control | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/debian/control b/debian/control
index 964e18b8..e01019ed 100644
--- a/debian/control
+++ b/debian/control
@@ -12,7 +12,7 @@ Depends: sed (>= 4.1.5),
  procps (>= 1:3.2.7-3),
  coreutils (>= 5.97-5.3),
  vyatta-cfg,
- vyatta-bash,
+ vyatta-bash | bash (>= 3.1),
  vyatta-quagga | quagga
 Suggests: util-linux (>= 2.13-5),
  net-tools,
-- 
cgit v1.2.3


From f9989ab77bffc9fb336eb6c00677e6251b1bf618 Mon Sep 17 00:00:00 2001
From: Robert Bays <rbays@moresby.vyatta.com>
Date: Tue, 25 Mar 2008 17:19:29 -0700
Subject: update help strings in BGP add comp_help strings to BGP remove
 enforce-capability parameter since in quagga it's an alias remove interface
 parameter since it's ipv6 related remove password parameter as the md5 code
 isn't in the current release fixed a couple of parameter relationship bugs

---
 scripts/bgp/vyatta-bgp.pl                          |  4 +-
 templates/protocols/bgp/node.def                   | 11 +++--
 .../bgp/node.tag/aggregate-address/node.def        | 41 ++++++++--------
 .../aggregate-address/node.tag/as-set/node.def     |  2 +-
 .../node.tag/summary-only/node.def                 |  2 +-
 templates/protocols/bgp/node.tag/neighbor/node.def | 13 ++---
 .../node.tag/advertisement-interval/node.def       | 23 ++++-----
 .../node.tag/neighbor/node.tag/allowas-in/node.def | 32 ++++++-------
 .../neighbor/node.tag/allowas-in/number/node.def   |  3 +-
 .../node.tag/attribute-unchanged/as-path/node.def  |  2 +-
 .../node.tag/attribute-unchanged/med/node.def      |  2 +-
 .../node.tag/attribute-unchanged/next-hop/node.def |  2 +-
 .../neighbor/node.tag/attribute-unchanged/node.def | 52 ++++++++++----------
 .../neighbor/node.tag/capability/dynamic/node.def  | 22 ++++-----
 .../node.tag/neighbor/node.tag/capability/node.def |  1 +
 .../neighbor/node.tag/capability/orf/node.def      |  2 +-
 .../capability/orf/prefix-list/receive/node.def    | 22 ++++-----
 .../capability/orf/prefix-list/send/node.def       |  2 +-
 .../neighbor/node.tag/default-originate/node.def   | 40 ++++++++--------
 .../node.tag/default-originate/route-map/node.def  |  6 +--
 .../neighbor/node.tag/description/node.def         |  2 +-
 .../disable-capability-negotiation/node.def        | 22 ++++-----
 .../node.tag/disable-connected-check/node.def      | 22 ++++-----
 .../disable-send-community/extended/node.def       | 24 +++++-----
 .../node.tag/disable-send-community/node.def       |  4 +-
 .../disable-send-community/standard/node.def       | 23 ++++-----
 .../node.tag/distribute-list/export/node.def       | 28 ++++++-----
 .../node.tag/distribute-list/import/node.def       | 28 ++++++-----
 .../neighbor/node.tag/distribute-list/node.def     |  2 +-
 .../neighbor/node.tag/ebgp-multihop/node.def       | 23 ++++-----
 .../neighbor/node.tag/enforce-multihop/node.def    | 13 -----
 .../neighbor/node.tag/filter-list/export/node.def  | 27 ++++++-----
 .../neighbor/node.tag/filter-list/import/node.def  | 27 ++++++-----
 .../neighbor/node.tag/filter-list/node.def         |  2 +-
 .../node.tag/neighbor/node.tag/interface/node.def  | 18 -------
 .../neighbor/node.tag/local-as/local-as/node.def   |  7 +--
 .../neighbor/node.tag/local-as/no-prepend/node.def |  2 +-
 .../node.tag/neighbor/node.tag/local-as/node.def   | 55 ++++++++++++----------
 .../neighbor/node.tag/maximum-prefix/node.def      | 23 ++++-----
 .../neighbor/node.tag/nexthop-self/node.def        | 24 +++++-----
 .../neighbor/node.tag/override-capability/node.def | 24 +++++-----
 .../node.tag/neighbor/node.tag/passive/node.def    | 22 ++++-----
 .../node.tag/neighbor/node.tag/password/node.def   | 13 -----
 .../node.tag/neighbor/node.tag/peer-group/node.def | 10 ++--
 .../bgp/node.tag/neighbor/node.tag/port/node.def   | 33 ++++++-------
 .../neighbor/node.tag/prefix-list/export/node.def  | 28 ++++++-----
 .../neighbor/node.tag/prefix-list/import/node.def  | 28 ++++++-----
 .../neighbor/node.tag/prefix-list/node.def         |  2 +-
 .../node.tag/neighbor/node.tag/remote-as/node.def  | 11 +++--
 .../neighbor/node.tag/remove-private-as/node.def   | 24 +++++-----
 .../neighbor/node.tag/route-map/export/node.def    | 27 ++++++-----
 .../neighbor/node.tag/route-map/import/node.def    | 27 ++++++-----
 .../node.tag/neighbor/node.tag/route-map/node.def  |  2 +-
 .../node.tag/route-reflector-client/node.def       | 26 +++++-----
 .../neighbor/node.tag/route-server-client/node.def | 24 +++++-----
 .../node.tag/neighbor/node.tag/shutdown/node.def   | 22 ++++-----
 .../node.tag/soft-reconfiguration/inbound/node.def | 23 +++++----
 .../node.tag/soft-reconfiguration/node.def         |  4 +-
 .../node.tag/strict-capability-match/node.def      | 24 +++++-----
 .../neighbor/node.tag/timers/connect/node.def      |  4 +-
 .../neighbor/node.tag/timers/holdtime/node.def     |  4 +-
 .../neighbor/node.tag/timers/keepalive/node.def    |  3 +-
 .../bgp/node.tag/neighbor/node.tag/timers/node.def | 52 ++++++++++----------
 .../neighbor/node.tag/unsuppress-map/node.def      | 27 ++++++-----
 .../neighbor/node.tag/update-source/node.def       | 23 ++++-----
 .../bgp/node.tag/neighbor/node.tag/weight/node.def | 23 ++++-----
 templates/protocols/bgp/node.tag/network/node.def  |  6 +--
 .../node.tag/network/node.tag/backdoor/node.def    |  2 +-
 .../node.tag/network/node.tag/route-map/node.def   |  5 +-
 .../parameters/always-compare-med/node.def         | 10 ++--
 .../parameters/bestpath/as-path/confed/node.def    | 10 ++--
 .../parameters/bestpath/as-path/ignore/node.def    | 10 ++--
 .../node.tag/parameters/bestpath/as-path/node.def  |  2 +-
 .../parameters/bestpath/compare-routerid/node.def  | 10 ++--
 .../parameters/bestpath/med/confed/node.def        | 10 ++--
 .../bestpath/med/missing-as-worst/node.def         | 10 ++--
 .../bgp/node.tag/parameters/bestpath/med/node.def  |  2 +-
 .../bgp/node.tag/parameters/bestpath/node.def      |  2 +-
 .../bgp/node.tag/parameters/cluster-id/node.def    | 11 +++--
 .../parameters/confederation/identifier/node.def   | 11 +++--
 .../bgp/node.tag/parameters/confederation/node.def |  2 +-
 .../parameters/confederation/peers/node.def        | 11 +++--
 .../parameters/dampening/half-life/node.def        |  3 +-
 .../dampening/max-suppress-time/node.def           |  7 +--
 .../bgp/node.tag/parameters/dampening/node.def     | 21 ++++-----
 .../node.tag/parameters/dampening/re-use/node.def  |  7 +--
 .../dampening/start-suppress-time/node.def         |  7 +--
 .../parameters/default/local-pref/node.def         | 11 +++--
 .../parameters/default/no-ipv4-unicast/node.def    | 10 ++--
 .../bgp/node.tag/parameters/default/node.def       |  2 +-
 .../node.tag/parameters/deterministic-med/node.def | 10 ++--
 .../disable-network-import-check/node.def          | 10 ++--
 .../node.tag/parameters/enforce-first-as/node.def  | 10 ++--
 .../node.tag/parameters/graceful-restart/node.def  |  2 +-
 .../graceful-restart/stalepath-time/node.def       | 11 +++--
 .../parameters/log-neighbor-changes/node.def       | 10 ++--
 .../no-client-to-client-reflection/node.def        | 10 ++--
 .../parameters/no-fast-external-failover/node.def  | 10 ++--
 .../protocols/bgp/node.tag/parameters/node.def     |  2 +-
 .../bgp/node.tag/parameters/router-id/node.def     | 11 +++--
 .../bgp/node.tag/parameters/scan-time/node.def     | 11 +++--
 .../redistribute/connected/metric/node.def         |  3 +-
 .../bgp/node.tag/redistribute/connected/node.def   | 32 ++++++-------
 .../redistribute/connected/route-map/node.def      |  5 +-
 .../node.tag/redistribute/kernel/metric/node.def   |  3 +-
 .../bgp/node.tag/redistribute/kernel/node.def      | 32 ++++++-------
 .../redistribute/kernel/route-map/node.def         |  5 +-
 .../protocols/bgp/node.tag/redistribute/node.def   |  2 +-
 .../bgp/node.tag/redistribute/ospf/metric/node.def |  3 +-
 .../bgp/node.tag/redistribute/ospf/node.def        | 32 ++++++-------
 .../node.tag/redistribute/ospf/route-map/node.def  |  5 +-
 .../bgp/node.tag/redistribute/rip/metric/node.def  |  3 +-
 .../bgp/node.tag/redistribute/rip/node.def         | 32 ++++++-------
 .../node.tag/redistribute/rip/route-map/node.def   |  5 +-
 .../node.tag/redistribute/static/metric/node.def   |  3 +-
 .../bgp/node.tag/redistribute/static/node.def      | 32 ++++++-------
 .../redistribute/static/route-map/node.def         |  5 +-
 .../bgp/node.tag/timers/holdtime/node.def          |  9 ++--
 .../bgp/node.tag/timers/keepalive/node.def         |  3 +-
 templates/protocols/bgp/node.tag/timers/node.def   | 24 +++++-----
 120 files changed, 845 insertions(+), 842 deletions(-)
 create mode 100644 templates/protocols/bgp/node.tag/neighbor/node.tag/capability/node.def
 delete mode 100644 templates/protocols/bgp/node.tag/neighbor/node.tag/enforce-multihop/node.def
 delete mode 100644 templates/protocols/bgp/node.tag/neighbor/node.tag/interface/node.def
 delete mode 100644 templates/protocols/bgp/node.tag/neighbor/node.tag/password/node.def

diff --git a/scripts/bgp/vyatta-bgp.pl b/scripts/bgp/vyatta-bgp.pl
index d0f9c94c..319f980b 100755
--- a/scripts/bgp/vyatta-bgp.pl
+++ b/scripts/bgp/vyatta-bgp.pl
@@ -108,12 +108,12 @@ sub check_as() {
     }
 
     if (! defined $peergroup) {
-      print "You must define a remote-as or peer-group for neighbor $neighbor before commiting\n";
+      print "protocols bgp $as neighbor $neighbor: you must define a remote-as or peer-group\n";
       exit 1;
     }
 
     if (! defined $peergroupas) {
-      print "You must define a remote-as in neighbor $neighbor or peer-group $peergroup before commiting\n";
+      print "protocols bgp $as neighbor $neighbor: you must define a remote-as in this neighbor or in peer-group $peergroup\n";
       exit 1;
     }
   }
diff --git a/templates/protocols/bgp/node.def b/templates/protocols/bgp/node.def
index c1b84c57..c656ab50 100644
--- a/templates/protocols/bgp/node.def
+++ b/templates/protocols/bgp/node.def
@@ -1,9 +1,10 @@
 tag:
 type: u32
-help: Configure a BGP Autonomous System on this router
+help: Configure BGP protocol
+comp_help: \1  <1-4294967294>\tAS number
 syntax:expression: $VAR(@) >= 1 && $VAR(@) <= 4294967294; "AS number must be between 1 and 4294967294"
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(@)\" "
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(@)"
 # we need to set default parameters in BGP here since we can't do it in
-# startup scripts because we don't know the AS number
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(@)\" -c \"bgp network import-check\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"no router bgp $VAR(@)\" "
+# startup scripts as we don't know the AS number at that point
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(@)" -c "bgp network import-check"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "no router bgp $VAR(@)"
diff --git a/templates/protocols/bgp/node.tag/aggregate-address/node.def b/templates/protocols/bgp/node.tag/aggregate-address/node.def
index 5a188842..e7b214fb 100644
--- a/templates/protocols/bgp/node.tag/aggregate-address/node.def
+++ b/templates/protocols/bgp/node.tag/aggregate-address/node.def
@@ -1,24 +1,23 @@
 tag:
 type: ipv4net
-help: Configure BGP aggregate entries
+help: configure a BGP aggregate network
+comp_help: \1 <x.x.x.x/x>\taggregate network
 syntax:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --check-prefix-boundry $VAR(@)"
-
-delete:expression: "touch /tmp/`echo $VAR(@) | sed 's!/!!'`.$PPID" 
-
-end:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr \
-       -c \"configure terminal\" \
-       -c \"router bgp $VAR(../@)\" \
-       -c \"no aggregate-address $VAR(@)\"; \
-      if [ -f \"/tmp/`echo $VAR(@) | sed 's!/!!'`.$PPID\" ]; then \
-        rm -rf /tmp/`echo $VAR(@) | sed 's!/!!'`.$PPID; \
-      else \
-        if ${vyatta_sbindir}/vyatta_quagga_utils.pl --exists 'protocols bgp $VAR(../@) aggregate-address $VAR(@) as-set' ;  then \
-          COND=\"as-set\"; \
-        fi; \
-        if ${vyatta_sbindir}/vyatta_quagga_utils.pl --exists 'protocols bgp $VAR(../@) aggregate-address $VAR(@) summary-only' ;  then \
-          COND=\"$COND summary-only\"; \
-        fi; \
-        ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" \
-          -c \"router bgp $VAR(../@)\" \
-          -c \"aggregate-address $VAR(@) $COND\"; \
-      fi; "
+delete: touch /tmp/`echo $VAR(@) | sed 's!/!!'`.$PPID 
+end:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr \
+       -c "configure terminal" \
+       -c "router bgp $VAR(../@)" \
+       -c "no aggregate-address $VAR(@)"; 
+      if [ -f "/tmp/`echo $VAR(@) | sed 's!/!!'`.$PPID" ]; then 
+        rm -rf /tmp/`echo $VAR(@) | sed 's!/!!'`.$PPID; 
+      else 
+        if ${vyatta_sbindir}/vyatta_quagga_utils.pl --exists 'protocols bgp $VAR(../@) aggregate-address $VAR(@) as-set' ;  then 
+          cond="as-set"; 
+        fi; 
+        if ${vyatta_sbindir}/vyatta_quagga_utils.pl --exists 'protocols bgp $VAR(../@) aggregate-address $VAR(@) summary-only' ;  then 
+          cond="$cond summary-only"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" \
+          -c "router bgp $VAR(../@)" \
+          -c "aggregate-address $VAR(@) $cond"; 
+      fi; 
diff --git a/templates/protocols/bgp/node.tag/aggregate-address/node.tag/as-set/node.def b/templates/protocols/bgp/node.tag/aggregate-address/node.tag/as-set/node.def
index d4d7945f..ef6214f2 100644
--- a/templates/protocols/bgp/node.tag/aggregate-address/node.tag/as-set/node.def
+++ b/templates/protocols/bgp/node.tag/aggregate-address/node.tag/as-set/node.def
@@ -1 +1 @@
-help: Generate AS set path information
+help: generate AS-set path information for this aggregate
diff --git a/templates/protocols/bgp/node.tag/aggregate-address/node.tag/summary-only/node.def b/templates/protocols/bgp/node.tag/aggregate-address/node.tag/summary-only/node.def
index 4d8a96b2..f2e04595 100644
--- a/templates/protocols/bgp/node.tag/aggregate-address/node.tag/summary-only/node.def
+++ b/templates/protocols/bgp/node.tag/aggregate-address/node.tag/summary-only/node.def
@@ -1 +1 @@
-help: Filter more specific routes from updates
+help: announce the aggregate summary network only
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.def b/templates/protocols/bgp/node.tag/neighbor/node.def
index 4950c664..6630aaf4 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.def
@@ -1,9 +1,10 @@
 tag:
 type: txt
-help: Specify neighbor router
+help: configure a BGP neighbor 
+comp_help: \1  <x.x.x.x>\tBGP neighbor IP address
 syntax:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-peer-name $VAR(@)"
-update:expression: "if [ -n \"`echo $VAR(@) | sed 's/[0-9]\\{1,3\\}.[0-9]\\{1,3\\}.[0-9]\\{1,3\\}.[0-9]\\{1,3\\}//'`\" ]; then \
-           ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../@)\" -c \"neighbor $VAR(@) peer-group\" ; \
-         fi ; "
-delete:expression: "/opt/vyatta/sbin/vyatta-bgp.pl --check-peer-groups --peergroup $VAR(@) --as $VAR(../@); \
-         ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../@)\" -c \"no neighbor $VAR(@) \" "
+update:  if [ -n "`echo $VAR(@) | sed 's/[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}//'`" ]; then 
+           ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../@)" -c "neighbor $VAR(@) peer-group" ; 
+         fi ; 
+delete:  /opt/vyatta/sbin/vyatta-bgp.pl --check-peer-groups --peergroup $VAR(@) --as $VAR(../@); 
+         ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../@)" -c "no neighbor $VAR(@)"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/advertisement-interval/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/advertisement-interval/node.def
index fdce27db..da1edd2e 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/advertisement-interval/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/advertisement-interval/node.def
@@ -1,14 +1,15 @@
 type: u32
-help: Minimum interval between sending BGP routing updates
+help: set the minimum interval between sending BGP routing updates
+comp_help: \1  <0-600>\tadvertisement interval in seconds
 syntax:expression: $VAR(@) >= 0 && $VAR(@) <= 600; "must be between 0 and 600"
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) advertisement-interval $VAR(@)\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) advertisement-interval\" "
+update:  if [ -n "$VAR(../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../peer-group/@)"; 
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	   -c "neighbor $VAR(../@) $peer" \
+           -c "neighbor $VAR(../@) advertisement-interval $VAR(@)"
+delete:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+            -c "no neighbor $VAR(../@) advertisement-interval"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/allowas-in/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/allowas-in/node.def
index 6c1ab4a5..04a1b0fb 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/allowas-in/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/allowas-in/node.def
@@ -1,17 +1,17 @@
-help: Accept as-path with my AS present in it.
+help: accept a route that contains an as-path with the local AS present in it
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-delete:expression: "touch /tmp/bgp-neighbor-$VAR(../@)-allowas-in.$PPID"
-end:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-         -c \"no neighbor $VAR(../@) allowas-in \"; \
-      if [ -f \"/tmp/bgp-neighbor-$VAR(../@)-allowas-in.$PPID\" ]; then \
-        rm -rf /tmp/bgp-neighbor-$VAR(../@)-allowas-in.$PPID; \
-      else \
-        if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-        else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-        fi; \
-        ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) allowas-in $VAR(./number/@)\"; \
-      fi; "
+delete: touch /tmp/bgp-neighbor-$VAR(../@)-allowas-in.$PPID
+end:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+         -c "no neighbor $VAR(../@) allowas-in "; 
+      if [ -f "/tmp/bgp-neighbor-$VAR(../@)-allowas-in.$PPID" ]; then 
+        rm -rf /tmp/bgp-neighbor-$VAR(../@)-allowas-in.$PPID; 
+      else 
+        if [ -n "$VAR(../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../remote-as/@)"; 
+        else 
+           peer="peer-group $VAR(../peer-group/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	  -c "neighbor $VAR(../@) $peer" \
+          -c "neighbor $VAR(../@) allowas-in $VAR(./number/@)"; 
+      fi; 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/allowas-in/number/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/allowas-in/number/node.def
index 4efe3d54..30b3922a 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/allowas-in/number/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/allowas-in/number/node.def
@@ -1,4 +1,5 @@
 type: u32
-help: Number of occurrences of AS number
+help: number of occurrences of AS number
+comp_help: \1  <1-10>\tnumber of times AS is allowed in path
 syntax:expression: $VAR(@) >= 1 && $VAR(@) <= 10; "allowas-in number must be between 1 and 10"
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../../@) --neighbor $VAR(../../@)"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/as-path/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/as-path/node.def
index 19e19fcf..2967aec6 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/as-path/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/as-path/node.def
@@ -1 +1 @@
-help: AS path attribute
+help: send AS path unchanged
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/med/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/med/node.def
index a5a7ae78..28997ace 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/med/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/med/node.def
@@ -1 +1 @@
-help: Multi-exit discriminator attribute
+help: send multi-exit discriminator unchanged
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/next-hop/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/next-hop/node.def
index 7c6aa538..3d2429bc 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/next-hop/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/next-hop/node.def
@@ -1 +1 @@
-help: Nexthop attribute
+help: send nexthop unchanged
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/node.def
index 936286c5..3bef572f 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/node.def
@@ -1,27 +1,27 @@
-help: BGP attribute is propagated unchanged to this neighbor
+help: set whether BGP attributes are sent unchanged to this neighbor
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-commit:expression: $VAR(../peer-group/) == ""; "You can't set attribute-unchanged for neighbor $VAR(../@) in peer-group $VAR(../peer-group/@)"
-delete:expression: "touch /tmp/bgp-neighbor-$VAR(../@)-attribute-unchanged.$PPID"
-end:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-        -c \"no neighbor $VAR(../@) attribute-unchanged \"; \
-      if [ -f \"/tmp/bgp-neighbor-$VAR(../@)-attribute-unchanged.$PPID\" ]; then \
-        rm -rf /tmp/bgp-neighbor-$VAR(../@)-attribute-unchanged.$PPID; \
-      else \
-        if [ -n \"$VAR(./as-path/@)\" ]; then \
-          cond=\"as-path \" ; \
-        fi ; \
-        if [ -n \"$VAR(./med/@)\" ]; then \
-          cond=\"$cond med \" ; \
-        fi ; \
-        if [ -n \"$VAR(./next-hop/@)\" ]; then \
-          cond=\"$cond next-hop \" ; \
-        fi ; \
-	if [ -n \"$VAR(../remote-as/@)\" ]; then \
-          peer=\"remote-as $VAR(../remote-as/@)\"; \
-        else \
-          peer=\"peer-group $VAR(../peer-group/@)\"; \
-        fi; \
-        ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) attribute-unchanged $cond\"; \
-      fi; "
+commit:expression: $VAR(../peer-group/) == ""; "protocols bgp $VAR(../../@) neighbor $VAR(../@): you can't set attribute-unchanged for a neighbor in a peer-group"
+delete: touch /tmp/bgp-neighbor-$VAR(../@)-attribute-unchanged.$PPID
+end:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+        -c "no neighbor $VAR(../@) attribute-unchanged "; 
+      if [ -f "/tmp/bgp-neighbor-$VAR(../@)-attribute-unchanged.$PPID" ]; then 
+        rm -rf /tmp/bgp-neighbor-$VAR(../@)-attribute-unchanged.$PPID; 
+      else 
+        if [ -n "$VAR(./as-path/@)" ]; then 
+          cond="as-path " ; 
+        fi ; 
+        if [ -n "$VAR(./med/@)" ]; then 
+          cond="$cond med " ; 
+        fi ; 
+        if [ -n "$VAR(./next-hop/@)" ]; then 
+          cond="$cond next-hop " ; 
+        fi ; 
+	if [ -n "$VAR(../remote-as/@)" ]; then 
+          peer="remote-as $VAR(../remote-as/@)"; 
+        else 
+          peer="peer-group $VAR(../peer-group/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	  -c "neighbor $VAR(../@) $peer" \
+          -c "neighbor $VAR(../@) attribute-unchanged $cond"; 
+      fi; 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/dynamic/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/dynamic/node.def
index 8c285c3d..d5dbb16f 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/dynamic/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/dynamic/node.def
@@ -1,13 +1,13 @@
-help: Advertise dynamic capability to this neighbor
+help: advertise dynamic capability to this neighbor
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../../@) --neighbor $VAR(../../@)"
-update:expression: "if [ -n \"$VAR(../../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-	  -c \"neighbor $VAR(../../@) $peer\" \
-          -c \"neighbor $VAR(../../@) capability dynamic\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-          -c \"no neighbor $VAR(../../@) capability dynamic\" "
+update:  if [ -n "$VAR(../../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../../peer-group/@)"; 
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+	   -c "neighbor $VAR(../../@) $peer" \
+           -c "neighbor $VAR(../../@) capability dynamic"
+delete:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+           -c "no neighbor $VAR(../../@) capability dynamic" 
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/node.def
new file mode 100644
index 00000000..3d0947e6
--- /dev/null
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/node.def
@@ -0,0 +1 @@
+help: advertise capabilities to this neighbor
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/orf/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/orf/node.def
index 9fb78194..9ddbf8e7 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/orf/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/orf/node.def
@@ -1 +1 @@
-help: Advertise ORF capability to the peer
+help: advertise ORF capability to this neighbor
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/orf/prefix-list/receive/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/orf/prefix-list/receive/node.def
index 70f13129..f384b6a5 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/orf/prefix-list/receive/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/orf/prefix-list/receive/node.def
@@ -1,14 +1,14 @@
-help: Capability to RECEIVE the ORF to this neighbor
+help: configure the capability to receive the ORF 
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../../../../@) --neighbor $VAR(../../../../@)"
 commit:expression: $VAR(../../../../peer-group/) == ""; "You can't set orf capability receive for neighbor $VAR(../../../../@) in peer-group $VAR(../../../../peer-group/@)"
-update:expression: "if [ -n \"$VAR(../../../../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../../../../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../../../../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../../../@)\" \
-	  -c \"neighbor $VAR(../../../../@) $peer\" \
-          -c \"neighbor $VAR(../../../../@) capability orf prefix-list receive\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../../../../@)\" \
-          -c \"no neighbor $VAR(../../../../@) capability orf prefix-list receive\" "
+update:  if [ -n "$VAR(../../../../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../../../../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../../../../peer-group/@)\"; \
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../../../@)" \
+	   -c "neighbor $VAR(../../../../@) $peer" \
+           -c "neighbor $VAR(../../../../@) capability orf prefix-list receive"
+delete:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../../../../@)" \
+           -c "no neighbor $VAR(../../../../@) capability orf prefix-list receive"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/orf/prefix-list/send/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/orf/prefix-list/send/node.def
index 13b1cf40..91b9dbf7 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/orf/prefix-list/send/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/capability/orf/prefix-list/send/node.def
@@ -1,4 +1,4 @@
-help: Capability to SEND the ORF to this neighbor
+help: configure the capability to send the ORF
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../../../../@) --neighbor $VAR(../../../../@)"
 commit:expression: $VAR(../../../../peer-group/) == ""; "You can't set capability orf send for neighbor $VAR(../../../../@) in peer-group $VAR(../../../../peer-group/@)"
 update:expression: "if [ -n \"$VAR(../../../../remote-as/@)\" ]; then \
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/default-originate/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/default-originate/node.def
index 8ea71208..99398a94 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/default-originate/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/default-originate/node.def
@@ -1,22 +1,22 @@
-help: Originate default route to this neighbor
+help: send default route to this neighbor
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-commit:expression: $VAR(../peer-group/) == ""; "You can't set default-originate for neighbor $VAR(../@) in peer-group $VAR(../peer-group/@)"
-delete:expression: "touch /tmp/bgp-neighbor-$VAR(../@)-default-originate.$PPID"
-end:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-        -c \"no neighbor $VAR(../@) default-originate \"; \
-      if [ -f \"/tmp/bgp-neighbor-$VAR(../@)-default-originate.$PPID\" ]; then \
-        rm -rf /tmp/bgp-neighbor-$VAR(../@)-default-originate.$PPID; \
-      else \
-        if [ -n \"$VAR(./route-map/@)\" ]; then \
-          cond=\"route-map $VAR(./route-map/@) \" ; \
-        fi ; \
-	if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-        ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) default-originate $cond\"; \
-      fi; "
+commit:expression: $VAR(../peer-group/) == ""; "protocold bgp $VAR(../../@) neighbor $VAR(../@): you can't set default-originate for a neighbor in a peer-group"
+delete: touch /tmp/bgp-neighbor-$VAR(../@)-default-originate.$PPID
+end:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+         -c "no neighbor $VAR(../@) default-originate "; 
+      if [ -f "/tmp/bgp-neighbor-$VAR(../@)-default-originate.$PPID" ]; then 
+        rm -rf /tmp/bgp-neighbor-$VAR(../@)-default-originate.$PPID; 
+      else 
+        if [ -n "$VAR(./route-map/@)" ]; then 
+          cond="route-map $VAR(./route-map/@) " ; 
+        fi ; 
+	if [ -n "$VAR(../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../peer-group/@)"; 
+         fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	   -c "neighbor $VAR(../@) $peer" \
+           -c "neighbor $VAR(../@) default-originate $cond"; \
+      fi; 
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/default-originate/route-map/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/default-originate/route-map/node.def
index dd3cc34e..0379b4e4 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/default-originate/route-map/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/default-originate/route-map/node.def
@@ -1,4 +1,4 @@
 type: txt
-help: Route-map to specify criteria to originate default
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" " ; "route-map $VAR(@) doesn't exist"
-commit:expression: $VAR(../../peer-group/) == ""; "You can't set a default-originate route-map for neighbor $VAR(../../@) in peer-group $VAR(../../peer-group/@)"
+help: set the route-map to specify criteria of the default
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" " ; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@) default-originate: route-map $VAR(@) doesn't exist"
+commit:expression: $VAR(../../peer-group/) == ""; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@): you can't set default-originate for a neighbor in a peer-group"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/description/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/description/node.def
index 7111130e..6ad2f3a0 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/description/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/description/node.def
@@ -1,2 +1,2 @@
 type: txt
-help: Neighbor specific description
+help: set a description for this neighbor
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-capability-negotiation/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-capability-negotiation/node.def
index 9f90c59e..37c1892e 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-capability-negotiation/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-capability-negotiation/node.def
@@ -1,13 +1,13 @@
-help: Do not perform capability negotiation
+help: do not perform capability negotiation with this neighbor
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
- 	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) dont-capability-negotiate \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) dont-capability-negotiate \" "
+update:  if [ -n "$VAR(../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../peer-group/@)"; 
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+ 	   -c "neighbor $VAR(../@) $peer" \
+           -c "neighbor $VAR(../@) dont-capability-negotiate "
+delete:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "no neighbor $VAR(../@) dont-capability-negotiate"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-connected-check/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-connected-check/node.def
index a0df6de1..3afa5bff 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-connected-check/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-connected-check/node.def
@@ -1,13 +1,13 @@
-help: One hop distant EBGP peer using loopback address
+help: disable check to see if EBGP peer's address is a connected route
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) disable-connected-check\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) disable-connected-check \" "
+update:  if [ -n "$VAR(../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../peer-group/@)"; 
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	   -c "neighbor $VAR(../@) $peer" \
+           -c "neighbor $VAR(../@) disable-connected-check"
+delete:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "no neighbor $VAR(../@) disable-connected-check"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-send-community/extended/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-send-community/extended/node.def
index 02414ea2..c960d316 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-send-community/extended/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-send-community/extended/node.def
@@ -1,14 +1,14 @@
-help: Do not send extended community attributes
+help: do not send extended community attributes to this neighbor
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../../@) --neighbor $VAR(../../@)"
-commit:expression: $VAR(../../peer-group/) == ""; "You can't set no-send-community for neighbor $VAR(../../@) in peer-group $VAR(../../peer-group/@)"
-update:expression: "if [ -n \"$VAR(../../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-	  -c \"neighbor $VAR(../../@) $peer\" \
-          -c \"no neighbor $VAR(../../@) send-community extended\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-          -c \"neighbor $VAR(../../@) send-community extended\" "
+commit:expression: $VAR(../../peer-group/) == ""; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@): you can't set disable-send-community for a neighbor in a peer-group"
+update:  if [ -n "$VAR(../../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../../peer-group/@)"; 
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+	   -c "neighbor $VAR(../../@) $peer" \
+           -c "no neighbor $VAR(../../@) send-community extended"
+delete:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+           -c "neighbor $VAR(../../@) send-community extended"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-send-community/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-send-community/node.def
index 563f3494..5fb559c0 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-send-community/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-send-community/node.def
@@ -1,2 +1,2 @@
-help: Do not send community attributes to this neighbor
-commit:expression: ($VAR(./extended/) != "") || ($VAR(./standard/) != ""); "You must specify the type of community."
+help: do not send community attributes to this neighbor
+commit:expression: ($VAR(./extended/) != "") || ($VAR(./standard/) != ""); "protocols bgp $(../../@) neighbor $(../@): you must specify the type of community"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-send-community/standard/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-send-community/standard/node.def
index 8d2c491b..7b9219b4 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-send-community/standard/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/disable-send-community/standard/node.def
@@ -1,13 +1,14 @@
-help: Do not send standard community attributes
+help: do not send standard community attributes to this neighbor
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../../@) --neighbor $VAR(../../@)"
-update:expression: "if [ -n \"$VAR(../../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-	  -c \"neighbor $VAR(../../@) $peer\" \
-          -c \"no neighbor $VAR(../../@) send-community standard\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-          -c \"neighbor $VAR(../../@) send-community standard\" "
+commit:expression: $VAR(../../peer-group/) == ""; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@): you can't set disable-send-community for a neighbor in a peer-group"
+update:  if [ -n "$VAR(../../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../../peer-group/@)"; 
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+	   -c "neighbor $VAR(../../@) $peer" \
+           -c "no neighbor $VAR(../../@) send-community standard"
+delete:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+           -c "neighbor $VAR(../../@) send-community standard"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/distribute-list/export/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/distribute-list/export/node.def
index af849ee4..a85ca3f1 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/distribute-list/export/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/distribute-list/export/node.def
@@ -1,16 +1,18 @@
 type: u32
-help: Filter outgoing updates
+help: set an access-list to filter outgoing route updates to this neighbor
+comp_help: \1  <1-65535>\taccess-list number
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../../@) --neighbor $VAR(../../@)"
-commit:expression: $VAR(../../peer-group/) == ""; "You can't set a distribute-list for neighbor $VAR(../../@) in peer-group $VAR(../../peer-group/@)"
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy access-list $VAR(@)\" ";"access-list $VAR(@) doesn't exist"
-update:expression: "if [ -n \"$VAR(../../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-	  -c \"neighbor $VAR(../../@) $peer\" \
-          -c \"neighbor $VAR(../../@) distribute-list $VAR(@) out\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-          -c \"no neighbor $VAR(../../@) distribute-list $VAR(@) out\" "
+commit:expression: $VAR(../../peer-group/) == ""; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@): you can't set a distribute-list for a neighbor in a peer-group"
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy access-list $VAR(@)\" ";"protocols bgp $VAR(../../../@) neighbor $VAR(../../@) export: access-list $VAR(@) doesn't exist"
+commit:expression: $VAR(../../prefix-list/export/) == ""; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@) distribute-list export: you can't set both a prefix-list and a distribute list"
+update:  if [ -n "$VAR(../../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../../peer-group/@)"; 
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+	   -c "neighbor $VAR(../../@) $peer" \
+           -c "neighbor $VAR(../../@) distribute-list $VAR(@) out"
+delete:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+          -c "no neighbor $VAR(../../@) distribute-list $VAR(@) out"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/distribute-list/import/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/distribute-list/import/node.def
index 497830f6..dcd5c569 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/distribute-list/import/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/distribute-list/import/node.def
@@ -1,16 +1,18 @@
 type: u32
-help: Filter incoming updates
+help: set an access-list to filter incoming route updates from this neighbor
+comp_help: \1  <1-65535>\taccess-list number
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../../@) --neighbor $VAR(../../@)"
-commit:expression: $VAR(../../peer-group/) == ""; "You can't set a distribute-list for neighbor $VAR(../../@) in peer-group $VAR(../../peer-group/@)"
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy access-list $VAR(@)\" ";"access-list $VAR(@) doesn't exist"
-update:expression: "if [ -n \"$VAR(../../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-	  -c \"neighbor $VAR(../../@) $peer\" \
-          -c \"neighbor $VAR(../../@) distribute-list $VAR(@) in\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-          -c \"no neighbor $VAR(../../@) distribute-list $VAR(@) in\" "
+commit:expression: $VAR(../../peer-group/) == ""; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@): you can't set a distribute-list for a neighbor in a peer-group"
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy access-list $VAR(@)\" ";"protocols bgp $VAR(../../../@) neighbor $VAR(../../@) import: access-list $VAR(@) doesn't exist"
+commit:expression: $VAR(../../prefix-list/import/) == ""; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@) distribute-list import: you can't set both a prefix-list and a distribute list"
+update:  if [ -n "$VAR(../../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../../peer-group/@)"; 
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+	   -c "neighbor $VAR(../../@) $peer" \
+           -c "neighbor $VAR(../../@) distribute-list $VAR(@) in"
+delete:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+          -c "no neighbor $VAR(../../@) distribute-list $VAR(@) in"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/distribute-list/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/distribute-list/node.def
index 60273382..fbc92e31 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/distribute-list/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/distribute-list/node.def
@@ -1 +1 @@
-help: Filter updates to/from this neighbor
+help: configure an access-list to filter route updates to/from this neighbor
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/ebgp-multihop/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/ebgp-multihop/node.def
index 74478188..9b7497b8 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/ebgp-multihop/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/ebgp-multihop/node.def
@@ -1,15 +1,16 @@
 type: u32
-help: Allow EBGP neighbors not on directly connected networks
+help: allow this EBGP neighbor to not be on a directly connected network
+comp_help: \1  <1-255>\tnumber of hops 
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
 syntax:expression: $VAR(@) >=1 && $VAR(@) <= 255; "ebgp-multihop must be between 1 and 255"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) ebgp-multihop $VAR(@)\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) ebgp-multihop \" "
+update:  if [ -n "$VAR(../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../peer-group/@)";
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	   -c "neighbor $VAR(../@) $peer" \
+           -c "neighbor $VAR(../@) ebgp-multihop $VAR(@)"
+delete:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "no neighbor $VAR(../@) ebgp-multihop"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/enforce-multihop/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/enforce-multihop/node.def
deleted file mode 100644
index 63365ab1..00000000
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/enforce-multihop/node.def
+++ /dev/null
@@ -1,13 +0,0 @@
-help: Enforce EBGP neighbors perform multihop
-commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) enforce-multihop \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) enforce-multihop \" "
-
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/filter-list/export/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/filter-list/export/node.def
index 1848b34c..776c9fe5 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/filter-list/export/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/filter-list/export/node.def
@@ -1,16 +1,17 @@
 type: txt
-help: Filter outgoing updates
+help: set an as-path-list to filter outgoing route updates to this neighbor
+comp_help: \1  <txt>\t\tas-path-list name
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../../@) --neighbor $VAR(../../@)"
-commit:expression: $VAR(../../peer-group/) == ""; "You can't set a filter-list for neighbor $VAR(../../@) in peer-group $VAR(../../peer-group/@)"
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy as-path-list $VAR(@)\" ";"as-path-list $VAR(@) doesn't exist"
-update:expression: "if [ -n \"$VAR(../../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-	  -c \"neighbor $VAR(../../@) $peer\" \
-          -c \"neighbor $VAR(../../@) filter-list $VAR(@) out\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-          -c \"no neighbor $VAR(../../@) filter-list $VAR(@) out\" "
+commit:expression: $VAR(../../peer-group/) == ""; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@): you can't set a filter-list for a neighbor in peer-group"
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy as-path-list $VAR(@)\" ";"protocols bgp $VAR(../../../@) neighbor $VAR(../../@) filter-list export: as-path-list $VAR(@) doesn't exist"
+update:  if [ -n "$VAR(../../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../../peer-group/@)"; 
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+	    -c "neighbor $VAR(../../@) $peer" \
+            -c "neighbor $VAR(../../@) filter-list $VAR(@) out"
+delete:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+            -c "no neighbor $VAR(../../@) filter-list $VAR(@) out"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/filter-list/import/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/filter-list/import/node.def
index 10f09440..b0575a87 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/filter-list/import/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/filter-list/import/node.def
@@ -1,16 +1,17 @@
 type: txt
-help: Filter incoming updates based on AS path
+help: set an as-path-list to filter incoming route updates from this neighbor
+comp_help: \1  <txt>\t\tas-path-list name
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../../@) --neighbor $VAR(../../@)"
-commit:expression: $VAR(../../peer-group/) == ""; "You can't set a filter-list for neighbor $VAR(../../@) in peer-group $VAR(../../peer-group/@)"
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy as-path-list $VAR(@)\" ";"as-path-list $VAR(@) doesn't exist"
-update:expression: "if [ -n \"$VAR(../../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-	  -c \"neighbor $VAR(../../@) $peer\" \
-          -c \"neighbor $VAR(../../@) filter-list $VAR(@) in\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-          -c \"no neighbor $VAR(../../@) filter-list $VAR(@) in\" "
+commit:expression: $VAR(../../peer-group/) == ""; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@): you can't set a filter-list for a neighbor in peer-group"
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy as-path-list $VAR(@)\" ";"protocols bgp $VAR(../../../@) neighbor $VAR(../../@) filter-list import: as-path-list $VAR(@) doesn't exist"
+update:  if [ -n "$VAR(../../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../../peer-group/@)"; 
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+	   -c "neighbor $VAR(../../@) $peer" \
+           -c "neighbor $VAR(../../@) filter-list $VAR(@) in"
+delete:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+           -c "no neighbor $VAR(../../@) filter-list $VAR(@) in"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/filter-list/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/filter-list/node.def
index b0f70316..100d58fb 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/filter-list/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/filter-list/node.def
@@ -1 +1 @@
-help: Establish BGP filters
+help: configure an as-path-list to filter route updates to/from this neighbor
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/interface/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/interface/node.def
deleted file mode 100644
index af446b72..00000000
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/interface/node.def
+++ /dev/null
@@ -1,18 +0,0 @@
-type: txt
-help: Interface name
-commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-syntax:expression: exec " \
-        if [ -z \"`ip addr | grep $VAR(@) `\" ]; then \
-          echo $VAR(@) doesn\\'t exist on this system ; \
-          exit 1 ; \
-        fi ; "
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) interface $VAR(@)\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) interface $VAR(@)\" "
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/local-as/local-as/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/local-as/local-as/node.def
index ce97c629..6a7a1f87 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/local-as/local-as/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/local-as/local-as/node.def
@@ -1,6 +1,7 @@
 type: u32
-help: Local AS number
-commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../../@) --neighbor $VAR(../../@)"
-commit:expression: $VAR(../peer-group/) == ""; "You can't set a local-as for neighbor $VAR(../@) in peer-group $VAR(../peer-group/@)"
+help: set the local AS number
+comp_help: \1  <1-4294967294>\tlocal AS number
 syntax:expression: $VAR(@) >=1 && $VAR(@) <= 4294967294; "local-as must be between 1 and 4294967294"
 syntax:expression: $VAR(@) != $VAR(../../../@); "Cannot have local-as same as BGP AS number"
+commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../../@) --neighbor $VAR(../../@)"
+commit:expression: $VAR(../peer-group/) == ""; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@): you can't set local-as for a neighbor in a peer-group"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/local-as/no-prepend/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/local-as/no-prepend/node.def
index 5270b67f..8f03c17b 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/local-as/no-prepend/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/local-as/no-prepend/node.def
@@ -1 +1 @@
-help: Do not prepend local-as to updates from EBGP peers
+help: do not prepend local-as to updates from EBGP peers
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/local-as/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/local-as/node.def
index 3ad21f8a..86ca9f5b 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/local-as/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/local-as/node.def
@@ -1,25 +1,32 @@
-help: Specify a local-as number
+help: set a different AS number to use with this neighbor
+syntax:expression: $VAR(./local-as/@) >= 1 && $VAR(./local-as/@) <= 4294967294; "AS number must be between 1 and 4294967294"
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-commit:expression: $VAR(../peer-group/) == ""; "You can't set a local-as for neighbor $VAR(../../@) in peer-group $VAR(../../peer-group/@)"
-delete:expression: "touch /tmp/bgp-neighbor-$VAR(../@)-local-as.$PPID"
-end:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-        -c \"no neighbor $VAR(../@) local-as \"; \
-      if [ -f \"/tmp/bgp-neighbor-$VAR(../@)-local-as.$PPID\" ]; then \
-        rm -rf /tmp/bgp-neighbor-$VAR(../@)-local-as.$PPID; \
-      else \
-        if [ -z \"$VAR(./local-as/@)\" ]; then \
-          echo You must specify local-as local-as ; \
-          exit 1 ; \
-        fi ; \
-        if [ -n \"$VAR(./no-prepend/@)\" ]; then \
-          cond=\"no-prepend \" ; \
-        fi ; \
-	if [ -n \"$VAR(../remote-as/@)\" ]; then \
-          peer=\"remote-as $VAR(../remote-as/@)\"; \
-        else \
-          peer=\"peer-group $VAR(../peer-group/@)\"; \
-        fi; \
-        ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) local-as $VAR(./local-as/@) $cond \"; \
-      fi; "
+commit:expression: $VAR(./local-as/@) != $VAR(../../@); "protocols bgp $VAR(../../@) neighbor $VAR(../@) local-as: you can't set a different local-as for iBGP neighbors"
+commit:expression: $VAR(../peer-group/) == ""; "protocols bgp $VAR(../../@) neighbor $VAR(../@) local-as: you can't set local-as for a neighbor in a peer-group"
+delete: touch /tmp/bgp-neighbor-$VAR(../@)-local-as.$PPID
+end:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+        -c "no neighbor $VAR(../@) local-as "; 
+      if [ -f "/tmp/bgp-neighbor-$VAR(../@)-local-as.$PPID" ]; then 
+        rm -rf /tmp/bgp-neighbor-$VAR(../@)-local-as.$PPID; 
+      else 
+        if [ -z "$VAR(./local-as/@)" ]; then 
+          echo protocols bgp $VAR(../../@) neighbor $VAR(../@) local-as: you must specify local-as local-as ; 
+          exit 1 ; 
+        fi ; 
+        ## uncomment when 2525 is fixed
+        #if [ -n "$VAR(./no-prepend/@)" ]; then
+        #  cond="no-prepend " ;
+        #fi ;
+        ${vyatta_sbindir}/vyatta-check-typeless-node.pl "protocols bgp $VAR(../../@) neighbor $VAR(../@) local-as no-prepend";
+        if [ $? -eq 0 ]; then
+          cond="no-prepend ";
+        fi ;
+	if [ -n "$VAR(../remote-as/@)" ]; then 
+          peer="remote-as $VAR(../remote-as/@)"; 
+        else 
+          peer="peer-group $VAR(../peer-group/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	   -c "neighbor $VAR(../@) $peer" \
+           -c "neighbor $VAR(../@) local-as $VAR(./local-as/@) $cond "; 
+      fi; 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/maximum-prefix/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/maximum-prefix/node.def
index 0d3f920f..78815923 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/maximum-prefix/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/maximum-prefix/node.def
@@ -1,14 +1,15 @@
 type: u32
-help: Maximum number of prefixes to accept from this neighbor
+help: set the maximum number of prefixes to accept from this neighbor
+comp_help: \1  <1-4294967295>\tprefix limit
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) maximum-prefix $VAR(@)\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) maximum-prefix \" "
+update:  if [ -n "$VAR(../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../peer-group/@)"; 
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	   -c "neighbor $VAR(../@) $peer" \
+           -c "neighbor $VAR(../@) maximum-prefix $VAR(@)"
+delete:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "no neighbor $VAR(../@) maximum-prefix"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/nexthop-self/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/nexthop-self/node.def
index 4303ec1b..0eea04fb 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/nexthop-self/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/nexthop-self/node.def
@@ -1,14 +1,14 @@
-help: Disable the next hop calculation for this neighbor
+help: set the nexthop to this router for routes sent to this neighbor
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-commit:expression: $VAR(../peer-group/) == ""; "You can't set next-hop-self for neighbor $VAR(../@) in peer-group $VAR(../peer-group/@)"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) next-hop-self\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) next-hop-self \" "
+commit:expression: $VAR(../peer-group/) == ""; "protocols bgp $VAR(../../@) neighbor $VAR(../@) next-hop-self: you can't set next-hop-self for a neighbor in a peer-group"
+update:  if [ -n "$VAR(../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../peer-group/@)"; 
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	   -c "neighbor $VAR(../@) $peer" \
+           -c "neighbor $VAR(../@) next-hop-self"
+delete:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "no neighbor $VAR(../@) next-hop-self "
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/override-capability/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/override-capability/node.def
index 567441ec..82668b8a 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/override-capability/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/override-capability/node.def
@@ -1,14 +1,14 @@
-help: Override capability negotiation result
+help: ignore capability negotiation with this neighbor
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-commit:expression: $VAR(../strict-capability/) == ""; "You can't set strict-capability and override-capability for neighbor $VAR(../@)"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) override-capability\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) override-capability \" "
+commit:expression: $VAR(../strict-capability/) == ""; "protocols bgp $VAR(../../@) neighbor $VAR(../@) override-capability: you can't set both strict-capability and override-capability"
+update:  if [ -n "$VAR(../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../peer-group/@)"; 
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	   -c "neighbor $VAR(../@) $peer" \
+           -c "neighbor $VAR(../@) override-capability"
+delete:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "no neighbor $VAR(../@) override-capability"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/passive/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/passive/node.def
index 128a7f70..46d787a8 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/passive/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/passive/node.def
@@ -1,13 +1,13 @@
-help: Don't send open messages to this neighbor
+help: don't try to initiate a session with this neighbor
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) passive\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) passive \" "
+update:  if [ -n "$VAR(../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../peer-group/@)"; 
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	   -c "neighbor $VAR(../@) $peer" \
+           -c "neighbor $VAR(../@) passive"
+delete:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "no neighbor $VAR(../@) passive"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/password/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/password/node.def
deleted file mode 100644
index a45f7294..00000000
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/password/node.def
+++ /dev/null
@@ -1,13 +0,0 @@
-type: txt
-help: Specify BGP neighbor password
-commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) password $VAR(@)\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) password\" "
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/peer-group/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/peer-group/node.def
index c1b51fd8..8201f8a0 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/peer-group/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/peer-group/node.def
@@ -4,8 +4,8 @@ syntax:expression: exec "if [ -n \"`echo $VAR(../@) | sed 's/[0-9]\\{1,3\\}.[0-9
                 exit 1; \
               fi; "; "peer-group token may not be specified for a peer-group"
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --peergroup=$VAR(@) --as $VAR(../../@) --neighbor $VAR(../@)"
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"protocols bgp $VAR(../../@) neighbor $VAR(@)\" "; "peer-group $VAR(@) doesn't exist"
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"neighbor $VAR(../@) peer-group $VAR(@)\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) peer-group $VAR(@)\" "
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"protocols bgp $VAR(../../@) neighbor $VAR(@)\" "; "protocols bgp $VAR(../../@) neighbor $VAR(../@) peer-group: peer-group $VAR(@) doesn't exist"
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal\" -c "router bgp $VAR(../../@)" \
+          -c "neighbor $VAR(../@) peer-group $VAR(@)"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "no neighbor $VAR(../@) peer-group $VAR(@)"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/port/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/port/node.def
index 84e8be28..a738b3d4 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/port/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/port/node.def
@@ -1,23 +1,18 @@
 type: u32
-help: Neighbor's BGP port
+help: set the neighbor's BGP port
+comp_help: \1  <1-65535>\tport number
 syntax:expression: $VAR(@) >= 1 && $VAR(@) <= 65535; \
        "port must be between 1 and 65535"
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-
-update:expression: "\
-         if [ -n \"$VAR(../remote-as/@)\" ]; then                    \
-           peer=\"remote-as $VAR(../remote-as/@)\";                  \
-         else                                                        \
-           peer=\"peer-group $VAR(../peer-group/@)\";                \
-         fi;                                                         \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" \
-          -c \"router bgp $VAR(../../@)\"                            \
-	  -c \"neighbor $VAR(../@) $peer\"                           \
-          -c \"neighbor $VAR(../@) port $VAR(@)\" "
-
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr     \
-       -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-       -c \"no neighbor $VAR(../@) port \" "
-
-comp_help: possible completions:
- <1-65535>     Set neighbor's BGP port
+update: if [ -n "$VAR(../remote-as/@)" ]; then                    
+          peer="remote-as $VAR(../remote-as/@)";                  
+        else                                                        
+          peer="peer-group $VAR(../peer-group/@)";                
+        fi;                                                         
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" \
+          -c "router bgp $VAR(../../@)" \
+          -c "neighbor $VAR(../@) $peer" \
+          -c "neighbor $VAR(../@) port $VAR(@)"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr \
+          -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "no neighbor $VAR(../@) port"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/prefix-list/export/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/prefix-list/export/node.def
index 062a6312..e74140f1 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/prefix-list/export/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/prefix-list/export/node.def
@@ -1,16 +1,18 @@
 type: txt
-help: Filter outgoing updates
+help: set a prefix-list to filter outgoing route updates to this neighbor
+comp_help: \1  <txt>\t\tprefix-list name
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../../@) --neighbor $VAR(../../@)"
-commit:expression: $VAR(../../peer-group/) == ""; "You can't set a prefix-list for neighbor $VAR(../../@) in peer-group $VAR(../../peer-group/@)"
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy prefix-list $VAR(@)\" ";"prefix-list $VAR(@) doesn't exist"
-update:expression: "if [ -n \"$VAR(../../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-	  -c \"neighbor $VAR(../../@) $peer\" \
-          -c \"neighbor $VAR(../../@) prefix-list $VAR(@) out\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-          -c \"no neighbor $VAR(../../@) prefix-list $VAR(@) out\" "
+commit:expression: $VAR(../../peer-group/) == ""; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@): you can't set a prefix-list for a neighbor in a peer-group"
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy prefix-list $VAR(@)\" ";"protocols bgp $VAR(../../../@) neighbor $VAR(../../@) prefix-list export: prefix-list $VAR(@) doesn't exist"
+commit:expression: $VAR(../../distribute-list/export/) == ""; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@) prefix-list export: you can't set both a prefix-list and a distribute list"
+update: if [ -n "$VAR(../../remote-as/@)" ]; then 
+          peer="remote-as $VAR(../../remote-as/@)"; 
+        else 
+          peer="peer-group $VAR(../../peer-group/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+	  -c "neighbor $VAR(../../@) $peer" \
+          -c "neighbor $VAR(../../@) prefix-list $VAR(@) out"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+          -c "no neighbor $VAR(../../@) prefix-list $VAR(@) out"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/prefix-list/import/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/prefix-list/import/node.def
index f744b9df..dc6231b9 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/prefix-list/import/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/prefix-list/import/node.def
@@ -1,16 +1,18 @@
 type: txt
-help: Filter incoming updates
+help: set a prefix-list to filter incoming route updates from this neighbor
+comp_help: \1  <txt>\t\tprefix-list name
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../../@) --neighbor $VAR(../../@)"
-commit:expression: $VAR(../../peer-group/) == ""; "You can't set a prefix-list for neighbor $VAR(../../@) in peer-group $VAR(../../peer-group/@)"
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy prefix-list $VAR(@)\" ";"prefix-list $VAR(@) doesn't exist"
-update:expression: "if [ -n \"$VAR(../../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-	  -c \"neighbor $VAR(../../@) $peer\" \
-          -c \"neighbor $VAR(../../@) prefix-list $VAR(@) in\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-          -c \"no neighbor $VAR(../../@) prefix-list $VAR(@) in\" "
+commit:expression: $VAR(../../peer-group/) == ""; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@): you can't set a prefix-list for a neighbor in a peer-group"
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy prefix-list $VAR(@)\" ";"protocols bgp $VAR(../../../@) neighbor $VAR(../../@) prefix-list import: prefix-list $VAR(@) doesn't exist"
+commit:expression: $VAR(../../distribute-list/import/) == ""; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@) prefix-list import: you can't set both a prefix-list and a distribute list"
+update: if [ -n "$VAR(../../remote-as/@)" ]; then 
+          peer="remote-as $VAR(../../remote-as/@)"; 
+        else 
+          peer="peer-group $VAR(../../peer-group/@)"; 
+        fi; 
+	${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+	  -c "neighbor $VAR(../../@) $peer" \
+          -c "neighbor $VAR(../../@) prefix-list $VAR(@) in"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+          -c "no neighbor $VAR(../../@) prefix-list $VAR(@) in"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/prefix-list/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/prefix-list/node.def
index 60273382..c5e93f61 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/prefix-list/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/prefix-list/node.def
@@ -1 +1 @@
-help: Filter updates to/from this neighbor
+help: configure a prefix-list to filter route updates to/from this neighbor
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/remote-as/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/remote-as/node.def
index 9e7e7440..e668c22b 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/remote-as/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/remote-as/node.def
@@ -1,7 +1,8 @@
 type: u32
-help: Specify BGP neighbor ASN
+help: set neighbor BGP AS number
+comp_help: \1  <1-4294967294>\tAS number
 syntax:expression: $VAR(@) >= 1 && $VAR(@) <= 4294967294; "remote-as must be between 1 and 4294967294"
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"neighbor $VAR(../@) remote-as $VAR(@)\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) remote-as $VAR(@)\" "
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "neighbor $VAR(../@) remote-as $VAR(@)"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "no neighbor $VAR(../@) remote-as $VAR(@)"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/remove-private-as/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/remove-private-as/node.def
index 70b5f223..81956352 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/remove-private-as/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/remove-private-as/node.def
@@ -1,14 +1,14 @@
-help: Remove private AS number from outbound updates
+help: remove private AS numbers from AS path in outbound route updates
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-commit:expression: $VAR(../peer-group/) == ""; "You can't set a remove-private-as for neighbor $VAR(../@) in peer-group $VAR(../peer-group/@)"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) remove-private-AS \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) remove-private-AS  \" "
+commit:expression: $VAR(../peer-group/) == ""; "protocols bgp $VAR(../../@) neighbor $VAR(../../@): you can't set remove-private-as for a neighbor in a peer-group"
+update: if [ -n "$VAR(../remote-as/@)" ]; then 
+          peer="remote-as $VAR(../remote-as/@)"; 
+        else 
+          peer="peer-group $VAR(../peer-group/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	  -c "neighbor $VAR(../@) $peer" \
+          -c "neighbor $VAR(../@) remove-private-AS"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "no neighbor $VAR(../@) remove-private-AS"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/route-map/export/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/route-map/export/node.def
index 51268770..7286f430 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/route-map/export/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/route-map/export/node.def
@@ -1,16 +1,17 @@
 type: txt
-help: Route-map to apply to outgoing updates
+help: set a route-map to filter outgoing route updates to this neighbor
+comp_help: \1  <txt>\t\troute-map name
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../../@) --neighbor $VAR(../../@)"
-commit:expression: $VAR(../../peer-group/) == ""; "You can't set a route-map for neighbor $VAR(../../@) in peer-group $VAR(../../peer-group/@)"
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"route-map $VAR(@) doesn't exist"
-update:expression: "if [ -n \"$VAR(../../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-	  -c \"neighbor $VAR(../../@) $peer\" \
-          -c \"neighbor $VAR(../../@) route-map $VAR(@) out\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-          -c \"no neighbor $VAR(../../@) route-map $VAR(@) out\" "
+commit:expression: $VAR(../../peer-group/) == ""; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@): you can't set a route-map for a neighbor in a peer-group"
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"protocols bgp $VAR(../../../@) neighbor $VAR(../../@) export: route-map $VAR(@) doesn't exist"
+update: if [ -n "$VAR(../../remote-as/@)" ]; then 
+          peer="remote-as $VAR(../../remote-as/@)"; 
+        else 
+          peer="peer-group $VAR(../../peer-group/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+	  -c "neighbor $VAR(../../@) $peer" \
+          -c "neighbor $VAR(../../@) route-map $VAR(@) out"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+          -c "no neighbor $VAR(../../@) route-map $VAR(@) out"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/route-map/import/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/route-map/import/node.def
index f59f5e69..d3e7d9f9 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/route-map/import/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/route-map/import/node.def
@@ -1,16 +1,17 @@
 type: txt
-help: Route-map to apply to incoming updates
+help: set a route-map to filter incoming route updates from this neighbor
+comp_help: \1  <txt>\t\troute-map name
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../../@) --neighbor $VAR(../../@)"
-commit:expression: $VAR(../../peer-group/) == ""; "You can't set a route-map for neighbor $VAR(../../@) in peer-group $VAR(../../peer-group/@)"
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"route-map $VAR(@) doesn't exist"
-update:expression: "if [ -n \"$VAR(../../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-	  -c \"neighbor $VAR(../../@) $peer\" \
-          -c \"neighbor $VAR(../../@) route-map $VAR(@) in\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-          -c \"no neighbor $VAR(../../@) route-map $VAR(@) in\" "
+commit:expression: $VAR(../../peer-group/) == ""; "protocols bgp $VAR(../../../@) neighbor $VAR(../../@): you can't set a route-map for a neighbor in a peer-group"
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"protocols bgp $VAR(../../../@) neighbor $VAR(../../@) import: route-map $VAR(@) doesn't exist"
+update: if [ -n "$VAR(../../remote-as/@)" ]; then 
+          peer="remote-as $VAR(../../remote-as/@)"; 
+        else 
+          peer="peer-group $VAR(../../peer-group/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+	  -c "neighbor $VAR(../../@) $peer" \
+          -c "neighbor $VAR(../../@) route-map $VAR(@) in"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+          -c "no neighbor $VAR(../../@) route-map $VAR(@) in"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/route-map/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/route-map/node.def
index 3ad56222..3cfbe71f 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/route-map/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/route-map/node.def
@@ -1 +1 @@
-help: Route-map to apply on updates to/from this neighbor
+help: configure a route-map to filter route updates to/from this neighbor
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/route-reflector-client/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/route-reflector-client/node.def
index 4079aa80..adf849ff 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/route-reflector-client/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/route-reflector-client/node.def
@@ -1,15 +1,15 @@
-help: Configure a neighbor as Route Reflector client
+help: configure neighbor as a route reflector client
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-commit:expression: $VAR(../peer-group/) == ""; "You can't set route-reflector-client for neighbor $VAR(../@) in peer-group $VAR(../peer-group/@)"
-commit:expression: $VAR(../../@) == $VAR(../remote-as/@); "remote-as must equal local-as to be a route-reflector client"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) route-reflector-client \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) route-reflector-client \" "
+commit:expression: $VAR(../peer-group/) == ""; "protocols bgp $VAR(../../@) neighbor $VAR(../@): you can't set route-reflector-client for a neighbor in a peer-group"
+commit:expression: $VAR(../../@) == $VAR(../remote-as/@); "protocols bgp $VAR(../../@) neighbor $VAR(../@) route-reflector-client: remote-as must equal local-as"
+update: if [ -n "$VAR(../remote-as/@)" ]; then 
+          peer="remote-as $VAR(../remote-as/@)"; 
+        else 
+          peer="peer-group $VAR(../peer-group/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	  -c "neighbor $VAR(../@) $peer" \
+          -c "neighbor $VAR(../@) route-reflector-client"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "no neighbor $VAR(../@) route-reflector-client"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/route-server-client/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/route-server-client/node.def
index a1cf1c32..43c90168 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/route-server-client/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/route-server-client/node.def
@@ -1,14 +1,14 @@
-help: Configure a neighbor as Route Server client
+help: configure neighbor as route server client
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-commit:expression: $VAR(../peer-group/) == ""; "You can't set route-server-client for neighbor $VAR(../@) in peer-group $VAR(../peer-group/@)"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) route-server-client \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) route-server-client \" "
+commit:expression: $VAR(../peer-group/) == ""; "protocols bgp $VAR(../../@) neighbor $VAR(../@): you can't set route-server-client for a neighbor in a peer-group"
+update: if [ -n "$VAR(../remote-as/@)" ]; then 
+          peer="remote-as $VAR(../remote-as/@)"; 
+        else 
+          peer="peer-group $VAR(../peer-group/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	  -c "neighbor $VAR(../@) $peer" \
+          -c "neighbor $VAR(../@) route-server-client"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "no neighbor $VAR(../@) route-server-client"
 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/shutdown/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/shutdown/node.def
index 8ddee2cf..fa35aede 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/shutdown/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/shutdown/node.def
@@ -1,12 +1,12 @@
-help: Administratively shut down this neighbor
+help: administratively shut down neighbor
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) shutdown\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) shutdown\" "
+update: if [ -n "$VAR(../remote-as/@)" ]; then 
+          peer="remote-as $VAR(../remote-as/@)"; 
+        else 
+          peer="peer-group $VAR(../peer-group/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	  -c "neighbor $VAR(../@) $peer" \
+          -c "neighbor $VAR(../@) shutdown"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "no neighbor $VAR(../@) shutdown"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/soft-reconfiguration/inbound/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/soft-reconfiguration/inbound/node.def
index 1c4adbcf..2bbd6954 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/soft-reconfiguration/inbound/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/soft-reconfiguration/inbound/node.def
@@ -1,13 +1,12 @@
-help: Allow inbound soft reconfiguration for this neighbor
+help: configure inbound soft reconfiguration for this neighbor
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-update:expression: "if [ -n \"$VAR(../../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-	  -c \"neighbor $VAR(../../@) $peer\" \
-          -c \"neighbor $VAR(../../@) soft-reconfiguration inbound \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-          -c \"no neighbor $VAR(../../@) soft-reconfiguration inbound \" "
-
+update: if [ -n "$VAR(../../remote-as/@)" ]; then 
+          peer="remote-as $VAR(../../remote-as/@)"; 
+        else 
+          peer="peer-group $VAR(../../peer-group/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+	  -c "neighbor $VAR(../../@) $peer" \
+          -c "neighbor $VAR(../../@) soft-reconfiguration inbound"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+          -c "no neighbor $VAR(../../@) soft-reconfiguration inbound"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/soft-reconfiguration/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/soft-reconfiguration/node.def
index 8cf6600b..ae8fd30e 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/soft-reconfiguration/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/soft-reconfiguration/node.def
@@ -1,2 +1,2 @@
-help: Per neighbor soft reconfiguration
-commit:expression: $VAR(./inbound/) != ""; "You must specify the type of soft-reconfiguration"
+help: configure soft reconfiguration for neighbor
+commit:expression: $VAR(./inbound/) != ""; "protocols bgp $VAR(../../@) neighbor $VAR(../@) soft-reconfiguration: you must specify the type of soft-reconfiguration"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/strict-capability-match/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/strict-capability-match/node.def
index 695df262..bd0a211e 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/strict-capability-match/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/strict-capability-match/node.def
@@ -1,13 +1,13 @@
-help: Strict capability negotiation match
+help: enable strict capability negotiation 
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-commit:expression: $VAR(../override-capability/) == ""; "You can't set strict-capability and override-capability for neighbor $VAR(../@)"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) strict-capability-match \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) strict-capability-match \" "
+commit:expression: $VAR(../override-capability/) == ""; "protocols bgp $VAR(../../@) neighbor $VAR(../@) strict-capability-match: you can't set both strict-capability and override-capability"
+update: if [ -n "$VAR(../remote-as/@)" ]; then 
+          peer="remote-as $VAR(../remote-as/@)"; 
+        else 
+          peer="peer-group $VAR(../peer-group/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	  -c "neighbor $VAR(../@) $peer" \
+          -c "neighbor $VAR(../@) strict-capability-match"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "no neighbor $VAR(../@) strict-capability-match "
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/timers/connect/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/timers/connect/node.def
index d2e2533d..3ccfdd4c 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/timers/connect/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/timers/connect/node.def
@@ -1,3 +1,5 @@
 type: u32
-help: BGP connect timer
+help: set the BGP connect timer for this neighbor
+comp_help: \1  <1-65535>\tconnect timer in seconds
+  0\t\tdisable connect timer
 syntax:expression: $VAR(@) >=0 && $VAR(@) <= 65535; "BGP connect timer must be between 0 and 65535"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/timers/holdtime/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/timers/holdtime/node.def
index 06ebfd09..07c921af 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/timers/holdtime/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/timers/holdtime/node.def
@@ -1,3 +1,5 @@
 type: u32
-help: Holdtime interval
+help: set the BGP hold timer for this neighbor
+comp_help: \1  <1-65535>\thold timer in seconds
+  0\t\tdisable hold timer
 syntax:expression: $VAR(@) == 0 || ($VAR(@) >= 4 && $VAR(@) <= 65535); "Holdtime interval must be 0 or between 4 and 65535"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/timers/keepalive/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/timers/keepalive/node.def
index 3d68ba94..33314049 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/timers/keepalive/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/timers/keepalive/node.def
@@ -1,3 +1,4 @@
 type: u32
-help: Keepalive interval
+help: set the BGP keepalive interval for this neighbor
+comp_help: \1  <1-65535>\tkeepalive interval in seconds
 syntax:expression: $VAR(@) >= 1 && $VAR(@) <= 65535; "Keepalive interval must be between 1 and 65535"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/timers/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/timers/node.def
index 8515b9dc..c9fbdca8 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/timers/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/timers/node.def
@@ -1,27 +1,27 @@
-help: BGP per neighbor timers
+help: configure neighbor timers
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-commit:expression: $VAR(../peer-group/) == ""; "You can't set timers for neighbor $VAR(../@) in peer-group $VAR(../peer-group/@)"
-delete:expression: "touch /tmp/bgp-neighbor-$VAR(../@)-timers.$PPID"
-end:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-        -c \"no neighbor $VAR(../@) timers \"; \
-      ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-        -c \"no neighbor $VAR(../@) timers connect \"; \
-      if [ -f \"/tmp/bgp-neighbor-$VAR(../@)-timers.$PPID\" ]; then \
-        rm -rf /tmp/bgp-neighbor-$VAR(../@)-timers.$PPID; \
-      else \
-	if [ -n \"$VAR(../remote-as/@)\" ]; then \
-          peer=\"remote-as $VAR(../remote-as/@)\"; \
-        else \
-          peer=\"peer-group $VAR(../peer-group/@)\"; \
-        fi; \
-        if [ -n \"$VAR(./connect/@)\" ]; then \
-          ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	    -c \"neighbor $VAR(../@) $peer\" \
-            -c \"neighbor $VAR(../@) timers connect $VAR(./connect/@)\" ; \
-        fi ; \
-        if [ -n \"$VAR(./keepalive/@)\" ] || [ -n \"$VAR(./holdtime/@)\" ]; then \
-          ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	    -c \"neighbor $VAR(../@) $peer\" \
-            -c \"neighbor $VAR(../@) timers  $VAR(./keepalive/@)  $VAR(./holdtime/@)\"; \
-        fi ; \
-      fi; "
+commit:expression: $VAR(../peer-group/) == ""; "protocols bgp $VAR(../../@) neighbor $VAR(../@): you can't set timers for a neighbor in a peer-group"
+delete: touch /tmp/bgp-neighbor-$VAR(../@)-timers.$PPID
+end: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+        -c "no neighbor $VAR(../@) timers"; 
+     ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+        -c "no neighbor $VAR(../@) timers connect"; 
+     if [ -f "/tmp/bgp-neighbor-$VAR(../@)-timers.$PPID" ]; then 
+       rm -rf /tmp/bgp-neighbor-$VAR(../@)-timers.$PPID; 
+     else 
+       if [ -n "$VAR(../remote-as/@)" ]; then 
+         peer="remote-as $VAR(../remote-as/@)"; 
+       else 
+         peer="peer-group $VAR(../peer-group/@)"; 
+       fi; 
+       if [ -n "$VAR(./connect/@)" ]; then 
+         ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	    -c "neighbor $VAR(../@) $peer" \
+            -c "neighbor $VAR(../@) timers connect $VAR(./connect/@)"; 
+       fi; 
+       if [ -n "$VAR(./keepalive/@)" ] || [ -n "$VAR(./holdtime/@)" ]; then 
+         ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	    -c "neighbor $VAR(../@) $peer" \
+            -c "neighbor $VAR(../@) timers  $VAR(./keepalive/@)  $VAR(./holdtime/@)"; 
+       fi; 
+     fi; 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/unsuppress-map/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/unsuppress-map/node.def
index 9251c28a..0c70489f 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/unsuppress-map/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/unsuppress-map/node.def
@@ -1,15 +1,16 @@
 type: txt
-help: Route-map to selectively unsuppress suppressed routes
+help: set a route-map to selectively unsuppress suppressed routes
+comp_help: \1  <txt>\t\troute-map name
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-commit:expression: $VAR(../peer-group/) == ""; "You can't set an unsuppress-map for neighbor $VAR(../@) in peer-group $VAR(../peer-group/@)"
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"route-map $VAR(@) doesn't exist"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) unsuppress-map $VAR(@)\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) unsuppress-map $VAR(@)\" "
+commit:expression: $VAR(../peer-group/) == ""; "protocols bgp $VAR(../../@) neighbor $VAR(../@): you can't set unsuppress-map for a neighbor in a peer-group"
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"protocols bgp $VAR(../../@) neighbor $VAR(../@): route-map $VAR(@) doesn't exist"
+update: if [ -n "$VAR(../remote-as/@)" ]; then 
+          peer="remote-as $VAR(../remote-as/@)";
+        else 
+          peer="peer-group $VAR(../peer-group/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	  -c "neighbor $VAR(../@) $peer" \
+          -c "neighbor $VAR(../@) unsuppress-map $VAR(@)"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "no neighbor $VAR(../@) unsuppress-map $VAR(@)"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/update-source/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/update-source/node.def
index 2738cc0f..d4476531 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/update-source/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/update-source/node.def
@@ -1,18 +1,19 @@
 type: ipv4
-help: Source of routing updates
+help: set the source IP of routing updates
+comp_help: \1  <x.x.x.x>\tIP address of route source
 syntax:expression: exec " \
         if [ -z \"`ip addr | grep $VAR(@) `\" ]; then \
           echo $VAR(@) doesn\\'t exist on this system ; \
           exit 1 ; \
         fi ; "
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) update-source $VAR(@)\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) update-source\" "
+update: if [ -n "$VAR(../remote-as/@)" ]; then 
+           peer="remote-as $VAR(../remote-as/@)"; 
+         else 
+           peer="peer-group $VAR(../peer-group/@)"; 
+         fi; 
+	 ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	  -c "neighbor $VAR(../@) $peer" \
+          -c "neighbor $VAR(../@) update-source $VAR(@)"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "no neighbor $VAR(../@) update-source"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/weight/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/weight/node.def
index 3ca1bd6c..1d42b0c1 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/weight/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/weight/node.def
@@ -1,14 +1,15 @@
 type: u32
-help: Set default weight for routes from this neighbor
+help: set default weight for routes from this neighbor
+comp_help: \1  <1-65535>\tweight for routes from this neighbor
 syntax:expression: $VAR(@) >= 1 && $VAR(@) <= 65535; "weight must be between 1 and 65535"
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
-update:expression: "if [ -n \"$VAR(../remote-as/@)\" ]; then \
-           peer=\"remote-as $VAR(../remote-as/@)\"; \
-         else \
-           peer=\"peer-group $VAR(../peer-group/@)\"; \
-         fi; \
-	 ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-	  -c \"neighbor $VAR(../@) $peer\" \
-          -c \"neighbor $VAR(../@) weight $VAR(@)\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"no neighbor $VAR(../@) weight $VAR(@)\" "
+update: if [ -n "$VAR(../remote-as/@)" ]; then 
+          peer="remote-as $VAR(../remote-as/@)"; 
+        else 
+          peer="peer-group $VAR(../peer-group/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+	  -c "neighbor $VAR(../@) $peer" \
+          -c "neighbor $VAR(../@) weight $VAR(@)"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "no neighbor $VAR(../@) weight $VAR(@)"
diff --git a/templates/protocols/bgp/node.tag/network/node.def b/templates/protocols/bgp/node.tag/network/node.def
index 3d547a34..6b8a810d 100644
--- a/templates/protocols/bgp/node.tag/network/node.def
+++ b/templates/protocols/bgp/node.tag/network/node.def
@@ -1,14 +1,12 @@
 tag:
 type: ipv4net
-help: Specify a network to announce via BGP
+help: configure a BGP network
+comp_help: \1  <x.x.x.x/x>\tnetwork
 syntax:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --check-prefix-boundry $VAR(@)";
        "Prefix doesn't fall on a natural boundry"
-
 commit:expression: !($VAR(./backdoor/) != "" && $VAR(./route-map/) != "");
        "protocols bgp $VAR(../@) network $VAR(@): May specify route-map or backdoor but not both"
-
 delete: touch /tmp/`echo $VAR(@) | sed 's!/!!'`.$PPID
-
 end: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../@)" -c "no network $VAR(@)";
 
       if [ -f "/tmp/`echo $VAR(@) | sed 's!/!!'`.$PPID" ]; then
diff --git a/templates/protocols/bgp/node.tag/network/node.tag/backdoor/node.def b/templates/protocols/bgp/node.tag/network/node.tag/backdoor/node.def
index b7dc6950..5d4b5731 100644
--- a/templates/protocols/bgp/node.tag/network/node.tag/backdoor/node.def
+++ b/templates/protocols/bgp/node.tag/network/node.tag/backdoor/node.def
@@ -1 +1 @@
-help: Specify a BGP backdoor route
+help: set this network as a backdoor route
diff --git a/templates/protocols/bgp/node.tag/network/node.tag/route-map/node.def b/templates/protocols/bgp/node.tag/network/node.tag/route-map/node.def
index 7a19c2e4..16c2adc6 100644
--- a/templates/protocols/bgp/node.tag/network/node.tag/route-map/node.def
+++ b/templates/protocols/bgp/node.tag/network/node.tag/route-map/node.def
@@ -1,3 +1,4 @@
 type: txt
-help: Route-map to modify the attributes
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"route-map $VAR(@) doesn't exist"
+help: set a route-map to modify route attributes
+comp_help: \1  <txt>\t\troute-map name
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"protocols bgp $VAR(../../@) network $VAR(../@): route-map $VAR(@) doesn't exist"
diff --git a/templates/protocols/bgp/node.tag/parameters/always-compare-med/node.def b/templates/protocols/bgp/node.tag/parameters/always-compare-med/node.def
index 37e251af..e397dc9c 100644
--- a/templates/protocols/bgp/node.tag/parameters/always-compare-med/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/always-compare-med/node.def
@@ -1,5 +1,5 @@
-help: Allow comparing MED from different neighbors
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"bgp always-compare-med\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"no bgp always-compare-med\" "
+help: compare MEDs from different neighbors
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "bgp always-compare-med"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "no bgp always-compare-med"
diff --git a/templates/protocols/bgp/node.tag/parameters/bestpath/as-path/confed/node.def b/templates/protocols/bgp/node.tag/parameters/bestpath/as-path/confed/node.def
index c3ebac90..84dfe043 100644
--- a/templates/protocols/bgp/node.tag/parameters/bestpath/as-path/confed/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/bestpath/as-path/confed/node.def
@@ -1,6 +1,6 @@
-help: Compare path lengths including confederation sets & sequences in selecting a route
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../../@)\" \
-           -c \"bgp bestpath as-path confed \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../../@)\" \
-           -c \"no bgp bestpath as-path confed \" "
+help: compare as-path lengths including confederation sets & sequences 
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../../@)" \
+           -c "bgp bestpath as-path confed"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../../@)" \
+           -c "no bgp bestpath as-path confed "
 
diff --git a/templates/protocols/bgp/node.tag/parameters/bestpath/as-path/ignore/node.def b/templates/protocols/bgp/node.tag/parameters/bestpath/as-path/ignore/node.def
index 7959a950..69ada7a2 100644
--- a/templates/protocols/bgp/node.tag/parameters/bestpath/as-path/ignore/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/bestpath/as-path/ignore/node.def
@@ -1,5 +1,5 @@
-help: Ignore as-path length in selecting a route
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../../@)\" \
-           -c \"bgp bestpath as-path ignore \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../../@)\" \
-           -c \"no bgp bestpath as-path ignore \" "
+help: ignore as-path length in selecting a route
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../../@)" \
+           -c "bgp bestpath as-path ignore"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../../@)" \
+           -c "no bgp bestpath as-path ignore"
diff --git a/templates/protocols/bgp/node.tag/parameters/bestpath/as-path/node.def b/templates/protocols/bgp/node.tag/parameters/bestpath/as-path/node.def
index dda0fc5f..2e84b475 100644
--- a/templates/protocols/bgp/node.tag/parameters/bestpath/as-path/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/bestpath/as-path/node.def
@@ -1 +1 @@
-help: AS-path attribute
+help: set AS-path attribute comparison parameters
diff --git a/templates/protocols/bgp/node.tag/parameters/bestpath/compare-routerid/node.def b/templates/protocols/bgp/node.tag/parameters/bestpath/compare-routerid/node.def
index 2c34a4b6..ed50d705 100644
--- a/templates/protocols/bgp/node.tag/parameters/bestpath/compare-routerid/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/bestpath/compare-routerid/node.def
@@ -1,6 +1,6 @@
-help: Compare router-id for identical EBGP paths
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-           -c \"bgp bestpath compare-routerid \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-           -c \"no bgp bestpath compare-routerid \" "
+help: compare the router-id for identical EBGP paths
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+           -c "bgp bestpath compare-routerid"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+           -c "no bgp bestpath compare-routerid"
 
diff --git a/templates/protocols/bgp/node.tag/parameters/bestpath/med/confed/node.def b/templates/protocols/bgp/node.tag/parameters/bestpath/med/confed/node.def
index ec31b51c..509ee095 100644
--- a/templates/protocols/bgp/node.tag/parameters/bestpath/med/confed/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/bestpath/med/confed/node.def
@@ -1,6 +1,6 @@
-help: Compare MED among confederation paths
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../../@)\" \
-           -c \"bgp bestpath med confed \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../../@)\" \
-           -c \"no bgp bestpath med confed \" "
+help: compare MEDs among confederation paths
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../../@)" \
+           -c "bgp bestpath med confed"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../../@)" \
+           -c "no bgp bestpath med confed"
 
diff --git a/templates/protocols/bgp/node.tag/parameters/bestpath/med/missing-as-worst/node.def b/templates/protocols/bgp/node.tag/parameters/bestpath/med/missing-as-worst/node.def
index 9eb5b558..9ff63ae8 100644
--- a/templates/protocols/bgp/node.tag/parameters/bestpath/med/missing-as-worst/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/bestpath/med/missing-as-worst/node.def
@@ -1,6 +1,6 @@
-help: Treat missing MED as the least preferred one
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../../@)\" \
-           -c \"bgp bestpath med missing-as-worst \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../../@)\" \
-           -c \"no bgp bestpath med missing-as-worst \" "
+help: treat a route missing a MED as the least preferred one
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../../@)" \
+           -c "bgp bestpath med missing-as-worst"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../../@)" \
+           -c "no bgp bestpath med missing-as-worst"
 
diff --git a/templates/protocols/bgp/node.tag/parameters/bestpath/med/node.def b/templates/protocols/bgp/node.tag/parameters/bestpath/med/node.def
index 088a9331..5784f034 100644
--- a/templates/protocols/bgp/node.tag/parameters/bestpath/med/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/bestpath/med/node.def
@@ -1 +1 @@
-help: MED attribute
+help: set MED attribute comparison parameters
diff --git a/templates/protocols/bgp/node.tag/parameters/bestpath/node.def b/templates/protocols/bgp/node.tag/parameters/bestpath/node.def
index 178e4573..10e215df 100644
--- a/templates/protocols/bgp/node.tag/parameters/bestpath/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/bestpath/node.def
@@ -1 +1 @@
-help: Change the default bestpath selection
+help: change the default bestpath selection mechanism
diff --git a/templates/protocols/bgp/node.tag/parameters/cluster-id/node.def b/templates/protocols/bgp/node.tag/parameters/cluster-id/node.def
index dcc764ed..319107d1 100644
--- a/templates/protocols/bgp/node.tag/parameters/cluster-id/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/cluster-id/node.def
@@ -1,6 +1,7 @@
 type: ipv4
-help: Configure route-reflector cluster-id\n
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"bgp cluster-id $VAR(@)\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"no bgp cluster-id \" "
+help: configure the route-reflector cluster-id
+comp_help: \1  <x.x.x.x>\tcluster-id IP
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "bgp cluster-id $VAR(@)"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "no bgp cluster-id"
diff --git a/templates/protocols/bgp/node.tag/parameters/confederation/identifier/node.def b/templates/protocols/bgp/node.tag/parameters/confederation/identifier/node.def
index 2d862c46..7798df99 100644
--- a/templates/protocols/bgp/node.tag/parameters/confederation/identifier/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/confederation/identifier/node.def
@@ -1,7 +1,8 @@
 type: u32
-help: Configure confederation AS id
+help: set confederation AS identifier
+comp_help: \1  <1-4294967294>\tconfederation AS id
 syntax:expression: $VAR(@) >= 1 && $VAR(@) <= 4294967294; "confederation AS id must be between 1 and 4294967294"
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-           -c \"bgp confederation identifier $VAR(@)\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-           -c \"no bgp confederation identifier \" "
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+           -c "bgp confederation identifier $VAR(@)"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+           -c "no bgp confederation identifier"
diff --git a/templates/protocols/bgp/node.tag/parameters/confederation/node.def b/templates/protocols/bgp/node.tag/parameters/confederation/node.def
index 4933aeab..529569cf 100644
--- a/templates/protocols/bgp/node.tag/parameters/confederation/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/confederation/node.def
@@ -1 +1 @@
-help: AS confederation parameters
+help: configure AS confederation parameters
diff --git a/templates/protocols/bgp/node.tag/parameters/confederation/peers/node.def b/templates/protocols/bgp/node.tag/parameters/confederation/peers/node.def
index c32b767f..c07a346d 100644
--- a/templates/protocols/bgp/node.tag/parameters/confederation/peers/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/confederation/peers/node.def
@@ -1,8 +1,9 @@
 multi:
 type: u32
-help: Peer ASs in BGP confederation
+help: set the peer ASs in the BGP confederation
+comp_help: \1  <1-4294967294>\tpeer AS number numbers (ex: "435 234")
 syntax:expression: $VAR(@) >= 1 && $VAR(@) <= 4294967294; "confederation AS id must be between 1 and 4294967294"
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-           -c \"bgp confederation peers $VAR(@)\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-           -c \"no bgp confederation peers $VAR(@)\" "
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+           -c "bgp confederation peers $VAR(@)"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+           -c "no bgp confederation peers $VAR(@)"
diff --git a/templates/protocols/bgp/node.tag/parameters/dampening/half-life/node.def b/templates/protocols/bgp/node.tag/parameters/dampening/half-life/node.def
index 43839b82..92143567 100644
--- a/templates/protocols/bgp/node.tag/parameters/dampening/half-life/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/dampening/half-life/node.def
@@ -1,3 +1,4 @@
 type: u32
-help: Half-life time for the penalty
+help: set half-life time for dampening
+comp_help: \1  <1-45>\thalf-life penalty in seconds
 syntax:expression: $VAR(@) >= 1 && $VAR(@) <= 45; "Half-life penalty must be between 1 and 45"
diff --git a/templates/protocols/bgp/node.tag/parameters/dampening/max-suppress-time/node.def b/templates/protocols/bgp/node.tag/parameters/dampening/max-suppress-time/node.def
index 5c77e861..a26a6369 100644
--- a/templates/protocols/bgp/node.tag/parameters/dampening/max-suppress-time/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/dampening/max-suppress-time/node.def
@@ -1,5 +1,6 @@
 type: u32
-help: Maximum duration to suppress a stable route
+help: set the maximum duration to suppress a stable route
+comp_help: \1  <1-255>\tmaximum suppress duration in seconds
 syntax:expression: $VAR(@) >= 1 && $VAR(@) <= 255; "Max-suppress-time must be between 1 and 255"
-commit:expression: $VAR(../re-use/) != ""; "Re-use value must be set"
-commit:expression: $VAR(../start-suppress-time/) != ""; "Start-suppress-time must be set"
+commit:expression: $VAR(../re-use/) != ""; "protocols bgp $VAR(../../../@) parameters dampening max-suppress-time: you must set a re-use time"
+commit:expression: $VAR(../start-suppress-time/) != ""; "protocols bgp $VAR(../../../@) parameters dampening max-suppress-time: you must set a start-suppress-time"
diff --git a/templates/protocols/bgp/node.tag/parameters/dampening/node.def b/templates/protocols/bgp/node.tag/parameters/dampening/node.def
index 8d15aadc..ed61e381 100644
--- a/templates/protocols/bgp/node.tag/parameters/dampening/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/dampening/node.def
@@ -1,12 +1,11 @@
-help: Enable route-flap dampening
+help: enable route-flap dampening
 delete:expression: "touch /tmp/bgp-dampening.$PPID"
-end:expression: "sh -c \"
-      ${vyatta_sbindir}/vyatta-vtysh.pl -c \\\"configure terminal\\\" -c \\\"router bgp $VAR(../../@)\\\" \
-        -c \\\"no bgp dampening\\\" ; \
-      if [ -f \\\"/tmp/bgp-dampening.$PPID\\\" ]; then \
-        rm -f \\\"/tmp/bgp-dampening.$PPID\\\" ; \
-      else \
-        ${vyatta_sbindir}/vyatta-vtysh.pl -c \\\"configure terminal\\\" -c \\\"router bgp $VAR(../../@)\\\" \
-          -c \\\"bgp dampening $VAR(./half-life/@) $VAR(./re-use/@) $VAR(./start-suppress-time/@) $VAR(./max-suppress-time/@)\\\" ; \
-      fi ; \
-      \" "
+end:  ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+        -c "no bgp dampening" ; 
+      if [ -f "/tmp/bgp-dampening.$PPID" ]; then 
+        rm -f "/tmp/bgp-dampening.$PPID" ; 
+      else 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "bgp dampening $VAR(./half-life/@) $VAR(./re-use/@) $VAR(./start-suppress-time/@) $VAR(./max-suppress-time/@)" ; 
+      fi ; 
+
diff --git a/templates/protocols/bgp/node.tag/parameters/dampening/re-use/node.def b/templates/protocols/bgp/node.tag/parameters/dampening/re-use/node.def
index e9e9af8f..0dd9c1b2 100644
--- a/templates/protocols/bgp/node.tag/parameters/dampening/re-use/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/dampening/re-use/node.def
@@ -1,5 +1,6 @@
 type: u32
-help: Value to start reusing a route
+help: set time to start reusing a route
+comp_help: \1  <1-20000>\tre-use time in seconds
 syntax:expression: $VAR(@) >= 1 && $VAR(@) <= 20000; "Re-use value must be between 1 and 20000"
-commit:expression: $VAR(../start-suppress-time/) != ""; "Start-suppress-time must be set"
-commit:expression: $VAR(../max-suppress-time/) != ""; "Max-suppress-time must be set"
+commit:expression: $VAR(../start-suppress-time/) != ""; "protocols bgp $VAR(../../../@) parameters dampening re-use: you must set start-suppress-time"
+commit:expression: $VAR(../max-suppress-time/) != ""; "protocols bgp $VAR(../../../@) parameters dampening re-use: you must set max-suppress-time"
diff --git a/templates/protocols/bgp/node.tag/parameters/dampening/start-suppress-time/node.def b/templates/protocols/bgp/node.tag/parameters/dampening/start-suppress-time/node.def
index 4e79cf61..83e6ba76 100644
--- a/templates/protocols/bgp/node.tag/parameters/dampening/start-suppress-time/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/dampening/start-suppress-time/node.def
@@ -1,5 +1,6 @@
 type: u32
-help: Value to start suppressing a route
+help: set when to start suppressing a route
+comp_help: \1  <1-20000>\t\tstart-suppress-time
 syntax:expression: $VAR(@) >= 1 && $VAR(@) <= 20000; "Start-suppress-time must be between 1 and 20000"
-commit:expression: $VAR(../re-use/) != ""; "Re-use value must be set"
-commit:expression: $VAR(../max-suppress-time/) != ""; "Max-suppress-time must be set"
+commit:expression: $VAR(../re-use/) != ""; "protocols bgp $VAR(../../../@) parameters dampening max-suppress-time: you must set re-use"
+commit:expression: $VAR(../max-suppress-time/) != ""; "protocols bgp $VAR(../../../@) parameters dampening max-suppress-time: you must set max-suppress-time"
diff --git a/templates/protocols/bgp/node.tag/parameters/default/local-pref/node.def b/templates/protocols/bgp/node.tag/parameters/default/local-pref/node.def
index e9e16e73..1956bc1f 100644
--- a/templates/protocols/bgp/node.tag/parameters/default/local-pref/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/default/local-pref/node.def
@@ -1,6 +1,7 @@
 type: u32
-help: Local preference (higher=more preferred)
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-           -c \"bgp default local-preference $VAR(@)\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-           -c \"no bgp default local-preference\" "
+help: configure the default local preference (higher=more preferred)
+comp_help: \1  <0-4294967295>\tlocal preference
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+           -c "bgp default local-preference $VAR(@)"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+           -c "no bgp default local-preference"
diff --git a/templates/protocols/bgp/node.tag/parameters/default/no-ipv4-unicast/node.def b/templates/protocols/bgp/node.tag/parameters/default/no-ipv4-unicast/node.def
index 184dfcb7..ff91d1ad 100644
--- a/templates/protocols/bgp/node.tag/parameters/default/no-ipv4-unicast/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/default/no-ipv4-unicast/node.def
@@ -1,5 +1,5 @@
-help: Deactivate IPv4 unicast for a peer by default
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-           -c \"no bgp default ipv4-unicast\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-           -c \"bgp default ipv4-unicast\" "
+help: deactivate IPv4 unicast for a peer by default
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+           -c "no bgp default ipv4-unicast"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+           -c "bgp default ipv4-unicast "
diff --git a/templates/protocols/bgp/node.tag/parameters/default/node.def b/templates/protocols/bgp/node.tag/parameters/default/node.def
index 5f2ebba5..6aaafd5c 100644
--- a/templates/protocols/bgp/node.tag/parameters/default/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/default/node.def
@@ -1 +1 @@
-help: Configure BGP defaults
+help: configure BGP defaults
diff --git a/templates/protocols/bgp/node.tag/parameters/deterministic-med/node.def b/templates/protocols/bgp/node.tag/parameters/deterministic-med/node.def
index e7b0e50f..2f9722fa 100644
--- a/templates/protocols/bgp/node.tag/parameters/deterministic-med/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/deterministic-med/node.def
@@ -1,5 +1,5 @@
-help: Pick the best-MED path among paths advertised from the neighboring AS
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"bgp deterministic-med \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"no bgp deterministic-med \" "
+help: compare MEDs between different peers in the same AS 
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "bgp deterministic-med"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "no bgp deterministic-med"
diff --git a/templates/protocols/bgp/node.tag/parameters/disable-network-import-check/node.def b/templates/protocols/bgp/node.tag/parameters/disable-network-import-check/node.def
index 19ccdec2..3a13f76c 100644
--- a/templates/protocols/bgp/node.tag/parameters/disable-network-import-check/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/disable-network-import-check/node.def
@@ -1,5 +1,5 @@
-help: Disable checks to verify a route exists in IGP before importing with a network statement
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"no bgp network import-check \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"bgp network import-check \" "
+help: disable IGP route check for network statements
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "no bgp network import-check"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "bgp network import-check"
diff --git a/templates/protocols/bgp/node.tag/parameters/enforce-first-as/node.def b/templates/protocols/bgp/node.tag/parameters/enforce-first-as/node.def
index eff66372..7922bdf3 100644
--- a/templates/protocols/bgp/node.tag/parameters/enforce-first-as/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/enforce-first-as/node.def
@@ -1,5 +1,5 @@
-help: Enforce the first AS for EBGP routes
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"bgp enforce-first-as \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"no bgp enforce-first-as \" "
+help: require first AS in the path to match peer's AS
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "bgp enforce-first-as "
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "no bgp enforce-first-as "
diff --git a/templates/protocols/bgp/node.tag/parameters/graceful-restart/node.def b/templates/protocols/bgp/node.tag/parameters/graceful-restart/node.def
index ef9d8f38..4586be73 100644
--- a/templates/protocols/bgp/node.tag/parameters/graceful-restart/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/graceful-restart/node.def
@@ -1 +1 @@
-help: Graceful restart capability parameters
+help: configure graceful restart capability parameters
diff --git a/templates/protocols/bgp/node.tag/parameters/graceful-restart/stalepath-time/node.def b/templates/protocols/bgp/node.tag/parameters/graceful-restart/stalepath-time/node.def
index 763dc4a9..103941f1 100644
--- a/templates/protocols/bgp/node.tag/parameters/graceful-restart/stalepath-time/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/graceful-restart/stalepath-time/node.def
@@ -1,7 +1,8 @@
 type: u32
-help: Set the max time in seconds to hold onto restarting peer's stale paths
+help: set the maximum time to hold onto restarting peer's stale paths
+comp_help: \1  <1-3600>\thold time in seconds
 syntax:expression: $VAR(@) >= 1 && $VAR(@) <= 3600; "stalepath-time must be between 1 and 3600"
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-           -c \"bgp graceful-restart stalepath-time $VAR(@) \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../../@)\" \
-           -c \"no bgp graceful-restart stalepath-time \" "
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+           -c "bgp graceful-restart stalepath-time $VAR(@)"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../../@)" \
+           -c "no bgp graceful-restart stalepath-time"
diff --git a/templates/protocols/bgp/node.tag/parameters/log-neighbor-changes/node.def b/templates/protocols/bgp/node.tag/parameters/log-neighbor-changes/node.def
index d88b8de1..d81d0653 100644
--- a/templates/protocols/bgp/node.tag/parameters/log-neighbor-changes/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/log-neighbor-changes/node.def
@@ -1,5 +1,5 @@
-help: Log neighbor up/down and reset reason
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"bgp log-neighbor-changes \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"no bgp log-neighbor-changes \" "
+help: log neighbor up/down changes and reset reason
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "bgp log-neighbor-changes"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "no bgp log-neighbor-changes"
diff --git a/templates/protocols/bgp/node.tag/parameters/no-client-to-client-reflection/node.def b/templates/protocols/bgp/node.tag/parameters/no-client-to-client-reflection/node.def
index 33ad9a29..1fa64426 100644
--- a/templates/protocols/bgp/node.tag/parameters/no-client-to-client-reflection/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/no-client-to-client-reflection/node.def
@@ -1,5 +1,5 @@
-help: Disable client to client route reflection
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"no bgp client-to-client reflection \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"bgp client-to-client reflection \" "
+help: disable client to client route reflection
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "no bgp client-to-client reflection"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "bgp client-to-client reflection"
diff --git a/templates/protocols/bgp/node.tag/parameters/no-fast-external-failover/node.def b/templates/protocols/bgp/node.tag/parameters/no-fast-external-failover/node.def
index 88eef57c..4a221e60 100644
--- a/templates/protocols/bgp/node.tag/parameters/no-fast-external-failover/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/no-fast-external-failover/node.def
@@ -1,5 +1,5 @@
-help: Immediately reset session if a link to a directly connected external peer goes down
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"no bgp fast-external-failover \" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"bgp fast-external-failover \" "
+help: disable immediate sesison reset if peer's connected link goes down
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "no bgp fast-external-failover"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "bgp fast-external-failover"
diff --git a/templates/protocols/bgp/node.tag/parameters/node.def b/templates/protocols/bgp/node.tag/parameters/node.def
index cd6b28ce..513f8ebd 100644
--- a/templates/protocols/bgp/node.tag/parameters/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/node.def
@@ -1 +1 @@
-help: Configure BGP parameters
+help: configure BGP parameters
diff --git a/templates/protocols/bgp/node.tag/parameters/router-id/node.def b/templates/protocols/bgp/node.tag/parameters/router-id/node.def
index 6e9de2dc..26b96b5e 100644
--- a/templates/protocols/bgp/node.tag/parameters/router-id/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/router-id/node.def
@@ -1,6 +1,7 @@
 type: ipv4
-help: Override configured router identifier
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"bgp router-id $VAR(@)\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"no bgp router-id \" "
+help: set BGP router id
+comp_help: \1  <x.x.x.x>\tBGP router-id IP
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "bgp router-id $VAR(@)"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "no bgp router-id"
diff --git a/templates/protocols/bgp/node.tag/parameters/scan-time/node.def b/templates/protocols/bgp/node.tag/parameters/scan-time/node.def
index 5fb71d57..66a1eae1 100644
--- a/templates/protocols/bgp/node.tag/parameters/scan-time/node.def
+++ b/templates/protocols/bgp/node.tag/parameters/scan-time/node.def
@@ -1,7 +1,8 @@
 type: u32
+help: set BGP route scanner interval
+comp_help: \1  <5-60>\tscan interval in seconds
 syntax:expression: $VAR(@) >= 5 && $VAR(@) <= 60; "scan-time must be between 5 and 60 seconds"
-help: Configure background scanner interval
-update:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"bgp scan-time $VAR(@)\" "
-delete:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-           -c \"no bgp scan-time \" "
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "bgp scan-time $VAR(@)"
+delete: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+           -c "no bgp scan-time"
diff --git a/templates/protocols/bgp/node.tag/redistribute/connected/metric/node.def b/templates/protocols/bgp/node.tag/redistribute/connected/metric/node.def
index 43f1ffff..740fbde8 100644
--- a/templates/protocols/bgp/node.tag/redistribute/connected/metric/node.def
+++ b/templates/protocols/bgp/node.tag/redistribute/connected/metric/node.def
@@ -1,2 +1,3 @@
 type: u32
-help: Metric for redistributed routes
+help: set the metric for redistributed routes
+comp_help: \1  <0-4294967295>\tmetric
diff --git a/templates/protocols/bgp/node.tag/redistribute/connected/node.def b/templates/protocols/bgp/node.tag/redistribute/connected/node.def
index 5bdf3b2f..f7d15bfb 100644
--- a/templates/protocols/bgp/node.tag/redistribute/connected/node.def
+++ b/templates/protocols/bgp/node.tag/redistribute/connected/node.def
@@ -1,16 +1,16 @@
-help: Redistribute connected routes
-delete:expression: "touch /tmp/bgp-redist-connected.$PPID" 
-end:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-        -c \"no redistribute connected \"; \
-      if [ -f \"/tmp/bgp-redist-connected.$PPID\" ]; then \
-        rm -rf /tmp/bgp-redist-connected.$PPID; \
-      else \
-        if [ -n \"$VAR(./metric/@)\" ]; then \
-          COND=\"metric $VAR(./metric/@)\";
-        fi; \
-        if [ -n \"$VAR(./route-map/@)\" ]; then \
-          COND=\"$COND route-map $VAR(./route-map/@)\"; \
-        fi; \
-        ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"redistribute connected $COND\"; \
-      fi; "
+help: redistribute connected routes into BGP
+delete: touch /tmp/bgp-redist-connected.$PPID 
+end: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+        -c "no redistribute connected"; 
+      if [ -f "/tmp/bgp-redist-connected.$PPID" ]; then 
+        rm -rf /tmp/bgp-redist-connected.$PPID; 
+      else 
+        if [ -n "$VAR(./metric/@)" ]; then 
+          cond="metric $VAR(./metric/@)";
+        fi; 
+        if [ -n "$VAR(./route-map/@)" ]; then 
+          cond="$cond route-map $VAR(./route-map/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "redistribute connected $cond"; 
+      fi;
diff --git a/templates/protocols/bgp/node.tag/redistribute/connected/route-map/node.def b/templates/protocols/bgp/node.tag/redistribute/connected/route-map/node.def
index f2c6f7c2..17cb0c67 100644
--- a/templates/protocols/bgp/node.tag/redistribute/connected/route-map/node.def
+++ b/templates/protocols/bgp/node.tag/redistribute/connected/route-map/node.def
@@ -1,3 +1,4 @@
 type: txt
-help: Route map reference
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"route-map $VAR(@) doesn't exist"
+help: configure a route map to filter redistributed routes
+comp_help: \1  <txt>\t\troute-map name
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"protocols bgp $VAR(../../../@) redistribute connected: route-map $VAR(@) doesn't exist"
diff --git a/templates/protocols/bgp/node.tag/redistribute/kernel/metric/node.def b/templates/protocols/bgp/node.tag/redistribute/kernel/metric/node.def
index 43f1ffff..740fbde8 100644
--- a/templates/protocols/bgp/node.tag/redistribute/kernel/metric/node.def
+++ b/templates/protocols/bgp/node.tag/redistribute/kernel/metric/node.def
@@ -1,2 +1,3 @@
 type: u32
-help: Metric for redistributed routes
+help: set the metric for redistributed routes
+comp_help: \1  <0-4294967295>\tmetric
diff --git a/templates/protocols/bgp/node.tag/redistribute/kernel/node.def b/templates/protocols/bgp/node.tag/redistribute/kernel/node.def
index 479114fd..20708ed1 100644
--- a/templates/protocols/bgp/node.tag/redistribute/kernel/node.def
+++ b/templates/protocols/bgp/node.tag/redistribute/kernel/node.def
@@ -1,16 +1,16 @@
-help: Redistribute kernel routes
-delete:expression: "touch /tmp/bgp-redist-kernel.$PPID" 
-end:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-        -c \"no redistribute kernel \"; \
-      if [ -f \"/tmp/bgp-redist-kernel.$PPID\" ]; then \
-        rm -rf /tmp/bgp-redist-kernel.$PPID; \
-      else \
-        if [ -n \"$VAR(./metric/@)\" ]; then \
-          COND=\"metric $VAR(./metric/@)\";
-        fi; \
-        if [ -n \"$VAR(./route-map/@)\" ]; then \
-          COND=\"$COND route-map $VAR(./route-map/@)\"; \
-        fi; \
-        ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"redistribute kernel $COND\"; \
-      fi; "
+help: redistribute kernel routes into BGP
+delete: touch /tmp/bgp-redist-kernel.$PPID 
+end:  ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+        -c "no redistribute kernel "; 
+      if [ -f "/tmp/bgp-redist-kernel.$PPID" ]; then 
+        rm -rf /tmp/bgp-redist-kernel.$PPID; 
+      else 
+        if [ -n "$VAR(./metric/@)" ]; then 
+          cond="metric $VAR(./metric/@)";
+        fi; 
+        if [ -n "$VAR(./route-map/@)" ]; then 
+          cond="$cond route-map $VAR(./route-map/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "redistribute kernel $cond"; 
+      fi; 
diff --git a/templates/protocols/bgp/node.tag/redistribute/kernel/route-map/node.def b/templates/protocols/bgp/node.tag/redistribute/kernel/route-map/node.def
index f2c6f7c2..d7d0ff49 100644
--- a/templates/protocols/bgp/node.tag/redistribute/kernel/route-map/node.def
+++ b/templates/protocols/bgp/node.tag/redistribute/kernel/route-map/node.def
@@ -1,3 +1,4 @@
 type: txt
-help: Route map reference
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"route-map $VAR(@) doesn't exist"
+help: configure a route map to filter redistributed routes
+comp_help: \1  <txt>\t\troute-map name
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"protocols bgp $VAR(../../../@) redistribute kernel: route-map $VAR(@) doesn't exist"
diff --git a/templates/protocols/bgp/node.tag/redistribute/node.def b/templates/protocols/bgp/node.tag/redistribute/node.def
index 00eefa88..6fe54125 100644
--- a/templates/protocols/bgp/node.tag/redistribute/node.def
+++ b/templates/protocols/bgp/node.tag/redistribute/node.def
@@ -1 +1 @@
-help: Redistribute information from another routing protocol
+help: configure redistribution of routes from other protocols into BGP
diff --git a/templates/protocols/bgp/node.tag/redistribute/ospf/metric/node.def b/templates/protocols/bgp/node.tag/redistribute/ospf/metric/node.def
index 43f1ffff..740fbde8 100644
--- a/templates/protocols/bgp/node.tag/redistribute/ospf/metric/node.def
+++ b/templates/protocols/bgp/node.tag/redistribute/ospf/metric/node.def
@@ -1,2 +1,3 @@
 type: u32
-help: Metric for redistributed routes
+help: set the metric for redistributed routes
+comp_help: \1  <0-4294967295>\tmetric
diff --git a/templates/protocols/bgp/node.tag/redistribute/ospf/node.def b/templates/protocols/bgp/node.tag/redistribute/ospf/node.def
index f1a894a7..76b27d9c 100644
--- a/templates/protocols/bgp/node.tag/redistribute/ospf/node.def
+++ b/templates/protocols/bgp/node.tag/redistribute/ospf/node.def
@@ -1,16 +1,16 @@
-help: Redistribute OSPF routes
-delete:expression: "touch /tmp/bgp-redist-ospf.$PPID" 
-end:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-        -c \"no redistribute ospf \"; \
-      if [ -f \"/tmp/bgp-redist-ospf.$PPID\" ]; then \
-        rm -rf /tmp/bgp-redist-ospf.$PPID; \
-      else \
-        if [ -n \"$VAR(./metric/@)\" ]; then \
-          COND=\"metric $VAR(./metric/@)\";
-        fi; \
-        if [ -n \"$VAR(./route-map/@)\" ]; then \
-          COND=\"$COND route-map $VAR(./route-map/@)\"; \
-        fi; \
-        ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"redistribute ospf $COND\"; \
-      fi; "
+help: redistribute OSPF routes into BGP
+delete: touch /tmp/bgp-redist-ospf.$PPID
+end:  ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+        -c "no redistribute ospf"; 
+      if [ -f "/tmp/bgp-redist-ospf.$PPID" ]; then 
+        rm -rf /tmp/bgp-redist-ospf.$PPID; 
+      else 
+        if [ -n "$VAR(./metric/@)" ]; then 
+          cond="metric $VAR(./metric/@)";
+        fi; 
+        if [ -n "$VAR(./route-map/@)" ]; then 
+          cond="$cond route-map $VAR(./route-map/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "redistribute ospf $cond"; 
+      fi; 
diff --git a/templates/protocols/bgp/node.tag/redistribute/ospf/route-map/node.def b/templates/protocols/bgp/node.tag/redistribute/ospf/route-map/node.def
index f2c6f7c2..cbad8dc3 100644
--- a/templates/protocols/bgp/node.tag/redistribute/ospf/route-map/node.def
+++ b/templates/protocols/bgp/node.tag/redistribute/ospf/route-map/node.def
@@ -1,3 +1,4 @@
 type: txt
-help: Route map reference
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"route-map $VAR(@) doesn't exist"
+help: configure a route map to filter redistributed routes
+comp_help: \1  <txt>\t\troute-map name
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"protocols bgp $VAR(../../../@) redistribute ospf: route-map $VAR(@) doesn't exist"
diff --git a/templates/protocols/bgp/node.tag/redistribute/rip/metric/node.def b/templates/protocols/bgp/node.tag/redistribute/rip/metric/node.def
index 43f1ffff..740fbde8 100644
--- a/templates/protocols/bgp/node.tag/redistribute/rip/metric/node.def
+++ b/templates/protocols/bgp/node.tag/redistribute/rip/metric/node.def
@@ -1,2 +1,3 @@
 type: u32
-help: Metric for redistributed routes
+help: set the metric for redistributed routes
+comp_help: \1  <0-4294967295>\tmetric
diff --git a/templates/protocols/bgp/node.tag/redistribute/rip/node.def b/templates/protocols/bgp/node.tag/redistribute/rip/node.def
index f67cfdc6..2b0886e8 100644
--- a/templates/protocols/bgp/node.tag/redistribute/rip/node.def
+++ b/templates/protocols/bgp/node.tag/redistribute/rip/node.def
@@ -1,16 +1,16 @@
-help: Redistribute RIP routes
-delete:expression: "touch /tmp/bgp-redist-rip.$PPID" 
-end:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-        -c \"no redistribute rip \"; \
-      if [ -f \"/tmp/bgp-redist-rip.$PPID\" ]; then \
-        rm -rf /tmp/bgp-redist-rip.$PPID; \
-      else \
-        if [ -n \"$VAR(./metric/@)\" ]; then \
-          COND=\"metric $VAR(./metric/@)\";
-        fi; \
-        if [ -n \"$VAR(./route-map/@)\" ]; then \
-          COND=\"$COND route-map $VAR(./route-map/@)\"; \
-        fi; \
-        ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"redistribute rip $COND\"; \
-      fi; "
+help: redistribute RIP routes into BGP
+delete: touch /tmp/bgp-redist-rip.$PPID
+end:  ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+        -c "no redistribute rip "; 
+      if [ -f "/tmp/bgp-redist-rip.$PPID" ]; then 
+        rm -rf /tmp/bgp-redist-rip.$PPID; 
+      else 
+        if [ -n "$VAR(./metric/@)" ]; then 
+          cond="metric $VAR(./metric/@)";
+        fi; 
+        if [ -n "$VAR(./route-map/@)" ]; then 
+          cond="$cond route-map $VAR(./route-map/@)"; 
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "redistribute rip $cond"; 
+      fi;
diff --git a/templates/protocols/bgp/node.tag/redistribute/rip/route-map/node.def b/templates/protocols/bgp/node.tag/redistribute/rip/route-map/node.def
index f2c6f7c2..1665507b 100644
--- a/templates/protocols/bgp/node.tag/redistribute/rip/route-map/node.def
+++ b/templates/protocols/bgp/node.tag/redistribute/rip/route-map/node.def
@@ -1,3 +1,4 @@
 type: txt
-help: Route map reference
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"route-map $VAR(@) doesn't exist"
+help: configure a route map to filter redistributed routes
+comp_help: \1  <txt>\t\troute-map name
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"protocols bgp $VAR(../../../@) redistribute rip: route-map $VAR(@) doesn't exist"
diff --git a/templates/protocols/bgp/node.tag/redistribute/static/metric/node.def b/templates/protocols/bgp/node.tag/redistribute/static/metric/node.def
index 43f1ffff..740fbde8 100644
--- a/templates/protocols/bgp/node.tag/redistribute/static/metric/node.def
+++ b/templates/protocols/bgp/node.tag/redistribute/static/metric/node.def
@@ -1,2 +1,3 @@
 type: u32
-help: Metric for redistributed routes
+help: set the metric for redistributed routes
+comp_help: \1  <0-4294967295>\tmetric
diff --git a/templates/protocols/bgp/node.tag/redistribute/static/node.def b/templates/protocols/bgp/node.tag/redistribute/static/node.def
index d34e30ad..3dc1adaf 100644
--- a/templates/protocols/bgp/node.tag/redistribute/static/node.def
+++ b/templates/protocols/bgp/node.tag/redistribute/static/node.def
@@ -1,16 +1,16 @@
-help: Redistribute static routes
-delete:expression: "touch /tmp/bgp-redist-static.$PPID" 
-end:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-        -c \"no redistribute static \"; \
-      if [ -f \"/tmp/bgp-redist-static.$PPID\" ]; then \
-        rm -rf /tmp/bgp-redist-static.$PPID; \
-      else \
-        if [ -n \"$VAR(./metric/@)\" ]; then \
-          COND=\"metric $VAR(./metric/@)\";
-        fi; \
-        if [ -n \"$VAR(./route-map/@)\" ]; then \
-          COND=\"$COND route-map $VAR(./route-map/@)\"; \
-        fi; \
-        ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../../@)\" \
-          -c \"redistribute static $COND\"; \
-      fi; "
+help: redistribute static routes into BGP
+delete: touch /tmp/bgp-redist-static.$PPID
+end:  ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+        -c "no redistribute static"; 
+      if [ -f "/tmp/bgp-redist-static.$PPID" ]; then 
+        rm -rf /tmp/bgp-redist-static.$PPID; 
+      else 
+        if [ -n "$VAR(./metric/@)" ]; then 
+          cond="metric $VAR(./metric/@)";
+        fi; 
+        if [ -n "$VAR(./route-map/@)" ]; then 
+          cond="$cond route-map $VAR(./route-map/@)";
+        fi; 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
+          -c "redistribute static $cond"; 
+      fi; 
diff --git a/templates/protocols/bgp/node.tag/redistribute/static/route-map/node.def b/templates/protocols/bgp/node.tag/redistribute/static/route-map/node.def
index f2c6f7c2..cda1e460 100644
--- a/templates/protocols/bgp/node.tag/redistribute/static/route-map/node.def
+++ b/templates/protocols/bgp/node.tag/redistribute/static/route-map/node.def
@@ -1,3 +1,4 @@
 type: txt
-help: Route map reference
-commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"route-map $VAR(@) doesn't exist"
+help: configure a route map to filter redistributed routes
+comp_help: \1  <txt>\t\troute-map name
+commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"policy route-map $VAR(@)\" ";"protocols bgp $VAR(../../../@) redistribute static: route-map $VAR(@) doesn't exist"
diff --git a/templates/protocols/bgp/node.tag/timers/holdtime/node.def b/templates/protocols/bgp/node.tag/timers/holdtime/node.def
index cc9709e8..8ba97b62 100644
--- a/templates/protocols/bgp/node.tag/timers/holdtime/node.def
+++ b/templates/protocols/bgp/node.tag/timers/holdtime/node.def
@@ -1,8 +1,7 @@
 type: u32
-help: Holdtime interval
+help: set the BGP holdtime interval
+comp_help: \1  <4-65535>\thold-time in seconds (default 180)
+  0\t\tdon't hold routes
 default: 180
 syntax:expression: $VAR(@) == 0 || ($VAR(@) >= 4 && $VAR(@) <= 65535); \
-       "Holdtime interval must be 0 or between 4 and 65535"
-comp_help: possible completions:
- 0
- <4-65535>          Set holdtime interval (default 180)
+       "hold-time interval must be 0 or between 4 and 65535"
diff --git a/templates/protocols/bgp/node.tag/timers/keepalive/node.def b/templates/protocols/bgp/node.tag/timers/keepalive/node.def
index a734b860..4315f3ba 100644
--- a/templates/protocols/bgp/node.tag/timers/keepalive/node.def
+++ b/templates/protocols/bgp/node.tag/timers/keepalive/node.def
@@ -1,7 +1,6 @@
 type: u32
 help: Keepalive interval
+comp_help: \1  <1-65535>\tkeep-alive time in seconds (default 60)
 default: 60
 syntax:expression: $VAR(@) >= 1 && $VAR(@) <= 65535; \
        "Keepalive interval must be between 1 and 65535"
-comp_help: possible completions:
- <1-65535>          Set keepalive interval (default 60)
diff --git a/templates/protocols/bgp/node.tag/timers/node.def b/templates/protocols/bgp/node.tag/timers/node.def
index 9fcace77..cb62fe06 100644
--- a/templates/protocols/bgp/node.tag/timers/node.def
+++ b/templates/protocols/bgp/node.tag/timers/node.def
@@ -1,12 +1,12 @@
-help: Adjust routing timers
-commit:expression: $VAR(./keepalive/) != ""; "You must set a keepalive interval"
-commit:expression: $VAR(./holdtime/) != ""; "You must set a holdtime interval"
-delete:expression: "touch /tmp/bgp-timers.$PPID"
-end:expression: "${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../@)\" \
-        -c \"no timers bgp\"; \
-      if [ -f \"/tmp/bgp-timers.$PPID\" ]; then \
-        rm -rf /tmp/bgp-timers.$PPID; \
-      else \
-        ${vyatta_sbindir}/vyatta-vtysh.pl -c \"configure terminal\" -c \"router bgp $VAR(../@)\" \
-          -c \"timers bgp $VAR(./keepalive/@) $VAR(./holdtime/@)\"; \
-      fi; "
+help: configure BGP protocol timers
+commit:expression: $VAR(./keepalive/) != ""; "protocols bgp $VAR(../@) timers: you must set a keepalive interval"
+commit:expression: $VAR(./holdtime/) != ""; "protocols bgp $VAR(../@) timers: you must set a holdtime interval"
+delete: touch /tmp/bgp-timers.$PPID
+end:  ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../@)" \
+        -c "no timers bgp"; 
+      if [ -f "/tmp/bgp-timers.$PPID" ]; then 
+        rm -rf /tmp/bgp-timers.$PPID; 
+      else 
+        ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../@)" \
+          -c "timers bgp $VAR(./keepalive/@) $VAR(./holdtime/@)"; 
+      fi; 
-- 
cgit v1.2.3


From e73aa6e6d6fee1d51945f4e02901179ab97045d6 Mon Sep 17 00:00:00 2001
From: Robert Bays <rbays@moresby.vyatta.com>
Date: Tue, 25 Mar 2008 17:41:46 -0700
Subject: shorten some of the BGP help strings

---
 .../bgp/node.tag/neighbor/node.tag/advertisement-interval/node.def     | 2 +-
 templates/protocols/bgp/node.tag/neighbor/node.tag/allowas-in/node.def | 2 +-
 .../bgp/node.tag/neighbor/node.tag/attribute-unchanged/node.def        | 2 +-
 .../protocols/bgp/node.tag/neighbor/node.tag/nexthop-self/node.def     | 2 +-
 templates/protocols/bgp/node.tag/neighbor/node.tag/peer-group/node.def | 3 ++-
 5 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/advertisement-interval/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/advertisement-interval/node.def
index da1edd2e..05f7f199 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/advertisement-interval/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/advertisement-interval/node.def
@@ -1,5 +1,5 @@
 type: u32
-help: set the minimum interval between sending BGP routing updates
+help: set the minimum interval for sending routing updates
 comp_help: \1  <0-600>\tadvertisement interval in seconds
 syntax:expression: $VAR(@) >= 0 && $VAR(@) <= 600; "must be between 0 and 600"
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/allowas-in/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/allowas-in/node.def
index 04a1b0fb..aca87d6a 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/allowas-in/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/allowas-in/node.def
@@ -1,4 +1,4 @@
-help: accept a route that contains an as-path with the local AS present in it
+help: accept a route that contains the local-AS in the as-path 
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
 delete: touch /tmp/bgp-neighbor-$VAR(../@)-allowas-in.$PPID
 end:  ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/node.def
index 3bef572f..c45b57f0 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/attribute-unchanged/node.def
@@ -1,4 +1,4 @@
-help: set whether BGP attributes are sent unchanged to this neighbor
+help: set whether BGP attributes are sent unchanged 
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
 commit:expression: $VAR(../peer-group/) == ""; "protocols bgp $VAR(../../@) neighbor $VAR(../@): you can't set attribute-unchanged for a neighbor in a peer-group"
 delete: touch /tmp/bgp-neighbor-$VAR(../@)-attribute-unchanged.$PPID
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/nexthop-self/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/nexthop-self/node.def
index 0eea04fb..df0aa6c2 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/nexthop-self/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/nexthop-self/node.def
@@ -1,4 +1,4 @@
-help: set the nexthop to this router for routes sent to this neighbor
+help: set nexthop for routes sent to this neighbor to be the local router
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --as $VAR(../../@) --neighbor $VAR(../@)"
 commit:expression: $VAR(../peer-group/) == ""; "protocols bgp $VAR(../../@) neighbor $VAR(../@) next-hop-self: you can't set next-hop-self for a neighbor in a peer-group"
 update:  if [ -n "$VAR(../remote-as/@)" ]; then 
diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/peer-group/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/peer-group/node.def
index 8201f8a0..56e957cf 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/peer-group/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/peer-group/node.def
@@ -1,5 +1,6 @@
 type: txt
-help: Member of the peer-group
+help: add this neighbor to a peer-group
+comp_help: \1  <txt>\tpeer-group name
 syntax:expression: exec "if [ -n \"`echo $VAR(../@) | sed 's/[0-9]\\{1,3\\}.[0-9]\\{1,3\\}.[0-9]\\{1,3\\}.[0-9]\\{1,3\\}//'`\" ]; then \
                 exit 1; \
               fi; "; "peer-group token may not be specified for a peer-group"
-- 
cgit v1.2.3


From 6f4c8265f09ac6d6efd113598bbd65454d7a4865 Mon Sep 17 00:00:00 2001
From: Robert Bays <rbays@moresby.vyatta.com>
Date: Fri, 28 Mar 2008 11:51:40 -0700
Subject: fix bug 3074

---
 templates/protocols/bgp/node.tag/neighbor/node.tag/peer-group/node.def | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/templates/protocols/bgp/node.tag/neighbor/node.tag/peer-group/node.def b/templates/protocols/bgp/node.tag/neighbor/node.tag/peer-group/node.def
index 56e957cf..5bedc010 100644
--- a/templates/protocols/bgp/node.tag/neighbor/node.tag/peer-group/node.def
+++ b/templates/protocols/bgp/node.tag/neighbor/node.tag/peer-group/node.def
@@ -6,7 +6,7 @@ syntax:expression: exec "if [ -n \"`echo $VAR(../@) | sed 's/[0-9]\\{1,3\\}.[0-9
               fi; "; "peer-group token may not be specified for a peer-group"
 commit:expression: exec "/opt/vyatta/sbin/vyatta-bgp.pl --check-as --peergroup=$VAR(@) --as $VAR(../../@) --neighbor $VAR(../@)"
 commit:expression: exec "/opt/vyatta/sbin/vyatta_quagga_utils.pl --exists \"protocols bgp $VAR(../../@) neighbor $VAR(@)\" "; "protocols bgp $VAR(../../@) neighbor $VAR(../@) peer-group: peer-group $VAR(@) doesn't exist"
-update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal\" -c "router bgp $VAR(../../@)" \
+update: ${vyatta_sbindir}/vyatta-vtysh.pl -c "configure terminal" -c "router bgp $VAR(../../@)" \
           -c "neighbor $VAR(../@) peer-group $VAR(@)"
 delete: ${vyatta_sbindir}/vyatta-vtysh.pl -noerr -c "configure terminal" -c "router bgp $VAR(../../@)" \
           -c "no neighbor $VAR(../@) peer-group $VAR(@)"
-- 
cgit v1.2.3