diff --git a/core/api/src/main/java/org/onosproject/net/topology/DefaultGraphDescription.java b/core/api/src/main/java/org/onosproject/net/topology/DefaultGraphDescription.java
index f1e20da..965c05d 100644
--- a/core/api/src/main/java/org/onosproject/net/topology/DefaultGraphDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/topology/DefaultGraphDescription.java
@@ -50,23 +50,6 @@
      * and process the topology graph.
      *
      * @param nanos       time in nanos of when the topology description was created
-     * @param devices     collection of infrastructure devices
-     * @param links       collection of infrastructure links
-     * @param annotations optional key/value annotations map
-     * @deprecated in Cardinal Release
-     */
-    @Deprecated
-    public DefaultGraphDescription(long nanos, Iterable<Device> devices,
-                                   Iterable<Link> links,
-                                   SparseAnnotations... annotations) {
-        this(nanos, System.currentTimeMillis(), devices, links, annotations);
-    }
-
-    /**
-     * Creates a minimal topology graph description to allow core to construct
-     * and process the topology graph.
-     *
-     * @param nanos       time in nanos of when the topology description was created
      * @param millis      time in millis of when the topology description was created
      * @param devices     collection of infrastructure devices
      * @param links       collection of infrastructure links
diff --git a/core/api/src/test/java/org/onosproject/net/topology/DefaultGraphDescriptionTest.java b/core/api/src/test/java/org/onosproject/net/topology/DefaultGraphDescriptionTest.java
index 8b0f8f0..f395849 100644
--- a/core/api/src/test/java/org/onosproject/net/topology/DefaultGraphDescriptionTest.java
+++ b/core/api/src/test/java/org/onosproject/net/topology/DefaultGraphDescriptionTest.java
@@ -41,7 +41,7 @@
     @Test
     public void basics() {
         DefaultGraphDescription desc =
-                new DefaultGraphDescription(4321L, ImmutableSet.of(DEV1, DEV2, DEV3),
+                new DefaultGraphDescription(4321L, System.currentTimeMillis(), ImmutableSet.of(DEV1, DEV2, DEV3),
                                             ImmutableSet.of(L1, L2));
         assertEquals("incorrect time", 4321L, desc.timestamp());
         assertEquals("incorrect vertex count", 3, desc.vertexes().size());
@@ -50,7 +50,7 @@
 
     @Test
     public void missingVertex() {
-        GraphDescription desc = new DefaultGraphDescription(4321L,
+        GraphDescription desc = new DefaultGraphDescription(4321L, System.currentTimeMillis(),
                                                             ImmutableSet.of(DEV1, DEV3),
                                                             ImmutableSet.of(L1, L2));
         assertEquals("incorrect time", 4321L, desc.timestamp());
diff --git a/core/common/src/test/java/org/onosproject/common/DefaultTopologyTest.java b/core/common/src/test/java/org/onosproject/common/DefaultTopologyTest.java
index 4d435cf..ef0f332 100644
--- a/core/common/src/test/java/org/onosproject/common/DefaultTopologyTest.java
+++ b/core/common/src/test/java/org/onosproject/common/DefaultTopologyTest.java
@@ -73,7 +73,7 @@
                              link("1", 3, "4", 3), link("4", 3, "1", 3),
                              link("3", 4, "4", 4), link("4", 4, "3", 4));
         GraphDescription graphDescription =
-                new DefaultGraphDescription(now, devices, links);
+                new DefaultGraphDescription(now, System.currentTimeMillis(), devices, links);
 
         dt = new DefaultTopology(PID, graphDescription);
         assertEquals("incorrect supplier", PID, dt.providerId());
diff --git a/core/net/src/test/java/org/onosproject/net/topology/impl/TopologyManagerTest.java b/core/net/src/test/java/org/onosproject/net/topology/impl/TopologyManagerTest.java
index f3cd28d..56133a0 100644
--- a/core/net/src/test/java/org/onosproject/net/topology/impl/TopologyManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/topology/impl/TopologyManagerTest.java
@@ -114,7 +114,7 @@
                              link("c", 2, "d", 1), link("d", 1, "c", 2),
                              link("d", 2, "a", 2), link("a", 2, "d", 2),
                              link("e", 1, "f", 1), link("f", 1, "e", 1));
-        GraphDescription data = new DefaultGraphDescription(4321L, devices, links);
+        GraphDescription data = new DefaultGraphDescription(4321L, System.currentTimeMillis(), devices, links);
         providerService.topologyChanged(data, null);
     }
 
