diff --git a/Source/GmmLib/GlobalInfo/GmmClientContext.cpp b/Source/GmmLib/GlobalInfo/GmmClientContext.cpp
index 591f804..36cdf1a 100644
--- a/Source/GmmLib/GlobalInfo/GmmClientContext.cpp
+++ b/Source/GmmLib/GlobalInfo/GmmClientContext.cpp
@@ -190,6 +190,18 @@
 }
 
 /////////////////////////////////////////////////////////////////////////////////////
+/// Member function of ClientContext class for getting Alignment info
+///
+/// @return     void
+//////////////////////////////////////////////////////////////////////////////////
+void GMM_STDCALL GmmLib::GmmClientContext::GetExtendedTextureAlign(uint32_t Mode, ALIGNMENT &UnitAlign)
+{
+    ALIGNMENT AlignInfo;
+    pGmmGlobalContext->GetPlatformInfoObj()->ApplyExtendedTexAlign(Mode, AlignInfo);
+    UnitAlign = AlignInfo;
+}
+
+/////////////////////////////////////////////////////////////////////////////////////
 /// Member function of ClientContext class for returning whether the given Resource
 /// format is Planar
 ///
diff --git a/Source/GmmLib/GlobalInfo/GmmLibDllMain.cpp b/Source/GmmLib/GlobalInfo/GmmLibDllMain.cpp
index 174818d..14c14f8 100755
--- a/Source/GmmLib/GlobalInfo/GmmLibDllMain.cpp
+++ b/Source/GmmLib/GlobalInfo/GmmLibDllMain.cpp
@@ -84,4 +84,47 @@
     return Status;
 }
 
+/////////////////////////////////////////////////////////////////////////////////////
+/// First Call to GMM Lib DLL/so to initialize singleton global context
+/// and create client context
+///
+/////////////////////////////////////////////////////////////////////////////////////
+#ifdef _WIN32
+extern "C" GMM_LIB_API GMM_CLIENT_CONTEXT *GMM_STDCALL GmmInit(const PLATFORM           Platform,
+                                                               const SKU_FEATURE_TABLE *pSkuTable,
+                                                               const WA_TABLE *         pWaTable,
+                                                               const GT_SYSTEM_INFO *   pGtSysInfo,
+                                                               GMM_CLIENT               ClientType)
+#else
+extern "C" GMM_LIB_API GMM_CLIENT_CONTEXT *GMM_STDCALL GmmInit(const PLATFORM Platform,
+                                                               const void *   pSkuTable,
+                                                               const void *   pWaTable,
+                                                               const void *   pGtSysInfo,
+                                                               GMM_CLIENT     ClientType)
 #endif
+{
+    GMM_STATUS          Status         = GMM_SUCCESS;
+    GMM_CLIENT_CONTEXT *pClientContext = NULL;
+
+
+    Status = GmmCreateSingletonContext(Platform, pSkuTable, pWaTable, pGtSysInfo);
+
+    if(Status == GMM_SUCCESS)
+    {
+        pClientContext = GmmCreateClientContext(ClientType);
+    }
+
+    return pClientContext;
+}
+
+
+/////////////////////////////////////////////////////////////////////////////////////
+/// Destroys singleton global context and client context
+///
+/////////////////////////////////////////////////////////////////////////////////////
+extern "C" GMM_LIB_API void GMM_STDCALL GmmDestroy(GMM_CLIENT_CONTEXT *pGmmClientContext)
+{
+    GmmDestroySingletonContext();
+    GmmDeleteClientContext(pGmmClientContext);
+}
+#endif // GMM_LIB_DLL
diff --git a/Source/GmmLib/ULT/CMakeLists.txt b/Source/GmmLib/ULT/CMakeLists.txt
index 47c63fd..3432374 100644
--- a/Source/GmmLib/ULT/CMakeLists.txt
+++ b/Source/GmmLib/ULT/CMakeLists.txt
@@ -21,17 +21,17 @@
 set (EXE_NAME GMMULT)
 
 set(GMMULT_HEADERS
-    GmmCachePolicyULT.h
-    GmmCommonULT.h
-    GmmGen10CachePolicyULT.h
-    GmmGen10ResourceULT.h
-    GmmGen11CachePolicyULT.h
-    GmmGen9CachePolicyULT.h
-    GmmGen9ResourceULT.h
-    GmmResourceULT.h
-    stdafx.h
-    targetver.h
-)
+     GmmCachePolicyULT.h
+     GmmCommonULT.h
+     GmmGen10CachePolicyULT.h
+     GmmGen10ResourceULT.h
+     GmmGen11CachePolicyULT.h
+     GmmGen9CachePolicyULT.h
+     GmmGen9ResourceULT.h
+     GmmResourceULT.h
+     stdafx.h
+     targetver.h
+     )
 
 set(GMMULT_SOURCES
     GmmCachePolicyULT.cpp
@@ -48,36 +48,36 @@
 )
 
 source_group("Source Files\\Cache Policy" FILES
-    GmmCachePolicyULT.cpp
-    GmmGen9CachePolicyULT.cpp
-    GmmGen10CachePolicyULT.cpp
-    GmmGen11CachePolicyULT.cpp
-)
+            GmmCachePolicyULT.cpp
+            GmmGen9CachePolicyULT.cpp
+            GmmGen10CachePolicyULT.cpp
+            GmmGen11CachePolicyULT.cpp
+            )
 
 source_group("Source Files\\Resource" FILES
-    GmmGen10ResourceULT.cpp
-    GmmGen9ResourceULT.cpp
-    GmmResourceCpuBltULT.cpp
-    GmmResourceULT.cpp
-)
+            GmmGen10ResourceULT.cpp
+            GmmGen9ResourceULT.cpp
+            GmmResourceCpuBltULT.cpp
+            GmmResourceULT.cpp
+            )
 
 source_group("Header Files\\Cache Policy" FILES
-    GmmCachePolicyULT.h
-    GmmGen10CachePolicyULT.h
-    GmmGen11CachePolicyULT.h
-    GmmGen9CachePolicyULT.h
-)
+             GmmCachePolicyULT.h
+             GmmGen10CachePolicyULT.h
+             GmmGen11CachePolicyULT.h
+             GmmGen9CachePolicyULT.h
+            )
 
 source_group("Header Files\\Resource" FILES
-    GmmGen10ResourceULT.h
-    GmmGen9ResourceULT.h
-    GmmResourceULT.h
-)
+             GmmGen10ResourceULT.h
+             GmmGen9ResourceULT.h
+             GmmResourceULT.h
+            )
 
 source_group("gtest" FILES
-    googletest/gtest/gtest.h
-    googletest/src/gtest-all.cc
-)
+            googletest/gtest/gtest.h
+            googletest/src/gtest-all.cc
+            )
 
 include_directories(BEFORE ./)
 
@@ -90,37 +90,62 @@
     ${BS_DIR_INC}
     ${BS_DIR_GMMLIB}/inc
     ${BS_DIR_INC}/common
-)
+    )
 
 if(MSVC)
+
     include_directories(
-      ${BS_DIR_D3D11}/Imola
+        ${BS_DIR_D3D11}/Imola
     )
 endif()
 
+macro(GmmLibULTSetTargetConfig ultTarget)
+	if (TARGET ${ultTarget})
+			set_property(TARGET ${ultTarget} APPEND PROPERTY COMPILE_DEFINITIONS
+				$<$<CONFIG:Release>: _RELEASE>
+				$<$<CONFIG:ReleaseInternal>: _RELEASE_INTERNAL>
+				$<$<CONFIG:Debug>: _DEBUG>
+			)
+		endif()
+
+endmacro()
+
 add_executable(${EXE_NAME} ${GMMULT_HEADERS} ${GMMULT_SOURCES})
 
+GmmLibULTSetTargetConfig(${EXE_NAME})
+
+
 if(MSVC)
     bs_set_wdk(${EXE_NAME})
-endif()
 
-set_property(TARGET ${EXE_NAME} APPEND PROPERTY COMPILE_DEFINITIONS __GMM GMM_EXCITE)
+    set_property(TARGET ${EXE_NAME} APPEND PROPERTY COMPILE_DEFINITIONS __GMM GMM_LIB_DLL GMM_ULT __UMD)
 
-target_link_libraries(${EXE_NAME}
-    igfx_gmmumd_excite
+    add_dependencies(${EXE_NAME}
+					 igfx_gmmumd_dll
 )
 
-if(MSVC)
     target_link_libraries( ${EXE_NAME}
-    advapi32.lib
-    dxgi.lib
-    gdi32.lib
-    opengl32.lib
-    user32.lib
-)
+        advapi32.lib
+        dxgi.lib
+        gdi32.lib
+        opengl32.lib
+        user32.lib
+    )
 else()
+    set_property(TARGET ${EXE_NAME} APPEND PROPERTY COMPILE_DEFINITIONS __GMM GMM_EXCITE __UMD)
+
     target_link_libraries(${EXE_NAME}
-      pthread
+        igfx_gmmumd_excite
+    )
+
+#	if(NOT TARGET igfx_gmmumd_dll)
+#		add_subdirectory("${BS_DIR_GMMLIB}" "${CMAKE_BINARY_DIR}/gmmlib/ult")
+#	endif()
+#	target_link_libraries(${EXE_NAME} igfx_gmmumd_dll)
+
+    target_link_libraries(${EXE_NAME}
+        pthread
+		dl
     )
  endif()
 
@@ -133,5 +158,3 @@
     COMMAND ${EXE_NAME}  --gtest_filter=CTest*
 )
 
-
-
diff --git a/Source/GmmLib/ULT/GmmCachePolicyULT.cpp b/Source/GmmLib/ULT/GmmCachePolicyULT.cpp
index b2a7206..335c6f0 100644
--- a/Source/GmmLib/ULT/GmmCachePolicyULT.cpp
+++ b/Source/GmmLib/ULT/GmmCachePolicyULT.cpp
@@ -22,7 +22,6 @@
 
 #include "GmmCachePolicyULT.h"
 
-extern GMM_GLOBAL_CONTEXT *pGmmGlobalContext;
 using namespace std;
 
 /////////////////////////////////////////////////////////////////////////////////////
@@ -35,6 +34,12 @@
 {
     GfxPlatform.eProductFamily    = IGFX_BROADWELL;
     GfxPlatform.eRenderCoreFamily = IGFX_GEN8_CORE;
+    AllocateAdapterInfo();
+
+    pGfxAdapterInfo->SystemInfo.L3CacheSizeInKb                         = 768;
+    pGfxAdapterInfo->SystemInfo.LLCCacheSizeInKb                        = 2 * 1024;  //2 MB
+    pGfxAdapterInfo->SystemInfo.EdramSizeInKb                           = 64 * 1024; //64 MB
+    const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrEDram = 1;
 
     CommonULT::SetUpTestCase();
 
@@ -55,21 +60,12 @@
 
 void CTestCachePolicy::CheckL3CachePolicy()
 {
-    ASSERT_TRUE(pGmmGlobalContext);
-
     const uint32_t TargetCache_L3_LLC_ELLC = 0x3;
 
-
-    // Setup SKU/WA flags
-    pGmmGlobalContext->GetGtSysInfo()->L3CacheSizeInKb = 768; //768 KB
-
-    // Re-init cache policy based on above info
-    pGmmGlobalContext->GetCachePolicyObj()->InitCachePolicy();
-
     // Check Usage MOCS index against MOCS settings
     for(uint32_t Usage = GMM_RESOURCE_USAGE_UNKNOWN; Usage < GMM_RESOURCE_USAGE_MAX; Usage++)
     {
-        GMM_CACHE_POLICY_ELEMENT    ClientRequest = pGmmGlobalContext->GetCachePolicyElement((GMM_RESOURCE_USAGE_TYPE)Usage);
+        GMM_CACHE_POLICY_ELEMENT    ClientRequest = pGmmULTClientContext->GetCachePolicyElement((GMM_RESOURCE_USAGE_TYPE)Usage);
         MEMORY_OBJECT_CONTROL_STATE Mocs          = ClientRequest.MemoryObjectOverride;
 
         // Not check WT/WB/UC since that doesn't really matter for L3
@@ -89,8 +85,6 @@
 
 void CTestCachePolicy::CheckLlcEdramCachePolicy()
 {
-    ASSERT_TRUE(pGmmGlobalContext);
-
     const uint32_t TargetCache_ELLC        = 0;
     const uint32_t TargetCache_LLC         = 1;
     const uint32_t TargetCache_LLC_ELLC    = 2;
@@ -100,18 +94,10 @@
     const uint32_t CC_CACHED_WT = 0x2;
     const uint32_t CC_CACHED_WB = 0x3;
 
-    // Setup SKU/WA flags
-    pGmmGlobalContext->GetGtSysInfo()->LLCCacheSizeInKb                        = 2 * 1024;  //2 MB
-    pGmmGlobalContext->GetGtSysInfo()->EdramSizeInKb                           = 64 * 1024; //64 MB
-    const_cast<SKU_FEATURE_TABLE &>(pGmmGlobalContext->GetSkuTable()).FtrEDram = 1;
-
-    // Re-init cache policy with above info
-    pGmmGlobalContext->GetCachePolicyObj()->InitCachePolicy();
-
     // Check Usage MOCS index against MOCS settings
     for(uint32_t Usage = GMM_RESOURCE_USAGE_UNKNOWN; Usage < GMM_RESOURCE_USAGE_MAX; Usage++)
     {
-        GMM_CACHE_POLICY_ELEMENT    ClientRequest = pGmmGlobalContext->GetCachePolicyElement((GMM_RESOURCE_USAGE_TYPE)Usage);
+        GMM_CACHE_POLICY_ELEMENT    ClientRequest = pGmmULTClientContext->GetCachePolicyElement((GMM_RESOURCE_USAGE_TYPE)Usage);
         MEMORY_OBJECT_CONTROL_STATE Mocs          = ClientRequest.MemoryObjectOverride;
 
         // Check for age
@@ -119,7 +105,6 @@
 
         if(ClientRequest.L3)
         {
-            // Already tested in another test
             continue;
         }
 
diff --git a/Source/GmmLib/ULT/GmmCommonULT.cpp b/Source/GmmLib/ULT/GmmCommonULT.cpp
index 595aa62..14b79a2 100644
--- a/Source/GmmLib/ULT/GmmCommonULT.cpp
+++ b/Source/GmmLib/ULT/GmmCommonULT.cpp
@@ -21,10 +21,34 @@
 ============================================================================*/
 
 #include "GmmCommonULT.h"
+#ifndef _WIN32
+#include <dlfcn.h>
+#endif
 
 ADAPTER_INFO *      CommonULT::pGfxAdapterInfo      = NULL;
 PLATFORM            CommonULT::GfxPlatform          = {};
 GMM_CLIENT_CONTEXT *CommonULT::pGmmULTClientContext = NULL;
+PFNGMMINIT          CommonULT::pfnGmmInit           = {0};
+PFNGMMDESTROY       CommonULT::pfnGmmDestroy        = {0};
+#ifdef _WIN32
+    HINSTANCE       CommonULT::hGmmLib              = NULL;
+#else
+    void           *CommonULT::hGmmLib              = NULL;
+#endif
+
+void CommonULT::AllocateAdapterInfo()
+{
+    if(!pGfxAdapterInfo)
+    {
+        pGfxAdapterInfo = (ADAPTER_INFO *)malloc(sizeof(ADAPTER_INFO));
+        if(!pGfxAdapterInfo)
+        {
+            ASSERT_TRUE(false);
+            return;
+        }
+        memset(pGfxAdapterInfo, 0, sizeof(ADAPTER_INFO));
+    }
+}
 
 void CommonULT::SetUpTestCase()
 {
@@ -37,16 +61,24 @@
         GfxPlatform.eRenderCoreFamily = IGFX_GEN8_CORE;
     }
 
-    if(!pGfxAdapterInfo)
-    {
-        pGfxAdapterInfo = (ADAPTER_INFO *)malloc(sizeof(ADAPTER_INFO));
-        if(!pGfxAdapterInfo)
-        {
-            ASSERT_TRUE(false);
-            return;
-        }
-        memset(pGfxAdapterInfo, 0, sizeof(ADAPTER_INFO));
-    }
+    AllocateAdapterInfo();
+
+#ifdef GMM_LIB_DLL
+    hGmmLib = dlopen(GMM_UMD_DLL, RTLD_LAZY);
+    ASSERT_TRUE(hGmmLib);
+
+    *(void **)(&pfnGmmInit)    = dlsym(hGmmLib, "GmmInit");
+    *(void **)(&pfnGmmDestroy) = dlsym(hGmmLib, "GmmDestroy");
+
+    ASSERT_TRUE(pfnGmmInit);
+    ASSERT_TRUE(pfnGmmDestroy);
+
+    pGmmULTClientContext = pfnGmmInit(GfxPlatform,
+                                      &pGfxAdapterInfo->SkuTable,
+                                      &pGfxAdapterInfo->WaTable,
+                                      &pGfxAdapterInfo->SystemInfo,
+                                      GMM_EXCITE_VISTA);
+#else
 
     GMM_STATUS GmmStatus = GmmInitGlobalContext(GfxPlatform,
                                                 &pGfxAdapterInfo->SkuTable,
@@ -57,14 +89,29 @@
     ASSERT_EQ(GmmStatus, GMM_SUCCESS);
 
     pGmmULTClientContext = GmmCreateClientContext(GMM_EXCITE_VISTA);
+#endif // GMM_LIB_DLL
+
     ASSERT_TRUE(pGmmULTClientContext);
 }
 
 void CommonULT::TearDownTestCase()
 {
     printf("%s\n", __FUNCTION__);
+
+#ifdef GMM_LIB_DLL
+    pfnGmmDestroy(static_cast<GMM_CLIENT_CONTEXT *>(pGmmULTClientContext));
+
+    if(hGmmLib)
+    {
+        dlclose(hGmmLib);
+    }
+#else
     GmmDeleteClientContext(pGmmULTClientContext);
     GmmDestroyGlobalContext();
+#endif
+
+    hGmmLib              = NULL;
+    pGmmULTClientContext = NULL;
     free(pGfxAdapterInfo);
     pGfxAdapterInfo = NULL;
     GfxPlatform     = {};
diff --git a/Source/GmmLib/ULT/GmmCommonULT.h b/Source/GmmLib/ULT/GmmCommonULT.h
index cacf7b7..d62e3d3 100644
--- a/Source/GmmLib/ULT/GmmCommonULT.h
+++ b/Source/GmmLib/ULT/GmmCommonULT.h
@@ -24,20 +24,41 @@
 
 #include "stdafx.h"
 
-extern GMM_GLOBAL_CONTEXT *pGmmGlobalContext;
+typedef GMM_CLIENT_CONTEXT *(GMM_STDCALL * PFNGMMINIT)
+#ifdef _WIN32
+    (const PLATFORM,
+    const SKU_FEATURE_TABLE *,
+    const WA_TABLE *,
+    const GT_SYSTEM_INFO *,
+    GMM_CLIENT);
+#else
+    (const PLATFORM Platform,
+    const void *   pSkuTable,
+    const void *   pWaTable,
+    const void *   pGtSysInfo,
+    GMM_CLIENT ClientType);
+#endif
+typedef void(GMM_STDCALL *PFNGMMDESTROY)(GMM_CLIENT_CONTEXT *);
 
 class CommonULT : public testing::Test
 {
 public:
     static void SetUpTestCase();
     static void TearDownTestCase();
+    static void AllocateAdapterInfo();
 
 protected:
     static ADAPTER_INFO *pGfxAdapterInfo;
     static PLATFORM GfxPlatform;
-    //static GMM_GLOBAL_CONTEXT *pGmmGlobalContext;   // TODO: when GlobalContext class initialization is in place we will replace global vairable and
-                                                      // extern for pGmmGlobalContext with local class instance initialized by ULT.
 
-    static GMM_CLIENT_CONTEXT              *pGmmULTClientContext; ///< GMM ClientContext need for GMM ULT
+    static GMM_CLIENT_CONTEXT              *pGmmULTClientContext;
+    static PFNGMMINIT                       pfnGmmInit;
+    static PFNGMMDESTROY                    pfnGmmDestroy;
+
+    #ifdef _WIN32
+        static HINSTANCE                     hGmmLib;
+    #else
+        static void                         *hGmmLib;
+    #endif
 
 };
diff --git a/Source/GmmLib/ULT/GmmGen11CachePolicyULT.cpp b/Source/GmmLib/ULT/GmmGen11CachePolicyULT.cpp
index fa4baa5..5f60a6f 100644
--- a/Source/GmmLib/ULT/GmmGen11CachePolicyULT.cpp
+++ b/Source/GmmLib/ULT/GmmGen11CachePolicyULT.cpp
@@ -34,6 +34,12 @@
 {
     GfxPlatform.eProductFamily    = IGFX_ICELAKE;
     GfxPlatform.eRenderCoreFamily = IGFX_GEN11_CORE;
+    AllocateAdapterInfo();
+
+    pGfxAdapterInfo->SystemInfo.L3CacheSizeInKb                         = 3072;
+    pGfxAdapterInfo->SystemInfo.LLCCacheSizeInKb                        = 2 * 1024;   //2 MB
+    pGfxAdapterInfo->SystemInfo.EdramSizeInKb                           = 128 * 1024; //128 MB
+    const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrEDram = 1;
 
     CommonULT::SetUpTestCase();
 
@@ -54,23 +60,15 @@
 
 void CTestGen11CachePolicy::CheckL3CachePolicy()
 {
-    ASSERT_TRUE(pGmmGlobalContext);
-
     const uint32_t L3_WB_CACHEABLE = 0x3;
     const uint32_t L3_UNCACHEABLE  = 0x1;
 
-    // Setup SKU/WA flags
-    pGmmGlobalContext->GetGtSysInfo()->L3CacheSizeInKb = 3072; //768 KB
-
-    // Re-init cache policy based on above info
-    pGmmGlobalContext->GetCachePolicyObj()->InitCachePolicy();
-
     // Check Usage MOCS index against MOCS settings
     for(uint32_t Usage = GMM_RESOURCE_USAGE_UNKNOWN; Usage < GMM_RESOURCE_USAGE_MAX; Usage++)
     {
-        GMM_CACHE_POLICY_ELEMENT     ClientRequest   = pGmmGlobalContext->GetCachePolicyElement((GMM_RESOURCE_USAGE_TYPE)Usage);
-        uint32_t                        AssignedMocsIdx = ClientRequest.MemoryObjectOverride.Gen11.Index;
-        GMM_CACHE_POLICY_TBL_ELEMENT Mocs            = pGmmGlobalContext->GetCachePolicyTlbElement()[AssignedMocsIdx];
+        GMM_CACHE_POLICY_ELEMENT     ClientRequest   = pGmmULTClientContext->GetCachePolicyElement((GMM_RESOURCE_USAGE_TYPE)Usage);
+        uint32_t                     AssignedMocsIdx = ClientRequest.MemoryObjectOverride.Gen11.Index;
+        GMM_CACHE_POLICY_TBL_ELEMENT Mocs            = pGmmULTClientContext->GetCachePolicyTlbElement(AssignedMocsIdx);
 
         EXPECT_EQ(0, Mocs.L3.ESC) << "Usage# " << Usage << ": ESC is non-zero";
         EXPECT_EQ(0, Mocs.L3.SCC) << "Usage# " << Usage << ": SCC is non-zero";
@@ -109,8 +107,6 @@
 
 void CTestGen11CachePolicy::CheckLlcEdramCachePolicy()
 {
-    ASSERT_TRUE(pGmmGlobalContext);
-
     const uint32_t TargetCache_ELLC     = 0;
     const uint32_t TargetCache_LLC      = 1;
     const uint32_t TargetCache_LLC_ELLC = 2;
@@ -119,17 +115,12 @@
     const uint32_t LeCC_WB_CACHEABLE = 0x3;
     const uint32_t LeCC_WT_CACHEABLE = 0x2;
 
-    const_cast<SKU_FEATURE_TABLE &>(pGmmGlobalContext->GetSkuTable()).FtrEDram = 0;
-
-    // Re-init cache policy with above info
-    pGmmGlobalContext->GetCachePolicyObj()->InitCachePolicy();
-
     // Check Usage MOCS index against MOCS settings
     for(uint32_t Usage = GMM_RESOURCE_USAGE_UNKNOWN; Usage < GMM_RESOURCE_USAGE_MAX; Usage++)
     {
-        GMM_CACHE_POLICY_ELEMENT     ClientRequest   = pGmmGlobalContext->GetCachePolicyElement((GMM_RESOURCE_USAGE_TYPE)Usage);
-        uint32_t                        AssignedMocsIdx = ClientRequest.MemoryObjectOverride.Gen11.Index;
-        GMM_CACHE_POLICY_TBL_ELEMENT Mocs            = pGmmGlobalContext->GetCachePolicyTlbElement()[AssignedMocsIdx];
+        GMM_CACHE_POLICY_ELEMENT     ClientRequest   = pGmmULTClientContext->GetCachePolicyElement((GMM_RESOURCE_USAGE_TYPE)Usage);
+        uint32_t                     AssignedMocsIdx = ClientRequest.MemoryObjectOverride.Gen11.Index;
+        GMM_CACHE_POLICY_TBL_ELEMENT Mocs            = pGmmULTClientContext->GetCachePolicyTlbElement(AssignedMocsIdx);
 
         // Check for unused fields
         EXPECT_EQ(0, Mocs.LeCC.AOM) << "Usage# " << Usage << ": AOM is non-zero";
diff --git a/Source/GmmLib/ULT/GmmGen9CachePolicyULT.cpp b/Source/GmmLib/ULT/GmmGen9CachePolicyULT.cpp
index 4600a1c..cdf6364 100644
--- a/Source/GmmLib/ULT/GmmGen9CachePolicyULT.cpp
+++ b/Source/GmmLib/ULT/GmmGen9CachePolicyULT.cpp
@@ -35,6 +35,13 @@
     GfxPlatform.eProductFamily    = IGFX_SKYLAKE;
     GfxPlatform.eRenderCoreFamily = IGFX_GEN9_CORE;
 
+    AllocateAdapterInfo();
+
+    pGfxAdapterInfo->SystemInfo.L3CacheSizeInKb                         = 768;
+    pGfxAdapterInfo->SystemInfo.LLCCacheSizeInKb                        = 2 * 1024;   //2 MB
+    pGfxAdapterInfo->SystemInfo.EdramSizeInKb                           = 128 * 1024; //128 MB
+    const_cast<SKU_FEATURE_TABLE &>(pGfxAdapterInfo->SkuTable).FtrEDram = 1;
+
     CommonULT::SetUpTestCase();
 
     printf("%s\n", __FUNCTION__);
@@ -54,23 +61,15 @@
 
 void CTestGen9CachePolicy::CheckL3CachePolicy()
 {
-    ASSERT_TRUE(pGmmGlobalContext);
-
     const uint32_t L3_WB_CACHEABLE = 0x3;
     const uint32_t L3_UNCACHEABLE  = 0x1;
 
-    // Setup SKU/WA flags
-    pGmmGlobalContext->GetGtSysInfo()->L3CacheSizeInKb = 768; //768 KB
-
-    // Re-init cache policy based on above info
-    pGmmGlobalContext->GetCachePolicyObj()->InitCachePolicy();
-
     // Check Usage MOCS index against MOCS settings
     for(uint32_t Usage = GMM_RESOURCE_USAGE_UNKNOWN; Usage < GMM_RESOURCE_USAGE_MAX; Usage++)
     {
-        GMM_CACHE_POLICY_ELEMENT     ClientRequest   = pGmmGlobalContext->GetCachePolicyElement((GMM_RESOURCE_USAGE_TYPE)Usage);
+        GMM_CACHE_POLICY_ELEMENT     ClientRequest   = pGmmULTClientContext->GetCachePolicyElement((GMM_RESOURCE_USAGE_TYPE)Usage);
         uint32_t                     AssignedMocsIdx = ClientRequest.MemoryObjectOverride.Gen9.Index;
-        GMM_CACHE_POLICY_TBL_ELEMENT Mocs            = pGmmGlobalContext->GetCachePolicyTlbElement()[AssignedMocsIdx];
+        GMM_CACHE_POLICY_TBL_ELEMENT Mocs            = pGmmULTClientContext->GetCachePolicyTlbElement(AssignedMocsIdx);
 
         EXPECT_EQ(0, Mocs.L3.ESC) << "Usage# " << Usage << ": ESC is non-zero";
         EXPECT_EQ(0, Mocs.L3.SCC) << "Usage# " << Usage << ": SCC is non-zero";
@@ -96,8 +95,6 @@
 
 void CTestGen9CachePolicy::CheckLlcEdramCachePolicy()
 {
-    ASSERT_TRUE(pGmmGlobalContext);
-
     const uint32_t TargetCache_ELLC     = 0;
     const uint32_t TargetCache_LLC      = 1;
     const uint32_t TargetCache_LLC_ELLC = 2;
@@ -105,20 +102,12 @@
     const uint32_t LeCC_UNCACHEABLE  = 0x1;
     const uint32_t LeCC_WB_CACHEABLE = 0x3;
 
-    // Setup SKU/WA flags
-    pGmmGlobalContext->GetGtSysInfo()->LLCCacheSizeInKb                        = 2 * 1024;   //2 MB
-    pGmmGlobalContext->GetGtSysInfo()->EdramSizeInKb                           = 128 * 1024; //128 MB
-    const_cast<SKU_FEATURE_TABLE &>(pGmmGlobalContext->GetSkuTable()).FtrEDram = 1;
-
-    // Re-init cache policy with above info
-    pGmmGlobalContext->GetCachePolicyObj()->InitCachePolicy();
-
     // Check Usage MOCS index against MOCS settings
     for(uint32_t Usage = GMM_RESOURCE_USAGE_UNKNOWN; Usage < GMM_RESOURCE_USAGE_MAX; Usage++)
     {
-        GMM_CACHE_POLICY_ELEMENT     ClientRequest   = pGmmGlobalContext->GetCachePolicyElement((GMM_RESOURCE_USAGE_TYPE)Usage);
+        GMM_CACHE_POLICY_ELEMENT     ClientRequest   = pGmmULTClientContext->GetCachePolicyElement((GMM_RESOURCE_USAGE_TYPE)Usage);
         uint32_t                     AssignedMocsIdx = ClientRequest.MemoryObjectOverride.Gen9.Index;
-        GMM_CACHE_POLICY_TBL_ELEMENT Mocs            = pGmmGlobalContext->GetCachePolicyTlbElement()[AssignedMocsIdx];
+        GMM_CACHE_POLICY_TBL_ELEMENT Mocs            = pGmmULTClientContext->GetCachePolicyTlbElement(AssignedMocsIdx);
 
         // Check for unused fields
         EXPECT_EQ(0, Mocs.LeCC.AOM) << "Usage# " << Usage << ": AOM is non-zero";
diff --git a/Source/GmmLib/ULT/GmmGen9ResourceULT.cpp b/Source/GmmLib/ULT/GmmGen9ResourceULT.cpp
index 14c6f1e..d8adb95 100644
--- a/Source/GmmLib/ULT/GmmGen9ResourceULT.cpp
+++ b/Source/GmmLib/ULT/GmmGen9ResourceULT.cpp
@@ -3382,9 +3382,9 @@
 
     uint32_t TestArraySize[2] = {1, 5};
 
-    uint32_t HAlign = 0, VAlign = 0, TileDimX = 0;
-    uint32_t TileDimY = 0, MCSHAlign = 0, MCSVAlign = 0, TileSize = 0;
-    uint32_t ExpectedMCSBpp = 0;
+    uint32_t HAlign = 0, VAlign = 0, TileDimX = 0, TileDimY = 0;
+    uint32_t MCSHAlign = 0, MCSVAlign = 0, TileSize = 0;
+    uint32_t ExpectedMCSBpp;
     std::vector<tuple<int, int, int, bool, int, int>> List; //TEST_TILE_TYPE, TEST_BPP, TEST_RESOURCE_TYPE, Depth or RT, TestDimension index, ArraySize
     auto Size = BuildInputIterator(List, 4, 2);             // Size of arrays TestDimensions, TestArraySize
 
diff --git a/Source/GmmLib/ULT/stdafx.h b/Source/GmmLib/ULT/stdafx.h
index 2cc051c..9a89212 100644
--- a/Source/GmmLib/ULT/stdafx.h
+++ b/Source/GmmLib/ULT/stdafx.h
@@ -59,7 +59,8 @@
 #include "../inc/External/Common/GmmInfoExt.h"
 #include "../inc/External/Common/GmmInfo.h"
 #include "../inc/External/Common/GmmClientContext.h"
-
+#include "../inc/External/Common/GmmLibDll.h"
+#include "../inc/External/Common/GmmLibDllName.h"
 
 #ifdef __cplusplus
 }
diff --git a/Source/GmmLib/inc/External/Common/GmmClientContext.h b/Source/GmmLib/inc/External/Common/GmmClientContext.h
index d76ee0d..43b9367 100644
--- a/Source/GmmLib/inc/External/Common/GmmClientContext.h
+++ b/Source/GmmLib/inc/External/Common/GmmClientContext.h
@@ -103,6 +103,7 @@
         GMM_VIRTUAL GMM_CACHE_POLICY_ELEMENT            GMM_STDCALL GetCachePolicyElement(GMM_RESOURCE_USAGE_TYPE Usage);
         GMM_VIRTUAL GMM_CACHE_POLICY_TBL_ELEMENT        GMM_STDCALL GetCachePolicyTlbElement(uint32_t  MocsIdx);
         GMM_VIRTUAL GMM_PLATFORM_INFO&                  GMM_STDCALL GetPlatformInfo();
+        GMM_VIRTUAL void                                GMM_STDCALL GetExtendedTextureAlign(uint32_t Mode, ALIGNMENT &UnitAlign);
 
         GMM_VIRTUAL uint8_t                             GMM_STDCALL IsPlanar(GMM_RESOURCE_FORMAT Format);
         GMM_VIRTUAL uint8_t                             GMM_STDCALL IsP0xx(GMM_RESOURCE_FORMAT Format);
diff --git a/Source/GmmLib/inc/External/Common/GmmLibDllName.h b/Source/GmmLib/inc/External/Common/GmmLibDllName.h
index 29dcac8..fd3090a 100755
--- a/Source/GmmLib/inc/External/Common/GmmLibDllName.h
+++ b/Source/GmmLib/inc/External/Common/GmmLibDllName.h
@@ -22,19 +22,24 @@
 #pragma once
 
 #if defined(_WIN64 ) || defined(__x86_64__) || defined(__LP64__)
-    #define GMM_ENTRY_NAME  "OpenGmm"
+    #define GMM_ENTRY_NAME      "OpenGmm"
+    #define GMM_INIT_NAME       "GmmInit"
+    #define GMM_DESTROY_NAME    "GmmDestroy"
 
-    #if defined(_WIN64 )
+    #if defined(_WIN64)
         #define GMM_UMD_DLL     "igdgmm64.dll"
     #else
         #define GMM_UMD_DLL     "libigdgmm.so"
     #endif
 #else
-    #define GMM_ENTRY_NAME  "_OpenGmm@4"
+    #define GMM_ENTRY_NAME      "_OpenGmm@4"
+
+    #define GMM_INIT_NAME       "_GmmInit@48"
+    #define GMM_DESTROY_NAME    "_GmmDestroy@4"
 
     #if defined(_WIN32)
         #define GMM_UMD_DLL     "igdgmm32.dll"
     #else
         #define GMM_UMD_DLL     "libigdgmm.so"
     #endif
-#endif
\ No newline at end of file
+#endif
