diff --git a/drivers/optical/src/main/java/org/onosproject/drivers/optical/OpticalDriversLoader.java b/drivers/optical/src/main/java/org/onosproject/drivers/optical/OpticalDriversLoader.java
index af6edf9..f532dc9 100644
--- a/drivers/optical/src/main/java/org/onosproject/drivers/optical/OpticalDriversLoader.java
+++ b/drivers/optical/src/main/java/org/onosproject/drivers/optical/OpticalDriversLoader.java
@@ -34,9 +34,6 @@
 import org.onosproject.net.config.NetworkConfigRegistryAdapter;
 import org.onosproject.net.driver.AbstractDriverLoader;
 import org.onosproject.net.optical.OpticalDevice;
-import org.onosproject.ui.UiGlyph;
-import org.onosproject.ui.UiGlyphFactory;
-import org.onosproject.ui.UiExtensionService;
 
 import com.google.common.collect.ImmutableList;
 
@@ -53,35 +50,6 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected NetworkConfigRegistry registry = new NetworkConfigRegistryAdapter();
 
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected UiExtensionService uiExtensionService;
-
-    private UiGlyphFactory glyphFactory =
-        () -> ImmutableList.of(
-            new UiGlyph("policon", "0 0 64 64",
-                "M 32.024746,2 30.163615,19.069136 24.258784,3.015638 "
-                + "26.879599,19.985033 17.021343,6.007051 23.943688,21.71947 "
-                + "10.8045,10.769161 21.557349,24.15439 6.031794,16.978659 "
-                + "19.883076,27.1245 3.027943,24.21114 19.033986,30.42674 "
-                + "2,31.97526 19.069136,33.83639 3.015638,39.74122 "
-                + "19.985033,37.12041 6.007051,46.97866 21.719466,40.05632 "
-                + "10.769161,53.19551 24.154391,42.44265 16.978659,57.96822 "
-                + "27.124504,44.11693 24.21114,60.97206 30.426738,44.96602 "
-                + "31.975259,62 33.83639,44.93086 39.74122,60.98437 "
-                + "37.120405,44.01497 46.978663,57.99296 40.056317,42.28054 "
-                + "53.195507,53.23084 42.442656,39.84561 57.968215,47.02135 "
-                + "44.116927,36.8755 60.972063,39.78886 44.966018,33.57327 "
-                + "62,32.02475 44.930865,30.16362 60.984369,24.25878 "
-                + "44.014972,26.8796 57.992959,17.021342 42.280539,23.94369 "
-                + "53.23084,10.8045 39.845614,21.55735 47.021349,6.031794 "
-                + "36.875501,19.883076 39.788865,3.027943 33.573267,19.033986 Z "
-                + "m -0.05497,19.23081 A 10.768943,10.768943 0 0 1 "
-                + "42.769201,31.96977 10.768943,10.768943 0 0 1 "
-                + "32.030235,42.7692 10.768943,10.768943 0 0 1 "
-                + "21.230812,32.03023 10.768943,10.768943 0 0 1 "
-                + "31.969778,21.23081 Z")
-            );
-
     private final List<ConfigFactory> factories = ImmutableList.of(
          new ConfigFactory<DeviceId, FlowTableConfig>(DEVICE_SUBJECT_FACTORY,
                  FlowTableConfig.class,
@@ -109,7 +77,6 @@
     @Override
     protected void activate() {
         factories.forEach(registry::registerConfigFactory);
-        uiExtensionService.register(glyphFactory);
 
         super.activate();
     }
@@ -118,7 +85,6 @@
     @Override
     protected void deactivate() {
         factories.forEach(registry::unregisterConfigFactory);
-        uiExtensionService.unregister(glyphFactory);
         super.deactivate();
     }
 
diff --git a/drivers/optical/src/main/resources/optical-drivers.xml b/drivers/optical/src/main/resources/optical-drivers.xml
index ea670fc..ca0f130 100644
--- a/drivers/optical/src/main/resources/optical-drivers.xml
+++ b/drivers/optical/src/main/resources/optical-drivers.xml
@@ -93,21 +93,6 @@
 
     </driver>
 
-    <driver name="polatis" extends="default"
-            manufacturer="Polatis" hwVersion=".*" swVersion=".*">
-        <behaviour api="org.onosproject.net.optical.OpticalDevice"
-                   impl="org.onosproject.net.optical.DefaultOpticalDevice"/>
-        <behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
-                   impl="org.onosproject.driver.optical.handshaker.PolatisHandshaker"/>
-        <behaviour api="org.onosproject.net.behaviour.PowerConfig"
-                   impl="org.onosproject.driver.optical.power.OpenFlowPowerConfig"/>
-        <behaviour api="org.onosproject.net.behaviour.LambdaQuery"
-                   impl="org.onosproject.driver.optical.query.OpenFlowLambdaQuery"/>
-        <property name="meterCapable">false</property>
-        <property name="uiType">policon</property>
-        <property name="groupCapable">false</property>
-    </driver>
-
     <driver name="optical-config" manufacturer="config" hwVersion="config" swVersion="config">
         <behaviour api="org.onosproject.net.optical.OpticalDevice"
                    impl="org.onosproject.net.optical.DefaultOpticalDevice"/>
diff --git a/drivers/optical/src/test/java/org/onosproject/drivers/optical/OpticalDriversLoaderTest.java b/drivers/optical/src/test/java/org/onosproject/drivers/optical/OpticalDriversLoaderTest.java
index 70664e6..2fb2a38 100644
--- a/drivers/optical/src/test/java/org/onosproject/drivers/optical/OpticalDriversLoaderTest.java
+++ b/drivers/optical/src/test/java/org/onosproject/drivers/optical/OpticalDriversLoaderTest.java
@@ -17,7 +17,6 @@
 
 import org.junit.Before;
 import org.onosproject.net.driver.AbstractDriverLoaderTest;
-import org.onosproject.ui.UiExtensionServiceAdapter;
 
 /**
  * Optical drivers loader test.
@@ -27,6 +26,5 @@
     @Before
     public void setUp() {
         loader = new OpticalDriversLoader();
-        ((OpticalDriversLoader) loader).uiExtensionService = new UiExtensionServiceAdapter();
     }
 }
diff --git a/drivers/polatis/openflow/BUCK b/drivers/polatis/openflow/BUCK
new file mode 100644
index 0000000..704ad3d
--- /dev/null
+++ b/drivers/polatis/openflow/BUCK
@@ -0,0 +1,34 @@
+COMPILE_DEPS = [
+    '//lib:CORE_DEPS',
+    '//lib:openflowj',
+    '//protocols/openflow/api:onos-protocols-openflow-api',
+    '//apps/optical-model:onos-apps-optical-model',
+]
+
+APPS = [
+    'org.onosproject.drivers.optical',
+    'org.onosproject.optical-model',
+]
+
+TEST_DEPS = [
+    '//lib:TEST_ADAPTERS',
+    '//core/api:onos-api-tests',
+    '//utils/osgi:onlab-osgi-tests',
+]
+
+osgi_jar_with_tests (
+    deps = COMPILE_DEPS,
+    test_deps = TEST_DEPS,
+    resources_root = 'src/main/resources',
+    resources = glob(['src/main/resources/**']),
+)
+
+onos_app (
+    app_name = 'org.onosproject.drivers.polatis.openflow',
+    title = 'Polatis OpenFlow Device Drivers',
+    category = 'Drivers',
+    url = 'http://www.polatis.com',
+    description = 'ONOS Polatis OpenFlow Device Drivers application.',
+    required_apps = APPS
+)
+
diff --git a/drivers/optical/src/main/java/org/onosproject/driver/optical/query/OpenFlowLambdaQuery.java b/drivers/polatis/openflow/src/main/java/org/onosproject/drivers/polatis/openflow/OpenFlowLambdaQuery.java
similarity index 98%
rename from drivers/optical/src/main/java/org/onosproject/driver/optical/query/OpenFlowLambdaQuery.java
rename to drivers/polatis/openflow/src/main/java/org/onosproject/drivers/polatis/openflow/OpenFlowLambdaQuery.java
index f901c0d..3bfb93e 100644
--- a/drivers/optical/src/main/java/org/onosproject/driver/optical/query/OpenFlowLambdaQuery.java
+++ b/drivers/polatis/openflow/src/main/java/org/onosproject/drivers/polatis/openflow/OpenFlowLambdaQuery.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.driver.optical.query;
+package org.onosproject.drivers.polatis.openflow;
 
 import org.onlab.util.GuavaCollectors;
 import org.onlab.util.Spectrum;
diff --git a/drivers/optical/src/main/java/org/onosproject/driver/optical/power/OpenFlowPowerConfig.java b/drivers/polatis/openflow/src/main/java/org/onosproject/drivers/polatis/openflow/OpenFlowPowerConfig.java
similarity index 98%
rename from drivers/optical/src/main/java/org/onosproject/driver/optical/power/OpenFlowPowerConfig.java
rename to drivers/polatis/openflow/src/main/java/org/onosproject/drivers/polatis/openflow/OpenFlowPowerConfig.java
index 9a8f6a6..2255ba0 100644
--- a/drivers/optical/src/main/java/org/onosproject/driver/optical/power/OpenFlowPowerConfig.java
+++ b/drivers/polatis/openflow/src/main/java/org/onosproject/drivers/polatis/openflow/OpenFlowPowerConfig.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.onosproject.driver.optical.power;
+package org.onosproject.drivers.polatis.openflow;
 
 import com.google.common.collect.Range;
 import org.onosproject.net.DeviceId;
diff --git a/drivers/polatis/openflow/src/main/java/org/onosproject/drivers/polatis/openflow/PolatisDriversLoader.java b/drivers/polatis/openflow/src/main/java/org/onosproject/drivers/polatis/openflow/PolatisDriversLoader.java
new file mode 100644
index 0000000..f484e5d
--- /dev/null
+++ b/drivers/polatis/openflow/src/main/java/org/onosproject/drivers/polatis/openflow/PolatisDriversLoader.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2018 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.drivers.polatis.openflow;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.onosproject.net.driver.AbstractDriverLoader;
+import org.onosproject.net.optical.OpticalDevice;
+import org.onosproject.ui.UiGlyph;
+import org.onosproject.ui.UiGlyphFactory;
+import org.onosproject.ui.UiExtensionService;
+
+import com.google.common.collect.ImmutableList;
+
+/**
+ * Loader for Polatis OpenFlow device drivers.
+ */
+@Component(immediate = true)
+public class PolatisDriversLoader extends AbstractDriverLoader {
+
+    // OSGI: help bundle plugin discover runtime package dependency.
+    @SuppressWarnings("unused")
+    private OpticalDevice optical;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected UiExtensionService uiExtensionService;
+
+    private UiGlyphFactory glyphFactory =
+        () -> ImmutableList.of(
+            new UiGlyph("policon", "0 0 64 64",
+                "M 32.024746,2 30.163615,19.069136 24.258784,3.015638 "
+                + "26.879599,19.985033 17.021343,6.007051 23.943688,21.71947 "
+                + "10.8045,10.769161 21.557349,24.15439 6.031794,16.978659 "
+                + "19.883076,27.1245 3.027943,24.21114 19.033986,30.42674 "
+                + "2,31.97526 19.069136,33.83639 3.015638,39.74122 "
+                + "19.985033,37.12041 6.007051,46.97866 21.719466,40.05632 "
+                + "10.769161,53.19551 24.154391,42.44265 16.978659,57.96822 "
+                + "27.124504,44.11693 24.21114,60.97206 30.426738,44.96602 "
+                + "31.975259,62 33.83639,44.93086 39.74122,60.98437 "
+                + "37.120405,44.01497 46.978663,57.99296 40.056317,42.28054 "
+                + "53.195507,53.23084 42.442656,39.84561 57.968215,47.02135 "
+                + "44.116927,36.8755 60.972063,39.78886 44.966018,33.57327 "
+                + "62,32.02475 44.930865,30.16362 60.984369,24.25878 "
+                + "44.014972,26.8796 57.992959,17.021342 42.280539,23.94369 "
+                + "53.23084,10.8045 39.845614,21.55735 47.021349,6.031794 "
+                + "36.875501,19.883076 39.788865,3.027943 33.573267,19.033986 Z "
+                + "m -0.05497,19.23081 A 10.768943,10.768943 0 0 1 "
+                + "42.769201,31.96977 10.768943,10.768943 0 0 1 "
+                + "32.030235,42.7692 10.768943,10.768943 0 0 1 "
+                + "21.230812,32.03023 10.768943,10.768943 0 0 1 "
+                + "31.969778,21.23081 Z")
+            );
+
+    public PolatisDriversLoader() {
+        super("/polatis-openflow-drivers.xml");
+    }
+
+    @Activate
+    @Override
+    protected void activate() {
+        uiExtensionService.register(glyphFactory);
+        super.activate();
+    }
+
+    @Deactivate
+    @Override
+    protected void deactivate() {
+        uiExtensionService.unregister(glyphFactory);
+        super.deactivate();
+    }
+
+}
diff --git a/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/PolatisHandshaker.java b/drivers/polatis/openflow/src/main/java/org/onosproject/drivers/polatis/openflow/PolatisHandshaker.java
similarity index 97%
rename from drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/PolatisHandshaker.java
rename to drivers/polatis/openflow/src/main/java/org/onosproject/drivers/polatis/openflow/PolatisHandshaker.java
index 835ff8e..d1e8ade 100644
--- a/drivers/optical/src/main/java/org/onosproject/driver/optical/handshaker/PolatisHandshaker.java
+++ b/drivers/polatis/openflow/src/main/java/org/onosproject/drivers/polatis/openflow/PolatisHandshaker.java
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.driver.optical.handshaker;
+package org.onosproject.drivers.polatis.openflow;
 
 import static org.slf4j.LoggerFactory.getLogger;
 
diff --git a/drivers/polatis/openflow/src/main/java/org/onosproject/drivers/polatis/openflow/package-info.java b/drivers/polatis/openflow/src/main/java/org/onosproject/drivers/polatis/openflow/package-info.java
new file mode 100644
index 0000000..b39e90e
--- /dev/null
+++ b/drivers/polatis/openflow/src/main/java/org/onosproject/drivers/polatis/openflow/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2018 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 for Polatis OpenFlow device drivers.
+ */
+package org.onosproject.drivers.polatis.openflow;
diff --git a/drivers/polatis/openflow/src/main/resources/polatis-openflow-drivers.xml b/drivers/polatis/openflow/src/main/resources/polatis-openflow-drivers.xml
new file mode 100644
index 0000000..57ef405
--- /dev/null
+++ b/drivers/polatis/openflow/src/main/resources/polatis-openflow-drivers.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2018 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.
+  -->
+<drivers>
+    <driver name="polatis-openflow" extends="default"
+            manufacturer="Polatis" hwVersion=".*" swVersion=".*">
+        <behaviour api="org.onosproject.net.optical.OpticalDevice"
+                   impl="org.onosproject.net.optical.DefaultOpticalDevice"/>
+        <behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
+                   impl="org.onosproject.drivers.polatis.openflow.PolatisHandshaker"/>
+        <behaviour api="org.onosproject.net.behaviour.PowerConfig"
+                   impl="org.onosproject.drivers.polatis.openflow.OpenFlowPowerConfig"/>
+        <behaviour api="org.onosproject.net.behaviour.LambdaQuery"
+                   impl="org.onosproject.drivers.polatis.openflow.OpenFlowLambdaQuery"/>
+        <property name="meterCapable">false</property>
+        <property name="groupCapable">false</property>
+        <property name="uiType">policon</property>
+    </driver>
+</drivers>
+
diff --git a/drivers/polatis/openflow/src/test/java/org/onosproject/drivers/polatis/openflow/PolatisDriversLoaderTest.java b/drivers/polatis/openflow/src/test/java/org/onosproject/drivers/polatis/openflow/PolatisDriversLoaderTest.java
new file mode 100644
index 0000000..952ca59
--- /dev/null
+++ b/drivers/polatis/openflow/src/test/java/org/onosproject/drivers/polatis/openflow/PolatisDriversLoaderTest.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2018 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.drivers.polatis.openflow;
+
+import org.junit.Before;
+import org.onosproject.net.driver.AbstractDriverLoaderTest;
+import org.onosproject.ui.UiExtensionServiceAdapter;
+
+/**
+ * Polatis OpenFlow drivers loader test.
+ */
+public class PolatisDriversLoaderTest extends AbstractDriverLoaderTest {
+
+    @Before
+    public void setUp() {
+        loader = new PolatisDriversLoader();
+        ((PolatisDriversLoader) loader).uiExtensionService = new UiExtensionServiceAdapter();
+    }
+}
