diff --git a/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1DeviceConfig.java b/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1DeviceConfig.java
deleted file mode 100644
index 91c235d..0000000
--- a/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1DeviceConfig.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright 2015-present Open Networking Laboratory
- *
- * 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.provider.tl1.device.impl;
-
-import com.google.common.annotations.Beta;
-import org.apache.commons.lang3.tuple.Pair;
-import org.onlab.packet.IpAddress;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.config.Config;
-
-/**
- * Configuration to push devices to the TL1 provider.
- */
-@Beta
-public class Tl1DeviceConfig extends Config<DeviceId> {
-
-    private static final String IP = "ip";
-    private static final String PORT = "port";
-    private static final String USERNAME = "username";
-    private static final String PASSWORD = "password";
-
-    @Override
-    public boolean isValid() {
-        return hasOnlyFields(IP, PORT, USERNAME, PASSWORD) &&
-                ip() != null;
-    }
-
-    /**
-     * Gets the Ip of the TL1 device.
-     *
-     * @return ip
-     */
-    public IpAddress ip() {
-        return IpAddress.valueOf(get(IP, extractIpPort().getKey()));
-    }
-
-    /**
-     * Gets the port of the TL1 device.
-     *
-     * @return port
-     */
-    public int port() {
-        return get(PORT, extractIpPort().getValue());
-    }
-
-    /**
-     * Gets the username of the TL1 device.
-     *
-     * @return username
-     */
-    public String username() {
-        return get(USERNAME, "");
-    }
-
-    /**
-     * Gets the password of the TL1 device.
-     *
-     * @return password
-     */
-    public String password() {
-        return get(PASSWORD, "");
-    }
-
-
-    private Pair<String, Integer> extractIpPort() {
-        String info = subject.toString();
-        if (info.startsWith(Tl1DeviceProvider.TL1)) {
-            //+1 is due to length of colon separator
-            String ip = info.substring(info.indexOf(":") + 1, info.lastIndexOf(":"));
-            int port = Integer.parseInt(info.substring(info.lastIndexOf(":") + 1));
-            return Pair.of(ip, port);
-        }
-        return null;
-    }
-}
\ No newline at end of file
diff --git a/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1DeviceProvider.java b/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1DeviceProvider.java
index 6013aea..506eb9d 100644
--- a/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1DeviceProvider.java
+++ b/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1DeviceProvider.java
@@ -47,10 +47,11 @@
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.net.provider.AbstractProvider;
 import org.onosproject.net.provider.ProviderId;
+import org.onosproject.tl1.DefaultTl1Device;
 import org.onosproject.tl1.Tl1Controller;
 import org.onosproject.tl1.Tl1Device;
 import org.onosproject.tl1.Tl1Listener;
-import org.onosproject.tl1.impl.DefaultTl1Device;
+import org.onosproject.tl1.device.Tl1DeviceConfig;
 import org.slf4j.Logger;
 
 import java.io.IOException;
@@ -74,7 +75,11 @@
 @Component(immediate = true)
 public class Tl1DeviceProvider extends AbstractProvider implements DeviceProvider {
     private static final String APP_NAME = "org.onosproject.tl1";
-    protected static final String TL1 = "tl1";
+    /**
+     * @deprecated in 1.11.0. Use {@link Tl1DeviceConfig#TL1} instead
+     */
+    @Deprecated
+    protected static final String TL1 = Tl1DeviceConfig.TL1;
     private static final String PROVIDER = "org.onosproject.provider.tl1.device";
     private static final String UNKNOWN = "unknown";
     private static final int REACHABILITY_TIMEOUT = 2000;      // in milliseconds
@@ -116,7 +121,7 @@
             },
             new ConfigFactory<DeviceId, Tl1DeviceConfig>(SubjectFactories.DEVICE_SUBJECT_FACTORY,
                                                          Tl1DeviceConfig.class,
-                                                         TL1) {
+                                                         Tl1DeviceConfig.TL1) {
                 @Override
                 public Tl1DeviceConfig createConfig() {
                     return new Tl1DeviceConfig();
@@ -150,7 +155,7 @@
     }
 
     public Tl1DeviceProvider() {
-        super(new ProviderId(TL1, PROVIDER));
+        super(new ProviderId(Tl1DeviceConfig.TL1, PROVIDER));
     }
 
     @Override
@@ -237,11 +242,11 @@
         try {
             // Add device to TL1 controller
             DeviceId deviceId = DeviceId.deviceId(
-                    new URI(TL1, device.ip() + ":" + device.port(), null));
+                    new URI(Tl1DeviceConfig.TL1, device.ip() + ":" + device.port(), null));
 
             if (controller.addDevice(deviceId, device)) {
                 SparseAnnotations ann = DefaultAnnotations.builder()
-                        .set(AnnotationKeys.PROTOCOL, TL1.toUpperCase())
+                        .set(AnnotationKeys.PROTOCOL, Tl1DeviceConfig.TL1.toUpperCase())
                         .build();
                 // Register device in the core with default parameters and mark it as unavailable
                 DeviceDescription dd = new DefaultDeviceDescription(deviceId.uri(),
diff --git a/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1ProviderConfig.java b/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1ProviderConfig.java
index 4f883cd..d083cb9 100644
--- a/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1ProviderConfig.java
+++ b/providers/tl1/device/src/main/java/org/onosproject/provider/tl1/device/impl/Tl1ProviderConfig.java
@@ -21,7 +21,7 @@
 import org.onosproject.core.ApplicationId;
 import org.onosproject.incubator.net.config.basics.ConfigException;
 import org.onosproject.net.config.Config;
-import org.onosproject.tl1.impl.DefaultTl1Device;
+import org.onosproject.tl1.DefaultTl1Device;
 import org.onosproject.tl1.Tl1Device;
 
 import java.util.Set;
