diff --git a/include/composer_extn_intf.h b/include/composer_extn_intf.h
index 0577463..a6a4fba 100644
--- a/include/composer_extn_intf.h
+++ b/include/composer_extn_intf.h
@@ -31,10 +31,19 @@
 #define __COMPOSER_EXTN_INTF_H__
 
 #include <dlfcn.h>
+#include "frame_scheduler_intf.h"
+
+#define COMPOSER_EXTN_REV_MAJOR (1)
+#define COMPOSER_EXTN_REV_MINOR (0)
+#define COMPOSER_EXTN_VERSION_TAG ((uint16_t) ((COMPOSER_EXTN_REV_MAJOR << 8) \
+                                              | COMPOSER_EXTN_REV_MINOR))
 
 namespace composer {
 
 class ComposerExtnIntf {
+ public:
+  virtual int CreateFrameScheduler(FrameSchedulerIntf **intf) = 0;
+  virtual void DestroyFrameScheduler(FrameSchedulerIntf *intf) = 0;
  protected:
   virtual ~ComposerExtnIntf() { }
 };
@@ -48,8 +57,8 @@
  private:
   const char *lib_name = "libcomposerextn.qti.so";
 
-  typedef int (*CreateComposerExtnIntf)(ComposerExtnIntf **intf);
-  typedef void (*DestroyComposerExtnIntf)(ComposerExtnIntf *intf);
+  typedef int (*CreateComposerExtn)(uint16_t version, ComposerExtnIntf **intf);
+  typedef void (*DestroyComposerExtn)(ComposerExtnIntf *intf);
 
   ComposerExtnLib() {
     lib_obj_ = ::dlopen(lib_name, RTLD_NOW);
@@ -57,18 +66,18 @@
       return;
     }
 
-    create_composer_ext_intf_ = reinterpret_cast<CreateComposerExtnIntf>(
-                                    ::dlsym(lib_obj_, "CreateComposerExtnIntf"));
-    destroy_composer_ext_intf_ = reinterpret_cast<DestroyComposerExtnIntf>(
-                                    ::dlsym(lib_obj_, "DestroyComposerExtnIntf"));
-    if (create_composer_ext_intf_ && destroy_composer_ext_intf_) {
-      create_composer_ext_intf_(&composer_ext_intf_);
+    create_composer_ext_fn_ = reinterpret_cast<CreateComposerExtn>(
+                                    ::dlsym(lib_obj_, "CreateComposerExtn"));
+    destroy_composer_ext_fn_ = reinterpret_cast<DestroyComposerExtn>(
+                                    ::dlsym(lib_obj_, "DestroyComposerExtn"));
+    if (create_composer_ext_fn_ && destroy_composer_ext_fn_) {
+      create_composer_ext_fn_(COMPOSER_EXTN_VERSION_TAG, &composer_ext_intf_);
     }
   }
 
   ~ComposerExtnLib() {
     if (composer_ext_intf_) {
-      destroy_composer_ext_intf_(composer_ext_intf_);
+      destroy_composer_ext_fn_(composer_ext_intf_);
     }
 
     if (lib_obj_) {
@@ -78,8 +87,8 @@
 
   static ComposerExtnLib g_composer_ext_lib_;
   void *lib_obj_ = nullptr;
-  CreateComposerExtnIntf create_composer_ext_intf_ = nullptr;
-  DestroyComposerExtnIntf destroy_composer_ext_intf_ = nullptr;
+  CreateComposerExtn create_composer_ext_fn_ = nullptr;
+  DestroyComposerExtn destroy_composer_ext_fn_ = nullptr;
   ComposerExtnIntf *composer_ext_intf_ = nullptr;
 };
 
diff --git a/include/frame_scheduler_intf.h b/include/frame_scheduler_intf.h
new file mode 100644
index 0000000..bfe30e5
--- /dev/null
+++ b/include/frame_scheduler_intf.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials provided
+ *       with the distribution.
+ *     * Neither the name of The Linux Foundation nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __FRAME_SCHEDULER_INTF_H__
+#define __FRAME_SCHEDULER_INTF_H__
+
+namespace composer {
+
+class FrameSchedulerIntf {
+ public:
+  virtual int UpdateFrame() = 0;
+ protected:
+  virtual ~FrameSchedulerIntf() { }
+};
+
+}  // namespace composer
+
+#endif  // __FRAME_SCHEDULER_INTF_H__
