diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/OsgiPropertyConstants.java b/web/gui/src/main/java/org/onosproject/ui/impl/OsgiPropertyConstants.java
new file mode 100644
index 0000000..9a03f1f
--- /dev/null
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/OsgiPropertyConstants.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.ui.impl;
+
+public final class OsgiPropertyConstants {
+    private OsgiPropertyConstants() {
+    }
+
+    public static final String TRAFFIC_REFRESH_MS = "trafficRefreshMs";
+    public static final int TRAFFIC_REFRESH_MS_DEFAULT = 5000;
+}
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/ProtectedIntentMonitor.java b/web/gui/src/main/java/org/onosproject/ui/impl/ProtectedIntentMonitor.java
index bb4e8ac..2fe3552 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/ProtectedIntentMonitor.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/ProtectedIntentMonitor.java
@@ -96,7 +96,6 @@
         SELECTED_INTENT
     }
 
-    private final long trafficPeriod;
     private final ServicesBundle services;
     private final TopologyViewMessageHandler msgHandler;
 
@@ -110,13 +109,11 @@
     /**
      * Constructs a protected intent monitor.
      *
-     * @param trafficPeriod traffic task period in ms
      * @param services      bundle of services
      * @param msgHandler    our message handler
      */
-    public ProtectedIntentMonitor(long trafficPeriod, ServicesBundle services,
+    public ProtectedIntentMonitor(ServicesBundle services,
                                   TopologyViewMessageHandler msgHandler) {
-        this.trafficPeriod = trafficPeriod;
         this.services = services;
         this.msgHandler = msgHandler;
     }
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java
index cae4760..02bc1ff 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessageHandler.java
@@ -173,7 +173,6 @@
 
     private static final String SLASH = "/";
 
-    private static final long TRAFFIC_PERIOD = 5000;
     private static final long SUMMARY_PERIOD = 30000;
 
     private static final Comparator<? super ControllerNode> NODE_COMPARATOR =
@@ -214,8 +213,8 @@
     public void init(UiConnection connection, ServiceDirectory directory) {
         super.init(connection, directory);
         appId = directory.get(CoreService.class).registerApplication(MY_APP_ID);
-        traffic = new TrafficMonitor(TRAFFIC_PERIOD, services, this);
-        protectedIntentMonitor = new ProtectedIntentMonitor(TRAFFIC_PERIOD, services, this);
+        traffic = new TrafficMonitor(services, this);
+        protectedIntentMonitor = new ProtectedIntentMonitor(services, this);
     }
 
     @Override
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TrafficMonitor.java b/web/gui/src/main/java/org/onosproject/ui/impl/TrafficMonitor.java
index b585ffc..73bda39 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TrafficMonitor.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/TrafficMonitor.java
@@ -59,13 +59,11 @@
     /**
      * Constructs a traffic monitor.
      *
-     * @param trafficPeriod  traffic task period in ms
      * @param servicesBundle bundle of services
      * @param msgHandler     our message handler
      */
-    public TrafficMonitor(long trafficPeriod, ServicesBundle servicesBundle,
-                          TopologyViewMessageHandler msgHandler) {
-        super(trafficPeriod, servicesBundle, msgHandler);
+    public TrafficMonitor(ServicesBundle servicesBundle, TopologyViewMessageHandler msgHandler) {
+        super(servicesBundle, msgHandler);
         this.msgHandler = msgHandler;
 
     }
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TrafficMonitorBase.java b/web/gui/src/main/java/org/onosproject/ui/impl/TrafficMonitorBase.java
index ae3c909..c585d92 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TrafficMonitorBase.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/TrafficMonitorBase.java
@@ -292,10 +292,6 @@
         CUSTOM_TRAFFIC_MONITOR
     }
 
-    /**
-     * Number of milliseconds between invocations of sending traffic data.
-     */
-    protected final long trafficPeriod;
 
     /**
      * Holds references to services.
@@ -314,14 +310,11 @@
      * Constructs the monitor, initializing the task period and
      * services bundle reference.
      *
-     * @param trafficPeriod  traffic task period in ms
      * @param servicesBundle bundle of services
      * @param msgHandler Traffic Message handler
      */
-    protected TrafficMonitorBase(long trafficPeriod,
-                                 ServicesBundle servicesBundle,
+    protected TrafficMonitorBase(ServicesBundle servicesBundle,
                                  TopoologyTrafficMessageHandlerAbstract msgHandler) {
-        this.trafficPeriod = trafficPeriod;
         this.services = servicesBundle;
         this.msgHandler = msgHandler;
         timer = new Timer("uiTopo-" + getClass().getSimpleName());
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java b/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
index 73de4c1..d47367b 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/UiExtensionManager.java
@@ -33,6 +33,7 @@
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.onlab.util.Tools;
+import org.onosproject.cfg.ComponentConfigService;
 import org.onosproject.mastership.MastershipService;
 import org.onosproject.store.serializers.KryoNamespaces;
 import org.onosproject.store.service.ConsistentMap;
@@ -61,9 +62,12 @@
 import org.onosproject.ui.impl.topo.model.UiSharedTopologyModel;
 import org.onosproject.ui.lion.LionBundle;
 import org.onosproject.ui.lion.LionUtils;
+import org.onosproject.ui.topo.AbstractTopoMonitor;
+import org.osgi.service.component.ComponentContext;
 import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Modified;
 import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.component.annotations.ReferenceCardinality;
 import org.slf4j.Logger;
@@ -71,6 +75,7 @@
 
 import java.math.BigInteger;
 import java.security.SecureRandom;
+import java.util.Dictionary;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Locale;
@@ -88,13 +93,23 @@
 import static org.onosproject.security.AppPermission.Type.UI_WRITE;
 import static org.onosproject.ui.UiView.Category.NETWORK;
 import static org.onosproject.ui.UiView.Category.PLATFORM;
+import static org.onosproject.ui.impl.OsgiPropertyConstants.TRAFFIC_REFRESH_MS;
+import static org.onosproject.ui.impl.OsgiPropertyConstants.TRAFFIC_REFRESH_MS_DEFAULT;
 import static org.onosproject.ui.impl.lion.BundleStitcher.generateBundles;
 
 /**
  * Manages the user interface extensions.
  */
-@Component(immediate = true, service = { UiExtensionService.class, UiPreferencesService.class, SpriteService.class,
-        UiTokenService.class })
+@Component(immediate = true,
+        service = {
+                UiExtensionService.class,
+                UiPreferencesService.class,
+                SpriteService.class,
+                UiTokenService.class
+        },
+        property = {
+                TRAFFIC_REFRESH_MS + ":Integer=" + TRAFFIC_REFRESH_MS_DEFAULT,
+        })
 public class UiExtensionManager
         implements UiExtensionService, UiPreferencesService, SpriteService,
         UiTokenService {
@@ -156,6 +171,9 @@
     protected StorageService storageService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY)
+    protected ComponentConfigService cfgService;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY)
     private UiSharedTopologyModel sharedModel;
 
     // User preferences
@@ -178,6 +196,7 @@
 
     private LionBundle navLion;
 
+    protected int trafficRefreshMs = TRAFFIC_REFRESH_MS_DEFAULT;
 
     private String lionNavText(String id) {
         return navLion.getValue("nav_item_" + id);
@@ -281,7 +300,7 @@
 
 
     @Activate
-    public void activate() {
+    public void activate(ComponentContext context) {
         Serializer serializer = Serializer.using(KryoNamespaces.API,
                      ObjectNode.class, ArrayNode.class,
                      JsonNodeFactory.class, LinkedHashMap.class,
@@ -303,6 +322,7 @@
                 .withRelaxedReadConsistency()
                 .build();
         tokens = tokensConsistentMap.asJavaMap();
+        cfgService.registerProperties(getClass());
 
         register(core);
 
@@ -310,7 +330,8 @@
     }
 
     @Deactivate
-    public void deactivate() {
+    public void deactivate(ComponentContext context) {
+        cfgService.unregisterProperties(getClass(), false);
         prefsConsistentMap.removeListener(prefsListener);
         eventHandlingExecutor.shutdown();
         UiWebSocketServlet.closeAll();
@@ -318,6 +339,20 @@
         log.info("Stopped");
     }
 
+    @Modified
+    protected void modified(ComponentContext context) {
+        Dictionary<?, ?> properties = context.getProperties();
+        Integer trafficRefresh = Tools.getIntegerProperty(properties, TRAFFIC_REFRESH_MS);
+
+        if (trafficRefresh != null && trafficRefresh > 10) {
+            AbstractTopoMonitor.setTrafficPeriod(trafficRefresh);
+        } else if (trafficRefresh != null) {
+            log.warn("trafficRefresh must be greater than 10");
+        }
+
+        log.info("Settings: trafficRefresh={}", trafficRefresh);
+    }
+
     @Override
     public synchronized void register(UiExtension extension) {
         checkPermission(UI_WRITE);
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2TrafficMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2TrafficMessageHandler.java
index 5f5d84d..a6e0e9d 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2TrafficMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Topo2TrafficMessageHandler.java
@@ -80,9 +80,6 @@
     private static final String SRC = "src";
     private static final String DST = "dst";
 
-    // configuration parameters
-    private static final long TRAFFIC_PERIOD = 5000;
-
     protected ServicesBundle services;
     private static final String MY_APP_ID = "org.onosproject.gui";
     private ApplicationId appId;
@@ -96,7 +93,7 @@
         super.init(connection, directory);
         appId = directory.get(CoreService.class).registerApplication(MY_APP_ID);
         services = new ServicesBundle(directory);
-        traffic2 = new Traffic2Monitor(TRAFFIC_PERIOD, services, this);
+        traffic2 = new Traffic2Monitor(services, this);
         topoSession = ((UiWebSocket) connection).topoSession();
     }
 
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Traffic2Monitor.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Traffic2Monitor.java
index 6a41cf2..1c0fb81 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/Traffic2Monitor.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/Traffic2Monitor.java
@@ -48,13 +48,12 @@
     /**
      * Constructs a traffic monitor.
      *
-     * @param trafficPeriod  traffic task period in ms
      * @param servicesBundle bundle of services
      * @param msgHandler     our message handler
      */
-    public Traffic2Monitor(long trafficPeriod, ServicesBundle servicesBundle,
+    public Traffic2Monitor(ServicesBundle servicesBundle,
                            Topo2TrafficMessageHandler msgHandler) {
-        super(trafficPeriod, servicesBundle, msgHandler);
+        super(servicesBundle, msgHandler);
         this.msgHandler = msgHandler;
     }
 
