diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/include/LTKLipiEngineInterface.h b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/include/LTKLipiEngineInterface.h
index 86d06e83cb1bef9b0fe8280509db6b9f7112e42d..04d315b989a3e8208f4c907f6b3e4f1437e542f6 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/include/LTKLipiEngineInterface.h
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/include/LTKLipiEngineInterface.h
@@ -52,6 +52,8 @@ public:
 
     virtual void setLipiRootPath(const string& appLipiPath)=0;
 
+    virtual void setLipiLibPath(const string& appLipiLibPath)=0;
+
     virtual int setLipiLogFileName(const string& appLipiPath) = 0;
 
     virtual int setLipiLogLevel(const string& appLogLevel)=0;
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/include/LTKMacros.h b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/include/LTKMacros.h
index 3be95ff59b091e6106dd0fa30f751bea7f3cb1a0..b9cc072db9071817e40e5e2e8e0906852f6884bb 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/include/LTKMacros.h
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/include/LTKMacros.h
@@ -349,6 +349,11 @@
 */
 #define LIPIROOT_ENV_STRING	"LIPI_ROOT"
 
+/**
+* @brief Defines the lipi library environment string used in LipiEngine.cfg
+*/
+#define LIPILIB_ENV_STRING	"LIPI_LIB"
+
 /**
 * @brief Defines the type of project used in LipiEngine.cfg
 */
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/include/LTKOSUtil.h b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/include/LTKOSUtil.h
index 137f9a5a37f4ac72664bac26765e2bfeda7e8d58..88a56ac832a2fae6fe99371a573c3e0c022632c9 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/include/LTKOSUtil.h
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/include/LTKOSUtil.h
@@ -69,11 +69,11 @@ public:
 	// @}
 
     /** @brief  Given library name, this function loads it into the adress space.
-        * @param lipiRoot
+        * @param lipiLibPath
         * @param sharedLibName : name of the library to be loaded
         * @param libHandle: pointer to the library handle
         */
-    virtual int loadSharedLib(const string& lipiRoot,
+    virtual int loadSharedLib(const string& lipiLibPath,
                                  const string& sharedLibName,
                                  void** libHandle)=0;
 
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/include/LTKTypes.h b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/include/LTKTypes.h
index 415c8a9aa261ff437e8af67de83447b4625b56d9..6c10ccc2980d2c477be9796417bc77cff29bc0b1 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/include/LTKTypes.h
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/include/LTKTypes.h
@@ -95,6 +95,7 @@ struct LTKControlInfo
 	string cfgFileName;
 	string cfgFilePath;
 	string lipiRoot;
+	string lipiLib;
 	string toolkitVersion;
 
 	// constructor
@@ -104,6 +105,7 @@ struct LTKControlInfo
 	cfgFileName(""),
 	cfgFilePath(""),
 	lipiRoot(""),
+	lipiLib(""),
 	toolkitVersion("")
 	{
 	}
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/lipiengine/LipiEngineModule.cpp b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/lipiengine/LipiEngineModule.cpp
index e91436b6a0940280b231eb06440b3371f40e667e..f5a69788b898e5fdecd6f718f590b147eefb0088 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/lipiengine/LipiEngineModule.cpp
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/lipiengine/LipiEngineModule.cpp
@@ -126,6 +126,10 @@ int LTKLipiEngineModule::initializeLipiEngine()
 	{
 		LTKReturnError(ELIPI_ROOT_PATH_NOT_SET);	// PATH not set
 	}
+	if(m_strLipiLibPath == "")
+	{
+		m_strLipiLibPath = m_strLipiRootPath + SEPARATOR + "lib";
+	}
 
 	temp = m_strLipiRootPath + SEPARATOR + "projects" + SEPARATOR +
 		   LIPIENGINE_CFG_STRING;
@@ -273,6 +277,7 @@ int LTKLipiEngineModule::createShapeRecognizer(const string& strProjName,
     
     LTKControlInfo controlInfo;
     controlInfo.lipiRoot = m_strLipiRootPath;
+    controlInfo.lipiLib = m_strLipiLibPath;
     controlInfo.projectName = strProjectName;
     controlInfo.profileName = strProfileName;
     controlInfo.toolkitVersion = currentVersion;
@@ -423,6 +428,7 @@ int LTKLipiEngineModule::createWordRecognizer(const string& strProjName,
     LTKControlInfo controlInfo;
 
     controlInfo.lipiRoot        = m_strLipiRootPath;
+    controlInfo.lipiLib         = m_strLipiLibPath;
     controlInfo.projectName     = strProjectName;
     controlInfo.profileName     = strProfileName;
     controlInfo.toolkitVersion  = currentVersion;
@@ -621,6 +627,28 @@ string LTKLipiEngineModule::getLipiRootPath() const
 	return m_strLipiRootPath;
 }
 
+/******************************************************************************
+* AUTHOR        :
+* DATE          :
+* NAME          : getLipiLibPath
+* DESCRIPTION   : To fetch the value for the environment variable LIPI_LIB
+* ARGUMENTS     : None
+* RETURNS       : environment string on success & NULL on error
+* NOTES         :
+* CHANGE HISTROY
+* Author            Date                Description of change
+******************************************************************************/
+string LTKLipiEngineModule::getLipiLibPath() const
+{
+	LOG(LTKLogger::LTK_LOGLEVEL_INFO)<<
+		"Entering: LTKLipiEngineModule::getLipiLibPath()"<<endl;
+
+	LOG(LTKLogger::LTK_LOGLEVEL_INFO)<<
+		"Exiting: LTKLipiEngineModule::getLipiLibPath()"<<endl;
+
+	return m_strLipiLibPath;
+}
+
 /******************************************************************************
 * AUTHOR			: Nidhi Sharma 
 * DATE				: 10-JAN-2007
@@ -647,6 +675,32 @@ void LTKLipiEngineModule::setLipiRootPath(const string& appLipiPath)
 	}
 }
 
+/******************************************************************************
+* AUTHOR			:
+* DATE				:
+* NAME				: setLipiLibPath
+* DESCRIPTION		: To set the value of LIPI_LIB
+* ARGUMENTS			: String
+* RETURNS			:
+* NOTES 			:
+* CHANGE HISTROY
+* Author            Date                Description of change
+******************************************************************************/
+void LTKLipiEngineModule::setLipiLibPath(const string& appLipiLibPath)
+{
+
+	//Dont LOG messages as this may be called before configureLogger()
+
+	if ( appLipiLibPath.empty())
+	{
+		m_strLipiLibPath = m_OSUtilPtr->getEnvVariable(LIPILIB_ENV_STRING);
+	}
+	else
+	{
+		m_strLipiLibPath = appLipiLibPath;
+	}
+}
+
 /******************************************************************************
 * AUTHOR        : Thanigai 
 * DATE          : 29-JUL-2005
@@ -1106,7 +1160,7 @@ int LTKLipiEngineModule::loadRecognizerDLL(const string& recognizerName,
 	string recognizerDLLPath = "";
 	int returnVal = SUCCESS;
 
-    returnVal = m_OSUtilPtr->loadSharedLib(m_strLipiRootPath, recognizerName, dllHandler);
+    returnVal = m_OSUtilPtr->loadSharedLib(m_strLipiLibPath, recognizerName, dllHandler);
 
     
 	if(returnVal != SUCCESS)
@@ -1310,7 +1364,7 @@ int LTKLipiEngineModule::configureLogger()
 		}
 	}
 
-    LTKLoggerUtil::createLogger(m_strLipiRootPath);
+    LTKLoggerUtil::createLogger(m_strLipiLibPath);
     LTKLoggerUtil::configureLogger(m_logFileName, m_logLevel);
     
 	return SUCCESS;
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/lipiengine/LipiEngineModule.h b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/lipiengine/LipiEngineModule.h
index 302b03241bda2be54c11c16a7fb6254b8ac151a6..9ccffac3c42c8805c60695e00eaaf27579200e29 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/lipiengine/LipiEngineModule.h
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/lipiengine/LipiEngineModule.h
@@ -99,6 +99,7 @@ private:
 
 	
 	string m_strLipiRootPath; // LIPI_ROOT environment path 
+	string m_strLipiLibPath; // LIPI_LIB environment path
 
     string m_logFileName;
 
@@ -127,10 +128,18 @@ public:
 	*/
 	string getLipiRootPath() const;
 
+	/** @brief Returns LTKLipiEngineModule::m_strLipiLibPath
+	*/
+	string getLipiLibPath() const;
+
 	/** @brief Sets the data member LTKLipiEngineModule::m_strLipiRootPath
 	*/
 	void setLipiRootPath(const string& appLipiPath="");
 
+	/** @brief Sets the data member LTKLipiEngineModule::m_strLipiLibPath
+	*/
+	void setLipiLibPath(const string& appLipiLibPath="");
+
     /** @brief Returns LTKLipiEngineModule::m_logFileName 
 	*/
 	string getLogFileName() const;
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/lipiplugin.pri b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/lipiplugin.pri
index a94f03310692809b5dbef2e02a6c82075c7b7154..3dd51a221823f82d65522dc04ad7fb876ed73d2b 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/lipiplugin.pri
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/lipiplugin.pri
@@ -5,6 +5,5 @@ CONFIG += plugin
 
 DESTDIR = $$MODULE_BASE_OUTDIR/plugins/lipi_toolkit
 
-### This is a bad install location for arch-specific binaries.
-target.path = $$[QT_INSTALL_DATA]/qtvirtualkeyboard/lipi_toolkit/lib
+target.path = $$[QT_INSTALL_PLUGINS]/lipi_toolkit
 INSTALLS += target
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/activedtw/ActiveDTWShapeRecognizer.cpp b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/activedtw/ActiveDTWShapeRecognizer.cpp
index 7a805b818c4b013ad6d21a169bf1a14a1408b796..247f5f983a83ff6b2b23acf7bb320c6c5c30cc49 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/activedtw/ActiveDTWShapeRecognizer.cpp
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/activedtw/ActiveDTWShapeRecognizer.cpp
@@ -161,6 +161,7 @@ m_libHandlerFE(NULL)
 		assignDefaultValues();
 		
 		m_lipiRootPath = tmpControlInfo.lipiRoot;
+		m_lipiLibPath = tmpControlInfo.lipiLib;
 		m_currentVersion = tmpControlInfo.toolkitVersion;
 		strProjectName = tmpControlInfo.projectName;
 		strProfileName = tmpControlInfo.profileName;
@@ -4718,6 +4719,7 @@ int ActiveDTWShapeRecognizer::initializeFeatureExtractorInstance(const LTKContro
 	LTKShapeFeatureExtractorFactory factory;
 	int errorCode = factory.createFeatureExtractor(m_featureExtractorName,
 		m_lipiRootPath,
+		m_lipiLibPath,
 		&m_libHandlerFE,
 		controlInfo,
 		&m_ptrFeatureExtractor);
@@ -5059,7 +5061,7 @@ int ActiveDTWShapeRecognizer::initializePreprocessor(const LTKControlInfo& contr
     // Load the DLL with path=preprocDLLPath
     void* functionHandle = NULL;
 	
-    int returnVal = m_OSUtilPtr->loadSharedLib(controlInfo.lipiRoot, PREPROC, &m_libHandler);
+    int returnVal = m_OSUtilPtr->loadSharedLib(controlInfo.lipiLib, PREPROC, &m_libHandler);
     
     if(returnVal != SUCCESS)
     {
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/activedtw/ActiveDTWShapeRecognizer.h b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/activedtw/ActiveDTWShapeRecognizer.h
index dc3ba171f33839b0a0dfa2dd9c44b53ba39f4d5e..9459d5c751f9fb8ec5f06334f45becc1a8576479 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/activedtw/ActiveDTWShapeRecognizer.h
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/activedtw/ActiveDTWShapeRecognizer.h
@@ -317,6 +317,13 @@ private:
      *    </p>
      */
 
+     string m_lipiLibPath;
+     /**< @brief Path of the Lipi Libraries
+     *    <p>
+     *    DEFAULT: LipiEngine::getLipiLibPath()
+     *    </p>
+     */
+
      LTKShapeFeatureExtractor *m_ptrFeatureExtractor;
      /**< @brief Pointer to LTKShapeFeatureExtractor class
      *    <p>
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/common/LTKShapeFeatureExtractorFactory.cpp b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/common/LTKShapeFeatureExtractorFactory.cpp
index f1eaa446832a978351631c220ed963415ee9ce46..07fa2adcd5a332a5b5d8668b6ba96da3d78ee8f9 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/common/LTKShapeFeatureExtractorFactory.cpp
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/common/LTKShapeFeatureExtractorFactory.cpp
@@ -76,7 +76,8 @@ LTKShapeFeatureExtractorFactory::LTKShapeFeatureExtractorFactory()
 int LTKShapeFeatureExtractorFactory::createFeatureExtractor(
                                 const string& featureExtractorName,
                                 const string& lipiRootPath,
-                                void** m_libHandlerFE, 
+                                const string& lipiLibPath,
+                                void** m_libHandlerFE,
                                 const LTKControlInfo& controlInfo,
                                 LTKShapeFeatureExtractor** outFeatureExtractor)
 {
@@ -97,7 +98,7 @@ int LTKShapeFeatureExtractorFactory::createFeatureExtractor(
         LTKReturnError(errorCode);
     }
         
-    errorCode = getFeatureExtractorInst(lipiRootPath, feName, m_libHandlerFE, 
+    errorCode = getFeatureExtractorInst(lipiRootPath, lipiLibPath, feName, m_libHandlerFE,
 			                            controlInfo, outFeatureExtractor);
 
     if ( errorCode != SUCCESS)
@@ -129,6 +130,7 @@ int LTKShapeFeatureExtractorFactory::createFeatureExtractor(
 *************************************************************************************/
 int LTKShapeFeatureExtractorFactory::getFeatureExtractorInst(
                                  const string& lipiRootPath,
+                                 const string& lipiLibPath,
                                  const string& feName,
                                  void** m_libHandlerFE,
                                  const LTKControlInfo& controlInfo,
@@ -139,7 +141,7 @@ int LTKShapeFeatureExtractorFactory::getFeatureExtractorInst(
 
     LTKOSUtil* utilPtr = LTKOSUtilFactory::getInstance();
 
-    int returnVal = utilPtr->loadSharedLib(lipiRootPath, feName, m_libHandlerFE);
+    int returnVal = utilPtr->loadSharedLib(lipiLibPath, feName, m_libHandlerFE);
 
     
 	if(returnVal != SUCCESS)
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/common/LTKShapeFeatureExtractorFactory.h b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/common/LTKShapeFeatureExtractorFactory.h
index 6b7a48c11409b37e11d1d25071d6e4289a232d17..d178d6ef516f48661657cc02cd2489e5feb45b05 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/common/LTKShapeFeatureExtractorFactory.h
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/common/LTKShapeFeatureExtractorFactory.h
@@ -73,11 +73,13 @@ public:
     
 	int createFeatureExtractor(const string& featureExtractorType,
                               const string& lipiRootPath,
+                              const string& lipiLibPath,
                               void** m_libHandlerFE,
                               const LTKControlInfo& controlInfo,
                               LTKShapeFeatureExtractor** outFeatureExtractor);
 
 	int getFeatureExtractorInst(const string& lipiRootPath,
+                                 const string& lipiLibPath,
                                  const string& feName,
                                  void** m_libHandlerFE,
                                  const LTKControlInfo& controlInfo,
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/neuralnet/NeuralNetShapeRecognizer.cpp b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/neuralnet/NeuralNetShapeRecognizer.cpp
index 52c0a16c6bd283ef255216a4c01a54c5826ae566..3c406f686ea50db9eb0c9a21e7a9803878b24ac5 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/neuralnet/NeuralNetShapeRecognizer.cpp
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/neuralnet/NeuralNetShapeRecognizer.cpp
@@ -128,6 +128,7 @@ m_libHandlerFE(NULL)
 	    assignDefaultValues();
 
 	    m_lipiRootPath = tmpControlInfo.lipiRoot;
+	    m_lipiLibPath = tmpControlInfo.lipiLib;
 	    m_currentVersion = tmpControlInfo.toolkitVersion;
 	    strProjectName = tmpControlInfo.projectName;
 	    strProfileName = tmpControlInfo.profileName;
@@ -1154,7 +1155,7 @@ int NeuralNetShapeRecognizer::initializePreprocessor(const LTKControlInfo& contr
     // Load the DLL with path=preprocDLLPath
     void* functionHandle = NULL;
 
-    int returnVal = m_OSUtilPtr->loadSharedLib(controlInfo.lipiRoot, PREPROC, &m_libHandler);
+    int returnVal = m_OSUtilPtr->loadSharedLib(controlInfo.lipiLib, PREPROC, &m_libHandler);
 
 
 	if(returnVal != SUCCESS)
@@ -1291,6 +1292,7 @@ int NeuralNetShapeRecognizer::initializeFeatureExtractorInstance(const LTKContro
 	LTKShapeFeatureExtractorFactory factory;
 	int errorCode = factory.createFeatureExtractor(m_featureExtractorName,
 			m_lipiRootPath,
+			m_lipiLibPath,
 			&m_libHandlerFE,
 			controlInfo,
 			&m_ptrFeatureExtractor);
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/neuralnet/NeuralNetShapeRecognizer.h b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/neuralnet/NeuralNetShapeRecognizer.h
index 067b3d4c9552066067259754452ead9d40781473..6e32002aad1f1676a2b88acc75723b35332cfcf4 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/neuralnet/NeuralNetShapeRecognizer.h
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/neuralnet/NeuralNetShapeRecognizer.h
@@ -123,6 +123,13 @@ class NeuralNetShapeRecognizer: public LTKShapeRecognizer
          *     </p>
          */
 
+        string m_lipiLibPath;
+        /**< @brief Path of the Lipi Libraries
+         *     <p>
+         *     DEFAULT: LipiEngine::getLipiPath()
+         *     </p>
+         */
+
         LTKShapeFeatureExtractor *m_ptrFeatureExtractor;
         /**< @brief Pointer to LTKShapeFeatureExtractor class
          *     <p>
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.cpp b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.cpp
index db5b6a1f8e17fcf148625db2460ec6006ed1d859..78b09e475c66a4420adff68301b31c356ce082e4 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.cpp
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.cpp
@@ -169,6 +169,7 @@ m_libHandlerFE(NULL)
 	    assignDefaultValues();
 
 	    m_lipiRootPath = tmpControlInfo.lipiRoot;
+	    m_lipiLibPath = tmpControlInfo.lipiLib;
 	    m_currentVersion = tmpControlInfo.toolkitVersion;
 	    strProjectName = tmpControlInfo.projectName;
 	    strProfileName = tmpControlInfo.profileName;
@@ -3281,6 +3282,7 @@ int NNShapeRecognizer::initializeFeatureExtractorInstance(const LTKControlInfo&
 	LTKShapeFeatureExtractorFactory factory;
 	int errorCode = factory.createFeatureExtractor(m_featureExtractorName,
 			m_lipiRootPath,
+			m_lipiLibPath,
 			&m_libHandlerFE,
 			controlInfo,
 			&m_ptrFeatureExtractor);
@@ -4223,7 +4225,7 @@ int NNShapeRecognizer::initializePreprocessor(const LTKControlInfo& controlInfo,
     // Load the DLL with path=preprocDLLPath
     void* functionHandle = NULL;
 
-    int returnVal = m_OSUtilPtr->loadSharedLib(controlInfo.lipiRoot, PREPROC, &m_libHandler);
+    int returnVal = m_OSUtilPtr->loadSharedLib(controlInfo.lipiLib, PREPROC, &m_libHandler);
 
     
 	if(returnVal != SUCCESS)
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.h b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.h
index 60b9b857817a7728edc25b02e4cb23312235a69c..cce1baf02282f0a00d65e6c6e0d4be44e435a6c3 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.h
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.h
@@ -249,6 +249,13 @@ class NNShapeRecognizer: public LTKShapeRecognizer
          *     </p>
          */
 
+        string m_lipiLibPath;
+        /**< @brief Path of the Lipi Libraries
+         *     <p>
+         *     DEFAULT: LipiEngine::getLipiLibPath()
+         *     </p>
+         */
+
         LTKShapeFeatureExtractor *m_ptrFeatureExtractor;
         /**< @brief Pointer to LTKShapeFeatureExtractor class
          *     <p>
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/wordrec/boxfld/BoxFieldRecognizer.cpp b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/wordrec/boxfld/BoxFieldRecognizer.cpp
index ed40a84840a56e46b536b44cd702b68d737de98b..dbcdca580b833f3ce6faf8d1c2f59e8fae4ca054 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/wordrec/boxfld/BoxFieldRecognizer.cpp
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/wordrec/boxfld/BoxFieldRecognizer.cpp
@@ -89,6 +89,7 @@ m_numTracesProcessed(0),
 m_boxedShapeProject(""),
 m_boxedShapeProfile(""),
 m_lipiRoot(""),
+m_lipiLib(""),
 m_boxedConfigFile(""),
 m_logFile(""),
 m_logLevel(LTKLogger::LTK_LOGLEVEL_ERR),
@@ -124,6 +125,7 @@ m_OSUtilPtr(LTKOSUtilFactory::getInstance())
 
     // initialize the data members
     m_lipiRoot          = tempControlInfo.lipiRoot;
+    m_lipiLib           = tempControlInfo.lipiLib;
     m_toolkitVersion    = tempControlInfo.toolkitVersion;
 
 
@@ -1182,7 +1184,7 @@ int BoxedFieldRecognizer::updateRecognitionResults(const vector<LTKShapeRecoResu
 	}
 
     m_hAlgoDLLHandle = NULL;
-    errorCode = m_OSUtilPtr->loadSharedLib(m_lipiRoot, recognizerName, &m_hAlgoDLLHandle);
+    errorCode = m_OSUtilPtr->loadSharedLib(m_lipiLib, recognizerName, &m_hAlgoDLLHandle);
 
 	// Unable to load dll
 	if(errorCode != SUCCESS)
@@ -1222,6 +1224,7 @@ int BoxedFieldRecognizer::updateRecognitionResults(const vector<LTKShapeRecoResu
     controlInfo.projectName     = strProjectName;
     controlInfo.profileName     = strLocalProfileName;
     controlInfo.lipiRoot        = m_lipiRoot;
+    controlInfo.lipiLib         = m_lipiLib;
     controlInfo.toolkitVersion  = m_toolkitVersion;
 
 	*outShapeRecPtr = NULL;
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/wordrec/boxfld/BoxFieldRecognizer.h b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/wordrec/boxfld/BoxFieldRecognizer.h
index d1ccb49688f31319eb68e532f3968dfe844f2246..e0703b5add4ced4c5a514e492bb229a40ff74e47 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/wordrec/boxfld/BoxFieldRecognizer.h
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/wordrec/boxfld/BoxFieldRecognizer.h
@@ -72,6 +72,9 @@ private:
 	/** Lipi root */
 	string m_lipiRoot;
 
+	/** Lipi libraries */
+	string m_lipiLib;
+
 	/** Isolated shape recognizer project used for recognizing each box */
 	string m_boxedShapeProject;
 
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKLinuxUtil.cpp b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKLinuxUtil.cpp
index 99e5fac063fa39ea605b6fb7ff684efa1c4d0a44..f7f85702f5e7677eebdf0877072dd66a44741850 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKLinuxUtil.cpp
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKLinuxUtil.cpp
@@ -94,7 +94,7 @@ LTKLinuxUtil::~LTKLinuxUtil()
  * CHANGE HISTROY
  * Author			Date				Description
  ***************************************************************************/
-int LTKLinuxUtil::loadSharedLib(const string & lipiRoot, 
+int LTKLinuxUtil::loadSharedLib(const string & lipiLibPath,
                                  const string & sharedLibName, 
                                  void * * libHandle)
 {
@@ -103,7 +103,7 @@ int LTKLinuxUtil::loadSharedLib(const string & lipiRoot,
     string sharedLibraryPath = "";
     
 	//	construct the path for the recogniser DLL
-    sharedLibraryPath = lipiRoot + "/" + "lib" + "/" + "lib" + sharedLibName + ".so";
+    sharedLibraryPath = lipiLibPath + "/" + "lib" + sharedLibName + ".so";
     
     // Load the DLL
 	*libHandle = dlopen(sharedLibraryPath.c_str(), RTLD_LAZY);
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKLinuxUtil.h b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKLinuxUtil.h
index 074db044972008b5894559dd356dfc94baedb4cd..d8eef6f29bfafe3b8c3fdea5c529ce09046394da 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKLinuxUtil.h
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKLinuxUtil.h
@@ -72,7 +72,7 @@ public:
 	~LTKLinuxUtil();
 
 	// @}
-    int loadSharedLib(const string& lipiRoot,
+    int loadSharedLib(const string& lipiLibPath,
                          const string& sharedLibName,
                          void** libHandle);
 
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKLoggerUtil.cpp b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKLoggerUtil.cpp
index c89ffe47e1e124a98224808da6e253ed75d1a74d..1971a69dcc1415791d134a742f54d3be8c17088c 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKLoggerUtil.cpp
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKLoggerUtil.cpp
@@ -93,12 +93,12 @@ LTKLoggerUtil::LTKLoggerUtil(){}
 * Author			Date				Description of change
 ****************************************************************************/
 
-int LTKLoggerUtil::createLogger(const string& lipiRoot)
+int LTKLoggerUtil::createLogger(const string& lipiLibPath)
 {
     void* functionHandle = NULL; 
     auto_ptr<LTKOSUtil> a_ptrOSUtil(LTKOSUtilFactory::getInstance());
 
-    int iErrorCode = a_ptrOSUtil->loadSharedLib(lipiRoot,
+    int iErrorCode = a_ptrOSUtil->loadSharedLib(lipiLibPath,
                                                 LOGGER_MODULE_STR, 
                                                 &m_libHandleLogger);
 
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKLoggerUtil.h b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKLoggerUtil.h
index 3252d14a50a6d4a2f45e218177b0db798be25977..2f09831bd5d799a3d105c67955e660b16b8c8933 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKLoggerUtil.h
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKLoggerUtil.h
@@ -100,7 +100,7 @@ public:
 	 * @return SUCCESS on successful split operation
 	 */
 
-	static int createLogger(const string& lipiRoot);
+	static int createLogger(const string& lipiLibPath);
 
     static int destroyLogger();
 
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKWinCEUtil.h b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKWinCEUtil.h
index cdc761b32a1d4a2edceabd08446570acc7ce8e05..649a2700a1e2f591469511a7ca95a2480f816d14 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKWinCEUtil.h
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKWinCEUtil.h
@@ -74,7 +74,7 @@ public:
 	~LTKWinCEUtil();
 
 	// @}
-    int loadSharedLib(const string& lipiRoot,
+    int loadSharedLib(const string& lipiLibPath,
                          const string& sharedLibName,
                          void** libHandle);
 
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKWindowsUtil.cpp b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKWindowsUtil.cpp
index 0b72bd5122241896bf8c468827a548cd6c4c2a10..825ee84c4722706489b2aebd19f4326b4a1e3738 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKWindowsUtil.cpp
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKWindowsUtil.cpp
@@ -90,14 +90,14 @@ LTKWindowsUtil::~LTKWindowsUtil()
  * CHANGE HISTROY
  * Author			Date				Description
  ***************************************************************************/
-int LTKWindowsUtil::loadSharedLib(const string & lipiRoot, 
+int LTKWindowsUtil::loadSharedLib(const string & lipiLibPath,
                                  const string & sharedLibName, 
                                  void * * libHandle)
 {    
     string sharedLibraryPath = "";
     
 	//	construct the path for the recogniser DLL
-    sharedLibraryPath = lipiRoot + "\\" + "lib" + "\\" + sharedLibName +
+    sharedLibraryPath = lipiLibPath + "\\" + sharedLibName +
 #ifndef NDEBUG
         "d"
 #endif
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKWindowsUtil.h b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKWindowsUtil.h
index 755fc39040e1b1b160754e9cfd16d9e91afdff47..d62350d93e61eae53c85ea9b4bcb73d7243194e4 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKWindowsUtil.h
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/lib/LTKWindowsUtil.h
@@ -74,7 +74,7 @@ public:
 	~LTKWindowsUtil();
 
 	// @}
-    int loadSharedLib(const string& lipiRoot,
+    int loadSharedLib(const string& lipiLibPath,
                          const string& sharedLibName,
                          void** libHandle);
 
diff --git a/src/virtualkeyboard/lipisharedrecognizer.cpp b/src/virtualkeyboard/lipisharedrecognizer.cpp
index ab93a343dc5f4fe673c76eef3f6748e8f0b9c631..e75042f8ee0ae12256ea155a3187db89ee0cce4d 100644
--- a/src/virtualkeyboard/lipisharedrecognizer.cpp
+++ b/src/virtualkeyboard/lipisharedrecognizer.cpp
@@ -42,6 +42,7 @@ namespace QtVirtualKeyboard {
 
 int LipiSharedRecognizer::s_lipiEngineRefCount = 0;
 QString LipiSharedRecognizer::s_lipiRoot;
+QString LipiSharedRecognizer::s_lipiLib;
 void *LipiSharedRecognizer::s_lipiEngineHandle = 0;
 LipiSharedRecognizer::FN_PTR_CREATELTKLIPIENGINE LipiSharedRecognizer::s_createLTKLipiEngine = 0;
 LipiSharedRecognizer::FN_PTR_DELETELTKLIPIENGINE LipiSharedRecognizer::s_deleteLTKLipiEngine = 0;
@@ -173,18 +174,31 @@ int LipiSharedRecognizer::loadLipiInterface()
 
     if (++s_lipiEngineRefCount == 1) {
         if (s_lipiRoot.isEmpty()) {
-            if (qEnvironmentVariableIsEmpty("LIPI_ROOT")) {
-                s_lipiRoot = QDir(QLibraryInfo::location(QLibraryInfo::DataPath) + "/qtvirtualkeyboard/lipi_toolkit").absolutePath();
-                qputenv("LIPI_ROOT", s_lipiRoot.toLatin1());
-            } else {
-                s_lipiRoot = qgetenv("LIPI_ROOT");
-            }
+            /*  LIPI_ROOT defines the root directory for lipi-toolkit project.
+                LIPI_LIB is an extension implemented for QtVirtualKeyboard and
+                allows using different location for lipi-toolkit plugins.
+
+                LIPI_LIB defaults to LIPI_ROOT + "/lib".
+            */
+            bool lipiRootVarIsEmpty = qEnvironmentVariableIsEmpty("LIPI_ROOT");
+            s_lipiRoot = lipiRootVarIsEmpty ?
+                        QDir(QLibraryInfo::location(QLibraryInfo::DataPath) + "/qtvirtualkeyboard/lipi_toolkit").absolutePath() :
+                        qgetenv("LIPI_ROOT");
+
+            bool lipiLibVarIsEmpty = qEnvironmentVariableIsEmpty("LIPI_LIB");
+            if (!lipiLibVarIsEmpty)
+                s_lipiLib = qgetenv("LIPI_LIB");
+            else if (!lipiRootVarIsEmpty)
+                s_lipiLib = s_lipiRoot + "/lib";
+            else
+                s_lipiLib = QDir(QLibraryInfo::location(QLibraryInfo::PluginsPath) + "/lipi_toolkit").absolutePath();
         }
 
         QScopedPointer<LTKOSUtil> osUtil(LTKOSUtilFactory::getInstance());
         const string lipiRootPath(QDir::toNativeSeparators(s_lipiRoot).toStdString());
+        const string lipiLibPath(QDir::toNativeSeparators(s_lipiLib).toStdString());
 
-        int result = osUtil->loadSharedLib(lipiRootPath, LIPIENGINE_MODULE_STR, &s_lipiEngineHandle);
+        int result = osUtil->loadSharedLib(lipiLibPath, LIPIENGINE_MODULE_STR, &s_lipiEngineHandle);
         if (result != SUCCESS) {
             qWarning() << QString("Error %1: Could not open shared library for module '%2'").arg(result).arg(LIPIENGINE_MODULE_STR);
             return result;
@@ -208,6 +222,7 @@ int LipiSharedRecognizer::loadLipiInterface()
 
         s_lipiEngine = s_createLTKLipiEngine();
         s_lipiEngine->setLipiRootPath(lipiRootPath);
+        s_lipiEngine->setLipiLibPath(lipiLibPath);
 #if 0
         s_lipiEngine->setLipiLogFileName(QDir::toNativeSeparators(QString("%1/lipi.log").arg(s_lipiRoot)).toStdString());
         s_lipiEngine->setLipiLogLevel("DEBUG");
diff --git a/src/virtualkeyboard/lipisharedrecognizer.h b/src/virtualkeyboard/lipisharedrecognizer.h
index e43c8163b171e6cce806755fc5e396edd57330fa..c82b8f42efad507aacaaed14750e6e05fc1c31e1 100644
--- a/src/virtualkeyboard/lipisharedrecognizer.h
+++ b/src/virtualkeyboard/lipisharedrecognizer.h
@@ -66,6 +66,7 @@ private:
 
     static int s_lipiEngineRefCount;
     static QString s_lipiRoot;
+    static QString s_lipiLib;
     static void *s_lipiEngineHandle;
     static FN_PTR_CREATELTKLIPIENGINE s_createLTKLipiEngine;
     static FN_PTR_DELETELTKLIPIENGINE s_deleteLTKLipiEngine;