diff --git a/examples/virtualkeyboard/basic/basic.qml b/examples/virtualkeyboard/basic/Basic.qml
similarity index 100%
rename from examples/virtualkeyboard/basic/basic.qml
rename to examples/virtualkeyboard/basic/Basic.qml
diff --git a/examples/virtualkeyboard/basic/basic-b2qt.qml b/examples/virtualkeyboard/basic/basic-b2qt.qml
index 91ff85582949c893136bd897d9553a720743e512..10e5c780f65a55a209bc4a66b6f9ae75934ec354 100644
--- a/examples/virtualkeyboard/basic/basic-b2qt.qml
+++ b/examples/virtualkeyboard/basic/basic-b2qt.qml
@@ -42,7 +42,7 @@ Item {
         height: Screen.width < Screen.height ? parent.width : parent.height
         anchors.centerIn: parent
         rotation: Screen.width < Screen.height ? 90 : 0
-        VirtualKeyboard {
+        Basic {
             id: virtualKeyboard
             anchors.left: parent.left
             anchors.top: parent.top
diff --git a/examples/virtualkeyboard/basic/basic.pro b/examples/virtualkeyboard/basic/basic.pro
index e30337c4fbab70650ec30df0926b553b98fd468c..2e0c6f6869fbab11d589ee4e125672b20c8abed3 100644
--- a/examples/virtualkeyboard/basic/basic.pro
+++ b/examples/virtualkeyboard/basic/basic.pro
@@ -15,7 +15,7 @@ RESOURCES += \
     demo.qrc
 
 OTHER_FILES += \
-    basic.qml \
+    Basic.qml \
     basic-b2qt.qml \
     content/AutoScroller.qml \
     content/HandwritingModeButton.qml \
@@ -32,5 +32,5 @@ disable-xcb {
 disable-desktop|!isEmpty(CROSS_COMPILE)|qnx {
     DEFINES += MAIN_QML=\\\"basic-b2qt.qml\\\"
 } else {
-    DEFINES += MAIN_QML=\\\"basic.qml\\\"
+    DEFINES += MAIN_QML=\\\"Basic.qml\\\"
 }
diff --git a/examples/virtualkeyboard/basic/demo.qrc b/examples/virtualkeyboard/basic/demo.qrc
index 6bd24d0543568712dca38dbe9bd00b587bbb3fd4..5bcafc717442961f1de378e70344d7014b474ddd 100644
--- a/examples/virtualkeyboard/basic/demo.qrc
+++ b/examples/virtualkeyboard/basic/demo.qrc
@@ -9,7 +9,7 @@
         <file>content/FloatingButton_Active.svg</file>
         <file>content/FloatingButton_Available.svg</file>
         <file>content/FloatingButton_Unavailable.svg</file>
-        <file>basic.qml</file>
+        <file>Basic.qml</file>
         <file>basic-b2qt.qml</file>
     </qresource>
 </RCC>
diff --git a/src/config.pri b/src/config.pri
index 3b25d051fcb705202095d1dd083e299167725d6d..5a80d1c6d8544dbeac5c820889adfb298df1e095 100644
--- a/src/config.pri
+++ b/src/config.pri
@@ -5,7 +5,7 @@ pinyin: CONFIG += lang-zh_CN
 tcime|zhuyin|cangjie: CONFIG += lang-zh_TW
 
 # Enable handwriting
-handwriting {
+handwriting:!lipi-toolkit:!t9write {
     include(virtualkeyboard/3rdparty/t9write/t9write-build.pri)
     equals(T9WRITE_FOUND, 1): CONFIG += t9write
     else: CONFIG += lipi-toolkit
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/projects/alphanumeric/alphanumeric.pro b/src/virtualkeyboard/3rdparty/lipi-toolkit/projects/alphanumeric/alphanumeric.pro
index df79dcb42989c5fd0474c6d01c7b3e07844ff4d9..d65137dbff9ab96592f80cb9238906cda9d71a14 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/projects/alphanumeric/alphanumeric.pro
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/projects/alphanumeric/alphanumeric.pro
@@ -3,3 +3,5 @@ TEMPLATE = aux
 cfg.files = config
 cfg.path = $$[QT_INSTALL_DATA]/qtvirtualkeyboard/lipi_toolkit/projects/alphanumeric
 INSTALLS += cfg
+
+!prefix_build: COPIES += cfg
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/projects/demonumerals/demonumerals.pro b/src/virtualkeyboard/3rdparty/lipi-toolkit/projects/demonumerals/demonumerals.pro
index 7063f7f28af31bad18c3ba7f1427fa27f46c186b..a16edd28d0894e227211323fd51de4e460486039 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/projects/demonumerals/demonumerals.pro
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/projects/demonumerals/demonumerals.pro
@@ -3,3 +3,5 @@ TEMPLATE = aux
 cfg.files = config
 cfg.path = $$[QT_INSTALL_DATA]/qtvirtualkeyboard/lipi_toolkit/projects/demonumerals
 INSTALLS += cfg
+
+!prefix_build: COPIES += cfg
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/projects/lipiengine.pro b/src/virtualkeyboard/3rdparty/lipi-toolkit/projects/lipiengine.pro
index d9902250190c3ffedc802c4eade4c924d57d3485..f9ad55a7ad13e38a39b19ac4bbc4680d6ddbe4ff 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/projects/lipiengine.pro
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/projects/lipiengine.pro
@@ -3,3 +3,5 @@ TEMPLATE = aux
 cfg.files += lipiengine.cfg
 cfg.path = $$[QT_INSTALL_DATA]/qtvirtualkeyboard/lipi_toolkit/projects
 INSTALLS += cfg
+
+!prefix_build: COPIES += cfg
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/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/reco/wordrec/boxfld/boxfld.pro b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/wordrec/boxfld/boxfld.pro
index 6da87dd693f62ef98fd260abc377ed2e32aa7bd6..5d16d0413ff6b09a5f185d142b12f52b437f1c98 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/wordrec/boxfld/boxfld.pro
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/wordrec/boxfld/boxfld.pro
@@ -1,4 +1,4 @@
-LIPILIBS = shaperecommon ltkcommon ltkutil qtwordreccommon
+LIPILIBS = shaperecommon ltkcommon ltkutil wordreccommon
 include(../../../lipiplugin.pri)
 
 INCLUDEPATH += \
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/src.pro b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/src.pro
index 528c7c1b38e8ccaff915ec9aa3eb0033f4986882..a3f901981a2122e1a269a9e9bdb3874ddc70f180 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/src.pro
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/src.pro
@@ -6,4 +6,6 @@ SUBDIRS += \
     reco \
     lipiengine
 
+util.depends = common
+reco.depends = util
 lipiengine.depends = common util reco
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/3rdparty/lipi-toolkit/src/util/logger/logger.pro b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/logger/logger.pro
index 6afbbd993539151ef8af7bd32104a8010c6c109a..5f1cc5ac6b9cc62eba5835418966199769a34566 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/logger/logger.pro
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/util/logger/logger.pro
@@ -9,6 +9,9 @@ SOURCES += \
     logger.cpp \
     LTKLogger.cpp \
 
+INCLUDEPATH += \
+    ../lib \
+
 win32 {
     DEFINES += LOGGER_EXPORTS
     LIBS += Advapi32.lib
diff --git a/src/virtualkeyboard/3rdparty/t9write/t9write-build.pri b/src/virtualkeyboard/3rdparty/t9write/t9write-build.pri
index 5ec0257d692dd75cafd139b03cd8b8ec3b1d17ef..ab519b90184b8f41459cd6d2f925d60e2f50248c 100644
--- a/src/virtualkeyboard/3rdparty/t9write/t9write-build.pri
+++ b/src/virtualkeyboard/3rdparty/t9write/t9write-build.pri
@@ -5,7 +5,7 @@
 #   T9WRITE_ALPHABETIC_OBJ: Absolute path to the target object file
 #
 
-!isEmpty(CROSS_COMPILE) {
+contains(QT_ARCH, arm) {
     T9WRITE_BUILD_DIR = $$files(build_Android_ARM*)
 } else:linux {
     T9WRITE_BUILD_DIR = $$files(build_Android_x86*)
diff --git a/src/virtualkeyboard/doc/qtvirtualkeyboard.qdocconf b/src/virtualkeyboard/doc/qtvirtualkeyboard.qdocconf
index d0e79debfc028581dbfe5cc8292a7a600c4ba266..570428100f8468de31f812f2abb8bc8b6e8b8df1 100644
--- a/src/virtualkeyboard/doc/qtvirtualkeyboard.qdocconf
+++ b/src/virtualkeyboard/doc/qtvirtualkeyboard.qdocconf
@@ -12,7 +12,7 @@ excludedirs += ../content/layouts \
 # Specify the install path under QT_INSTALL_EXAMPLES
 exampledirs += ../../../examples/virtualkeyboard \
     snippets
-examplesinstallpath = qtvirtualkeyboard/virtualkeyboard
+examplesinstallpath = virtualkeyboard
 imagedirs += images
 
 depends += qtcore qtgui qtquick
diff --git a/src/virtualkeyboard/lipisharedrecognizer.cpp b/src/virtualkeyboard/lipisharedrecognizer.cpp
index f518de729ab9653bd51aef44408443fffa8842c9..2d89e3772194c4bf53e8be2c0a79f1b0968b13b1 100644
--- a/src/virtualkeyboard/lipisharedrecognizer.cpp
+++ b/src/virtualkeyboard/lipisharedrecognizer.cpp
@@ -50,6 +50,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;
@@ -181,18 +182,31 @@ int LipiSharedRecognizer::loadLipiInterface()
 
     if (++s_lipiEngineRefCount == 1) {
         if (s_lipiRoot.isEmpty()) {
-            if (qEnvironmentVariableIsEmpty("LIPI_ROOT")) {
-                s_lipiRoot = QDir(QLibraryInfo::location(QLibraryInfo::PluginsPath) + "/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::PluginsPath) + "/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;
@@ -216,6 +230,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 bac67f2a21d720c44bd5b10055036f2ab41e6163..5bfb6ec64c699d1d4b2b2006f426431d37a009b1 100644
--- a/src/virtualkeyboard/lipisharedrecognizer.h
+++ b/src/virtualkeyboard/lipisharedrecognizer.h
@@ -74,6 +74,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;
diff --git a/src/virtualkeyboard/virtualkeyboard.pro b/src/virtualkeyboard/virtualkeyboard.pro
index b5d03b7b93b9fbf15b582d5fc9b565a0d3e565c5..85436c03f7416ee23119c6f8569c928284b2a289 100644
--- a/src/virtualkeyboard/virtualkeyboard.pro
+++ b/src/virtualkeyboard/virtualkeyboard.pro
@@ -222,6 +222,7 @@ qtquickcompiler: DEFINES += COMPILING_QML
             hunspell_data.files = 3rdparty/hunspell/data/*.dic 3rdparty/hunspell/data/*.aff
             hunspell_data.path = $$DATAPATH/hunspell
             INSTALLS += hunspell_data
+            !prefix_build: COPIES += hunspell_data
         } else {
             error("Hunspell dictionaries are missing! Please copy .dic and .aff" \
                   "files to src/virtualkeyboard/3rdparty/hunspell/data directory.")
@@ -249,6 +250,7 @@ pinyin {
     pinyin_data.files = $$PWD/3rdparty/pinyin/data/dict_pinyin.dat
     pinyin_data.path = $$DATAPATH/pinyin
     INSTALLS += pinyin_data
+    !prefix_build: COPIES += pinyin_data
 }
 
 tcime {
@@ -269,6 +271,7 @@ tcime {
         $$PWD/3rdparty/tcime/data/qt/dict_zhuyin.dat
     tcime_data.path = $$DATAPATH/tcime
     INSTALLS += tcime_data
+    !prefix_build: COPIES += tcime_data
 }
 
 hangul {
diff --git a/tests/auto/inputpanel/data/tst_inputpanel.qml b/tests/auto/inputpanel/data/tst_inputpanel.qml
index 908fb7af0265969f5513f14653c59be0d6c932c4..980fbc014be4d58712aedce6269935390ecad4cf 100644
--- a/tests/auto/inputpanel/data/tst_inputpanel.qml
+++ b/tests/auto/inputpanel/data/tst_inputpanel.qml
@@ -224,7 +224,7 @@ Rectangle {
                 // function key press
                 { initText: "x", initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhNoAutoUppercase, inputKey: Qt.Key_Shift, outputKeyCountMin: 1, outputKey: Qt.Key_Shift, preview: false, outputKeyText: "", outputKeyModifiers: Qt.NoModifier, outputKeyRepeat: false, outputText: "x" },
                 { initText: "x", initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhNoAutoUppercase, inputKey: Qt.Key_Backspace, outputKeyCountMin: 1, outputKey: Qt.Key_Backspace, preview: false, outputKeyText: "", outputKeyModifiers: Qt.NoModifier, outputKeyRepeat: false, outputText: "" },
-                { initText: "xxxxxx", initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhNoAutoUppercase, inputKey: Qt.Key_Backspace, keyHold: 600 + 8 * 50, outputKeyCountMin: 6, outputKey: Qt.Key_Backspace, preview: false, outputKeyText: "", outputKeyModifiers: Qt.NoModifier, outputKeyRepeat: true, outputText: "" },
+                { initText: "xxxxxx", initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhNoAutoUppercase, inputKey: Qt.Key_Backspace, keyHold: 1000, outputKeyCountMin: 6, outputKey: Qt.Key_Backspace, preview: false, outputKeyText: "", outputKeyModifiers: Qt.NoModifier, outputKeyRepeat: true, outputText: "" },
             ]
         }
 
@@ -235,7 +235,9 @@ Rectangle {
             inputPanel.virtualKeyClickedSpy.clear()
             if (data.hasOwnProperty("keyHold")) {
                 inputPanel.virtualKeyPress(data.inputKey)
-                wait(data.keyHold)
+                do {
+                    inputPanel.virtualKeyClickedSpy.wait(data.keyHold)
+                } while (inputPanel.virtualKeyClickedSpy.count < data.outputKeyCountMin)
                 inputPanel.virtualKeyRelease()
             } else {
                 inputPanel.virtualKeyClick(data.inputKey)