diff --git a/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterface.java b/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterface.java
index 30d08c8..ce28908 100644
--- a/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterface.java
+++ b/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterface.java
@@ -40,6 +40,7 @@
 import java.util.Map;
 import java.util.Random;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkArgument;
@@ -68,6 +69,10 @@
     // Neighbor priority
     private int priority   = PIMHelloOption.DEFAULT_PRIORITY;
 
+    private final int helloInterval;
+
+    private long lastHello;
+
     // Our current genid
     private final int generationId;
 
@@ -88,19 +93,23 @@
      * @param packetService reference to the packet service
      */
     private PIMInterface(Interface intf,
-                        short holdTime,
-                        int priority,
-                        short propagationDelay,
-                        short overrideInterval,
-                        PacketService packetService) {
+                         int helloInterval,
+                         short holdTime,
+                         int priority,
+                         short propagationDelay,
+                         short overrideInterval,
+                         PacketService packetService) {
 
         onosInterface = intf;
         outputTreatment = createOutputTreatment();
+        this.helloInterval = helloInterval;
         this.holdtime = holdTime;
         this.packetService = packetService;
         IpAddress ourIp = getIpAddress();
         MacAddress mac = intf.mac();
 
+        lastHello = 0;
+
         generationId = new Random().nextInt();
 
         // Create a PIM Neighbor to represent ourselves for DR election.
@@ -232,6 +241,13 @@
      * result of a newly created interface.
      */
     public void sendHello() {
+        if (lastHello + TimeUnit.SECONDS.toMillis(helloInterval) >
+                System.currentTimeMillis()) {
+            return;
+        }
+
+        lastHello = System.currentTimeMillis();
+
         // Create the base PIM Packet and mark it a hello packet
         PIMPacket pimPacket = new PIMPacket(PIM.TYPE_HELLO);
 
@@ -401,6 +417,7 @@
     public static class Builder {
         private Interface intf;
         private PacketService packetService;
+        private int helloInterval = PIMInterfaceManager.DEFAULT_HELLO_INTERVAL;
         private short holdtime = PIMHelloOption.DEFAULT_HOLDTIME;
         private int priority   = PIMHelloOption.DEFAULT_PRIORITY;
         private short propagationDelay = PIMHelloOption.DEFAULT_PRUNEDELAY;
@@ -429,6 +446,17 @@
         }
 
         /**
+         * Users the specified hello interval.
+         *
+         * @param helloInterval hello interval in seconds
+         * @return this PIM interface builder
+         */
+        public Builder withHelloInterval(int helloInterval) {
+            this.helloInterval = helloInterval;
+            return this;
+        }
+
+        /**
          * Uses the specified hold time.
          *
          * @param holdTime hold time in seconds
@@ -481,8 +509,8 @@
             checkArgument(intf != null, "Must provide an interface");
             checkArgument(packetService != null, "Must provide a packet service");
 
-            return new PIMInterface(intf, holdtime, priority, propagationDelay,
-                    overrideInterval, packetService);
+            return new PIMInterface(intf, helloInterval, holdtime, priority,
+                    propagationDelay, overrideInterval, packetService);
         }
 
     }
diff --git a/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterfaceManager.java b/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterfaceManager.java
index d6205e5..248a233 100644
--- a/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterfaceManager.java
+++ b/apps/pim/src/main/java/org/onosproject/pim/impl/PIMInterfaceManager.java
@@ -59,20 +59,19 @@
     private static final Class<PimInterfaceConfig> PIM_INTERFACE_CONFIG_CLASS = PimInterfaceConfig.class;
     private static final String PIM_INTERFACE_CONFIG_KEY = "pimInterface";
 
-    private static final int DEFAULT_TIMEOUT_TASK_PERIOD_MS = 250;
+    public static final int DEFAULT_HELLO_INTERVAL = 30; // seconds
+
+    private static final int DEFAULT_TASK_PERIOD_MS = 250;
 
     // Create a Scheduled Executor service for recurring tasks
     private final ScheduledExecutorService scheduledExecutorService =
             Executors.newScheduledThreadPool(1);
 
-    // Wait for a bout 3 seconds before sending the initial hello messages.
-    // TODO: make this tunnable.
-    private final long initialHelloDelay = 3;
+    private final long initialHelloDelay = 1000;
 
-    // Send PIM hello packets: 30 seconds.
-    private final long pimHelloPeriod = 30;
+    private final long pimHelloPeriod = DEFAULT_TASK_PERIOD_MS;
 
-    private final int timeoutTaskPeriod = DEFAULT_TIMEOUT_TASK_PERIOD_MS;
+    private final int timeoutTaskPeriod = DEFAULT_TASK_PERIOD_MS;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected PacketService packetService;
@@ -121,7 +120,7 @@
         scheduledExecutorService.scheduleAtFixedRate(
                 SafeRecurringTask.wrap(
                         () -> pimInterfaces.values().forEach(PIMInterface::sendHello)),
-                initialHelloDelay, pimHelloPeriod, TimeUnit.SECONDS);
+                initialHelloDelay, pimHelloPeriod, TimeUnit.MILLISECONDS);
 
         // Schedule task to periodically time out expired neighbors
         scheduledExecutorService.scheduleAtFixedRate(
@@ -194,6 +193,9 @@
                 .withPacketService(packetService)
                 .withInterface(intf);
 
+        if (config.getHelloInterval().isPresent()) {
+            builder.withHelloInterval(config.getHelloInterval().get());
+        }
         if (config.getHoldTime().isPresent()) {
             builder.withHoldTime(config.getHoldTime().get());
         }
diff --git a/apps/pim/src/main/java/org/onosproject/pim/impl/PimInterfaceConfig.java b/apps/pim/src/main/java/org/onosproject/pim/impl/PimInterfaceConfig.java
index 8d8ad78..48969c3 100644
--- a/apps/pim/src/main/java/org/onosproject/pim/impl/PimInterfaceConfig.java
+++ b/apps/pim/src/main/java/org/onosproject/pim/impl/PimInterfaceConfig.java
@@ -28,6 +28,7 @@
 
     private static final String INTERFACE_NAME = "interfaceName";
     private static final String ENABLED = "enabled";
+    private static final String HELLO_INTERVAL = "helloInterval";
     private static final String HOLD_TIME = "holdTime";
     private static final String PRIORITY = "priority";
     private static final String PROPAGATION_DELAY = "propagationDelay";
@@ -53,6 +54,18 @@
     }
 
     /**
+     * Gets the hello interval of the interface.
+     *
+     * @return hello interval
+     */
+    public Optional<Integer> getHelloInterval() {
+        if (node.path(HELLO_INTERVAL).isMissingNode()) {
+            return Optional.empty();
+        }
+        return Optional.of(Integer.parseInt(node.path(HELLO_INTERVAL).asText()));
+    }
+
+    /**
      * Gets the HELLO hold time of the interface.
      *
      * @return hold time
