diff --git a/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/LsdbAge.java b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/LsdbAge.java
new file mode 100755
index 0000000..5ebd862
--- /dev/null
+++ b/protocols/ospf/api/src/main/java/org/onosproject/ospf/controller/LsdbAge.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2016 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.ospf.controller;
+
+/**
+ * Representation of LSDB aging process.
+ * The age of each LSA in the database must be incremented by 1 each second.
+ * We put all the LSAs of a given age into a single bin. The age of an LSA is the
+ * difference between its age bin and the bin representing LS age 0.
+ */
+public interface LsdbAge {
+
+    /**
+     * Adds LSA to bin for aging.
+     *
+     * @param binKey key to store the LSA in bin
+     * @param lsaBin LSA bin instance
+     */
+    public void addLsaBin(Integer binKey, LsaBin lsaBin);
+
+    /**
+     * Gets LSA from bin, this method is used while processing ls refresh and max age on LSA.
+     *
+     * @param binKey key to retreive the LSA from bin
+     * @return lsaBin bin instance
+     */
+    public LsaBin getLsaBin(Integer binKey);
+
+    /**
+     * Adds the lsa to maxAge bin if LSAs age is max age.
+     *
+     * @param key     key to store the LSA in bin.
+     * @param wrapper wrapper instance which contains LSA
+     */
+    public void addLsaToMaxAgeBin(String key, LsaWrapper wrapper);
+
+    /**
+     * Gets the bin number out of LSAs age, in which the LSA can be placed.
+     * so that age can be calculated.
+     *
+     * @param x Can be either age or ageCounter
+     * @return bin number.
+     */
+    public int age2Bin(int x);
+
+    /**
+     * Gets the max age bin, a special bin is created which holds only max age LSAs.
+     *
+     * @return lsa bin instance
+     */
+    public LsaBin getMaxAgeBin();
+
+    /**
+     * Gets the age counter.
+     *
+     * @return age counter
+     */
+    public int getAgeCounter();
+
+
+    /**
+     * Refresh the LSAs which are in the refresh bin.
+     */
+    public void refreshLsa();
+
+    /**
+     * If the LSAs have completed the MaxAge stop aging and flood it.
+     */
+    public void maxAgeLsa();
+
+    /**
+     * Invoked every 1 second as part of the aging process, and increments age counter.
+     * It also verifies if any LSA has reached ls refresh time or max age.
+     */
+    public void ageLsaAndFlood();
+
+    /**
+     * Starts the aging timer thread which gets invokes every second.
+     */
+    public void startDbAging();
+
+    /**
+     * Removes LSA from Bin, when ever it reaches a max age or ls refresh time.
+     *
+     * @param lsaWrapper wrapper instance
+     */
+    public void removeLsaFromBin(LsaWrapper lsaWrapper);
+}
\ No newline at end of file
