diff --git a/core/api/src/main/java/org/onosproject/net/OchSignal.java b/core/api/src/main/java/org/onosproject/net/OchSignal.java
index 93ec6f8..09fd0b9 100644
--- a/core/api/src/main/java/org/onosproject/net/OchSignal.java
+++ b/core/api/src/main/java/org/onosproject/net/OchSignal.java
@@ -101,7 +101,7 @@
      * @param maxFrequency maximum frequency
      * @param grid grid spacing frequency
      *
-     * @deprecated in Emu (ONOS 1.4).
+     * @deprecated 1.4.0 Emu Release
      */
     @Deprecated
     public OchSignal(int channel, Frequency maxFrequency, Frequency grid) {
@@ -114,6 +114,14 @@
         this.slotGranularity = (int) Math.round((double) grid.asHz() / ChannelSpacing.CHL_12P5GHZ.frequency().asHz());
     }
 
+    /**
+     * Creates OCh signal.
+     *
+     * @param centerFrequency frequency
+     * @param channelSpacing spacing
+     * @param slotGranularity granularity
+     * @deprecated 1.4.0 Emu Release
+     */
     @Deprecated
     public OchSignal(Frequency centerFrequency, ChannelSpacing channelSpacing, int slotGranularity) {
         this.gridType = DEFAULT_OCH_GRIDTYPE;
diff --git a/core/api/src/main/java/org/onosproject/net/behaviour/TunnelConfig.java b/core/api/src/main/java/org/onosproject/net/behaviour/TunnelConfig.java
index a1b97ff..4fa6817 100644
--- a/core/api/src/main/java/org/onosproject/net/behaviour/TunnelConfig.java
+++ b/core/api/src/main/java/org/onosproject/net/behaviour/TunnelConfig.java
@@ -28,6 +28,7 @@
      * Creates a tunnel on this device.
      *
      * @param tunnel tunnel descriptor
+     * @deprecated 1.3.0 Drake Release
      */
     @Deprecated
     void createTunnel(TunnelDescription tunnel);
diff --git a/core/api/src/main/java/org/onosproject/net/driver/DefaultDriver.java b/core/api/src/main/java/org/onosproject/net/driver/DefaultDriver.java
index 5472663..1392763 100644
--- a/core/api/src/main/java/org/onosproject/net/driver/DefaultDriver.java
+++ b/core/api/src/main/java/org/onosproject/net/driver/DefaultDriver.java
@@ -59,6 +59,7 @@
      * @param swVersion    device software version
      * @param behaviours   device behaviour classes
      * @param properties   properties for configuration of device behaviour classes
+     * @deprecated 1.5.0 Falcon Release
      */
     @Deprecated
     public DefaultDriver(String name, Driver parent, String manufacturer,
diff --git a/core/api/src/main/java/org/onosproject/net/driver/Driver.java b/core/api/src/main/java/org/onosproject/net/driver/Driver.java
index afb6ae6..e2f1a8e 100644
--- a/core/api/src/main/java/org/onosproject/net/driver/Driver.java
+++ b/core/api/src/main/java/org/onosproject/net/driver/Driver.java
@@ -40,6 +40,7 @@
      * and properties.
      *
      * @return parent driver; null if driver has no parent
+     * @deprecated 1.5.0 Falcon Release
      */
     @Deprecated
     Driver parent();
diff --git a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficSelector.java b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficSelector.java
index 779bccd..6e5f466 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficSelector.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficSelector.java
@@ -228,6 +228,9 @@
             return add(Criteria.matchIPDst(ip));
         }
 
+        /**
+         * @deprecated 1.3.0 Drake Release
+         */
         @Deprecated
         @Override
         public Builder matchTcpSrc(short tcpPort) {
@@ -239,6 +242,9 @@
             return add(Criteria.matchTcpSrc(tcpPort));
         }
 
+        /**
+         * @deprecated 1.3.0 Drake Release
+         */
         @Deprecated
         @Override
         public Builder matchTcpDst(short tcpPort) {
@@ -250,6 +256,9 @@
             return add(Criteria.matchTcpDst(tcpPort));
         }
 
+        /**
+         * @deprecated 1.3.0 Drake Release
+         */
         @Deprecated
         @Override
         public Builder matchUdpSrc(short udpPort) {
@@ -261,6 +270,9 @@
             return add(Criteria.matchUdpSrc(udpPort));
         }
 
+        /**
+         * @deprecated 1.3.0 Drake Release
+         */
         @Deprecated
         @Override
         public Builder matchUdpDst(short udpPort) {
@@ -272,6 +284,9 @@
             return add(Criteria.matchUdpDst(udpPort));
         }
 
+        /**
+         * @deprecated 1.3.0 Drake Release
+         */
         @Deprecated
         @Override
         public Builder matchSctpSrc(short sctpPort) {
@@ -283,6 +298,9 @@
             return add(Criteria.matchSctpSrc(sctpPort));
         }
 
+        /**
+         * @deprecated 1.3.0 Drake Release
+         */
         @Deprecated
         @Override
         public Builder matchSctpDst(short sctpPort) {
diff --git a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
index 40291f57..b490f85 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/DefaultTrafficTreatment.java
@@ -377,6 +377,9 @@
 
         @Deprecated
         @Override
+        /**
+         * @deprecated 1.3.0 Drake Release
+         */
         public Builder setLambda(short lambda) {
             return add(Instructions.modL0Lambda(new IndexedLambda(lambda)));
         }
@@ -446,6 +449,9 @@
 
         @Deprecated
         @Override
+        /**
+         * @deprecated 1.3.0 Drake Release
+         */
         public TrafficTreatment.Builder setTcpSrc(short port) {
             return setTcpSrc(TpPort.tpPort(port));
         }
@@ -457,6 +463,9 @@
 
         @Deprecated
         @Override
+        /**
+         * @deprecated 1.3.0 Drake Release
+         */
         public TrafficTreatment.Builder setTcpDst(short port) {
             return setTcpDst(TpPort.tpPort(port));
         }
@@ -468,6 +477,9 @@
 
         @Deprecated
         @Override
+        /**
+         * @deprecated 1.3.0 Drake Release
+         */
         public TrafficTreatment.Builder setUdpSrc(short port) {
             return setUdpSrc(TpPort.tpPort(port));
         }
@@ -479,6 +491,9 @@
 
         @Deprecated
         @Override
+        /**
+         * @deprecated 1.3.0 Drake Release
+         */
         public TrafficTreatment.Builder setUdpDst(short port) {
             return setUdpDst(TpPort.tpPort(port));
         }
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instruction.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instruction.java
index 31ad80c..a19d06a 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instruction.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instruction.java
@@ -26,6 +26,7 @@
     enum Type {
         /**
          * Signifies that the traffic should be dropped.
+         * @deprecated 1.4.0 Emu Release
          */
         @Deprecated
         DROP,
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
index cb6e200..4d0256f 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
@@ -75,6 +75,7 @@
      * Creates a drop instruction.
      *
      * @return drop instruction
+     * @deprecated 1.4.0 Emu Release
      */
     @Deprecated
     public static DropInstruction createDrop() {
@@ -536,6 +537,7 @@
 
     /**
      *  Drop instruction.
+     *  @deprecated 1.4.0 Emu Release
      */
     @Deprecated
     public static final class DropInstruction implements Instruction {
diff --git a/core/api/src/main/java/org/onosproject/net/packet/PacketService.java b/core/api/src/main/java/org/onosproject/net/packet/PacketService.java
index d26956e..0d4ceca 100644
--- a/core/api/src/main/java/org/onosproject/net/packet/PacketService.java
+++ b/core/api/src/main/java/org/onosproject/net/packet/PacketService.java
@@ -67,6 +67,7 @@
      * @param selector the traffic selector used to match packets
      * @param priority the priority of the rule
      * @param appId    the application ID of the requester
+     * @deprecated 1.5.0 Falcon Release
      */
     @Deprecated
     void requestPackets(TrafficSelector selector, PacketPriority priority,
@@ -94,6 +95,7 @@
      * @param selector the traffic selector used to match packets
      * @param priority the priority of the rule
      * @param appId    the application ID of the requester
+     * @deprecated 1.5.0 Falcon Release
      */
     @Deprecated
     void cancelPackets(TrafficSelector selector, PacketPriority priority,
@@ -109,6 +111,7 @@
      * @param priority the priority of the rule
      * @param appId    the application ID of the requester
      * @param deviceId an optional deviceId
+     * @deprecated 1.5.0 Falcon Release
      */
     void cancelPackets(TrafficSelector selector, PacketPriority priority,
                        ApplicationId appId, Optional<DeviceId> deviceId);
diff --git a/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceAllocations.java b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceAllocations.java
index d0211e2..7f9eafd 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceAllocations.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/link/LinkResourceAllocations.java
@@ -26,7 +26,7 @@
 /**
  * Representation of allocated link resources.
  *
- * @deprecated
+ * @deprecated 1.4.0 Emu Release
  */
 @Deprecated
 public interface LinkResourceAllocations extends ResourceAllocation {
diff --git a/core/api/src/main/java/org/onosproject/store/service/MapEvent.java b/core/api/src/main/java/org/onosproject/store/service/MapEvent.java
index 3462e21..fbd43b2 100644
--- a/core/api/src/main/java/org/onosproject/store/service/MapEvent.java
+++ b/core/api/src/main/java/org/onosproject/store/service/MapEvent.java
@@ -103,7 +103,7 @@
      * the new value.
      *
      * @return the value
-     * @deprecated use {@link #newValue()} or {@link #oldValue()} instead.
+     * @deprecated 1.5.0 Falcon release. Use {@link #newValue()} or {@link #oldValue()} instead.
      */
     @Deprecated
     public Versioned<V> value() {
diff --git a/core/api/src/main/java/org/onosproject/store/service/StorageAdminService.java b/core/api/src/main/java/org/onosproject/store/service/StorageAdminService.java
index 4718bb8..4d94cec 100644
--- a/core/api/src/main/java/org/onosproject/store/service/StorageAdminService.java
+++ b/core/api/src/main/java/org/onosproject/store/service/StorageAdminService.java
@@ -30,6 +30,7 @@
      * Returns information about all partitions in the system.
      *
      * @return list of partition information
+     * @deprecated 1.5.0 Falcon Release
      */
     @Deprecated
     List<PartitionInfo> getPartitionInfo();
@@ -38,6 +39,7 @@
      * Returns information about all the consistent maps in the system.
      *
      * @return list of map information
+     * @deprecated 1.5.0 Falcon Release
      */
     @Deprecated
     List<MapInfo> getMapInfo();
@@ -48,6 +50,7 @@
      * then only one counter from one database is returned.
      *
      * @return mapping from counter name to that counter's next value
+     * @deprecated 1.5.0 Falcon Release
      */
     @Deprecated
     Map<String, Long> getCounters();
@@ -56,6 +59,7 @@
      * Returns information about all the atomic partitioned database counters in the system.
      *
      * @return mapping from counter name to that counter's next value
+     * @deprecated 1.5.0 Falcon Release
      */
     @Deprecated
     Map<String, Long> getPartitionedDatabaseCounters();
@@ -64,6 +68,7 @@
      * Returns information about all the atomic in-memory database counters in the system.
      *
      * @return mapping from counter name to that counter's next value
+     * @deprecated 1.5.0 Falcon Release
      */
     @Deprecated
     Map<String, Long> getInMemoryDatabaseCounters();
diff --git a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbClientService.java b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbClientService.java
index e04d0ee..1a1c423 100644
--- a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbClientService.java
+++ b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/OvsdbClientService.java
@@ -48,6 +48,7 @@
      *
      * @param srcIp source IP address
      * @param dstIp destination IP address
+     * @deprecated 1.4.0 Emu release
      */
     @Deprecated
     void createTunnel(IpAddress srcIp, IpAddress dstIp);
