diff --git a/interface-definitions/dns-forwarding.xml.in b/interface-definitions/dns-forwarding.xml.in
index c4295317a..5ca02acef 100644
--- a/interface-definitions/dns-forwarding.xml.in
+++ b/interface-definitions/dns-forwarding.xml.in
@@ -1,720 +1,703 @@
 <?xml version="1.0"?>
 <!-- DNS forwarder configuration -->
 <interfaceDefinition>
   <node name="service">
     <children>
       <node name="dns">
         <properties>
           <help>Domain Name System (DNS) related services</help>
         </properties>
         <children>
           <node name="forwarding" owner="${vyos_conf_scripts_dir}/dns_forwarding.py">
             <properties>
               <help>DNS forwarding</help>
               <priority>918</priority>
             </properties>
             <children>
               <leafNode name="cache-size">
                 <properties>
                   <help>DNS forwarding cache size</help>
                   <valueHelp>
                     <format>u32:0-2147483647</format>
                     <description>DNS forwarding cache size</description>
                   </valueHelp>
                   <constraint>
                     <validator name="numeric" argument="--range 0-2147483647"/>
                   </constraint>
                 </properties>
                 <defaultValue>10000</defaultValue>
               </leafNode>
               <leafNode name="dhcp">
                 <properties>
                   <help>Interfaces whose DHCP client nameservers to forward requests to</help>
                   <completionHelp>
                     <script>${vyos_completion_dir}/list_interfaces</script>
                   </completionHelp>
                   <multi/>
                 </properties>
               </leafNode>
               <leafNode name="dns64-prefix">
                 <properties>
                   <help>Help to communicate between IPv6-only client and IPv4-only server</help>
                   <valueHelp>
                     <format>ipv6net</format>
                     <description>IPv6 address and /96 only prefix length</description>
                   </valueHelp>
                   <constraint>
                     <validator name="ipv6-prefix"/>
                   </constraint>
                 </properties>
               </leafNode>
               <leafNode name="dnssec">
                 <properties>
                   <help>DNSSEC mode</help>
                   <completionHelp>
                     <list>off process-no-validate process log-fail validate</list>
                   </completionHelp>
                   <valueHelp>
                     <format>off</format>
                     <description>No DNSSEC processing whatsoever!</description>
                   </valueHelp>
                   <valueHelp>
                     <format>process-no-validate</format>
                     <description>Respond with DNSSEC records to clients that ask for it. No validation done at all!</description>
                   </valueHelp>
                   <valueHelp>
                     <format>process</format>
                     <description>Respond with DNSSEC records to clients that ask for it. Validation for clients that request it.</description>
                   </valueHelp>
                   <valueHelp>
                     <format>log-fail</format>
                     <description>Similar behaviour to process, but validate RRSIGs on responses and log bogus responses.</description>
                   </valueHelp>
                   <valueHelp>
                     <format>validate</format>
                     <description>Full blown DNSSEC validation. Send SERVFAIL to clients on bogus responses.</description>
                   </valueHelp>
                   <constraint>
                     <regex>(off|process-no-validate|process|log-fail|validate)</regex>
                   </constraint>
                 </properties>
                 <defaultValue>process-no-validate</defaultValue>
               </leafNode>
               <tagNode name="domain">
                 <properties>
                   <help>Domain to forward to a custom DNS server</help>
                   <valueHelp>
                     <format>txt</format>
                     <description>An absolute DNS domain name</description>
                   </valueHelp>
                   <constraint>
                     <validator name="fqdn"/>
                   </constraint>
                 </properties>
                 <children>
                   #include <include/name-server-ipv4-ipv6-port.xml.i>
                   <leafNode name="addnta">
                     <properties>
                       <help>Add NTA (negative trust anchor) for this domain (must be set if the domain does not support DNSSEC)</help>
                       <valueless/>
                     </properties>
                   </leafNode>
                   <leafNode name="recursion-desired">
                     <properties>
                       <help>Set the "recursion desired" bit in requests to the upstream nameserver</help>
                       <valueless/>
                     </properties>
                   </leafNode>
                 </children>
               </tagNode>
               <tagNode name="authoritative-domain">
                 <properties>
                   <help>Domain to host authoritative records for</help>
                   <valueHelp>
                     <format>txt</format>
                     <description>An absolute DNS domain name</description>
                   </valueHelp>
                   <constraint>
                     <validator name="fqdn"/>
                   </constraint>
                 </properties>
                 <children>
                   <node name="records">
                     <properties>
                       <help>DNS zone records</help>
                     </properties>
                     <children>
                       <tagNode name="a">
                         <properties>
                           <help>A record</help>
                           <valueHelp>
                             <format>txt</format>
                             <description>A DNS name relative to the root record</description>
                           </valueHelp>
                           <valueHelp>
                             <format>@</format>
                             <description>Root record</description>
                           </valueHelp>
                           <valueHelp>
                             <format>any</format>
                             <description>Wildcard record (any subdomain)</description>
                           </valueHelp>
                           <constraint>
                             <regex>([-_a-zA-Z0-9.]{1,63}|@|any)(?&lt;!\.)</regex>
                           </constraint>
                         </properties>
                         <children>
                           <leafNode name="address">
                             <properties>
                               <help>IPv4 address</help>
                               <valueHelp>
                                 <format>ipv4</format>
                                 <description>IPv4 address</description>
                               </valueHelp>
                               <multi/>
                               <constraint>
                                 <validator name="ipv4-address"/>
                               </constraint>
                             </properties>
                           </leafNode>
                           #include <include/dns/time-to-live.xml.i>
                           <leafNode name="ttl">
                               <defaultValue>300</defaultValue>
                           </leafNode>
                           #include <include/generic-disable-node.xml.i>
                         </children>
                       </tagNode>
                       <tagNode name="aaaa">
                         <properties>
                           <help>AAAA record</help>
                           <valueHelp>
                             <format>txt</format>
                             <description>A DNS name relative to the root record</description>
                           </valueHelp>
                           <valueHelp>
                             <format>@</format>
                             <description>Root record</description>
                           </valueHelp>
                           <valueHelp>
                             <format>any</format>
                             <description>Wildcard record (any subdomain)</description>
                           </valueHelp>
                           <constraint>
                             <regex>([-_a-zA-Z0-9.]{1,63}|@|any)(?&lt;!\.)</regex>
                           </constraint>
                         </properties>
                         <children>
                           <leafNode name="address">
                             <properties>
                               <help>IPv6 address</help>
                               <valueHelp>
                                 <format>ipv6</format>
                                 <description>IPv6 address</description>
                               </valueHelp>
                               <multi/>
                               <constraint>
                                 <validator name="ipv6-address"/>
                               </constraint>
                             </properties>
                           </leafNode>
                           #include <include/dns/time-to-live.xml.i>
                           <leafNode name="ttl">
                               <defaultValue>300</defaultValue>
                           </leafNode>
                           #include <include/generic-disable-node.xml.i>
                         </children>
                       </tagNode>
                       <tagNode name="cname">
                         <properties>
                           <help>CNAME record</help>
                           <valueHelp>
                             <format>txt</format>
                             <description>A DNS name relative to the root record</description>
                           </valueHelp>
                           <valueHelp>
                             <format>@</format>
                             <description>Root record</description>
                           </valueHelp>
                           <constraint>
                             <regex>([-_a-zA-Z0-9.]{1,63}|@)(?&lt;!\.)</regex>
                           </constraint>
                         </properties>
                         <children>
                           <leafNode name="target">
                             <properties>
                               <help>Target DNS name</help>
                               <valueHelp>
                                 <format>name.example.com</format>
                                 <description>Absolute DNS name</description>
                               </valueHelp>
                               <constraint>
                                 <regex>[-_a-zA-Z0-9.]{1,63}(?&lt;!\.)</regex>
                               </constraint>
                             </properties>
                           </leafNode>
                           #include <include/dns/time-to-live.xml.i>
                           <leafNode name="ttl">
                               <defaultValue>300</defaultValue>
                           </leafNode>
                           #include <include/generic-disable-node.xml.i>
                         </children>
                       </tagNode>
                       <tagNode name="mx">
                         <properties>
                           <help>MX record</help>
                           <valueHelp>
                             <format>txt</format>
                             <description>A DNS name relative to the root record</description>
                           </valueHelp>
                           <valueHelp>
                             <format>@</format>
                             <description>Root record</description>
                           </valueHelp>
                           <constraint>
                             <regex>([-_a-zA-Z0-9.]{1,63}|@)(?&lt;!\.)</regex>
                           </constraint>
                         </properties>
                         <children>
                           <tagNode name="server">
                             <properties>
                               <help>Mail server</help>
                               <valueHelp>
                                 <format>name.example.com</format>
                                 <description>Absolute DNS name</description>
                               </valueHelp>
                               <constraint>
                                 <regex>[-_a-zA-Z0-9.]{1,63}(?&lt;!\.)</regex>
                               </constraint>
                             </properties>
                             <children>
                               <leafNode name="priority">
                                 <properties>
                                   <help>Server priority</help>
                                   <valueHelp>
                                     <format>u32:1-999</format>
                                     <description>Server priority (lower numbers are higher priority)</description>
                                   </valueHelp>
                                   <constraint>
                                     <validator name="numeric" argument="--range 1-999"/>
                                   </constraint>
                                 </properties>
                                 <defaultValue>10</defaultValue>
                               </leafNode>
                             </children>
                           </tagNode>
                           #include <include/dns/time-to-live.xml.i>
                           <leafNode name="ttl">
                               <defaultValue>300</defaultValue>
                           </leafNode>
                           #include <include/generic-disable-node.xml.i>
                         </children>
                       </tagNode>
                       <tagNode name="ns">
                         <properties>
                           <help>NS record</help>
                           <valueHelp>
                             <format>txt</format>
                             <description>A DNS name relative to the root record</description>
                           </valueHelp>
                           <constraint>
                             <regex>([-_a-zA-Z0-9.]{1,63}|@)(?&lt;!\.)</regex>
                           </constraint>
                         </properties>
                         <children>
                           <leafNode name="target">
                             <properties>
                               <help>Target DNS server authoritative for subdomain</help>
                               <valueHelp>
                                 <format>nsXX.example.com</format>
                                 <description>Absolute DNS name</description>
                               </valueHelp>
                               <constraint>
                                 <regex>[-_a-zA-Z0-9.]{1,63}(?&lt;!\.)</regex>
                               </constraint>
                             </properties>
                           </leafNode>
                           #include <include/dns/time-to-live.xml.i>
                           <leafNode name="ttl">
                               <defaultValue>300</defaultValue>
                           </leafNode>
                           #include <include/generic-disable-node.xml.i>
                         </children>
                       </tagNode>
                       <tagNode name="ptr">
                         <properties>
                           <help>PTR record</help>
                           <valueHelp>
                             <format>txt</format>
                             <description>A DNS name relative to the root record</description>
                           </valueHelp>
                           <valueHelp>
                             <format>@</format>
                             <description>Root record</description>
                           </valueHelp>
                           <constraint>
                             <regex>([-_a-zA-Z0-9.]{1,63}|@)(?&lt;!\.)</regex>
                           </constraint>
                         </properties>
                         <children>
                           <leafNode name="target">
                             <properties>
                               <help>Target DNS name</help>
                               <valueHelp>
                                 <format>name.example.com</format>
                                 <description>Absolute DNS name</description>
                               </valueHelp>
                               <constraint>
                                 <regex>[-_a-zA-Z0-9.]{1,63}(?&lt;!\.)</regex>
                               </constraint>
                             </properties>
                           </leafNode>
                           #include <include/dns/time-to-live.xml.i>
                           <leafNode name="ttl">
                               <defaultValue>300</defaultValue>
                           </leafNode>
                           #include <include/generic-disable-node.xml.i>
                         </children>
                       </tagNode>
                       <tagNode name="txt">
                         <properties>
                           <help>TXT record</help>
                           <valueHelp>
                             <format>txt</format>
                             <description>A DNS name relative to the root record</description>
                           </valueHelp>
                           <valueHelp>
                             <format>@</format>
                             <description>Root record</description>
                           </valueHelp>
                           <constraint>
                             <regex>([-_a-zA-Z0-9.]{1,63}|@)(?&lt;!\.)</regex>
                           </constraint>
                         </properties>
                         <children>
                           <leafNode name="value">
                             <properties>
                               <help>Record contents</help>
                               <valueHelp>
                                 <format>txt</format>
                                 <description>Record contents</description>
                               </valueHelp>
                               <multi/>
                             </properties>
                           </leafNode>
                           #include <include/dns/time-to-live.xml.i>
                           <leafNode name="ttl">
                               <defaultValue>300</defaultValue>
                           </leafNode>
                           #include <include/generic-disable-node.xml.i>
                         </children>
                       </tagNode>
                       <tagNode name="spf">
                         <properties>
                           <help>SPF record</help>
                           <valueHelp>
                             <format>txt</format>
                             <description>A DNS name relative to the root record</description>
                           </valueHelp>
                           <valueHelp>
                             <format>@</format>
                             <description>Root record</description>
                           </valueHelp>
                           <constraint>
                             <regex>([-_a-zA-Z0-9.]{1,63}|@)(?&lt;!\.)</regex>
                           </constraint>
                         </properties>
                         <children>
                           <leafNode name="value">
                             <properties>
                               <help>Record contents</help>
                               <valueHelp>
                                 <format>txt</format>
                                 <description>Record contents</description>
                               </valueHelp>
                             </properties>
                           </leafNode>
                           #include <include/dns/time-to-live.xml.i>
                           <leafNode name="ttl">
                               <defaultValue>300</defaultValue>
                           </leafNode>
                           #include <include/generic-disable-node.xml.i>
                         </children>
                       </tagNode>
                       <tagNode name="srv">
                         <properties>
                           <help>SRV record</help>
                           <valueHelp>
                             <format>txt</format>
                             <description>A DNS name relative to the root record</description>
                           </valueHelp>
                           <valueHelp>
                             <format>@</format>
                             <description>Root record</description>
                           </valueHelp>
                           <constraint>
                             <regex>([-_a-zA-Z0-9.]{1,63}|@)(?&lt;!\.)</regex>
                           </constraint>
                         </properties>
                         <children>
                           <tagNode name="entry">
                             <properties>
                               <help>Service entry</help>
                               <valueHelp>
                                 <format>u32:0-65535</format>
                                 <description>Entry number</description>
                               </valueHelp>
                               <constraint>
                                 <validator name="numeric" argument="--range 0-65535"/>
                               </constraint>
                             </properties>
                             <children>
                               <leafNode name="hostname">
                                 <properties>
                                   <help>Server hostname</help>
                                   <valueHelp>
                                     <format>name.example.com</format>
                                     <description>Absolute DNS name</description>
                                   </valueHelp>
                                   <constraint>
                                     <regex>[-_a-zA-Z0-9.]{1,63}(?&lt;!\.)</regex>
                                   </constraint>
                                 </properties>
                               </leafNode>
                               <leafNode name="port">
                                 <properties>
                                   <help>Port number</help>
                                   <valueHelp>
                                     <format>u32:0-65535</format>
                                     <description>TCP/UDP port number</description>
                                   </valueHelp>
                                   <constraint>
                                     <validator name="numeric" argument="--range 0-65536"/>
                                   </constraint>
                                 </properties>
                               </leafNode>
                               <leafNode name="priority">
                                 <properties>
                                   <help>Entry priority</help>
                                   <valueHelp>
                                     <format>u32:0-65535</format>
                                     <description>Entry priority (lower numbers are higher priority)</description>
                                   </valueHelp>
                                   <constraint>
                                     <validator name="numeric" argument="--range 0-65535"/>
                                   </constraint>
                                 </properties>
                                 <defaultValue>10</defaultValue>
                               </leafNode>
                               <leafNode name="weight">
                                 <properties>
                                   <help>Entry weight</help>
                                   <valueHelp>
                                     <format>u32:0-65535</format>
                                     <description>Entry weight</description>
                                   </valueHelp>
                                   <constraint>
                                     <validator name="numeric" argument="--range 0-65535"/>
                                   </constraint>
                                 </properties>
                                 <defaultValue>0</defaultValue>
                               </leafNode>
                             </children>
                           </tagNode>
                           #include <include/dns/time-to-live.xml.i>
                           <leafNode name="ttl">
                               <defaultValue>300</defaultValue>
                           </leafNode>
                           #include <include/generic-disable-node.xml.i>
                         </children>
                       </tagNode>
                       <tagNode name="naptr">
                         <properties>
                           <help>NAPTR record</help>
                           <valueHelp>
                             <format>txt</format>
                             <description>A DNS name relative to the root record</description>
                           </valueHelp>
                           <valueHelp>
                             <format>@</format>
                             <description>Root record</description>
                           </valueHelp>
                           <constraint>
                             <regex>([-_a-zA-Z0-9.]{1,63}|@)(?&lt;!\.)</regex>
                           </constraint>
                         </properties>
                         <children>
                           <tagNode name="rule">
                             <properties>
                               <help>NAPTR rule</help>
                               <valueHelp>
                                 <format>u32:0-65535</format>
                                 <description>Rule number</description>
                               </valueHelp>
                               <constraint>
                                 <validator name="numeric" argument="--range 0-65535"/>
                               </constraint>
                             </properties>
                             <children>
                               <leafNode name="order">
                                 <properties>
                                   <help>Rule order</help>
                                   <valueHelp>
                                     <format>u32:0-65535</format>
                                     <description>Rule order (lower order is evaluated first)</description>
                                   </valueHelp>
                                   <constraint>
                                     <validator name="numeric" argument="--range 0-65535"/>
                                   </constraint>
                                 </properties>
                               </leafNode>
                               <leafNode name="preference">
                                 <properties>
                                   <help>Rule preference</help>
                                   <valueHelp>
                                     <format>u32:0-65535</format>
                                     <description>Rule preference</description>
                                   </valueHelp>
                                   <constraint>
                                     <validator name="numeric" argument="--range 0-65535"/>
                                   </constraint>
                                 </properties>
                                 <defaultValue>0</defaultValue>
                               </leafNode>
                               <leafNode name="lookup-srv">
                                 <properties>
                                   <help>S flag</help>
                                   <valueless/>
                                 </properties>
                               </leafNode>
                               <leafNode name="lookup-a">
                                 <properties>
                                   <help>A flag</help>
                                   <valueless/>
                                 </properties>
                               </leafNode>
                               <leafNode name="resolve-uri">
                                 <properties>
                                   <help>U flag</help>
                                   <valueless/>
                                 </properties>
                               </leafNode>
                               <leafNode name="protocol-specific">
                                 <properties>
                                   <help>P flag</help>
                                   <valueless/>
                                 </properties>
                               </leafNode>
                               <leafNode name="service">
                                 <properties>
                                   <help>Service type</help>
                                   <constraint>
                                     <regex>[a-zA-Z][a-zA-Z0-9]{0,31}(\+[a-zA-Z][a-zA-Z0-9]{0,31})?</regex>
                                   </constraint>
                                 </properties>
                               </leafNode>
                               <leafNode name="regexp">
                                 <properties>
                                   <help>Regular expression</help>
                                 </properties>
                               </leafNode>
                               <leafNode name="replacement">
                                 <properties>
                                   <help>Replacement DNS name</help>
                                   <valueHelp>
                                     <format>name.example.com</format>
                                     <description>Absolute DNS name</description>
                                   </valueHelp>
                                   <constraint>
                                     <regex>[-_a-zA-Z0-9.]{1,63}(?&lt;!\.)</regex>
                                   </constraint>
                                 </properties>
                               </leafNode>
                             </children>
                           </tagNode>
                           #include <include/dns/time-to-live.xml.i>
                           <leafNode name="ttl">
                               <defaultValue>300</defaultValue>
                           </leafNode>
                           #include <include/generic-disable-node.xml.i>
                         </children>
                       </tagNode>
                     </children>
                   </node>
                   #include <include/generic-disable-node.xml.i>
                 </children>
               </tagNode>
               <leafNode name="ignore-hosts-file">
                 <properties>
                   <help>Do not use local /etc/hosts file in name resolution</help>
                   <valueless/>
                 </properties>
               </leafNode>
               <leafNode name="no-serve-rfc1918">
                 <properties>
                   <help>Makes the server authoritatively not aware of RFC1918 addresses</help>
 		          <valueless/>
                 </properties>
               </leafNode>
               <leafNode name="allow-from">
                 <properties>
                   <help>Networks allowed to query this server</help>
                   <valueHelp>
                     <format>ipv4net</format>
                     <description>IP address and prefix length</description>
                   </valueHelp>
                   <valueHelp>
                     <format>ipv6net</format>
                     <description>IPv6 address and prefix length</description>
                   </valueHelp>
                   <multi/>
                   <constraint>
                     <validator name="ip-prefix"/>
                   </constraint>
                 </properties>
               </leafNode>
               #include <include/listen-address.xml.i>
               #include <include/port-number.xml.i>
               <leafNode name="port">
                 <defaultValue>53</defaultValue>
               </leafNode>
               <leafNode name="negative-ttl">
                 <properties>
                   <help>Maximum amount of time negative entries are cached</help>
                   <valueHelp>
                     <format>u32:0-7200</format>
                     <description>Seconds to cache NXDOMAIN entries</description>
                   </valueHelp>
                   <constraint>
                     <validator name="numeric" argument="--range 0-7200"/>
                   </constraint>
                 </properties>
                 <defaultValue>3600</defaultValue>
               </leafNode>
               <leafNode name="timeout">
                 <properties>
                   <help>Number of milliseconds to wait for a remote authoritative server to respond</help>
                   <valueHelp>
                     <format>u32:10-60000</format>
                     <description>Network timeout in milliseconds</description>
                   </valueHelp>
                   <constraint>
                     <validator name="numeric" argument="--range 10-60000"/>
                   </constraint>
                 </properties>
                 <defaultValue>1500</defaultValue>
               </leafNode>
               #include <include/name-server-ipv4-ipv6-port.xml.i>
+              #include <include/source-address-ipv4-ipv6-multi.xml.i>
               <leafNode name="source-address">
-                <properties>
-                  <help>Local addresses from which to send DNS queries</help>
-                  <completionHelp>
-                    <script>${vyos_completion_dir}/list_local_ips.sh --both</script>
-                  </completionHelp>
-                  <valueHelp>
-                    <format>ipv4</format>
-                    <description>IPv4 address from which to send traffic</description>
-                  </valueHelp>
-                  <valueHelp>
-                    <format>ipv6</format>
-                    <description>IPv6 address from which to send traffic</description>
-                  </valueHelp>
-                  <multi/>
-                  <constraint>
-                    <validator name="ip-address"/>
-                  </constraint>
-                </properties>
                 <defaultValue>0.0.0.0 ::</defaultValue>
               </leafNode>
               <leafNode name="system">
                 <properties>
                   <help>Use system name servers</help>
                   <valueless/>
                 </properties>
               </leafNode>
             </children>
           </node>
         </children>
       </node>
     </children>
   </node>
 </interfaceDefinition>
diff --git a/interface-definitions/include/radius-server-ipv4-ipv6.xml.i b/interface-definitions/include/radius-server-ipv4-ipv6.xml.i
index a0cdcd7c3..e454b9025 100644
--- a/interface-definitions/include/radius-server-ipv4-ipv6.xml.i
+++ b/interface-definitions/include/radius-server-ipv4-ipv6.xml.i
@@ -1,71 +1,51 @@
 <!-- include start from radius-server-ipv4-ipv6.xml.i -->
 <node name="radius">
   <properties>
     <help>RADIUS based user authentication</help>
   </properties>
   <children>
     <tagNode name="server">
       <properties>
         <help>RADIUS server configuration</help>
         <valueHelp>
           <format>ipv4</format>
           <description>RADIUS server IPv4 address</description>
         </valueHelp>
         <valueHelp>
           <format>ipv6</format>
           <description>RADIUS server IPv6 address</description>
         </valueHelp>
         <constraint>
           <validator name="ip-address"/>
         </constraint>
       </properties>
       <children>
         #include <include/generic-disable-node.xml.i>
         #include <include/radius-server-key.xml.i>
         #include <include/radius-server-auth-port.xml.i>
       </children>
     </tagNode>
-    <leafNode name="source-address">
-      <properties>
-        <help>Source IP address used to initiate connection</help>
-        <completionHelp>
-          <script>${vyos_completion_dir}/list_local_ips.sh --both</script>
-        </completionHelp>
-        <valueHelp>
-          <format>ipv4</format>
-          <description>IPv4 source address</description>
-        </valueHelp>
-        <valueHelp>
-          <format>ipv6</format>
-          <description>IPv6 source address</description>
-        </valueHelp>
-        <constraint>
-          <validator name="ipv4-address"/>
-          <validator name="ipv6-address"/>
-        </constraint>
-        <multi/>
-      </properties>
-    </leafNode>
+    #include <include/source-address-ipv4-ipv6-multi.xml.i>
     <leafNode name="security-mode">
       <properties>
         <help>Security mode for RADIUS authentication</help>
         <completionHelp>
           <list>mandatory optional</list>
         </completionHelp>
         <valueHelp>
           <format>mandatory</format>
           <description>Deny access immediately if RADIUS answers with Access-Reject</description>
         </valueHelp>
         <valueHelp>
           <format>optional</format>
           <description>Pass to the next authentication method if RADIUS answers with Access-Reject</description>
         </valueHelp>
         <constraint>
           <regex>(mandatory|optional)</regex>
         </constraint>
       </properties>
       <defaultValue>optional</defaultValue>
     </leafNode>
   </children>
 </node>
 <!-- include end -->
diff --git a/interface-definitions/include/source-address-ipv4-ipv6-multi.xml.i b/interface-definitions/include/source-address-ipv4-ipv6-multi.xml.i
new file mode 100644
index 000000000..d56ca5be6
--- /dev/null
+++ b/interface-definitions/include/source-address-ipv4-ipv6-multi.xml.i
@@ -0,0 +1,22 @@
+<!-- include start from source-address-ipv4-ipv6-multi.xml.i -->
+<leafNode name="source-address">
+  <properties>
+    <help>Source IP address used to initiate connection</help>
+    <completionHelp>
+      <script>${vyos_completion_dir}/list_local_ips.sh --both</script>
+    </completionHelp>
+    <valueHelp>
+      <format>ipv4</format>
+      <description>IPv4 source address</description>
+    </valueHelp>
+    <valueHelp>
+      <format>ipv6</format>
+      <description>IPv6 source address</description>
+    </valueHelp>
+    <constraint>
+      <validator name="ip-address"/>
+    </constraint>
+    <multi/>
+  </properties>
+</leafNode>
+<!-- include end -->
diff --git a/interface-definitions/system-login.xml.in b/interface-definitions/system-login.xml.in
index 30fea91b0..a2f8beead 100644
--- a/interface-definitions/system-login.xml.in
+++ b/interface-definitions/system-login.xml.in
@@ -1,316 +1,302 @@
 <?xml version="1.0"?>
 <interfaceDefinition>
   <node name="system">
     <children>
       <node name="login" owner="${vyos_conf_scripts_dir}/system-login.py">
         <properties>
           <help>System User Login Configuration</help>
           <priority>400</priority>
         </properties>
         <children>
           <tagNode name="user">
             <properties>
               <help>Local user account information</help>
               <constraint>
                 #include <include/constraint/login-username.xml.i>
               </constraint>
               <constraintErrorMessage>Username contains illegal characters or\nexceeds 100 character limitation.</constraintErrorMessage>
             </properties>
             <children>
               <node name="authentication">
                 <properties>
                   <help>Authentication settings</help>
                 </properties>
                 <children>
                   <leafNode name="encrypted-password">
                     <properties>
                       <help>Encrypted password</help>
                       <constraint>
                         <regex>(\*|\!)</regex>
                         <regex>[a-zA-Z0-9\.\/]{13}</regex>
                         <regex>\$1\$[a-zA-Z0-9\./]*\$[a-zA-Z0-9\./]{22}</regex>
                         <regex>\$5\$(rounds=[0-9]+\$)?[a-zA-Z0-9\./]*\$[a-zA-Z0-9\./]{43}</regex>
                         <regex>\$6\$(rounds=[0-9]+\$)?[a-zA-Z0-9\./]*\$[a-zA-Z0-9\./]{86}</regex>
                       </constraint>
                       <constraintErrorMessage>Invalid encrypted password for $VAR(../../@).</constraintErrorMessage>
                     </properties>
                     <defaultValue>!</defaultValue>
                   </leafNode>
                   <node name="otp">
                     <properties>
                       <help>One-Time-Pad (two-factor) authentication parameters</help>
                     </properties>
                     <children>
                       <leafNode name="rate-limit">
                         <properties>
                           <help>Limit number of logins (rate-limit) per rate-time</help>
                           <valueHelp>
                             <format>u32:1-10</format>
                             <description>Number of attempts</description>
                           </valueHelp>
                           <constraint>
                             <validator name="numeric" argument="--range 1-10"/>
                           </constraint>
                           <constraintErrorMessage>Number of login attempts must me between 1 and 10</constraintErrorMessage>
                         </properties>
                         <defaultValue>3</defaultValue>
                       </leafNode>
                       <leafNode name="rate-time">
                         <properties>
                           <help>Limit number of logins (rate-limit) per rate-time</help>
                           <valueHelp>
                             <format>u32:15-600</format>
                             <description>Time interval</description>
                           </valueHelp>
                           <constraint>
                             <validator name="numeric" argument="--range 15-600"/>
                           </constraint>
                           <constraintErrorMessage>Rate limit time interval must be between 15 and 600 seconds</constraintErrorMessage>
                         </properties>
                         <defaultValue>30</defaultValue>
                       </leafNode>
                       <leafNode name="window-size">
                         <properties>
                           <help>Set window of concurrently valid codes</help>
                           <valueHelp>
                             <format>u32:1-21</format>
                             <description>Window size</description>
                           </valueHelp>
                           <constraint>
                             <validator name="numeric" argument="--range 1-21"/>
                           </constraint>
                           <constraintErrorMessage>Window of concurrently valid codes must be between 1 and 21</constraintErrorMessage>
                         </properties>
                         <defaultValue>3</defaultValue>
                       </leafNode>
                       <leafNode name="key">
                         <properties>
                           <help>Key/secret the token algorithm (see RFC4226)</help>
                           <valueHelp>
                             <format>txt</format>
                             <description>Base32 encoded key/token</description>
                           </valueHelp>
                           <constraint>
                             <regex>[a-zA-Z2-7]{26,10000}</regex>
                           </constraint>
                           <constraintErrorMessage>Key must only include base32 characters and be at least 26 characters long</constraintErrorMessage>
                         </properties>
                       </leafNode>
                     </children>
                   </node>
                   <leafNode name="plaintext-password">
                     <properties>
                       <help>Plaintext password used for encryption</help>
                     </properties>
                   </leafNode>
                   <tagNode name="public-keys">
                     <properties>
                       <help>Remote access public keys</help>
                       <valueHelp>
                         <format>txt</format>
                         <description>Key identifier used by ssh-keygen (usually of form user@host)</description>
                       </valueHelp>
                     </properties>
                     <children>
                       <leafNode name="key">
                         <properties>
                           <help>Public key value (Base64 encoded)</help>
                           <constraint>
                             <validator name="base64"/>
                           </constraint>
                         </properties>
                       </leafNode>
                       <leafNode name="options">
                         <properties>
                           <help>Optional public key options</help>
                         </properties>
                       </leafNode>
                       <leafNode name="type">
                         <properties>
                           <help>SSH public key type</help>
                           <completionHelp>
                             <list>ssh-dss ssh-rsa ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 ssh-ed25519 sk-ecdsa-sha2-nistp256@openssh.com sk-ssh-ed25519@openssh.com</list>
                           </completionHelp>
                           <valueHelp>
                             <format>ssh-dss</format>
                             <description>Digital Signature Algorithm (DSA) key support</description>
                           </valueHelp>
                           <valueHelp>
                             <format>ssh-rsa</format>
                             <description>Key pair based on RSA algorithm</description>
                           </valueHelp>
                           <valueHelp>
                             <format>ecdsa-sha2-nistp256</format>
                             <description>Elliptic Curve DSA with NIST P-256 curve</description>
                           </valueHelp>
                           <valueHelp>
                             <format>ecdsa-sha2-nistp384</format>
                             <description>Elliptic Curve DSA with NIST P-384 curve</description>
                           </valueHelp>
                           <valueHelp>
                             <format>ecdsa-sha2-nistp521</format>
                             <description>Elliptic Curve DSA with NIST P-521 curve</description>
                           </valueHelp>
                           <valueHelp>
                             <format>ssh-ed25519</format>
                             <description>Edwards-curve DSA with elliptic curve 25519</description>
                           </valueHelp>
                           <valueHelp>
                             <format>sk-ecdsa-sha2-nistp256@openssh.com</format>
                             <description>Elliptic Curve DSA security key</description>
                           </valueHelp>
                           <valueHelp>
                             <format>sk-ssh-ed25519@openssh.com</format>
                             <description>Elliptic curve 25519 security key</description>
                           </valueHelp>
                           <constraint>
                             <regex>(ssh-dss|ssh-rsa|ecdsa-sha2-nistp256|ecdsa-sha2-nistp384|ecdsa-sha2-nistp521|ssh-ed25519|sk-ecdsa-sha2-nistp256@openssh.com|sk-ssh-ed25519@openssh.com)</regex>
                           </constraint>
                         </properties>
                       </leafNode>
                     </children>
                   </tagNode>
                 </children>
               </node>
               <leafNode name="full-name">
                 <properties>
                   <help>Full name of the user (use quotes for names with spaces)</help>
                   <constraint>
                     <regex>[^:]*</regex>
                   </constraint>
                   <constraintErrorMessage>Cannot use ':' in full name</constraintErrorMessage>
                 </properties>
               </leafNode>
               <leafNode name="home-directory">
                 <properties>
                   <help>Home directory</help>
                   <valueHelp>
                     <format>txt</format>
                     <description>Path to home directory</description>
                   </valueHelp>
                   <constraint>
                     <regex>\/$|(\/[a-zA-Z_0-9-.]+)+</regex>
                   </constraint>
                 </properties>
               </leafNode>
             </children>
           </tagNode>
           #include <include/radius-server-ipv4-ipv6.xml.i>
           <node name="radius">
             <children>
               <tagNode name="server">
                 <children>
                   #include <include/radius-timeout.xml.i>
                   <leafNode name="priority">
                     <properties>
                       <help>Server priority</help>
                       <valueHelp>
                         <format>u32:1-255</format>
                         <description>Server priority</description>
                       </valueHelp>
                       <constraint>
                         <validator name="numeric" argument="--range 1-255"/>
                       </constraint>
                     </properties>
                     <defaultValue>255</defaultValue>
                   </leafNode>
                 </children>
               </tagNode>
               #include <include/interface/vrf.xml.i>
             </children>
           </node>
           <node name="tacacs">
             <properties>
               <help>TACACS+ based user authentication</help>
             </properties>
             <children>
               <tagNode name="server">
                 <properties>
                   <help>TACACS+ server configuration</help>
                   <valueHelp>
                     <format>ipv4</format>
                     <description>TACACS+ server IPv4 address</description>
                   </valueHelp>
                   <constraint>
                     <validator name="ipv4-address"/>
                   </constraint>
                 </properties>
                 <children>
                   #include <include/generic-disable-node.xml.i>
                   #include <include/radius-server-key.xml.i>
                   #include <include/port-number.xml.i>
                   <leafNode name="port">
                     <defaultValue>49</defaultValue>
                   </leafNode>
                 </children>
               </tagNode>
-              <leafNode name="source-address">
-                <properties>
-                  <help>Source IP used to communicate with TACACS+ server</help>
-                  <completionHelp>
-                    <script>${vyos_completion_dir}/list_local_ips.sh --ipv4</script>
-                  </completionHelp>
-                  <valueHelp>
-                    <format>ipv4</format>
-                    <description>IPv4 source address</description>
-                  </valueHelp>
-                  <constraint>
-                    <validator name="ipv4-address"/>
-                  </constraint>
-                </properties>
-              </leafNode>
+              #include <include/source-address-ipv4.xml.i>
               <leafNode name="security-mode">
                 <properties>
                   <help>Security mode for TACACS+ authentication</help>
                   <completionHelp>
                     <list>mandatory optional</list>
                   </completionHelp>
                   <valueHelp>
                     <format>mandatory</format>
                     <description>Deny access immediately if TACACS+ answers with REJECT</description>
                   </valueHelp>
                   <valueHelp>
                     <format>optional</format>
                     <description>Pass to the next authentication method if TACACS+ answers with REJECT</description>
                   </valueHelp>
                   <constraint>
                     <regex>(mandatory|optional)</regex>
                   </constraint>
                 </properties>
                 <defaultValue>optional</defaultValue>
               </leafNode>
               #include <include/radius-timeout.xml.i>
               #include <include/interface/vrf.xml.i>
             </children>
           </node>
           <leafNode name="max-login-session">
             <properties>
               <help>Maximum number of all login sessions</help>
               <valueHelp>
                 <format>u32:1-65536</format>
                 <description>Maximum number of all login sessions</description>
               </valueHelp>
               <constraint>
                 <validator name="numeric" argument="--range 1-65536"/>
               </constraint>
               <constraintErrorMessage>Maximum logins must be between 1 and 65536</constraintErrorMessage>
             </properties>
           </leafNode>
           <leafNode name="timeout">
             <properties>
               <help>Session timeout</help>
               <valueHelp>
                 <format>u32:5-604800</format>
                 <description>Session timeout in seconds</description>
               </valueHelp>
               <constraint>
                 <validator name="numeric" argument="--range 5-604800"/>
               </constraint>
               <constraintErrorMessage>Timeout must be between 5 and 604800 seconds</constraintErrorMessage>
             </properties>
           </leafNode>
         </children>
       </node>
     </children>
   </node>
 </interfaceDefinition>