diff --git a/data/templates/pppoe/peer.j2 b/data/templates/pppoe/peer.j2
index 5e650fa3b..f30cefe63 100644
--- a/data/templates/pppoe/peer.j2
+++ b/data/templates/pppoe/peer.j2
@@ -1,85 +1,89 @@
 ### Autogenerated by interfaces-pppoe.py ###
 {{ '# ' ~ description if description is vyos_defined else '' }}
 
 # Require peer to provide the local IP address if it is not
 # specified explicitly in the config file.
 noipdefault
 
 # Don't show the password in logfiles:
 hide-password
 
 # Standard Link Control Protocol (LCP) parameters:
 lcp-echo-interval 20
 lcp-echo-failure 3
 
 # RFC 2516, paragraph 7 mandates that the following options MUST NOT be
 # requested and MUST be rejected if requested by the peer:
 # Address-and-Control-Field-Compression (ACFC)
 noaccomp
 
 # Asynchronous-Control-Character-Map (ACCM)
 default-asyncmap
 
 # Override any connect script that may have been set in /etc/ppp/options.
 connect /bin/true
 
 # Don't try to authenticate the remote node
 noauth
 
 # Don't try to proxy ARP for the remote endpoint. User can set proxy
 # arp entries up manually if they wish. More importantly, having
 # the "proxyarp" parameter set disables the "defaultroute" option.
 noproxyarp
 
 # Unlimited connection attempts
 maxfail 0
 
 plugin rp-pppoe.so {{ source_interface }}
 {% if access_concentrator is vyos_defined %}
 pppoe-ac "{{ access_concentrator }}"
 {% endif %}
 {% if service_name is vyos_defined %}
 pppoe-service "{{ service_name }}"
 {% endif %}
 {% if host_uniq is vyos_defined %}
 pppoe-host-uniq "{{ host_uniq }}"
 {% endif %}
 
 persist
 ifname {{ ifname }}
 ipparam {{ ifname }}
 debug
 mtu {{ mtu }}
 mru {{ mtu }}
 
 {% if authentication is vyos_defined %}
 {{ 'user "' + authentication.username + '"' if authentication.username is vyos_defined }}
 {{ 'password "' + authentication.password + '"' if authentication.password is vyos_defined }}
 {% endif %}
 
 {{ "usepeerdns" if no_peer_dns is not vyos_defined }}
 
 {% if ipv6 is vyos_defined %}
 +ipv6 {{ 'ipv6cp-use-ipaddr' if ipv6.address.autoconf is vyos_defined }}
 {% else %}
 noipv6
 {% endif %}
 
+{% if holdoff is vyos_defined %}
+holdoff {{ holdoff }}
+{% endif %}
+
 {% if connect_on_demand is vyos_defined %}
 demand
 # See T2249. PPP default route options should only be set when in on-demand
 # mode. As soon as we are not in on-demand mode the default-route handling is
 # passed to the ip-up.d/ip-down.s scripts which is required for VRF support.
 {%     if 'auto' in default_route %}
 defaultroute
 {{ 'defaultroute6' if ipv6 is vyos_defined }}
 {%     elif 'force' in default_route %}
 defaultroute
 replacedefaultroute
 {{ 'defaultroute6' if ipv6 is vyos_defined }}
 {%     endif %}
 {% else %}
 nodefaultroute
 noreplacedefaultroute
 {{ 'nodefaultroute6' if ipv6 is vyos_defined }}
 {% endif %}
diff --git a/interface-definitions/interfaces-pppoe.xml.in b/interface-definitions/interfaces-pppoe.xml.in
index c6fd7096b..b78f92c85 100644
--- a/interface-definitions/interfaces-pppoe.xml.in
+++ b/interface-definitions/interfaces-pppoe.xml.in
@@ -1,126 +1,140 @@
 <?xml version="1.0"?>
 <interfaceDefinition>
   <node name="interfaces">
     <children>
       <tagNode name="pppoe" owner="${vyos_conf_scripts_dir}/interfaces-pppoe.py">
         <properties>
           <help>Point-to-Point Protocol over Ethernet (PPPoE) Interface</help>
           <priority>322</priority>
           <constraint>
             <regex>pppoe[0-9]+</regex>
           </constraint>
           <constraintErrorMessage>PPPoE interface must be named pppoeN</constraintErrorMessage>
           <valueHelp>
             <format>pppoeN</format>
             <description>PPPoE dialer interface name</description>
           </valueHelp>
         </properties>
         <children>
           #include <include/pppoe-access-concentrator.xml.i>
           #include <include/interface/authentication.xml.i>
           #include <include/interface/dial-on-demand.xml.i>
           #include <include/interface/no-default-route.xml.i>
           #include <include/interface/default-route-distance.xml.i>
           #include <include/interface/dhcpv6-options.xml.i>
           #include <include/generic-description.xml.i>
           #include <include/interface/disable.xml.i>
           <leafNode name="idle-timeout">
             <properties>
               <help>Delay before disconnecting idle session (in seconds)</help>
               <valueHelp>
                 <format>u32:0-86400</format>
                 <description>Idle timeout in seconds</description>
               </valueHelp>
               <constraint>
                 <validator name="numeric" argument="--range 0-86400"/>
               </constraint>
               <constraintErrorMessage>Timeout must be in range 0 to 86400</constraintErrorMessage>
             </properties>
           </leafNode>
           <leafNode name="host-uniq">
             <properties>
               <help>PPPoE RFC2516 host-uniq tag</help>
               <valueHelp>
                 <format>txt</format>
                 <description>Host-uniq tag as byte string in HEX</description>
               </valueHelp>
               <constraint>
                 <regex>([a-fA-F0-9][a-fA-F0-9]){1,18}</regex>
               </constraint>
               <constraintErrorMessage>Host-uniq must be specified as hex-adecimal byte-string (even number of HEX characters)</constraintErrorMessage>
             </properties>
           </leafNode>
+          <leafNode name="holdoff">
+            <properties>
+              <help>Delay before re-dial to the access concentrator when PPP session terminated by peer (in seconds)</help>
+              <valueHelp>
+                <format>u32:0-86400</format>
+                <description>Holdoff time in seconds</description>
+              </valueHelp>
+              <constraint>
+                <validator name="numeric" argument="--range 0-86400"/>
+              </constraint>
+              <constraintErrorMessage>Holdoff must be in range 0 to 86400</constraintErrorMessage>
+            </properties>
+            <defaultValue>30</defaultValue>
+          </leafNode>
           <node name="ip">
             <properties>
               <help>IPv4 routing parameters</help>
             </properties>
             <children>
               #include <include/interface/adjust-mss.xml.i>
               #include <include/interface/disable-forwarding.xml.i>
               #include <include/interface/source-validation.xml.i>
             </children>
           </node>
           <node name="ipv6">
             <properties>
               <help>IPv6 routing parameters</help>
             </properties>
             <children>
               <node name="address">
                 <properties>
                   <help>IPv6 address configuration modes</help>
                 </properties>
                 <children>
                   #include <include/interface/ipv6-address-autoconf.xml.i>
                 </children>
               </node>
               #include <include/interface/adjust-mss.xml.i>
               #include <include/interface/disable-forwarding.xml.i>
             </children>
           </node>
           #include <include/source-interface.xml.i>
           <leafNode name="local-address">
             <properties>
               <help>IPv4 address of local end of the PPPoE link</help>
               <valueHelp>
                 <format>ipv4</format>
                 <description>Address of local end of the PPPoE link</description>
               </valueHelp>
               <constraint>
                 <validator name="ipv4-address"/>
               </constraint>
             </properties>
           </leafNode>
           #include <include/interface/mirror.xml.i>
           #include <include/interface/mtu-68-1500.xml.i>
           <leafNode name="mtu">
             <defaultValue>1492</defaultValue>
           </leafNode>
           #include <include/interface/no-peer-dns.xml.i>
           <leafNode name="remote-address">
             <properties>
               <help>IPv4 address of remote end of the PPPoE link</help>
               <valueHelp>
                 <format>ipv4</format>
                 <description>Address of remote end of the PPPoE link</description>
               </valueHelp>
               <constraint>
                 <validator name="ipv4-address"/>
               </constraint>
             </properties>
           </leafNode>
           <leafNode name="service-name">
             <properties>
               <help>Service name, only connect to access concentrators advertising this</help>
               <constraint>
                 <regex>[a-zA-Z0-9]+</regex>
               </constraint>
               <constraintErrorMessage>Service name must be alphanumeric only</constraintErrorMessage>
             </properties>
           </leafNode>
           #include <include/interface/redirect.xml.i>
           #include <include/interface/vrf.xml.i>
         </children>
       </tagNode>
     </children>
   </node>
 </interfaceDefinition>