diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/DefaultTunnelDescription.java b/core/api/src/main/java/org/onosproject/net/behaviour/DefaultTunnelDescription.java
index d231721..0b39d9c 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/DefaultTunnelDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/DefaultTunnelDescription.java
@@ -42,30 +42,6 @@
     /**
      * Creates a tunnel description using the supplied information.
      *
-     * @param src TunnelPoint source
-     * @param dst TunnelPoint destination
-     * @param type tunnel type
-     * @param tunnelName tunnel name
-     * @param annotations optional key/value annotations
-     * @deprecated version 1.7.0 - Hummingbird
-     */
-    @Deprecated
-    public DefaultTunnelDescription(TunnelEndPoint src,
-                                    TunnelEndPoint dst, Type type,
-                                    TunnelName tunnelName,
-                                    SparseAnnotations... annotations) {
-        super(annotations);
-        this.deviceId = Optional.empty();
-        this.local = Optional.ofNullable(src);
-        this.remote = Optional.ofNullable(dst);
-        this.type = type;
-        this.ifaceName = tunnelName.value();
-        this.key = Optional.empty();
-    }
-
-    /**
-     * Creates a tunnel description using the supplied information.
-     *
      * @param ifaceName tunnel interface ifaceName
      * @param local source tunnel endpoint
      * @param remote destination tunnel endpoint
@@ -98,18 +74,6 @@
         return ifaceName;
     }
 
-    @Deprecated
-    @Override
-    public TunnelEndPoint src() {
-        return local.isPresent() ? local.get() : null;
-    }
-
-    @Deprecated
-    @Override
-    public TunnelEndPoint dst() {
-        return remote.isPresent() ? remote.get() : null;
-    }
-
     @Override
     public Type type() {
         return type;
@@ -130,12 +94,6 @@
         return key;
     }
 
-    @Deprecated
-    @Override
-    public TunnelName tunnelName() {
-        return TunnelName.tunnelName(ifaceName);
-    }
-
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(this)
diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/TunnelDescription.java b/core/api/src/main/java/org/onosproject/net/behaviour/TunnelDescription.java
index 1d61f90..c78ab57 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/TunnelDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/TunnelDescription.java
@@ -102,33 +102,6 @@
     Optional<TunnelKey> key();
 
     /**
-     * Returns the connection point source.
-     *
-     * @deprecated version 1.7.0 - Hummingbird; use local instead
-     * @return tunnel source ConnectionPoint
-     */
-    @Deprecated
-    TunnelEndPoint src();
-
-    /**
-     * Returns the connection point destination.
-     *
-     * @deprecated version 1.7.0 - Hummingbird; use remote instead
-     * @return tunnel destination
-     */
-    @Deprecated
-    TunnelEndPoint dst();
-
-    /**
-     * Return the name of a tunnel.
-     *
-     * @deprecated version 1.7.0 - Hummingbird; use ifaceName instead
-     * @return Tunnel Name
-     */
-    @Deprecated
-    TunnelName tunnelName();
-
-    /**
      * Builder of tunnel interface description entities.
      */
     interface Builder {
diff --git a/core/api/src/test/java/org/onosproject/net/behaviour/DefaultTunnelDescriptionTest.java b/core/api/src/test/java/org/onosproject/net/behaviour/DefaultTunnelDescriptionTest.java
new file mode 100644
index 0000000..5cd339f
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/net/behaviour/DefaultTunnelDescriptionTest.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2017-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.net.behaviour;
+
+import org.junit.Test;
+import org.onosproject.net.DefaultAnnotations;
+import org.onosproject.net.SparseAnnotations;
+
+import com.google.common.testing.EqualsTester;
+
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+
+
+public class DefaultTunnelDescriptionTest {
+
+    private static final String DID_1 = "device1";
+    private static final String IFACE_NAME_1 = "eth1";
+    private static final TunnelKey<Long> KEY_1 = new TunnelKey<>(1L);
+    private static final TunnelEndPoint<Long> LOCAL_1 =
+            new TunnelEndPoint<>(11L);
+    private static final TunnelEndPoint<Long> REMOTE_1 =
+            new TunnelEndPoint<>(12L);
+    private static final SparseAnnotations ANNOTATIONS_1 =
+            DefaultAnnotations.builder()
+                    .set("AAA", "AAA")
+                    .build();
+
+    private TunnelDescription tunnelDescription1 =
+            DefaultTunnelDescription.builder()
+                    .deviceId(DID_1)
+                    .ifaceName(IFACE_NAME_1)
+                    .key(KEY_1)
+                    .type(TunnelDescription.Type.GRE)
+                    .local(LOCAL_1)
+                    .remote(REMOTE_1)
+                    .otherConfigs(ANNOTATIONS_1)
+                    .build();
+
+    private TunnelDescription tunnelDescription2 =
+            DefaultTunnelDescription.builder()
+                    .deviceId(DID_1)
+                    .ifaceName(IFACE_NAME_1)
+                    .key(KEY_1)
+                    .type(TunnelDescription.Type.GRE)
+                    .remote(LOCAL_1)
+                    .local(REMOTE_1)
+                    .build();
+
+    @Test
+    public void testConstruction() {
+        assertTrue(tunnelDescription1.deviceId().isPresent());
+        assertThat(tunnelDescription1.deviceId().get(), is(DID_1));
+        assertThat(tunnelDescription1.ifaceName(), is(IFACE_NAME_1));
+        assertTrue(tunnelDescription1.key().isPresent());
+        assertThat(tunnelDescription1.key().get(), is(KEY_1));
+        assertThat(tunnelDescription1.type(), is(TunnelDescription.Type.GRE));
+        assertTrue(tunnelDescription1.local().isPresent());
+        assertThat(tunnelDescription1.local().get(), is(LOCAL_1));
+        assertTrue(tunnelDescription1.remote().isPresent());
+        assertThat(tunnelDescription1.remote().get(), is(REMOTE_1));
+    }
+
+    @Test
+    public void testEquals() {
+        new EqualsTester()
+                .addEqualityGroup(tunnelDescription1)
+                .addEqualityGroup(tunnelDescription2)
+                .testEquals();
+    }
+}
