diff --git a/html/app.js b/html/app.js
index a7e98f45..b47aca4f 100644
--- a/html/app.js
+++ b/html/app.js
@@ -789,34 +789,49 @@ function getJSON(p){return api(p).then(function(r){if(!r.ok)throw new Error(p+"
function getText(p){return api(p).then(function(r){if(!r.ok)throw new Error(p+" "+r.status);return r.body})}
var CONF_CMDS=[
- /^ip\s+(\d{1,3}\.){3}\d{1,3}$/,/^ip\s+dhcp$/,
- /^gw\s+(\d{1,3}\.){3}\d{1,3}$/,/^netmask\s+(\d{1,3}\.){3}\d{1,3}$/,
- /^syslog\s+(on|off)$/,/^syslog\s+ip\s+(\d{1,3}\.){3}\d{1,3}$/,/^syslog\s+port\s+\d{1,5}$/,
+ /^ip\s+(\d{1,3}\.){3}\d{1,3}$/,
+ /^ip\s+dhcp$/,
+ /^gw\s+(\d{1,3}\.){3}\d{1,3}$/,
+ /^netmask\s+(\d{1,3}\.){3}\d{1,3}$/,
+ /^syslog\s+(on|off)$/,
+ /^syslog\s+ip\s+(\d{1,3}\.){3}\d{1,3}$/,
+ /^syslog\s+port\s+\d{1,5}$/,
/^session\s+\d{1,5}$/,
/^dns\s+server\s+(\d{1,3}\.){3}\d{1,3}(\s+(\d{1,3}\.){3}\d{1,3})?$/,
- /^ntp\s+(on|off)$/,/^ntp\s+server\s+[A-Za-z0-9.-]{1,47}$/,/^ntp\s+interval\s+\d{1,4}$/,
- /^ntp\s+timezone\s+[+-]?\d{1,2}(:\d{2})?$/,/^ntp\s+dst\s+(off|eu|us)$/,
+ /^ntp\s+(on|off)$/,
+ /^ntp\s+server\s+[A-Za-z0-9.-]{1,47}$/,
+ /^ntp\s+interval\s+\d{1,4}$/,
+ /^ntp\s+timezone\s+[+-]?\d{1,2}(:\d{2})?$/,
+ /^ntp\s+dst\s+(off|eu|us)$/,
/^passwd\s+\S+$/,/^hostname\s+\S{1,23}$/,
- /^vlan\s+\d{1,4}\s+d$/,/^vlan\s+\d{1,4}\s+mgmt$/,
- /^vlan\s+\d{1,4}(\s+[a-zA-Z]\w*)?(\s+\d{1,2}t?)+$/,
- /^pvid\s+\d{1,2}\s+\d{1,4}$/,
- /^ingress(\s+\d{1,2}[tua])+$/,/^ingress\s+[tua]$/,
- /^port\s+\d{1,2}\s+(10m|100m|1g|2g5|5g|10g|auto|on|off)(\s+(half|full))?$/,
- /^port\s+\d{1,2}\s+name\s+\S+$/,
- /^port\s+\d{1,2}\s+lldp\s+(permit|block)+$/,
- /^eee\s+(on|off)(\s+\d{1,2})?(\s+(100m|1g|2g5))?$/,
- /^mirror(\s+\d{1,2})(\s+\d{1,2}[tr]?)+$/,/^mirror\s+off$/,
- /^lag\s+[1-4](\s+\d{1,2})+$/,/^lag\s+[1-4]\s+d$/,/^lag\s+[1-4]\s+lacp(\s+\d{1,2})+$/,/^lag\s+[1-4]\s+lacp\s+off$/,/^laghash\s+[1-4](\s+\w+)+$/,
- /^isolate\s+\d{1,2}(\s+(off|\d{1,2}))+$/,
- /^stp\s+(on|off)$/,/^stp\s+(prio|hello|maxage|fwd|txhold)\s+\d{1,2}$/,
+ /^vlan\s+\d+\s+(d|mgmt)$/,
+ /^vlan\s+\d+(\s+[a-zA-Z]\w*)?(\s+\d+t?)*$/,
+ /^pvid\s+\d+\s+\d+$/,
+ /^ingress(\s+\d+[tua])+$/,/^ingress\s+[tua]$/,
+ /^port\s+\d+\s+(10m|100m|1g|2g5|5g|10g|auto|on|off)(\s+(half|full))?$/,
+ /^port\s+\d+\s+name\s+\S+$/,
+ /^port\s+\d+\s+lldp\s+(permit|block)+$/,
+ /^eee\s+(on|off)(\s+\d+)?(\s+(100m|1g|2g5))?$/,
+ /^mirror(\s+\d+)(\s+\d+[tr]?)+$/,/^mirror\s+off$/,
+ /^lag\s+[1-4](\s+\d+)+$/,/^lag\s+[1-4]\s+d$/,
+ /^lag\s+[1-4]\s+lacp(\s+\d+)+$/,
+ /^lag\s+[1-4]\s+lacp\s+off$/,
+ /^laghash\s+[1-4](\s+\w+)+$/,
+ /^isolate\s+\d+(\s+(off|\d+))+$/,
+ /^stp\s+(on|off)$/,/^stp\s+(prio|hello|maxage|fwd|txhold)\s+\d+$/,
/^stp\s+version\s+(rstp|stp)$/,
- /^stp\s+(port\s+\d{1,2}|lag\s+[1-4])\s+(on|off)$/,/^stp\s+(port\s+\d{1,2}|lag\s+[1-4])\s+edge\s+(on|off|auto)$/,
- /^stp\s+(port\s+\d{1,2}|lag\s+[1-4])\s+cost\s+\d{1,9}$/,/^stp\s+(port\s+\d{1,2}|lag\s+[1-4])\s+prio\s+\d{1,3}$/,
- /^stp\s+(port\s+\d{1,2}|lag\s+[1-4])\s+guard\s+(none|bpdu|root)$/,/^stp\s+(port\s+\d{1,2}|lag\s+[1-4])\s+filter\s+(on|off)$/,
- /^stp\s+(port\s+\d{1,2}|lag\s+[1-4])\s+p2p\s+(auto|on|off)$/,
- /^igmp\s+(on|off)$/,/^mtu\s+\d{1,2}\s+\d+$/,/^lldp\s+(on|off)$/,
- /^bw\s+(in|out)\s+\d{1,2}\s+\S+$/,
- /^storm\s+\d{1,2}\s+(bcast|mcast|ucast|umcast)\s+(off|\d{1,8}\s+(pps|kbps))$/,
+ /^stp\s+(port\s+\d+|lag\s+[1-4])\s+(on|off)$/,
+ /^stp\s+(port\s+\d+|lag\s+[1-4])\s+edge\s+(on|off|auto)$/,
+ /^stp\s+(port\s+\d+|lag\s+[1-4])\s+cost\s+\d+$/,
+ /^stp\s+(port\s+\d+|lag\s+[1-4])\s+prio\s+\d+$/,
+ /^stp\s+(port\s+\d+|lag\s+[1-4])\s+guard\s+(none|bpdu|root)$/,
+ /^stp\s+(port\s+\d+|lag\s+[1-4])\s+filter\s+(on|off)$/,
+ /^stp\s+(port\s+\d=|lag\s+[1-4])\s+p2p\s+(auto|on|off)$/,
+ /^igmp\s+(on|off)$/,
+ /^mtu\s+\d+\s+\d+$/,
+ /^lldp\s+(on|off)$/,
+ /^bw\s+(in|out)\s+\d+\s+\S+$/,
+ /^storm\s+\d+\s+(bcast|mcast|ucast|umcast)\s+(off|\d+\s+(pps|kbps))$/,
];
function isConfCmd(line){
for(var i=0;i