Revision: 201031 RCL_3
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 10:15:25 +0300
branchRCL_3
changeset 19 ac7e4d1d9209
parent 18 b1ea1642412e
child 20 ebd48d2de13c
Revision: 201031 Kit: 201033
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingList.cpp
fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepQuery.cpp
fep/aknfep/conf/aknfep.confml
fep/aknfep/conf/aknfep_101F876D.crml
fep/aknfep/inc/AknFepLanguageManager.h
fep/aknfep/inc/AknFepManager.h
fep/aknfep/inc/AknFepManagerUIInterface.h
fep/aknfep/inc/AknFepPluginManager.h
fep/aknfep/inc/AknFepSharedDataInterface.h
fep/aknfep/inc/AknFepUiInputStateQwertyKorean.h
fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerBase.cpp
fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/peninputimeplugingeneric.inl
fep/aknfep/peninputplugins/peninputimeplugingeneric/src/peninputimeplugingeneric.cpp
fep/aknfep/src/AknFepFnKeyManager.cpp
fep/aknfep/src/AknFepLanguageManager.cpp
fep/aknfep/src/AknFepManager.cpp
fep/aknfep/src/AknFepPluginManager.cpp
fep/aknfep/src/AknFepSharedDataInterface.cpp
fep/aknfep/src/AknFepUiInputStateEntryQwertyWesternPredictive.cpp
fep/aknfep/src/AknFepUiInputStateInitialVietnameseMultitap.cpp
fep/aknfep/src/AknFepUiInputStateQwerty.cpp
fep/aknfep/src/AknFepUiManagerKorean.cpp
fep/aknfep/src/aknfepuiinputstateqwertykorean.cpp
inputmethods_plat/aknfep_definitions_api/inc/AknFepGlobalEnums.h
inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h
inputmethods_plat/pen_input_server_api/inc/peninputcmd.h
textinput/group/bld.inf
textinput/peninputarc/gsplugin/gspeninputplugin/loc/gspeninputplugin.loc
textinput/peninputarc/inc/pensrvcliinc/penuiwndctrl.h
textinput/peninputarc/src/peninputanim/peninputanim.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp
textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkbkeyctrl.cpp
textinput/peninputarc/src/peninputserverapp/peninputserver.cpp
textinput/peninputarc/src/peninputserverapp/penuiwndctrl.cpp
textinput/peninputcommonctrls/loc/peninputcommonctrls.loc
textinput/peninputcommonctrls/src/peninputselectionlist/peninputscrollablelist.cpp
textinput/peninputcommonlayout/inc/peninputlayoutwindowext.h
textinput/peninputcommonlayout/src/peninputlayoutwindowext.cpp
textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss
textinput/peninputfingerhwrar/group/iconlist.txt
textinput/peninputfingerhwrar/group/peninputfingerhwrar.mmp
textinput/peninputfingerhwrar/inc/peninputfingerhwarvkbutility.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrardatastore.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarlayout.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarnumsymboltable.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarsymboltable.h
textinput/peninputfingerhwrar/inc/peninputfingerhwrarwnd.h
textinput/peninputfingerhwrar/src/peninputfingerhwarvkbutility.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrardatastore.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarengine.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarnumsymboltable.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp
textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp
textinput/peninputgenericitut/group/peninputgenericitut.mmp
textinput/peninputgenericitut/inc/peninputgenericitutdatamgr.h
textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp
textinput/peninputgenericitut/src/peninputgenericitutlayout.cpp
textinput/peninputgenericitut/srcdata/peninputitutconfig_korean.rss
textinput/peninputgenericvkb/group/peninputgenericvkb.mmp
textinput/peninputgenericvkb/inc/peninputgenericvkblayout.h
textinput/peninputgenericvkb/inc/peninputgenericvkbwindow.h
textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp
textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp
textinput/peninputgenericvkb/src/peninputgenericvkbproxy.cpp
textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp
textinput/peninputgenericvkb/srcdata/10282358.rss
textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_01.rss
textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_10.rss
textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_18.rss
textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_39.rss
textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_42.rss
textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_59.rss
textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_70.rss
textinput/peninputsplititut/src/peninputsplititutwesternuimgr.cpp
textinput/peninputsplitqwerty/inc/peninputsplitqwertylayout.h
textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h
textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp
textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_01.rss
textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_10.rss
textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_18.rss
textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_39.rss
textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_42.rss
textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_59.rss
textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_70.rss
textinput/peninputvkbkr/src/PeninputVkbKrWindow.cpp
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingList.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepPredictiveSettingList.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -36,12 +36,15 @@
 #include <PtiDefs.h>
 #include <aknfep.rsg>
 #include <AknFepGlobalEnums.h>
-#include <featmgr.h> 
+#include <featmgr.h>
+#include <AknFepInternalPSKeys.h>
 
 #include "AknFepPredictiveSettingList.h"
 #include "AknFepPredictiveSettingData.h"
 #include "AknFepPredictiveSettingDialog.h"
 
+const TInt KFSQMode = 2;
+
 CAknFepMultiSelectionSettingItem::CAknFepMultiSelectionSettingItem ( 
         TInt aResourceId, CAknFepPredictiveSettingData &aData, CCoeEnv* aCoeEnv )
     : CAknBigSettingItemBase(aResourceId), iData(aData), iCoeEnv(aCoeEnv)
@@ -289,37 +292,56 @@
     switch (aIdentifier)
         {
         case EAknFepCmdPredAutoComplSetting:
+            {
             settingItem = new (ELeave) CAknBinaryPopupSettingItem (
                         aIdentifier, iSettingsData.AutoWordCompl());
             if(DeviceHasMultipleKeyboards())
                 {
                 settingItem->SetHidden(ETrue);
                 }
+            }
             break;
         case EAknFepCmdPredAutoComplMultiSetting:
+            {
             settingItem = new (ELeave) CAknFepMultiSelectionSettingItem (
                     aIdentifier, iSettingsData, iCoeEnv ); 
             if(!DeviceHasMultipleKeyboards())
                 {
                 settingItem->SetHidden(ETrue);
                 }
+            }
             break;
         case EAknFepCmdPredNumberCandidateSetting:
+            {
             settingItem = new (ELeave) CAknBinaryPopupSettingItem (
                                             aIdentifier, 
                                             iSettingsData.NumberCandidates());
-            if(keyboardLayout == EPtiKeyboard12Key || keyboardLayout == EPtiKeyboardHalfQwerty)
+            
+            TInt dialogState = 0;
+            RProperty::Get( KPSUidAknFep, KAknFepSettingDialogState, dialogState );   
+            //Remove Number Candidate item from setting dialog
+            if ( dialogState == KFSQMode || 
+                 keyboardLayout == EPtiKeyboard12Key || 
+                 keyboardLayout == EPtiKeyboardHalfQwerty)
+                {
+                // When dialog state is 2, it means that the setting dialog is opened
+                // for virtual qwerty keyboard
                 settingItem->SetHidden(ETrue);
+                }
+            }
             break;
         case EAknFepCmdPredTypingCorrectionSetting:
+            {
             settingItem = new (ELeave) CAknEnumeratedTextPopupSettingItem (
                                             aIdentifier, 
                                             iSettingsData.TypingCorrection());
             // Disabled for ITU-T
             if(keyboardLayout == EPtiKeyboard12Key || keyboardLayout == EPtiKeyboardHalfQwerty)
                 settingItem->SetHidden(ETrue);
+            }
             break;
         case EAknFepCmdPredPrimaryCandidateSetting:
+            {
             settingItem = new (ELeave) CAknBinaryPopupSettingItem (
                                             aIdentifier, 
                                             iSettingsData.PrimaryCandidate());
@@ -327,6 +349,7 @@
             if(keyboardLayout == EPtiKeyboardHalfQwerty ||
                     keyboardLayout == EPtiKeyboard12Key)
                 settingItem->SetHidden(ETrue);
+            }
             break;
         default:
             break;
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepQuery.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepQuery.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -79,7 +79,15 @@
                 {
                 underlyingEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE;
                 }
-            }
+            }        
+        else if (FeatureManager::FeatureSupported(KFeatureIdKorean))
+            {
+            // Use the special sct resource file for Korean variant.
+            if (!underlyingEditorSCTResId || underlyingEditorSCTResId == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG)
+                {
+                underlyingEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_KOREAN;
+                }
+            }        
         else if (!underlyingEditorSCTResId)
             {
             underlyingEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG;
Binary file fep/aknfep/conf/aknfep.confml has changed
Binary file fep/aknfep/conf/aknfep_101F876D.crml has changed
--- a/fep/aknfep/inc/AknFepLanguageManager.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/inc/AknFepLanguageManager.h	Thu Aug 19 10:15:25 2010 +0300
@@ -55,6 +55,7 @@
 class RPeninputServer;
 class TImePlguinImplDetail;
 class CAknFepPluginManager;
+class CAknFepSharedDataInterface;
 
 /**
  * CAknFepLanguageManager is a part of Japanese FEP.
@@ -84,8 +85,10 @@
      * @param aCaseMan
      * @param aLanguage
      */
-    static CAknFepLanguageManager* NewL(MAknFepManagerUIInterface* aFepMan, 
-                                        CAknFepCaseManager* aCaseMan);
+    static CAknFepLanguageManager* NewL( MAknFepManagerUIInterface* aFepMan, 
+                                         CAknFepCaseManager* aCaseMan,
+                                         CAknFepSharedDataInterface* aSharedData = NULL );
+
 
     /**
      * Destructor.
@@ -187,8 +190,9 @@
      *
      * @since 2.6
      */
-    CAknFepLanguageManager(MAknFepManagerUIInterface* aFepManager, 
-                           CAknFepCaseManager* aCaseManager);
+    CAknFepLanguageManager( MAknFepManagerUIInterface* aFepManager, 
+                            CAknFepCaseManager* aCaseManager,
+                            CAknFepSharedDataInterface* aSharedData = NULL );
 
     /**
      * Second phase construction
@@ -258,6 +262,12 @@
      * @since S60 v3.2
      */	
     TBool iIsSplitView;
+   
+    /**
+     * Shared data manager
+     */
+    CAknFepSharedDataInterface* iSharedData;
+
     };
 
 inline CAknFepPenInputImePlugin* CAknFepLanguageManager::CurrentImePlugin()
--- a/fep/aknfep/inc/AknFepManager.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/inc/AknFepManager.h	Thu Aug 19 10:15:25 2010 +0300
@@ -131,6 +131,7 @@
  		};    
 
 const TInt KChrKeyMultitapTimeout = 1000000;
+const TInt KFnKeyLongPressTimeout = 600000;
 /**
  * Translates ET9Eng language codes into localised descriptors and command Id's
  */
@@ -1364,6 +1365,32 @@
        * @return none
        */
      void SetChangeModeByShiftAndSpace( TBool aFlag );
+     
+     /**
+      * Handle the Fn Key Monitor
+      *
+      * @since 3.0
+      * @return KErrNone if succeed, KErrDied if failed
+      */
+     static TInt HandleFnKeyPressMonitorCallback(TAny* aObj);
+     
+     /**
+      * Handle the Fn Key Monitor
+      * for Qwerty only.
+      *
+      * @since 3.0
+      */
+     void HandleFnKeyPressMonitor();
+     
+     /**
+     * Activate fn key press monitor to detect long pressing event
+     */
+     void ActivateFnkeyPressMonitor();
+     
+     /**
+     * Deactivate fn key press monitor
+     */
+     void DeactivateFnkeyPressMonitor();
 
 public:
     //Hash Key Manager Interface
@@ -2836,7 +2863,12 @@
      * when rotating the screen, we need to consider it, e.g V-ITUT  to FSQ
      */
     TBool iMatchesListLaunched;
-
+    
+    /**
+     * monitor the long press event from Fn key
+     * when long press event occurs, Fn key will be set to Lock state
+     */
+    CPeriodic* iFnKeypressMonitor;
 
 public:
 
@@ -2895,6 +2927,10 @@
     * @param aCallback, the callback when the timer expires
     */
     void MultitapThroughSCTCharL(TCallBack aCallBack);       	 
+    /**
+    * Notify mfne editor to toggle AM or PM for 12-hour time
+    */
+    void ChangeMfneAmPm();
 private:        
     TBool NumericResourceMultiTapTimerTimeoutL();    
     
--- a/fep/aknfep/inc/AknFepManagerUIInterface.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/inc/AknFepManagerUIInterface.h	Thu Aug 19 10:15:25 2010 +0300
@@ -401,6 +401,13 @@
      * An editor of unlimited length will return its maximum size as zero
      */
     virtual TBool EditorHasFreeSpace( TInt aNumberOfCharacter = 0 ) const = 0;
+    
+    /**
+     * Check whether the editor is a Java number editor
+     * Return ETrue if the editor is a Java number editor 
+     */
+    virtual TBool IsSpecialNumericEditor() = 0;
+
 
     virtual void RedecorateAfterDeletionL( const TDesC& aTextThatWasDeleted ) = 0;
 
--- a/fep/aknfep/inc/AknFepPluginManager.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/inc/AknFepPluginManager.h	Thu Aug 19 10:15:25 2010 +0300
@@ -448,6 +448,24 @@
      */
     void RemoveLastFocusedWinFromOpenList();
     
+    /**
+     * Set the editor pointer to NULL
+     *
+     * @since v5.0
+     * @param none
+     * @return void
+     */
+    void ClearDestroyedEditorPointer();
+    
+    /**
+     * Get the editor state
+     *
+     * @since v5.0
+     * @param none
+     * @return the pointer of editor state
+     */
+    CAknEdwinState* EdwinState();
+    
 public: // inline    
     
     /**
@@ -758,6 +776,24 @@
 
     void InformMfneUiStatusL( TBool aOpened );
     
+    /** 
+     * Update editor state according to current ui state
+     * 
+     * @since Symbian^3 
+     * @param aOpened specifies current ui is opened or closed
+     */
+    void SetEdwinFlagsByUiStatus( TBool aOpened );
+    
+    /** 
+     * Update state flags of specified editor
+     * 
+     * @since Symbian^3 
+     * @param aEdwin  specifies the editor to be updated
+     * @param aFlags  editor state flags
+     * @param aSet    ETrue to add flags, or EFalse to remove flags.
+     */
+    void SetAknEdwinFlags( MCoeFepAwareTextEditor* aEdwin, TInt aFlags, TBool aSet );
+    
     void UpdatePredicState();
                             
     TBool NotifyInGlobalNoteEditorL();
@@ -856,6 +892,14 @@
 	 * @CAknFepUiInterfaceMenuPane* aMenuPane The menu pane used to add more menu items
 	 */
 	void InitMenuItemForArabicFingerHwrL(CAknFepUiInterfaceMenuPane* aMenuPane);
+
+    /**
+     * andling the menu cmd for changing the input mode
+     *     
+     * @param aInputMode: the inputmode should be activate
+     * @return None
+     */
+    void ProcessChangingInputModeCmdL(TInt aInputMode);
 	
 private:    // Data
     
@@ -1030,6 +1074,13 @@
     TBool iLaunchHelp;
     TInt iCurPermittedModes;
     MCoeFepAwareTextEditor* iMfne;
+    
+    /**
+     * current focused editor
+     * not own 
+     */
+    MCoeFepAwareTextEditor* iEdwin;
+    
     TBool iMfneChanged;
     TBool iIsInEditWordQueryDlg;
     
@@ -1083,6 +1134,11 @@
     TBool iLaunchSCTInSpell;
 	
     TBool iFocuschangedForSpellEditor;
+    
+    /**
+     * Indicate whether portrait FSQ feature is enabled
+     */    
+    TBool iPortraitFSQEnabled;
     };
 
 class CConnectAo : public CActive
--- a/fep/aknfep/inc/AknFepSharedDataInterface.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/inc/AknFepSharedDataInterface.h	Thu Aug 19 10:15:25 2010 +0300
@@ -34,6 +34,7 @@
 #include <e32property.h>
 #include <cenrepnotifyhandler.h>
 #include <pslninternalcrkeys.h>
+#include <AknFepGlobalEnums.h>  // for TPluginInputMode
 
 class CRepository;
 
@@ -567,6 +568,22 @@
      *               1 is arabic native number.
      */
     void SetDefaultArabicNumberMode(TInt aValue);
+
+    /**
+     * Get the last used plugin input mode for portrait orientation
+     *
+     * @since 5.2
+     * @return value of KAknFepLastUsedPortraitInput value.
+     */
+    TPluginInputMode PluginPortraitInputMode() const;
+
+    /**
+     * Replaces the last used plugin input mode for portrait orientation
+     *
+     * @since 5.2
+     * @param Replace value of KAknFepLastUsedPortraitInput value.
+     */
+    void SetPluginPortraitInputMode( TPluginInputMode aLastUsedPortraitInputMode );
 private:
     /**
      * C++ Constructor
--- a/fep/aknfep/inc/AknFepUiInputStateQwertyKorean.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/inc/AknFepUiInputStateQwertyKorean.h	Thu Aug 19 10:15:25 2010 +0300
@@ -38,9 +38,7 @@
 private:
 
     virtual TBool HandleKeyL(TInt aKey, TKeyPressLength aLength);
-    
-    void KeyTimerExpired();
-    
+        
 private:
     
     };
--- a/fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerBase.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/peninputplugins/PeninputPluginKr/src/PluginKrFepManagerBase.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -539,13 +539,9 @@
     // Not derived from edwin
     if ( aPermittedMode == EAknEditorNumericInputMode ) 
         {
-        if ( SupportNativeNumberRange() )
-            {
-            iPermittedRange = ERangeNativeNumber;
-            }
-        iPermittedRange |= ERangeNumber;
+        // Only number range is supported in Korean Variant
+        iPermittedRange = ERangeNumber;
         }
-        
     else if ( aPermittedMode & EAknEditorTextInputMode )
         {
         // Derived from edwin and EAknEditorTextInputMode
--- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/peninputimeplugingeneric.inl	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/peninputplugins/peninputimeplugingeneric/inc/peninputimeplugingeneric.inl	Thu Aug 19 10:15:25 2010 +0300
@@ -33,6 +33,7 @@
 const TInt KVkbUiId = 0x10282359;
 const TInt KFsqUiId = 0x2001114D;
 const TInt KSsqUiId = 0x2001E2BB;
+const TInt KPrtFsqUiId = 0x20026837;
 const TInt KFingerHwrUiId = 0x2001E2C4;
 inline CPluginFepManagerBase* CPenInputImePluginGeneric::GetCurrentUi()
     {
@@ -42,6 +43,8 @@
         case EPluginInputModeVkb:
         case EPluginInputModeFingerHwr:            
         case EPluginInputModeFSQ:
+        // Portrait FSQ is added as a new mode
+        case EPluginInputModePortraitFSQ:
             return iPluginUiManager;
         default:
             return NULL;
--- a/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/peninputimeplugingeneric.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/peninputplugins/peninputimeplugingeneric/src/peninputimeplugingeneric.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -49,6 +49,7 @@
 _LIT(KHwrImeName, "Generic HWR");
 _LIT(KVkbImeName, "Generic VKB");
 _LIT(KFSQImeName, "Generic FSQ");
+_LIT(KPrtFSQImeName, "Portrait QWERTY");
 _LIT(KSSQImeName, "Split View Qwerty");
 _LIT(KFingerHwrImeName, "Generic Fingerhwr");
 _LIT(KHwrResourceFormatPattern, "peninputhwrwindowconfiginfo_*.rsc");
@@ -207,6 +208,16 @@
                 }
             }
             break;
+        case EPluginInputModePortraitFSQ:
+            {
+            // UI layout for portrait FSQ.
+            // Note: Don't need to check whether portrait QWERTY feature is 
+            // enabled.  Because otherwise, aMode can not have 
+            // EPluginInputModePortraitFSQ.
+            layoutId.iUid = KPrtFsqUiId;
+            }
+            break;
+
         case EPluginInputModeFingerHwr:
             {
             layoutId.iUid = KFingerHwrUiId;
@@ -271,6 +282,13 @@
         {
         mode = EPluginInputModeFSQ;
         }
+    // If full screen portrait QWERTY feature is enabled, portrait QWERTY UI 
+    // layout is used.
+    else if( aLayoutId == KPrtFsqUiId ) 
+        {
+        mode = EPluginInputModePortraitFSQ;
+        }
+
     else if( aLayoutId == KFingerHwrUiId )
         {
         mode = EPluginInputModeFingerHwr;
@@ -365,6 +383,11 @@
             id = KFsqUiId;
             }
             break;
+        case EPluginInputModePortraitFSQ:
+            {
+            id = KPrtFsqUiId;
+            }
+            break;
         case EPluginInputModeFingerHwr:
             {
             id = KFingerHwrUiId;
@@ -465,6 +488,7 @@
     TBool hwr = EFalse;
     TBool vkb = EFalse;
     TBool fsq = EFalse;
+    TBool prtfsq = EFalse;
     TBool ssq = EFalse;
     TBool fingerhwr = EFalse;  
     CleanupStack::PushL( TCleanupItem( Cleanup, &infoArray ) );
@@ -489,6 +513,14 @@
             fsq = ETrue;
             }
             
+        // If full screen portrait QWERTY feature is enabled, set the mode is enabled.
+        if ( infoArray[i]->ImplementationUid().iUid == KPrtFsqUiId
+            && FeatureManager::FeatureSupported( 
+                KFeatureIdFfVirtualFullscrPortraitQwertyInput ) )
+            {
+            prtfsq = ETrue;
+            }
+            
         if (infoArray[i]->ImplementationUid().iUid == KSsqUiId
                 && FeatureManager::FeatureSupported(KFeatureIdVirtualFullscrQwertyInput))
             {
@@ -533,7 +565,7 @@
   	    delete dir;
         }
 
-    if( vkb || fsq )
+    if( vkb || fsq || prtfsq )
         {
       	TFindFile fileFinder(CCoeEnv::Static()->FsSession());
       	TFileName resName;
@@ -571,6 +603,34 @@
                     j <=  KSupportLanguages[i].iLangEnd; ++j)
                     {
                     VkbResNameFromLangId( resName, j);
+                    
+                    if( IsFileInDir( dir, resName ) )
+                        {
+                        detail.iLanguage = j;
+                        detail.iMeritValue = KSupportLanguages[i].iMerit;
+                        aSupportList.Append(detail);
+                        }
+                    }
+                }
+            }
+
+        // Add portrait full qwerty as the supported mode.
+        // Note: Feature flag check is not needed here because prtfsq should be
+        // EFalse if the feature flag is not enabled.
+        // Note: We share the same layout for portrait FSQ with landscape FSQ.
+        if( prtfsq )
+            {
+            detail.iMode = EPluginInputModePortraitFSQ;
+            // Display name is "Portrait QWERTY".
+            detail.iDisplayName.Copy( KPrtFSQImeName() );
+            // Add all the support languages.  They are defined in 10282358.rss.
+            for ( TInt i = 0; i < sizeof( KSupportLanguages ) / sizeof( TLangMeritPair ); ++i )
+                {
+                for ( TInt j =  KSupportLanguages[i].iLangStart; 
+                    j <=  KSupportLanguages[i].iLangEnd; ++j )
+                    {
+                    VkbResNameFromLangId( resName, j );
+
                     if( IsFileInDir( dir, resName ) )
                         {
                         detail.iLanguage = j;
@@ -768,6 +828,7 @@
             }
         case EPluginInputModeVkb:
         case EPluginInputModeFSQ:
+        case EPluginInputModePortraitFSQ:
             {
             return iPluginUiManager = CPluginFepManagerVkb::NewL(*this, iPenInputServer);
             }
--- a/fep/aknfep/src/AknFepFnKeyManager.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/src/AknFepFnKeyManager.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -130,6 +130,21 @@
         iFepMan.SetCase(EFnKeyLowerCase);
         iFepMan.UpdateIndicators();
         }
+    else if( keyboardType == EPtiKeyboardQwerty4x10 && (EFnKeyPressed  == iFnKeyState || EFnKeyPressedAgain  == iFnKeyState) 
+			&& aState == EFnKeyLock )
+    	{
+		UpdatePreviousCase();
+		iFepMan.SetCase(EFnKeyLowerCase);
+		iFnKeyState = aState;
+		iFepMan.UpdateIndicators();
+    	}
+	else if( keyboardType == EPtiKeyboardQwerty4x10 && EFnKeyDown  == iFnKeyState 
+			&& aState == EFnKeyNone )
+		{
+		iFepMan.SetCase( (TCase)iPreviousCase );
+		iFnKeyState = aState;
+		iFepMan.UpdateIndicators();
+		}
 #endif // RD_INTELLIGENT_TEXT_INPUT 		
 #ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__  
 #ifdef RD_INTELLIGENT_TEXT_INPUT  
--- a/fep/aknfep/src/AknFepLanguageManager.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/src/AknFepLanguageManager.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -38,6 +38,7 @@
 #include "AknFepUiManagerWestern.h"         // CAknFepUIManagerWestern
 #include "AknFepUiManagerChinese.h"         // CAknFepUIManagerChinese
 #include "AknFepLanguageManager.h"          // this class
+#include "AknFepSharedDataInterface.h"      // CAknFepSharedDataInterface
 
 #include "AknFepUiManagerKorean.h"        	// CAknFepUIManagerKorean
 #include <uikon.hrh>                        // TAknEditorNumericKeymap
@@ -47,6 +48,7 @@
 #include  "AknFepPluginManager.h"
 #include <peninputcmd.h>
 #include <peninputclient.h>
+#include <featmgr.h>
 
 void Cleanup( TAny* aAny )
 	{
@@ -67,10 +69,11 @@
 // first phase construction.
 // -----------------------------------------------------------------------------
 //
-CAknFepLanguageManager* CAknFepLanguageManager::NewL(MAknFepManagerUIInterface* aFepMan, 
-                                                     CAknFepCaseManager* aCaseMan)
+CAknFepLanguageManager* CAknFepLanguageManager::NewL( MAknFepManagerUIInterface* aFepMan, 
+                                                      CAknFepCaseManager* aCaseMan, 
+                                                      CAknFepSharedDataInterface* aSharedData )
     {
-    CAknFepLanguageManager* self = new(ELeave) CAknFepLanguageManager(aFepMan, aCaseMan);
+    CAknFepLanguageManager* self = new(ELeave) CAknFepLanguageManager(aFepMan, aCaseMan, aSharedData);
     CleanupStack::PushL(self);
     self->ConstructL();
     CleanupStack::Pop(); // self
@@ -199,12 +202,14 @@
 // -----------------------------------------------------------------------------
 //
 CAknFepLanguageManager::CAknFepLanguageManager(MAknFepManagerUIInterface* aFepManager, 
-                                               CAknFepCaseManager* aCaseManager) 
+                                               CAknFepCaseManager* aCaseManager,
+                                               CAknFepSharedDataInterface* aSharedData ) 
 
 :iInputLanguage(ELangEnglish), 
  iFepManager(aFepManager), 
  iCaseManager(aCaseManager),
- iPluginManager(NULL)
+ iPluginManager(NULL),
+ iSharedData(aSharedData)
     {
     }
 
@@ -310,7 +315,8 @@
         }
     else // Portrait
         {
-        secondMode = EPluginInputModeItut;
+        secondMode = ( iSharedData ) 
+            ? iSharedData->PluginPortraitInputMode() : EPluginInputModeItut;
         } 
     TPluginInputMode curMode = aPreferedMode;
     TInt language = aPenInputLang;
--- a/fep/aknfep/src/AknFepManager.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/src/AknFepManager.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -522,7 +522,7 @@
         }    
 #endif
     iCaseMan = CAknFepCaseManager::NewL(*this);
-    iLangMan = CAknFepLanguageManager::NewL(this, iCaseMan);
+    iLangMan = CAknFepLanguageManager::NewL( this, iCaseMan, iSharedDataInterface );
     iPtiEngine->ActivateLanguageL(inputLanguage);
 #ifdef RD_INTELLIGENT_TEXT_INPUT
 #ifdef FF_DUAL_LANGUAGE_SUPPORT
@@ -575,6 +575,8 @@
     iIsFnKeyMapped = IsFnKeyMappedL();
     iKeyboardType = (TPtiKeyboardType)iSharedDataInterface->KeyboardLayout();
 #endif
+    
+    iFnKeypressMonitor = CPeriodic::NewL(CActive::EPriorityStandard);
     }
 
 CAknFepManager::~CAknFepManager()
@@ -703,6 +705,8 @@
         iNumericResourceTimer = NULL;    
         }
 #endif
+    delete iFnKeypressMonitor;
+    iFnKeypressMonitor = NULL;
     }
 
 #ifdef RD_INTELLIGENT_TEXT_INPUT
@@ -3126,6 +3130,24 @@
     	FepUI()->HandleKeyL(EKeyLeftCtrl, EShortKeyPress);    
    	}*/
 
+    //The default value of response is EKeyWasConsumed. So in some case, fep don¡¯t 
+    //do anything, but it return Consumed.
+    //This make app miss the event EEventKeyUp. 
+    //As per the logic of the function, the combine about ctrl key including:
+    //       Ctrl key + C; Ctrl key + V; Ctrl + X
+    //       Ctrl key + Shift key
+    //       Ctrl key + space
+    //       Ctrl key + Function key
+    //In above cases, it return EKeyWasConsumed, it is correct.
+    //The function for Ctrl Key as pressing the only one key ctrl at one time is to 
+    //do something if the flag EFlagQwertyShiftMode is set
+    //In this case, it return EKeyWasConsumed, it is correct.
+    //In other case, it should return EKeyWasNotConsumed
+    if( ( aKeyEvent.iScanCode == EStdKeyRightCtrl || aKeyEvent.iScanCode==EStdKeyLeftCtrl )
+        && !IsFlagSet(EFlagQwertyShiftMode) )
+        {
+        response = EKeyWasNotConsumed;
+        }
 
     return response;
     }
@@ -3602,6 +3624,17 @@
             // Delete anu UI components launched by Fep.
             iUiInterface->DeleteDialogs();
         	}
+        
+        if ( iFepPluginManager )
+        	{
+			// Check whether the destroyed editor is the editor that stored in fep
+			// according to the editor state
+			if ( aAknEdwinState == iFepPluginManager->EdwinState())
+				{
+				// Set the editor pointer to NULL to avoid wild pointer exist
+				iFepPluginManager->ClearDestroyedEditorPointer();
+				}
+        	}
     	}
     if ( IsFepAwareTextEditor() )
         {
@@ -4622,7 +4655,8 @@
      if (iFepPluginManager && 
         (iFepPluginManager->PluginInputMode() == EPluginInputModeItut ||
          iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
-         iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)) 
+         iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr || 
+         iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ ) )
         {
         iFepPluginManager->SetMenuState();     
         }
@@ -4806,7 +4840,8 @@
      if (iFepPluginManager && 
         (iFepPluginManager->PluginInputMode() == EPluginInputModeItut ||
          iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
-         iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)) 
+         iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr || 
+         iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ ) )
         {
         iFepPluginManager->SetMenuState(EFalse);     
         }
@@ -5518,10 +5553,17 @@
             }
         }
     TInt inputOptionsPos = 0;
-    if ( aMenuPane->MenuItemExists( EEikCmdEditPaste, inputOptionsPos ) )
-        {
-        inputOptionsPos++; 
-        }
+    TInt pastePos = 0;
+    
+    if ( aMenuPane->MenuItemExists( EEikCmdEditPaste, pastePos ) )
+        {
+        CEikMenuPaneItem::SData& itemData = aMenuPane->GetMenuPane()->ItemDataByIndexL( pastePos );
+        if ( !( itemData.iFlags & EEikMenuItemDimmed ) )
+        	{
+            inputOptionsPos = pastePos + 1; 
+        	}
+        }
+   
     //Now we have the position at which we need to insert the menu item. 
     if (
 #ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__
@@ -6383,14 +6425,6 @@
         aMenuPane->SetItemDimmed(EAknCmdEditModeLatinText, ETrue);
         aMenuPane->SetItemDimmed(EChinFepCmdModeLatinUpper, ETrue);
         aMenuPane->SetItemDimmed(EChinFepCmdModeLatinLower, ETrue);
-        if( iMode == EHangul || inputLanguage == ELangKorean)
-            {
-            TInt index;
-            if ( aMenuPane->MenuItemExists( EAknCmdEditModeKorean, index ) )
-                {
-                aMenuPane->SetItemDimmed(EAknCmdEditModeKorean, EFalse);
-                }
-            }
         }
 
     if ( IsModePermitted(ENumber) )
@@ -7545,6 +7579,7 @@
         TRAP_IGNORE( NumericResourceMultiTapTimerTimeoutL());
         }
 #endif
+    DeactivateFnkeyPressMonitor();
     }
 
 TBool CAknFepManager::IsModePermitted(TInt aMode, TWidthChar aWidth) const
@@ -8767,15 +8802,7 @@
 void CAknFepManager::LaunchInsertWordQueryL(const TDesC& aInitialText, 
                                             TCursorSelection aTextSpanToReplace)
     {
-    TInt recourceId;
-    if(EditorState()->Flags() & EAknEditorFlagEnablePartialScreen)
-        {
-        recourceId = R_AVKON_INSERT_WORD_FS_QUERY;
-        }
-    else
-        {
-        recourceId = R_AVKON_INSERT_WORD_QUERY;
-        }
+    TInt recourceId = R_AVKON_INSERT_WORD_QUERY;
     LaunchFepQueryDialogL(recourceId, aInitialText, aTextSpanToReplace);
     }
 
@@ -8793,15 +8820,7 @@
                                                                     iUncommittedText.iAnchorPos, 
                                                                     iUncommittedText.Length());
 
-    TInt recourceId;
-    if(EditorState()->Flags() & EAknEditorFlagEnablePartialScreen)
-        {
-        recourceId = R_AVKON_INSERT_WORD_FS_QUERY;
-        }
-    else
-        {
-        recourceId = R_AVKON_INSERT_WORD_QUERY;
-        }
+    TInt recourceId = R_AVKON_INSERT_WORD_QUERY;
     LaunchFepQueryDialogL(recourceId, newText, iUncommittedText);
     }
 
@@ -9985,7 +10004,8 @@
 	                }
                 else
                     {
-                    if(IsKoreanInputLanguage( ) && IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))
+                    if(IsKoreanInputLanguage( ) && !IsQwerty() &&
+                    		IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))
                         {
                         showCursor = EFalse;
                         }
@@ -10360,7 +10380,6 @@
 
     //maxLength of 0 means the editor has no limit
     TInt maxEdSize = iInputCapabilities.FepAwareTextEditor()->DocumentMaximumLengthForFep();
-    TInt edSize = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep();
     TCursorSelection currentSelection;
     iInputCapabilities.FepAwareTextEditor()->GetCursorSelectionForFep(currentSelection);
 
@@ -10371,16 +10390,19 @@
         {
         return 0;
         }
-    else
-        {
-        if( isToCountUncommittedTextLength )
-            {
-            return ( maxEdSize - edSize + 
-                currentSelection.Length() + UncommittedText().Length() );
-            }
-        return (maxEdSize - edSize + currentSelection.Length());
-        }
-    }
+
+    TInt edSize = iInputCapabilities.FepAwareTextEditor()->DocumentLengthForFep();
+
+    if( isToCountUncommittedTextLength )
+        {
+        return ( maxEdSize - edSize + 
+            currentSelection.Length() + UncommittedText().Length() );
+        }
+    
+    return (maxEdSize - edSize + currentSelection.Length());
+
+    }
+
 #ifdef RD_INTELLIGENT_TEXT_INPUT
 TInt CAknFepManager::EditorFreeSpaceForAutoWordCompletion(TBool& aUnlimit, 
     TBool /* isToCountUncommittedTextLength = EFalse*/ ) const
@@ -10657,12 +10679,13 @@
             // Any latin input mode is not permitted by the editor.
             // For compatibility permitted japanese input modes are checked and
             // corresponding latin input modes are allowed.
-            if ( iPermittedInputModes & (EAknEditorKatakanaInputMode |
+            if ( iPermittedInputModes & ( EAknEditorKatakanaInputMode |
                                     EAknEditorHalfWidthTextInputMode |
                                     EAknEditorFullWidthTextInputMode |
                                     EAknEditorFullWidthKatakanaInputMode |
                                     EAknEditorHiraganaKanjiInputMode |
-                                    EAknEditorHiraganaInputMode))
+                                    EAknEditorHiraganaInputMode
+                                    | EAknEditorHangulInputMode ) )
                 {
                 iPermittedInputModes |= EAknEditorTextInputMode;
                 }
@@ -10673,12 +10696,13 @@
 
             if ( !(defaultInputMode & (EAknEditorTextInputMode | EAknEditorNumericInputMode)))
                 {
-                if (defaultInputMode & (EAknEditorKatakanaInputMode |
+                if ( defaultInputMode & ( EAknEditorKatakanaInputMode |
                                     EAknEditorHalfWidthTextInputMode|
                                     EAknEditorFullWidthTextInputMode |
                                     EAknEditorFullWidthKatakanaInputMode |
                                     EAknEditorHiraganaKanjiInputMode |
-                                    EAknEditorHiraganaInputMode))
+                                    EAknEditorHiraganaInputMode
+                                    | EAknEditorHangulInputMode ) )
                     {
                     defaultInputMode = EAknEditorTextInputMode;
                     }
@@ -10766,7 +10790,7 @@
             {        
             if (IsKoreanInputLanguage())
             	{
-                if(iMode == EHangul || iMode == ENumber || iMode == EAknEditorNullInputMode )
+                if( iMode == EAknEditorNullInputMode )
             		{
             		SetWesternPredictive(EFalse);
          			TryChangeModeL(EHangul);
@@ -10782,6 +10806,12 @@
             	TryChangeModeL(ELatin); 
             	}
             }
+        else if ( editorMode == EAknEditorHangulInputMode )
+        	{
+            // Choose EHangul as the current fep mode 
+            // if the editor mode stored in editor state is EAknEditorHangulInputMode. 
+            TryChangeModeL(EHangul);        
+        	}        
         else if (!iStrokeUsedInQWERTY)
         	{
         	if (editorMode == EStroke && sharedDataMode == ECangJie)
@@ -11392,7 +11422,7 @@
                 }
             break;
     	case EHangul: 
-       		editorMode = EAknEditorTextInputMode;       	
+       		editorMode = EAknEditorHangulInputMode;       	
        		break;
         default:
             if (IsFeatureSupportedJapanese())
@@ -12802,8 +12832,10 @@
 #ifdef RD_SCALABLE_UI_V2
     TBool fingerItutIndicator = ( iFepPluginManager && 
                                   iFepPluginManager->PluginInputMode() == EPluginInputModeItut );
+    // Portrait FSQ is added.
     TBool fingerFSQIndicator = ( iFepPluginManager && 
-            iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ );
+            ( iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
+              iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ ) );
 #else
     TBool fingerItutIndicator = EFalse;
     TBool fingerFSQIndicator = EFalse;
@@ -13043,9 +13075,12 @@
                 }
            // Add This condition for  Phonebook, ReTe, PF52.50_2008_wk32: 
            // Navigation bar disappears after tapping find pane and then returning back to Names list view.
+           // Portrait FSQ is added.
            if (!(editingStateIndicator == (MAknEditingStateIndicator*)iIndicator &&
-               ( iFepPluginManager && ( iFepPluginManager->PluginInputMode() == EPluginInputModeItut 
-            		                    || iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ) ) &&
+               ( iFepPluginManager && 
+                    ( iFepPluginManager->PluginInputMode() == EPluginInputModeItut 
+                    || iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ 
+                    || iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ ) ) &&
                IsFindPaneEditor()))
                {
                editingStateIndicator->SetState(newState);
@@ -13829,6 +13864,16 @@
         	    }        
             }
         }
+
+    if ( FeatureManager::FeatureSupported(KFeatureIdKorean) )
+        {
+        // Use the special sct resource file for Korean variant.
+        if (currentEditorSCTResId == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG)
+            {
+            currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_KOREAN;
+            }
+        }
+    
     if (currentEditorSCTResId == EDefaultSCTResourceId) // -1 forces the default in SCT resource definition
         {
         if (iAknEditorFlags & EAknEditorFlagLatinInputModesOnly)
@@ -13863,7 +13908,12 @@
                 if ( FeatureManager::FeatureSupported(KFeatureIdChinese) )
                     {    
                     currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE;
-                    }
+                    }                
+                else if( FeatureManager::FeatureSupported(KFeatureIdKorean) )
+                    {    
+                    // Use the special sct resource file for Korean variant.
+                    currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_KOREAN;
+                    }               
                 else
                     {                    
                     currentEditorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG;
@@ -15178,6 +15228,26 @@
         {
         return response;
         }
+    
+    // You will not understand the flowing lines, 
+    // for it is just a "hole stem" than normal logic.
+    //
+    // Let me explain: 
+    // In HWR, 4x12 keyboard is used, and predictive should be disabled for it.
+    // unfortunately, the existed codes enable predictive in some special case.
+    // when you switch from FSQ to HWR, with ITI on, you will get that.
+    // then if you press arrow key, 
+    // the code blow of "HandlePredictiveNaviEventOutsideInlineEditL" will be called.
+    // which is writen for FSQ, not HWR, that finally cause navi-event being consumed.
+    // No navigation action being performed.
+    //
+    // It is not a complete fix, just for simplicity. 
+    if (iFepPluginManager && 
+        iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)
+        {
+        return EKeyWasNotConsumed;
+        }
+
     if (WesternPredictive())
         {
         response = HandlePredictiveNaviEventOutsideInlineEditL(aCode, aLength);
@@ -15531,7 +15601,24 @@
             // we have text selected - set cursor to start/end of current selection
             TTmDocPosSpec newPos;
             aResponse = NavigateFromSelectionL( currentEditorSelection, naviEvent, newPos );
-            if ( aCode != EKeyBackspace && WesternPredictive() )
+            
+            // You will not understand the following lines, 
+            // for it is just a "hole stem" than normal logic.
+            //
+            // Let me explain: 
+            // In HWR, 4x12 keyboard is used, and predictive should be disabled for it.
+            // unfortunately, the existing codes enable predictive in some special case.
+            // when you switch from FSQ to HWR, with ITI on, you will get that.
+            // then if you select some words and press arrow key, 
+            // the if bratch of the code blow will be excuted.
+            // which is writen for FSQ, not HWR, 
+            // MoveCursorToEndOfWordL or MoveCursorToStartOfWordL is called unexpected
+            //
+            // It is not a complete fix, just for simplicity.
+            TBool isFingerHwr = ( iFepPluginManager != NULL ) && 
+								( iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr );
+
+            if ( aCode != EKeyBackspace && !isFingerHwr && WesternPredictive() )
                 {
                 if (CursorInsideWord())
                     {
@@ -15765,7 +15852,8 @@
     if( iFepPluginManager->PluginInputMode() != EPluginInputModeNone &&
         iFepPluginManager->PluginInputMode() != EPluginInputModeItut
         // Add this condition for correction of dim features on FSQ
-        && iFepPluginManager->PluginInputMode() != EPluginInputModeFSQ )
+        && iFepPluginManager->PluginInputMode() != EPluginInputModeFSQ
+        && iFepPluginManager->PluginInputMode() != EPluginInputModePortraitFSQ )
         {
         iFepPluginManager->LaunchPenInputLanguageSelectionL(aLaunchedByTouchWin);
         return;
@@ -17414,6 +17502,14 @@
 
 void CAknFepManager::CalculateEditorDigitType(TDigitType& aDestination)
     {
+    // When current range is latin number mode
+    if ( iMode == ENumber )
+        {
+        // Set the Local Digit Type flag to EDigitTypeWestern
+        aDestination = EDigitTypeWestern;
+        return;
+        }
+
     TBool ASCIIDigits = EFalse;
     MObjectProvider* mop = iInputCapabilities.ObjectProvider();
 
@@ -18294,6 +18390,14 @@
             charMap = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE;
             }
         }
+    else if ( FeatureManager::FeatureSupported(KFeatureIdKorean) )
+        {     
+        // Use the special sct resource file for Korean variant.
+        if (charMap == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG)
+            {
+            charMap = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_KOREAN;
+            }
+        }
     if (!charMap)
         {
         // override numeric keymap if necessary. flag is for non standard charmaps
@@ -18313,10 +18417,7 @@
         {
     	currentEditorSCTResId = charMap;
         }
-    if(R_AKNFEP_SCT_NUMERIC_MODE_CHARS_PLAIN == charMap && 
-       ( R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_LATIN_ONLY == currentEditorSCTResId || 
-         R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG == currentEditorSCTResId || 
-         R_AVKON_URL_SPECIAL_CHARACTER_TABLE_DIALOG == currentEditorSCTResId) )
+    if(R_AKNFEP_SCT_NUMERIC_MODE_CHARS_PLAIN == charMap)
         {
         TBool isEmpty = ETrue;
         TRAP_IGNORE(isEmpty = GetSctLengthL(charMap));
@@ -18424,11 +18525,13 @@
             {
              if (iFepPluginManager->PluginInputMode() == EPluginInputModeItut ||
                  iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
-                 iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)
+                 iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr ||
+                 iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ )
+
                 {
                 SetStopProcessFocus(ETrue, EFalse);
                 iFepPluginManager->SetMenuState();            
-                }            
+                }                      
              else if (!iFepPluginManager->IsGlobleNotes())
                 {
                 iFepPluginManager->ClosePluginInputUiL( ETrue );
@@ -18484,10 +18587,11 @@
                 {
                  if (iFepPluginManager->PluginInputMode() == EPluginInputModeItut ||
                      iFepPluginManager->PluginInputMode() == EPluginInputModeFSQ ||
-                     iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr)
+                     iFepPluginManager->PluginInputMode() == EPluginInputModeFingerHwr ||
+                     iFepPluginManager->PluginInputMode() == EPluginInputModePortraitFSQ )
                     {
                     SetStopProcessFocus(EFalse);
-                    }            
+                    }                      
                  else
                     {
                     HandleChangeInFocus();
@@ -18894,42 +18998,42 @@
                                                   TEventCode aEventCode,
                                                   TKeyResponse& aRetCode)
     {
-    TCursorSelection currentEditorSelection(0,0);
-	if(iInputCapabilities.FepAwareTextEditor())
-    	{
-    	iInputCapabilities.FepAwareTextEditor()->
-    		GetCursorSelectionForFep(currentEditorSelection);
-    	}    
-    
-    TInt inputMode = PluginInputMode();
-    TBool isArabicFingerHwr = (inputMode == EPluginInputModeFingerHwr &&
-	                           GetInputLanguageFromSharedDataInterface() == ELangArabic);	
-	if(!IsMfneEditor() && (inputMode == EPluginInputModeItut || 
-		                   inputMode == EPluginInputModeFSQ  || isArabicFingerHwr)  
-		               && currentEditorSelection.Length() != 0)
-    	{
-    	
-        if ((aKeyEvent.iScanCode == EStdKeyLeftArrow) || (aKeyEvent.iScanCode == EStdKeyRightArrow)) 
-            {   
-            if (!(aKeyEvent.iModifiers & EModifierShift))
+    aRetCode = EKeyWasNotConsumed;
+    TBool used = EFalse;
+
+    // only arrow keys are potentially handled
+    if ( ( aKeyEvent.iScanCode == EStdKeyLeftArrow 
+            || aKeyEvent.iScanCode == EStdKeyRightArrow )
+            && iInputCapabilities.FepAwareTextEditor() )
+        {
+        TInt inputMode = PluginInputMode();
+        TBool isArabicFingerHwr = ( inputMode == EPluginInputModeFingerHwr &&
+                GetInputLanguageFromSharedDataInterface() == ELangArabic );
+        TCursorSelection currentEditorSelection( 0, 0 );
+
+        iInputCapabilities.FepAwareTextEditor()->
+                GetCursorSelectionForFep( currentEditorSelection );
+        
+        if ( !IsMfneEditor() && ( inputMode == EPluginInputModeItut ||
+                inputMode == EPluginInputModeFSQ  || 
+                inputMode == EPluginInputModePortraitFSQ  || 
+                isArabicFingerHwr )
+                && currentEditorSelection.Length() != 0 )
+            {
+            used = ETrue;
+
+            if ( !( aKeyEvent.iModifiers & EModifierShift ) )
                 {
                 TKeyEvent ccpuStart = aKeyEvent;
                 ccpuStart.iModifiers |= EModifierShift;
                 ccpuStart.iModifiers |= EModifierRightShift;
-                CCoeEnv::Static()->SimulateKeyEventL(ccpuStart, aEventCode);        
-                
+                CCoeEnv::Static()->SimulateKeyEventL( ccpuStart, aEventCode );        
                 aRetCode = EKeyWasConsumed;
-                return ETrue;
-                }  
-            else
-                {
-                aRetCode = EKeyWasNotConsumed;
-                return ETrue;              
                 }               
-            }	
-    	}
-    aRetCode = EKeyWasNotConsumed;
-    return EFalse;    
+            }
+        }
+    
+    return used;
     }
 
 #else // !RD_SCALABLE_UI_V2
@@ -19897,7 +20001,31 @@
      	}
      else
      	{
-     	
+		//Handle Fn key and consider long press case
+		if( EStdKeyRightFunc == aKeyEvent.iScanCode )
+			{
+			switch(aEventCode)
+				{
+				case EEventKeyDown:
+					ActivateFnkeyPressMonitor();
+					break;
+				case EEventKeyUp:
+					{
+					if(!iFnKeypressMonitor->IsActive())
+					   {
+					    //when long pressing event occurrs,
+                        //event has been already handled in HandleFnKeyPressMonitorCallback()
+						return EKeyWasConsumed;
+					   }
+					//when short pressing event occurs, 
+                    //only deactive fn Key press monitor and normal event handle flow will work
+					DeactivateFnkeyPressMonitor();
+					}
+					break;
+				default:
+					break;	
+				}			  
+			}
      	ret = iFnKeyManager->HandleFnKeyEventL( aKeyEvent, aEventCode, 
                                             	iInputCapabilities ) ;     	
      	}
@@ -20679,7 +20807,25 @@
     	}       
     return EFalse;    
     }    
-    
+void CAknFepManager::ChangeMfneAmPm()
+    {
+	//trigger when touch at "AM" or "PM" in ICF
+    if (iInputCapabilities.FepAwareTextEditor() && IsMfneEditor() )
+        {
+        MObjectProvider* mop = iInputCapabilities.ObjectProvider();
+        if ( mop && iInputCapabilities.FepAwareTextEditor() )
+            {
+            CAknExtendedInputCapabilities* extendedInputCapabilities = 
+                mop->MopGetObject( extendedInputCapabilities );
+            if ( extendedInputCapabilities->Capabilities() && CAknExtendedInputCapabilities::EInputEditorAmPm )// if support AM/PM toggle
+                 {
+                extendedInputCapabilities->ReportEventL(
+                    CAknExtendedInputCapabilities::MAknEventObserver::EChangeAmPm, NULL);
+                 }
+            }
+        }
+    }
+
 //-------------------------------------------------------------------
 
 //
@@ -20853,7 +20999,8 @@
     // temporary solution for Entering key on virtual QWERTY not working 
     // like enter on virtual ITU-T or on external keyboard
     if ( iOptionsMenuBar && !( iFepPluginManager && 
-    		iFepPluginManager->CurrentPluginInputMode() == EPluginInputModeFSQ ) )
+        ( iFepPluginManager->CurrentPluginInputMode() == EPluginInputModeFSQ || 
+          iFepPluginManager->CurrentPluginInputMode() == EPluginInputModePortraitFSQ ) ) )
         {
         iOptionsMenuBar->StopDisplayingMenuBar();
         iOptionsMenuBar = NULL;
@@ -21078,6 +21225,75 @@
 
 
 // ---------------------------------------------------------------------------
+// CAknFepManager::HandleFnKeyPressMonitorCallback
+// Handle fnkey press monitor callback
+// static function
+// ---------------------------------------------------------------------------
+//
+TInt CAknFepManager::HandleFnKeyPressMonitorCallback(TAny* aObj)
+	{
+    TRAPD(err, static_cast<CAknFepManager*>(aObj)->HandleFnKeyPressMonitor());
+    if (err)
+        {
+        static_cast<CAknFepManager*>(aObj)->CleanUpFep();
+        return KErrDied;
+        }
+    return KErrNone;
+	}
+
+// ---------------------------------------------------------------------------
+// CAknFepManager::HandleFnKeyPressMonitor
+// Handle fnkey press monitor callback
+// ---------------------------------------------------------------------------
+//
+void CAknFepManager::HandleFnKeyPressMonitor()
+	{
+	DeactivateFnkeyPressMonitor();
+	
+	//if previous state of fn key is EFnKeyNone or EFnKeyNext, EFnKeyLock will be set;
+	//otherwise, if previous state is EFnKeyLock, EFnKeyNone will be set.
+	switch(iFnKeyManager->FnKeyState())
+		{
+		case CAknFepFnKeyManager::EFnKeyPressed:
+		case CAknFepFnKeyManager::EFnKeyPressedAgain:
+			 iFnKeyManager->SetFnKeyState(CAknFepFnKeyManager::EFnKeyLock);
+			break;
+		case CAknFepFnKeyManager::EFnKeyDown:
+			 iFnKeyManager->SetFnKeyState(CAknFepFnKeyManager::EFnKeyNone);
+			 break;
+		default:
+			break;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CAknFepManager::ActivateFnkeyPressMonitor
+// Activate Fnkey press Monitor
+// ---------------------------------------------------------------------------
+//
+void CAknFepManager::ActivateFnkeyPressMonitor()
+	{
+	 if( iFnKeypressMonitor )
+		 {
+		  iFnKeypressMonitor->Start(KFnKeyLongPressTimeout, KFnKeyLongPressTimeout, 
+							   TCallBack(HandleFnKeyPressMonitorCallback, this));
+		 }
+	}
+
+// ---------------------------------------------------------------------------
+// CAknFepManager::DeactivateFnkeyPressMonitor
+// Deactivate Fnkey press Monitor
+// ---------------------------------------------------------------------------
+//
+void CAknFepManager::DeactivateFnkeyPressMonitor()
+	{
+	 if( iFnKeypressMonitor && iFnKeypressMonitor->IsActive())
+		 {
+		   iFnKeypressMonitor->Cancel();
+		 }
+	}
+
+// ---------------------------------------------------------------------------
 // LOCAL METHODS
 // 
 // ---------------------------------------------------------------------------
--- a/fep/aknfep/src/AknFepPluginManager.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/src/AknFepPluginManager.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -288,6 +288,10 @@
     iAvkonRepository = CRepository::NewL( KCRUidAvkon ); 
     
     iConnectAo = new (ELeave)CConnectAo(this);
+    
+    // iPortraitFSQEnabled indicates whether portrait FSQ feature is enabled.
+    iPortraitFSQEnabled = FeatureManager::FeatureSupported( 
+        KFeatureIdFfVirtualFullscrPortraitQwertyInput );
     }
 
 // -----------------------------------------------------------------------------
@@ -489,8 +493,13 @@
             case ESignalKeyEvent:
                 {
                 TPtr ptr( const_cast<TUint16*>(pBuf.Ptr()), pBuf.Length(), pBuf.Length() );
-                if(iFepMan.InputMode() == ELatin && (iPluginInputMode == EPluginInputModeVkb || 
-                   iPluginInputMode == EPluginInputModeFSQ))
+                
+                // If input mode is latin and Vkb or FSQ (landscape or portrait), 
+                // data case is adjusted.
+                if( iFepMan.InputMode() == ELatin && 
+                    ( iPluginInputMode == EPluginInputModeVkb || 
+                      iPluginInputMode == EPluginInputModeFSQ || 
+                      iPluginInputMode == EPluginInputModePortraitFSQ ) )
                     {
                     AdjustDataCase( ptr );
                     }
@@ -505,7 +514,12 @@
                 break;                    
             case ESignalHwNotifySctPopup:
                 iFepMan.LaunchSpecialCharacterTableL( 0,ETrue );//possible?
-                break;                      
+                break;  
+            case ESignalChangeAmPm:
+                {
+                iFepMan.ChangeMfneAmPm();
+                }
+                break;
             case ESignalSetAppEditorCursor:
                 {
                 TInt8 *ptrData = (TInt8* )(pBuf.Ptr());
@@ -534,9 +548,10 @@
                     break;    
                     }
                 iLaunchMenu = ETrue;
-                if (PluginInputMode() == EPluginInputModeItut ||
-                    PluginInputMode() == EPluginInputModeFSQ ||
-                    PluginInputMode() == EPluginInputModeFingerHwr)
+                if ( PluginInputMode() == EPluginInputModeItut ||
+                     PluginInputMode() == EPluginInputModeFSQ ||
+                     PluginInputMode() == EPluginInputModeFingerHwr ||
+                     PluginInputMode() == EPluginInputModePortraitFSQ )
                     {
                     SetMenuState();
                     }                
@@ -598,7 +613,9 @@
                                                              subrange);
                     }
                 SyncIndicatorWithPluginRangeL();
-                if ( PluginInputMode() == EPluginInputModeFSQ )
+                // If input mode is FSQ, update indicator accordingly.
+                if ( PluginInputMode() == EPluginInputModeFSQ || 
+                     PluginInputMode() == EPluginInputModePortraitFSQ )
                     {
 					UpdateFSQIndicator();
                     }
@@ -862,6 +879,36 @@
     }
 
 // -----------------------------------------------------------------------------
+// CAknFepPluginManager::ClearDestroyedEditorPointer
+// Set the editor pointer to NULL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CAknFepPluginManager::ClearDestroyedEditorPointer()
+	{
+	iEdwin = NULL;
+	}
+
+// -----------------------------------------------------------------------------
+// CAknFepPluginManager::EdwinState
+// Get the editor state
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CAknEdwinState* CAknFepPluginManager::EdwinState()
+	{
+	CAknEdwinState* edwinState( NULL );
+	if ( iEdwin && iEdwin->Extension1())
+		{
+	    // Get the editor state
+		edwinState = static_cast<CAknEdwinState*>( 
+				iEdwin->Extension1()->State( KNullUid ));
+		}
+	
+	return edwinState;
+	}
+
+// -----------------------------------------------------------------------------
 // CAknFepPluginManager::HandleEventsFromFepL
 // Handle events from FEP
 // (other items were commented in a header).
@@ -912,6 +959,7 @@
             if( iFepMan.FepAwareTextEditor() )
                 {
                 iMfne = NULL;
+                iEdwin = NULL;
                 if ( !aEventData )
                     {
                     RemoveLastFocusedWinFromOpenList();
@@ -983,7 +1031,9 @@
         case EPluginUpdateIndicator:
             {
             UpdateITUTIndicator();
-            if ( PluginInputMode() == EPluginInputModeFSQ )
+            // Update indicator for FSQ (landscape or portrait).
+            if ( PluginInputMode() == EPluginInputModeFSQ ||
+                 PluginInputMode() == EPluginInputModePortraitFSQ )
                 {
 				UpdateFSQIndicator();
                 }
@@ -1050,7 +1100,8 @@
                     }
                 else
                     {
-                    defaultMode = EPluginInputModeItut;
+                    // Use the last used portrait input mode.
+                    defaultMode = iSharedData.PluginPortraitInputMode();
                     }
                 }
             else
@@ -1061,7 +1112,8 @@
                     }
                 else
                     {
-                    defaultMode = EPluginInputModeItut;
+                    // Use the last used portrait input mode.
+                    defaultMode = iSharedData.PluginPortraitInputMode();
                     }
                 }
             TryChangePluginInputModeByModeL(defaultMode,
@@ -1185,8 +1237,11 @@
     CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size);
     TBool landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight;     
     // For portrait only mode, need to disable FSQ.
-    TBool disableFSQ = iDefaultOrientation == CAknAppUiBase::EAppUiOrientationPortrait 
-    		           || ( !landscape && !iAvkonAppUi->OrientationCanBeChanged() );         
+    TBool disableFSQ = iDefaultOrientation == CAknAppUiBase::EAppUiOrientationPortrait
+                       || ( !iSharedData.AutoRotateEnabled() 
+                            && !landscape 
+                            && !iAvkonAppUi->OrientationCanBeChanged() );                 
+        
     if ( disableFSQ )
         {
         iPenInputServer.SetDisabledLayout( EPluginInputModeFSQ );
@@ -1203,30 +1258,64 @@
             }
         }
     
-    TBool disableITUT = 
-               ( iDefaultOrientation == CAknAppUiBase::EAppUiOrientationLandscape ||
-                      ( landscape && !iAvkonAppUi->OrientationCanBeChanged() ) ) ;
+    // Both ITU-T and portrait FSQ are handled here.  Because getting and setting
+    // disabled layout separately caused issues.
+    TBool disablePortraitInputMode = 
+               iDefaultOrientation == CAknAppUiBase::EAppUiOrientationLandscape 
+               || ( !iSharedData.AutoRotateEnabled() 
+                    && landscape 
+                    && !iAvkonAppUi->OrientationCanBeChanged() );
+
  
-    if( disableITUT )
-         {
-         //disable V-ITUT, and if current aSuggestMode is EPluginInputModeItut, replace it with EPluginInputModeFSQ;
-         iPenInputServer.SetDisabledLayout( EPluginInputModeItut );
-         if( aSuggestMode == EPluginInputModeItut )
-             {
-             aSuggestMode = EPluginInputModeFSQ;
-             }
-         }
+    if ( disablePortraitInputMode )
+        {
+        // Disable V-ITUT and portrait FSQ, and if current aSuggestMode is 
+        // EPluginInputModeItut or EPluginInputModePortraitFSQ, replace it with 
+        // EPluginInputModeFSQ.
+        iPenInputServer.SetDisabledLayout( 
+            EPluginInputModeItut | EPluginInputModePortraitFSQ );
+        if( aSuggestMode == EPluginInputModeItut || 
+            aSuggestMode == EPluginInputModePortraitFSQ )
+            {
+            aSuggestMode = EPluginInputModeFSQ;
+            }
+        }
     else
-         {
-         // if V-ITUT had been disabled before, enable it now;
-         TInt disableMode = iPenInputServer.DisabledLayout();
-         if( disableMode & EPluginInputModeItut )
-             {
-			 iPenInputServer.SetDisabledLayout( -1 );//reset
-			 iPenInputServer.SetDisabledLayout( disableMode & ~EPluginInputModeItut );
-             }
-         }
-
+        {
+        // if V-ITUT had been disabled before, enable it now;
+        TInt disableMode = iPenInputServer.DisabledLayout();
+        if ( ( disableMode & EPluginInputModeItut ) || 
+             ( disableMode & EPluginInputModePortraitFSQ ) )
+            {
+            iPenInputServer.SetDisabledLayout( -1 ); // Reset
+            TInt enableMode( 0 );
+            if ( disableMode & EPluginInputModeItut )
+                {
+                enableMode |= EPluginInputModeItut;
+                }
+            if ( disableMode & EPluginInputModePortraitFSQ )
+                {
+                enableMode |= EPluginInputModePortraitFSQ;
+                }
+            iPenInputServer.SetDisabledLayout( disableMode & ~enableMode );
+            }
+        }
+
+    if(aSuggestMode == EPluginInputModeFingerHwr 
+            && iSharedData.InputTextLanguage() == ELangArabic)
+        {
+        if(IsEditorSupportSplitIme())
+            {
+            if(landscape)
+                {
+                aSuggestMode = EPluginInputModeFSQ;
+                }
+            else
+                {
+                aSuggestMode = iSharedData.PluginPortraitInputMode();                
+                }
+            }
+        }
 
     if ( aSuggestMode == EPluginInputModeFSQ)
         {
@@ -1236,7 +1325,7 @@
         if (disableFSQ && (aSuggestMode != EPluginInputModeFingerHwr))
             {
             iPluginInputMode = tempInputMode;
-            aSuggestMode = EPluginInputModeItut;
+            aSuggestMode = iSharedData.PluginPortraitInputMode();
             }
         else
             {
@@ -1347,6 +1436,15 @@
             {
             //do not remember application set input mode
             iSharedData.SetPluginInputMode(iPluginInputMode);
+            
+            // Refresh landscape value
+            CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation( size );
+            landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight;     
+            // Remember portrait input mode.  
+            if ( !landscape )
+                {
+                iSharedData.SetPluginPortraitInputMode( iPluginInputMode ); 
+                }
             }
             
         if (CurrentFepInputUI())
@@ -1359,11 +1457,11 @@
 		    iFepMan.UpdateCbaL( NULL );
 		    }
         
+        // inform edwin that Touch Input is opened.
         if ( iFepMan.EditorState() )
             {
-            iFepMan.EditorState()->SetFlags( 
-                iFepMan.EditorState()->Flags() | EAknEditorFlagTouchInputModeOpened );
-            }		
+            SetEdwinFlagsByUiStatus( ETrue );
+            }
 		
         // Notify application touch window state
         NotifyAppUiImeTouchWndStateL( ETrue );
@@ -1447,11 +1545,8 @@
                 
     iFepMan.UiInterface()->TouchPaneSetInputMethodIconActivated(EFalse);
     
-	if ( iFepMan.EditorState() )
-	{
-	iFepMan.EditorState()->SetFlags( 
-		iFepMan.EditorState()->Flags() & ~EAknEditorFlagTouchInputModeOpened );
-	}
+    // inform edwin that Touch Input is closed.
+    SetEdwinFlagsByUiStatus( EFalse );
 	
     if ( prePluginInputMode == EPluginInputModeVkb )
         {
@@ -1479,19 +1574,20 @@
             {
             //Change for finger support of MFNE editor, it is a requirement for Tube
             InformMfneUiStatusL( EFalse );            
+            SetAknEdwinFlags( iEdwin, EAknEditorFlagHideTextView, EFalse );
             
             iPenInputServer.ClearServerEvent();
-			if(iFocuschangedForSpellEditor)
-				{
-				iFocuschangedForSpellEditor = EFalse;
-				//disable the redrawing, it will be redrawn in 
-				//iCurrentPluginInputFepUI->HandleCommandL(ECmdPeninputDisableLayoutDrawing,ETrue);
-				return; //don't close the UI if this is caused by removing spell editor
-				}
-			else
-				{
-				iCurrentPluginInputFepUI->CloseUI();
-				}
+            if(iFocuschangedForSpellEditor)
+                {
+                iFocuschangedForSpellEditor = EFalse;
+                //disable the redrawing, it will be redrawn in 
+                //iCurrentPluginInputFepUI->HandleCommandL(ECmdPeninputDisableLayoutDrawing,ETrue);
+                return; //don't close the UI if this is caused by removing spell editor
+                }
+            else
+                {
+                iCurrentPluginInputFepUI->CloseUI();
+                }
             if( aResetState )
                 {
                 iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputWindowClose);
@@ -1506,12 +1602,27 @@
                 }            
             }
         }
-
+    
+    // iITISettingDialogOpen = ETrue: ITI setting dialog is opened.
+    // iOrientationChanged = ETrue: Phone is forcibly rotated.
+    // iSharedData.AutoRotateEnabled() = ETrue: Sensor is on.
+    // ITI setting dialog should be close by restoring orientation. 
+    // Known case: 
+    // When sensor is off, ITI setting dialog is opened on FSQ,
+    // and then sensor is set to on, back to ITI setting dialog,
+    // ITI setting dialog should be closed and Virtual ITU-T should be launched.
+    if ( iITISettingDialogOpen && iSharedData.AutoRotateEnabled() && iOrientationChanged)
+        {
+        iITISettingDialogOpen = EFalse;
+        }
+
+    // The orientation should not be restored if ITI setting dialog is opened.
+    // Otherwise, the orientation should be restored.
     if ( (iPluginInputMode == EPluginInputModeFSQ || (iPluginInputMode == EPluginInputModeFingerHwr 
-	     && iSharedData.InputTextLanguage() == ELangArabic)) && iOrientationChanged 
-    	                                            && !iITISettingDialogOpen )
-        {
-		// This TRAP_IGNORE is essential , never delete it
+         && iSharedData.InputTextLanguage() == ELangArabic)) && iOrientationChanged 
+                                                    && !iITISettingDialogOpen )
+        {
+        // This TRAP_IGNORE is essential , never delete it
         TRAP_IGNORE( iAvkonAppUi->SetOrientationL( (CAknAppUiBase::TAppUiOrientation)iDefaultOrientation ) );
         iOrientationChanged = EFalse;
         } 
@@ -1548,7 +1659,8 @@
 
     TInt preInputMode = iPluginInputMode;
     if ( iSharedData.AutoRotateEnabled() && 
-        ( preInputMode == EPluginInputModeFSQ || preInputMode == EPluginInputModeItut ) )
+        ( preInputMode == EPluginInputModeFSQ || preInputMode == EPluginInputModeItut ||
+          preInputMode == EPluginInputModePortraitFSQ ) )
         {
         // Calculate current input mode by orientation.
         // even though peninputserver is brought to backgroud, 
@@ -1560,7 +1672,7 @@
         TPixelsTwipsAndRotation size; 
         CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size);        
         iPluginInputMode = ( size.iPixelSize.iWidth < size.iPixelSize.iHeight ) ? 
-            EPluginInputModeItut : EPluginInputModeFSQ;            
+            iSharedData.PluginPortraitInputMode() : EPluginInputModeFSQ;                       
         }
     
     if ( !iPenInputServer.IsForeground() )
@@ -1571,8 +1683,9 @@
     TBool setResChange = EFalse;
     
     if ( preInputMode == EPluginInputModeItut || 
-    	 preInputMode == EPluginInputModeFSQ ||
-    	 preInputMode == EPluginInputModeFingerHwr )
+         preInputMode == EPluginInputModeFSQ ||
+         preInputMode == EPluginInputModePortraitFSQ ||
+         preInputMode == EPluginInputModeFingerHwr )
         {
         setResChange = ETrue;
         iPenInputServer.SetResourceChange(ETrue);           
@@ -1582,7 +1695,9 @@
 
     TBool needToChangeInputMode = ETrue;
     if ( iSharedData.AutoRotateEnabled() && 
-         ( preInputMode == EPluginInputModeFSQ || preInputMode == EPluginInputModeItut ) )
+         ( preInputMode == EPluginInputModeFSQ || 
+           preInputMode == EPluginInputModePortraitFSQ || 
+           preInputMode == EPluginInputModeItut ) )
         {
         if ( IsSpellVisible() )
             {
@@ -1724,44 +1839,34 @@
                     break;                
                 case EPenInputCmdVITUT:
                     {
-                    //Here calling this function is to reset menu state when the focus change caused by
-                    //the screen orientation, in the normal circumstance the foucus change should not 
-                    //occur while the screen orientation is handling. So directly resetting menu state 
-                    //to avoid the above case, preconditon is that the option menu must be closed.
-                    ResetMenuState();
-					ClosePluginInputModeL(ETrue);             
-                    iFepMan.TryCloseUiL();  
-                    TryChangePluginInputModeByModeL(EPluginInputModeItut, 
-                                                    EPenInputOpenManually,
-                                                    ERangeInvalid);
+                    ProcessChangingInputModeCmdL(EPluginInputModeItut);
                     }
                     break;
                 case EPeninputCmdFSQ:
+                // "Edit portrait" menu - switch to portrait FSQ
+                case EPeninputCmdPortraitEditor:
                     {
-                    //Here calling this function is to reset menu state when the focus change caused by
-                    //the screen orientation, in the normal circumstance the foucus change should not 
-                    //occur while the screen orientation is handling. So directly resetting menu state 
-                    //to avoid the above case, preconditon is that the option menu must be closed.                 
-                    ResetMenuState();
-					ClosePluginInputModeL(ETrue);               
-                    iFepMan.TryCloseUiL();  
-                    TryChangePluginInputModeByModeL(EPluginInputModeFSQ, 
-                                                    EPenInputOpenManually,
-                                                    ERangeInvalid);
+                    if ( iPortraitFSQEnabled )
+                        {
+                        ProcessChangingInputModeCmdL(EPluginInputModePortraitFSQ);          
+                        }
+                    else 
+                        {
+                        ProcessChangingInputModeCmdL(EPluginInputModeFSQ);
+                        }
+                    }
+
+                    break;
+                // "Edit landscape" menu - switch to landscape FSQ
+                case EPeninputCmdLandscapeEditor:
+
+                    {
+                    ProcessChangingInputModeCmdL(EPluginInputModeFSQ);
                     }
                     break;
                 case EPeninputCmdHwr:
                 	{
-                    //Here calling this function is to reset menu state when the focus change caused by
-                    //the screen orientation, in the normal circumstance the foucus change should not 
-                    //occur while the screen orientation is handling. So directly resetting menu state 
-                    //to avoid the above case, preconditon is that the option menu must be closed.
-                	ResetMenuState();
-                	ClosePluginInputModeL(ETrue);               
-                	iFepMan.TryCloseUiL();  
-                	TryChangePluginInputModeByModeL( EPluginInputModeFingerHwr, 
-                	                                 EPenInputOpenManually,
-                	                                 ERangeInvalid );
+                    ProcessChangingInputModeCmdL(EPluginInputModeFingerHwr);  
                 	}
                 	break;
                 case EFepInputCmdHelp:
@@ -2036,9 +2141,10 @@
            }
                    
        //For Preview bubble
-       if (!(iPluginInputMode == EPluginInputModeVkb ||
-             iPluginInputMode == EPluginInputModeFSQ ||
-             iPluginInputMode == EPluginInputModeFingerHwr ))
+       if ( ! (iPluginInputMode == EPluginInputModeVkb ||
+               iPluginInputMode == EPluginInputModeFSQ ||
+               iPluginInputMode == EPluginInputModeFingerHwr ||
+               iPluginInputMode == EPluginInputModePortraitFSQ ) )
            {
            if(!(iPluginInputMode == EPluginInputModeItut &&
              (iSharedData.InputTextLanguage() == ELangPrcChinese ||
@@ -2081,9 +2187,11 @@
                }
            }
            
-        if (iPluginInputMode == EPluginInputModeItut ||
-            iPluginInputMode == EPluginInputModeVkb ||
-            iPluginInputMode == EPluginInputModeFSQ )
+        // Add Insert Symbol for valid input modes.   
+        if ( iPluginInputMode == EPluginInputModeItut ||
+             iPluginInputMode == EPluginInputModeVkb ||
+             iPluginInputMode == EPluginInputModeFSQ ||
+             iPluginInputMode == EPluginInputModePortraitFSQ )
             {
             TInt index = 0;     
             if (isLanuchSCT && aMenuPane->MenuItemExists(EAknCmdEditInsertSymbol, index))
@@ -2113,26 +2221,120 @@
     	TInt disabledInputMode = iPenInputServer.DisabledLayout();
     	TInt curInputMode = iLangMan.CurrentImePlugin()->CurrentMode();
     	TBool isChinese = iFepMan.IsChineseInputLanguage();
-    	
-    	if ( !isChinese && ( curInputMode != EPluginInputModeFSQ ) 
-    			&& !( disabledInputMode & EPluginInputModeFSQ ))
-    	    {
-    	    aMenuPane->SetItemDimmed( EPeninputCmdFSQ, EFalse );
-    	    }
+    	TBool isKorean = iFepMan.IsKoreanInputLanguage();
+    	// similar with chinese layout, there is a switching button,so when writing language is korean
+    	// no need to insert 'Qwerty' or 'Alphabet keypad' item into option menu 
     	
-    	if ( !isChinese && ( curInputMode != EPluginInputModeItut ) 
-    			&& !( disabledInputMode & EPluginInputModeItut ))
-    	    {
-    	    aMenuPane->SetItemDimmed(EPenInputCmdVITUT, EFalse);
-    	    }
-    	
-    	if ( FeatureManager::FeatureSupported( KFeatureIdArabicHandwritingRecognitionInput )
-            &&iFepMan.IsArabicInputLanguage() 
-            && ( curInputMode != EPluginInputModeFingerHwr )
-    	    && !( disabledInputMode & EPluginInputModeFingerHwr ))
-    	    {
-    	    aMenuPane->SetItemDimmed( EPeninputCmdHwr, EFalse );
-    	    }
+    /* US2/US4/US5
+    1. Orientation sensor off
+
+        1-1. Portrait orientation
+            If currently ITU-T mode
+            “QWERTY keyboard?-> Port fsq
+            “Edit landscape?-> Land fsq
+
+            If currently Portrait FSQ mode
+            “Alphanumeric keypad?
+            “Edit landscape?-> Land fsq
+
+        1-2. Landscape orientation
+            “Alphanumeric keypad?
+            “Edit portrait?- Port fsq
+
+    2. Orientation sensor on
+
+        2-1.Portrait orientation
+            If currently ITU-T mode
+            “QWERTY keyboard?-> Port fsq
+
+            If currently Portrait FSQ mode
+            “Alphanumeric keypad?
+
+        2-2. Landscape orientation
+            --- No input switch menu
+*/
+
+    // Get the current phone's orientation
+    TPixelsTwipsAndRotation size; 
+    CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size);
+    TBool isPortrait = size.iPixelSize.iWidth < size.iPixelSize.iHeight;
+
+    // "QWERTY keyboard" - EPeninputCmdFSQ menu
+    if ( iPortraitFSQEnabled )
+        {
+        // "QWERTY keyboard" - EPeninputCmdFSQ menu is shown in these conditions
+        // if portrait FSQ feature flag is enabled
+        // 1) Non-Chinese language
+        // 2) Current input mode is not portrait FSQ and also the mode is not disabled
+        // 3) Current orientation is portrait
+        if ( !isKorean && !isChinese
+            && ( curInputMode != EPluginInputModePortraitFSQ ) 
+            && !( disabledInputMode & EPluginInputModePortraitFSQ ) 
+            && isPortrait )
+        {
+        aMenuPane->SetItemDimmed( EPeninputCmdFSQ, EFalse );
+        }
+        
+        }
+    else
+        {
+        if ( !isKorean && !isChinese && ( curInputMode != EPluginInputModeFSQ ) 
+            && !( disabledInputMode & EPluginInputModeFSQ ) 
+            && FeatureManager::FeatureSupported( KFeatureIdVirtualFullscrQwertyInput ) )
+            {
+            aMenuPane->SetItemDimmed( EPeninputCmdFSQ, EFalse );
+            }
+        }
+
+    // "Alphanumeric keypad" - EPenInputCmdVITUT menu is shown in these conditions.
+    // 1) Non-Chinese language
+    // 2) Current input mode is not ITU-T and also the mode is not disabled
+    // 3) ITU-T feature flag is enabled
+    if ( !isKorean && !isChinese 
+        && ( curInputMode != EPluginInputModeItut ) 
+        && !( disabledInputMode & EPluginInputModeItut ) 
+        && FeatureManager::FeatureSupported( KFeatureIdVirtualItutInput ) )
+        {
+        aMenuPane->SetItemDimmed(EPenInputCmdVITUT, EFalse);
+        }
+    // "Edit portrait" - EPeninputCmdPortraitEditor menu is shown in these conditions.
+    // 1) Portrait FSQ feature flag is enabled
+    // 2) Non-Chinese language
+    // 3) Current input mode is not portrait FSQ and also the mode is not disabled
+    // 4) Current orientation is landscape
+    if ( iPortraitFSQEnabled
+        && !isKorean && !isChinese 
+        && ( curInputMode != EPluginInputModePortraitFSQ ) 
+        && !( disabledInputMode & EPluginInputModePortraitFSQ ) 
+        && !isPortrait )
+        {
+        aMenuPane->SetItemDimmed(EPeninputCmdPortraitEditor, EFalse);
+        }
+
+    // "Edit landscape" - EPeninputCmdLandscapeEditor menu is shown in these conditions.
+    // 1) Portrait FSQ feature flag is enabled 
+    //    This menu needed only when the feature is turned on.
+    // 2) Landscape FSQ feature flag is enabled
+    // 3) Non-Chinese language
+    // 4) Current input mode is not landscape FSQ and also the mode is not disabled
+    // 5) Current orientation is portrait
+    if ( iPortraitFSQEnabled
+        && FeatureManager::FeatureSupported( KFeatureIdVirtualFullscrQwertyInput ) 
+        && !isKorean && !isChinese 
+        && ( curInputMode != EPluginInputModeFSQ ) 
+        && !( disabledInputMode & EPluginInputModeFSQ ) 
+        && isPortrait )
+        {
+        aMenuPane->SetItemDimmed(EPeninputCmdLandscapeEditor, EFalse);
+        }
+   	
+   	if ( FeatureManager::FeatureSupported( KFeatureIdArabicHandwritingRecognitionInput )
+           &&iFepMan.IsArabicInputLanguage() 
+           && ( curInputMode != EPluginInputModeFingerHwr )
+   	    && !( disabledInputMode & EPluginInputModeFingerHwr ))
+   	    {
+   	    aMenuPane->SetItemDimmed( EPeninputCmdHwr, EFalse );
+   	    }
 		
 		// check if this is the arabic finger hwr
 		TBool isArabicFingerHwr = (iPluginInputMode == EPluginInputModeFingerHwr
@@ -2188,15 +2390,31 @@
 	//Show number mode menu item.
 	if(iFepMan.InputMode() == ENumber || iFepMan.InputMode() == ENativeNumber)
 	    {
-        if(iSharedData.DefaultArabicNumberMode())
+        CAknEdwinState* editorState = iFepMan.EditorState();
+        TUint permittedInputModes;
+        if( editorState )
             {
-            aMenuPane->SetItemDimmed(EAknCmdEditModeNumber, EFalse);
+            permittedInputModes= editorState->PermittedInputModes();
             }
         else
             {
-            aMenuPane->SetItemDimmed(EAknCmdEditModeArabicIndicNumber, EFalse);
+            permittedInputModes = EAknEditorNumericInputMode;
+            }   
+        TBool IsOnlyNumericPermitted = !(permittedInputModes 
+                &(EAknEditorTextInputMode | EAknEditorSecretAlphaInputMode));
+        if(IsOnlyNumericPermitted)
+            {
+            if(iSharedData.DefaultArabicNumberMode())
+                {
+                aMenuPane->SetItemDimmed(EAknCmdEditModeNumber, EFalse);
+                }
+            else
+                {
+                aMenuPane->SetItemDimmed(EAknCmdEditModeArabicIndicNumber, EFalse);
+                }
             }
 	    }
+
 	// add the writing speed menu
 	index = 0;
 	if(aMenuPane->MenuItemExists(EPenInputCmdWritingSpeed, index))
@@ -2251,12 +2469,16 @@
         return;
         }
         
-    if( !iLaunchMenu && IsGlobalNotesApp(focusAppId)) 
-
-        {
-        if( iPluginInputMode == EPluginInputModeItut ||
-            iPluginInputMode == EPluginInputModeFSQ ||
-            iPluginInputMode == EPluginInputModeFingerHwr)
+    // if pen ui is being opened on a non-global editor, which popped by capserver or notify server,    
+    // and also other global notes from capserver or notify server pop up at the moment,
+    // pen ui should be dimmed as the definitino of dim feature.
+    // Set bClose = EFalse is used to prevent from closing pen ui later.  
+	if( !iLaunchMenu && IsGlobalNotesApp(focusAppId) && !IsInGlobleNoteEditor() )
+        {
+        if ( iPluginInputMode == EPluginInputModeItut ||
+             iPluginInputMode == EPluginInputModeFSQ ||
+             iPluginInputMode == EPluginInputModeFingerHwr ||
+             iPluginInputMode == EPluginInputModePortraitFSQ )
             {
             bClose = EFalse;
             }
@@ -2269,9 +2491,10 @@
        IsGlobalNotesApp(appId) &&
        !iFepMan.IsFepAwareTextEditor())
         {
-        if( iPluginInputMode == EPluginInputModeItut ||
-            iPluginInputMode == EPluginInputModeFSQ ||
-            iPluginInputMode == EPluginInputModeFingerHwr)
+        if ( iPluginInputMode == EPluginInputModeItut ||
+             iPluginInputMode == EPluginInputModeFSQ ||
+             iPluginInputMode == EPluginInputModeFingerHwr ||
+             iPluginInputMode == EPluginInputModePortraitFSQ )
             {
              ClosePluginInputUiL(ETrue);
              if(iPenInputSvrConnected ) //lost foreground
@@ -2314,8 +2537,9 @@
             {            
             iLaunchSCTInSpell = EFalse;
 #ifdef RD_UI_TRANSITION_EFFECTS_POPUPS
-            if ( PluginInputMode() == EPluginInputModeFSQ 
-                    && iSharedData.ThemeEffectsEnabled())
+            if ( ( PluginInputMode() == EPluginInputModeFSQ ||
+                   PluginInputMode() == EPluginInputModePortraitFSQ )
+                    && iSharedData.ThemeEffectsEnabled() )
                 {
                 User::After(1);//waiting for menu cancel effect
                 } 
@@ -2346,9 +2570,11 @@
                 iAvkonRepository->Get( KAknAvkonAdaptiveSearchEnabled, enableAdaptiveSearch );
                 if ( enableAdaptiveSearch )
                     {
-                    if(!(iInMenu && ( iPluginInputMode == EPluginInputModeItut ||
-                                    iPluginInputMode == EPluginInputModeFSQ ||
-                                    iPluginInputMode ==EPluginInputModeFingerHwr)))
+                    if ( !(iInMenu && 
+                            ( iPluginInputMode == EPluginInputModeItut ||
+                              iPluginInputMode == EPluginInputModeFSQ ||
+                              iPluginInputMode ==EPluginInputModeFingerHwr ||
+                              iPluginInputMode == EPluginInputModePortraitFSQ ) ) )
                         {
                         ClosePluginInputModeL(ETrue);
                         if(iPenInputSvrConnected ) //lost foreground
@@ -2364,7 +2590,7 @@
 			TPluginInputMode inputMode = (TPluginInputMode)iSharedData.PluginInputMode();                        
 				if ((inputMode == EPluginInputModeFSc || inputMode == EPluginInputModeHwr ||
 					 inputMode == EPluginInputModeFingerHwr) &&
-				 iFepMan.IsSupportsSecretText())
+				     iFepMan.IsSupportsSecretText())
 				{
                     openMode = EPenInputOpenManually;
                     }
@@ -2387,9 +2613,10 @@
             iAvkonRepository->Get( KAknAvkonAdaptiveSearchEnabled, enableAdaptiveSearch );
             if ( enableAdaptiveSearch )
                 {
-                if(iInMenu && ( iPluginInputMode == EPluginInputModeItut ||
-                                iPluginInputMode == EPluginInputModeFSQ ||
-                                iPluginInputMode == EPluginInputModeFingerHwr))
+                if ( iInMenu && ( iPluginInputMode == EPluginInputModeItut ||
+                    iPluginInputMode == EPluginInputModeFSQ ||
+                    iPluginInputMode == EPluginInputModeFingerHwr ||
+                    iPluginInputMode == EPluginInputModePortraitFSQ ) )
                     {                
                     //iPenInputServer.DimUiLayout(ETrue); //dim the ui
                     return;
@@ -2405,9 +2632,10 @@
         
         if ( !enableAdaptiveSearch )
             {
-            if(iInMenu && ( iPluginInputMode == EPluginInputModeItut ||
-                            iPluginInputMode == EPluginInputModeFSQ ||
-                            iPluginInputMode == EPluginInputModeFingerHwr))
+            if( iInMenu && ( iPluginInputMode == EPluginInputModeItut ||
+                iPluginInputMode == EPluginInputModeFSQ ||
+                iPluginInputMode == EPluginInputModeFingerHwr || 
+                iPluginInputMode == EPluginInputModePortraitFSQ ) )
                 {                
                 //iPenInputServer.DimUiLayout(ETrue); //dim the ui
                 return;
@@ -3122,10 +3350,11 @@
     TBool previousSCT  = isLanuchSCT;
     TInt inputmode = PluginInputMode();
     
-    if (R_AVKON_PENINPUT_OPTION_MENU_BAR == aResourceId &&
-        (inputmode == EPluginInputModeItut ||
-         inputmode == EPluginInputModeVkb ||
-         inputmode == EPluginInputModeFSQ))
+    if ( R_AVKON_PENINPUT_OPTION_MENU_BAR == aResourceId &&
+           ( inputmode == EPluginInputModeItut ||
+             inputmode == EPluginInputModeVkb ||
+             inputmode == EPluginInputModeFSQ ||
+             inputmode == EPluginInputModePortraitFSQ ) )
         {
         isLanuchSCT = EFalse;
         iCurPermitModes = iFepMan.PermittedModes(); 
@@ -3817,6 +4046,10 @@
     {
     TInt fepDisableLayoouts = 0;
     TInt disableLayouts = iPenInputServer.DisabledLayout();
+    // Get the current phone orientation.
+    TPixelsTwipsAndRotation size; 
+    CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size);
+    TBool landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight;
 
     switch(aSuggestMode)
         {
@@ -3833,7 +4066,12 @@
 		    	  ((aSuggestMode == EPluginInputModeFingerHwr && 
 		    	          iSharedData.InputTextLanguage() != ELangArabic))))   
 				{
-				aSuggestMode = EPluginInputModeItut;
+                // If full screen portrait QWERTY feature is enabled, use it 
+                // instead of ITU-T.
+                aSuggestMode = iSharedData.PluginPortraitInputMode();                        
+
+                // If portrait FSQ or ITU-T is disabled, use landscape FSQ.
+                // If they are disabled, most likely the orientation is landscape. 
 				if ((disableLayouts & aSuggestMode))
 					{
 					aSuggestMode = EPluginInputModeFSQ;
@@ -3849,16 +4087,14 @@
             // So we use FSQ for Landscape mode and ITUT for Portrait instead.
             if( FeatureManager::FeatureSupported( KFeatureIdFfCapacitiveDisplay ))
                 {
-                TPixelsTwipsAndRotation size; 
-                CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(size);
-                TBool landscape = size.iPixelSize.iWidth > size.iPixelSize.iHeight;
                 if ( landscape ) // LandScape
                     {
                     aSuggestMode = EPluginInputModeFSQ;
                     }
                 else // Portrait
                     {
-                    aSuggestMode = EPluginInputModeItut;
+                    // Use the last used portrait input mode.
+                    aSuggestMode = iSharedData.PluginPortraitInputMode();
                     }
                 }
             }
@@ -3867,11 +4103,14 @@
             {
             if ((disableLayouts & aSuggestMode))
                 {
-                aSuggestMode = EPluginInputModeItut;
+                // Use the last used portrait input mode.
+                aSuggestMode = iSharedData.PluginPortraitInputMode();
                 }
             }
             break;
+        // If ITU-T or portrait FSQ are disabled, use landscape FSQ.    
         case EPluginInputModeItut:
+        case EPluginInputModePortraitFSQ:	
             {
             if ((disableLayouts & aSuggestMode))
                 {
@@ -3881,12 +4120,27 @@
             break;
         default:
 			{
-			aSuggestMode = EPluginInputModeItut;
-			if ((disableLayouts & aSuggestMode))
-				{
-				aSuggestMode = EPluginInputModeFSQ;
-				}
-			}
+            // Landscape FSQ is used in landscape orientation.
+            if ( landscape )
+                {
+                aSuggestMode = EPluginInputModeFSQ; 
+                }
+            // If the current orientation is portrait, use the last used portrait input mode.
+            else
+                {
+                aSuggestMode = iSharedData.PluginPortraitInputMode();
+               
+                // If the suggested mode is EPluginInputModeNone or disabled, use 
+                // EPluginInputModeFSQ.
+                // Note: If the suggested mode is landscape FSQ and it it also disabled,
+                // still we use landscape FSQ because there is no choice.
+                if ( ( aSuggestMode == EPluginInputModeNone ) ||
+                     ( disableLayouts & aSuggestMode ) )
+                    {
+                    aSuggestMode = EPluginInputModeFSQ; 
+                    }
+                }
+            }
             break;
         }
 
@@ -4062,9 +4316,10 @@
     else
         {
         HideSpellEditor();
-        if (PluginInputMode() == EPluginInputModeFSQ ||
-            PluginInputMode() == EPluginInputModeVkb ||
-            PluginInputMode() == EPluginInputModeFingerHwr)
+        if ( PluginInputMode() == EPluginInputModeFSQ ||
+             PluginInputMode() == EPluginInputModeVkb ||
+             PluginInputMode() == EPluginInputModeFingerHwr ||
+             PluginInputMode() == EPluginInputModePortraitFSQ )
             {
             iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCharacterPreview, 
                    iFepMan.FepShowVkbPreviewStatus());                 
@@ -4109,7 +4364,8 @@
         iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCaseMode, 
                                            iCaseMan.CurrentCase());
         if ( PluginInputMode() == EPluginInputModeFSQ ||
-             PluginInputMode() == EPluginInputModeFingerHwr)
+             PluginInputMode() == EPluginInputModeFingerHwr ||
+             PluginInputMode() == EPluginInputModePortraitFSQ )
             {
             SetPromptText( aCleanContent );
             }
@@ -4145,7 +4401,8 @@
                                               
     iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputDimArrowKeys, 
                                               enableArrowBtn);    
-    if ( PluginInputMode() == EPluginInputModeFSQ )
+    if ( PluginInputMode() == EPluginInputModeFSQ ||
+         PluginInputMode() == EPluginInputModePortraitFSQ )
     	{
         iCurrentPluginInputFepUI->HandleCommandL( ECmdPenInputDimEnterKey, 
         		                                  iFepMan.IsFindPaneEditor() );
@@ -4170,13 +4427,16 @@
         {
         iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputWindowOpen, aOpenMode);
         }
-    if(PluginInputMode() == EPluginInputModeItut 
-       || PluginInputMode() == EPluginInputModeFSQ
-	   || PluginInputMode() == EPluginInputModeFingerHwr)
+    if ( PluginInputMode() == EPluginInputModeItut 
+          || PluginInputMode() == EPluginInputModeFSQ
+          || PluginInputMode() == EPluginInputModeFingerHwr 
+          || PluginInputMode() == EPluginInputModePortraitFSQ )
         {
         iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputInEditWordQueryDlg, iIsInEditWordQueryDlg);
         }    
-    if ( PluginInputMode() == EPluginInputModeFSQ )
+    // For both landscape portrait FSQ mode, update FSQ indicator.
+    if ( PluginInputMode() == EPluginInputModeFSQ ||
+         PluginInputMode() == EPluginInputModePortraitFSQ )
         {
         UpdateFSQIndicator();
         }
@@ -4627,7 +4887,9 @@
 
 void CAknFepPluginManager::UpdateFSQIndicator()    
     {
-    if ( EPluginInputModeFSQ != PluginInputMode() )
+    // If it is not either portrait or landscape FSQ, return.
+    if ( !( EPluginInputModeFSQ == PluginInputMode() ||
+      	    EPluginInputModePortraitFSQ == PluginInputMode() ) )
         {
         return;
         }
@@ -4800,7 +5062,15 @@
             {
             editorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_CHINESE;
             }
-        }
+        }    
+    else if (FeatureManager::FeatureSupported(KFeatureIdKorean))
+        {
+        // Use the special sct resource file for Korean variant.
+        if (!editorSCTResId || editorSCTResId == R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG)
+            {
+            editorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG_KOREAN;
+            }
+        }    
     else if (!editorSCTResId)
         {
         editorSCTResId = R_AVKON_SPECIAL_CHARACTER_TABLE_DIALOG;
@@ -5118,7 +5388,8 @@
 		TRAP_IGNORE(iCurrentPluginInputFepUI->HandleCommandL(ECmdPenInputCaseMode, 
 		                                                     iCaseMan.CurrentCase()));	
 		UpdateITUTIndicator();
-	    if ( PluginInputMode() == EPluginInputModeFSQ )
+    if ( PluginInputMode() == EPluginInputModeFSQ ||
+         PluginInputMode() == EPluginInputModePortraitFSQ )
 	        {
 			UpdateFSQIndicator();
 	        }
@@ -5188,6 +5459,7 @@
         break;        
         case EPluginInputModeVkb:
         case EPluginInputModeFSQ:
+        case EPluginInputModePortraitFSQ:	
             {
             context.iContext = KVQWERTY_HLP_MAIN_VIEW;    
             }
@@ -5243,9 +5515,10 @@
         return;
         }
 
-    if (!(PluginInputMode() == EPluginInputModeItut ||
-        PluginInputMode() == EPluginInputModeFSQ ||
-        PluginInputMode() == EPluginInputModeFingerHwr))
+    if ( ! ( PluginInputMode() == EPluginInputModeItut ||
+             PluginInputMode() == EPluginInputModeFSQ ||
+             PluginInputMode() == EPluginInputModeFingerHwr ||
+             PluginInputMode() == EPluginInputModePortraitFSQ ) )
         {
         return;
         }
@@ -5362,6 +5635,66 @@
     }
 #endif // RD_SCALABLE_UI_V2
 
+// -----------------------------------------------------------------------------
+// Update editor state according to current ui state
+// -----------------------------------------------------------------------------
+//
+void CAknFepPluginManager::SetEdwinFlagsByUiStatus( TBool aOpened )
+    {    
+    MCoeFepAwareTextEditor* edwin( iFepMan.FepAwareTextEditor() );
+    
+    TInt uiStatusFlags( EAknEditorFlagTouchInputModeOpened 
+                        | EAknEditorFlagHideTextView );
+    
+    if ( aOpened ) 
+        {
+        // if another editor gets focus, remove flags from previous editor.
+        if ( iEdwin != edwin )
+            {                
+            SetAknEdwinFlags( iEdwin, uiStatusFlags, EFalse );
+            }
+        
+        // set flags to current focused editor
+        SetAknEdwinFlags( edwin, uiStatusFlags, ETrue );
+        
+        //save reference to focused editor
+        iEdwin = edwin;
+        }
+    else 
+        {            
+        SetAknEdwinFlags( edwin, uiStatusFlags, EFalse );
+        iEdwin = NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Update state flags of specified editor
+// -----------------------------------------------------------------------------
+//
+void CAknFepPluginManager::SetAknEdwinFlags( MCoeFepAwareTextEditor* aEdwin, 
+                                             TInt aFlags, TBool aSet )
+    {
+    if ( aEdwin && aEdwin->Extension1() )
+        {
+        CAknEdwinState* edwinState ( static_cast<CAknEdwinState*>( 
+                                     aEdwin->Extension1()->State( KNullUid ) ) );
+        if ( edwinState )
+            {
+            TInt edwinFlags( edwinState->Flags() );
+            if ( aSet )
+                {
+                edwinFlags |= aFlags;
+                }
+            else
+                {
+                edwinFlags &= ~aFlags;
+                }
+            
+            edwinState->SetFlags( edwinFlags );
+            }
+        }
+    }
+
 void CAknFepPluginManager::InformMfneUiStatusL( TBool aOpened )
     {
     if ( iMfne && ( iMfneChanged || !aOpened ))
@@ -5422,9 +5755,10 @@
 		}
 		
     //if it's in global notes, show it.
-    if(EPluginInputModeItut == PluginInputMode() ||
-       EPluginInputModeFSQ == PluginInputMode() ||
-       EPluginInputModeFingerHwr == PluginInputMode())      
+    if ( EPluginInputModeItut == PluginInputMode() ||
+         EPluginInputModeFSQ == PluginInputMode() ||
+         EPluginInputModeFingerHwr == PluginInputMode() ||
+         EPluginInputModePortraitFSQ == PluginInputMode() )    
 		{
 		if(iInGlobleNoteEditor && iPenInputSvrConnected)
 			{
@@ -5674,7 +6008,8 @@
 TBool CAknFepPluginManager::IsSupportITIOnFSQ()
     {
 #ifdef RD_INTELLIGENT_TEXT_INPUT
-    if ( iPluginInputMode == EPluginInputModeFSQ
+    if ( ( iPluginInputMode == EPluginInputModeFSQ ||
+           iPluginInputMode == EPluginInputModePortraitFSQ )
          // Exclude non Latin mode 
          && iFepMan.InputMode() == ELatin
          // Exclude accent range
@@ -6076,6 +6411,50 @@
     TRAP_IGNORE(ActivatePenInputL());
     }
 
+// -----------------------------------------------------------------------------
+// Handling the menu cmd for changing the input mode
+// -----------------------------------------------------------------------------
+//
+void CAknFepPluginManager::ProcessChangingInputModeCmdL(TInt aInputMode)
+    {
+    // Save iCurEditor and iCurMFNECap to temp variable the curEditor 
+    // and CurMFNECap respectively before calling ResetMenuState 
+    // since this function will reset iCurEditor
+    // but later TryChangePluginInputModeByModeL() will use this as 
+    // an flag to identify whether the mode to be opened is split one. 
+    MCoeFepAwareTextEditor* savedCurEditor = iCurEditor;
+    TUint savedCurMFNECap = iCurMFNECap;
+    
+    
+    //Here calling this function is to reset menu state when the focus change 
+    // caused by the screen orientation, in the normal circumstance the foucus
+    // change should not occur while the screen orientation is handling. 
+    // So directly resetting menu state to avoid the above case, 
+    // preconditon is that the option menu must be closed.
+    
+    // Reset the menu state to clear iInMenu to process focus change message
+    // following funciton will set iCurEditor to NULL
+    ResetMenuState(EFalse);
+    ClosePluginInputModeL(ETrue);  
+    iFepMan.TryCloseUiL(); 
+
+    // we have to resore iCurEditor's value which was saved before calling 
+    // ResetMenuState since the iCurEditor will be used as a falg to identify 
+    // whether the the mode to be opened is split one.
+    // if it would be NULL, TryChangePluginInputModeByModeL will first open 
+    // the Normal FSQ/VITUT, and then after a focus change
+    // [the menu is really dismissed], 
+    // the correct Split FSQ/VITT will be opened, so the flicker will be seen. 
+    iCurEditor = savedCurEditor;
+    iCurMFNECap = savedCurMFNECap;
+     
+    TryChangePluginInputModeByModeL((TPluginInputMode)aInputMode, 
+                                    EPenInputOpenManually,
+                                    ERangeInvalid);
+    iCurMFNECap = 0;
+    iCurEditor = NULL;
+    }
+
 CConnectAo::CConnectAo(CAknFepPluginManager* aClient) 
                 : CActive(CActive::EPriorityStandard),
                   iClient(aClient)
--- a/fep/aknfep/src/AknFepSharedDataInterface.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/src/AknFepSharedDataInterface.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -45,6 +45,7 @@
 #include <AvkonInternalCRKeys.h>    // KAknQwertyInputModeActive
 #include <settingsinternalcrkeys.h> //Pen related settings
 #include <sensorplugindomaincrkeys.h> // KCRUidSensorSettings
+#include <featmgr.h>                  // Feature Manager
 
 // TODO: include CommonengineInternalCRKeys.h
 const TUid KCRUidCommonEngineKeys = {0x1020503B};
@@ -359,6 +360,32 @@
 
 void CAknFepSharedDataInterface::SetPluginInputMode(TInt aDevice)
     {
+    // Check validity of the input mode to be set.
+    if ( aDevice == EPluginInputModeItut )
+        {
+        __ASSERT_DEBUG( FeatureManager::FeatureSupported( 
+            KFeatureIdVirtualItutInput ), 
+            User::Panic( _L( "Wrong input mode - ITU-T" ), __LINE__ ) );
+        }
+    else if ( aDevice == EPluginInputModeFSQ )
+        {
+        __ASSERT_DEBUG(  FeatureManager::FeatureSupported( 
+            KFeatureIdVirtualFullscrQwertyInput ), 
+            User::Panic( _L( "Wrong input mode - Landscape FSQ" ), 
+                __LINE__ ) );
+        }
+    else if ( aDevice == EPluginInputModePortraitFSQ )
+        {
+        __ASSERT_DEBUG( FeatureManager::FeatureSupported( 
+            KFeatureIdFfVirtualFullscrPortraitQwertyInput ), 
+            User::Panic( _L( "Wrong input mode - Portrait FSQ" ), 
+                __LINE__ ) );
+        }
+    else
+        {
+        // Do nothing.
+        }
+
     if (iAknFepRepository)
         {
         iAknFepRepository->Set(KAknFepLastUsedInput, aDevice);
@@ -1891,4 +1918,94 @@
     }
 #endif
 
+/**
+ * Get the last used plugin input mode for portrait orientation
+ *
+ * @since 5.2
+ * @return Value of KAknFepLastUsedPortraitInput setting.
+ */    
+TPluginInputMode CAknFepSharedDataInterface::PluginPortraitInputMode() const
+    {
+    TInt cenRepValue( 0 );
+    if ( iAknFepRepository )
+        {
+        iAknFepRepository->Get( KAknFepLastUsedPortraitInput, cenRepValue );
+        }
+
+    TPluginInputMode lastUsedPortraitInputMode = 
+         static_cast<TPluginInputMode>( cenRepValue );
+    
+    // Check portrait FSQ and ITU-T feature are enabled.
+    TBool isPortraitFSQEnabled = FeatureManager::FeatureSupported( 
+        KFeatureIdFfVirtualFullscrPortraitQwertyInput );
+    TBool isITUTEnabled = FeatureManager::FeatureSupported( 
+        KFeatureIdVirtualItutInput );
+    
+    // If both ITU-T and portrait FSQ features are enabled, use the saved
+    // portrait input mode.
+    if ( isITUTEnabled && isPortraitFSQEnabled )
+        {
+        // If the saved portrait input mode is not valid, use the default
+        // value, EPluginInputModeItut.
+        if ( ! ( lastUsedPortraitInputMode == EPluginInputModeItut ||
+                 lastUsedPortraitInputMode == EPluginInputModePortraitFSQ ) )
+            {
+            lastUsedPortraitInputMode = EPluginInputModeItut;
+            }
+        }
+    // If only ITU-T feature is enabled, use the mode.
+    else if ( isITUTEnabled )
+        {
+        lastUsedPortraitInputMode = EPluginInputModeItut;
+        }
+    // If only portrait FSQ feature is enabled, use the mode.
+    else if ( isPortraitFSQEnabled )
+        {
+        lastUsedPortraitInputMode = EPluginInputModePortraitFSQ;
+        }
+    // If none of the features are enabled, EPluginInputModeNone is assigned
+    // for exception handling.
+    else
+        {
+        lastUsedPortraitInputMode = EPluginInputModeNone;
+        }
+
+    return lastUsedPortraitInputMode;
+    }
+
+/**
+ * Replaces the last used plugin input mode for portrait orientation
+ *
+ * @since 5.2
+ * @return Replace value of KAknFepLastUsedPortraitInput setting.
+ */
+void CAknFepSharedDataInterface::SetPluginPortraitInputMode( 
+    TPluginInputMode aLastUsedPortraitInputMode )
+    {
+    // Check validity of the input mode to be set.  The input mode is not 
+    // valid if,
+         // i) The input mode is not neither ITU-T nor portrait FSQ.
+    if ( !( aLastUsedPortraitInputMode == EPluginInputModeItut ||
+            aLastUsedPortraitInputMode == EPluginInputModePortraitFSQ ) ||
+         // ii) The input mode is ITU-T but the feature is disabled.
+          ( aLastUsedPortraitInputMode == EPluginInputModeItut &&  
+            !FeatureManager::FeatureSupported( KFeatureIdVirtualItutInput ) ) ||
+         // iii) The input mode is portrait FSQ but the feature is disabled.
+          ( aLastUsedPortraitInputMode == EPluginInputModePortraitFSQ && 
+            !FeatureManager::FeatureSupported(
+                KFeatureIdFfVirtualFullscrPortraitQwertyInput ) ) )
+        {
+        __ASSERT_DEBUG( 0, 
+            User::Panic( _L( "Wrong portrait input mode" ), __LINE__ ) );
+        // Return without saving the value if the portrait input is invalid.
+        return;  
+        }
+        
+   if ( iAknFepRepository )
+        {
+        TInt err = iAknFepRepository->Set( KAknFepLastUsedPortraitInput,
+            static_cast<TInt>( aLastUsedPortraitInputMode ) );
+        }
+    }
+    
 // End of File
--- a/fep/aknfep/src/AknFepUiInputStateEntryQwertyWesternPredictive.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateEntryQwertyWesternPredictive.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -265,14 +265,20 @@
  		{
  		shiftedCase= EPtiCaseLower;	
  		}
-    
+
+    TBool portraitFSQ = FeatureManager::FeatureSupported( 
+        KFeatureIdFfVirtualFullscrPortraitQwertyInput )
+        && fepMan->PluginUIManager() 
+        && fepMan->PluginUIManager()->PluginInputMode() == EPluginInputModePortraitFSQ;
+
     // For addition of ITI features. 
     // When FSQ is opened wiht ITI features enabled,
     // after pressing keys, don't need to re-set current text case by editor's text or FN key state.
     // Because FSQ's case doesn't obey editor's case and there is no fn key on FSQ.
     if ( fepMan->PluginUIManager() 
-         && fepMan->PluginUIManager()->PluginInputMode() == EPluginInputModeFSQ
-         && fepMan->WesternPredictive() )
+        && ( fepMan->PluginUIManager()->PluginInputMode() == EPluginInputModeFSQ 
+                || portraitFSQ )
+        && fepMan->WesternPredictive() )
         {
         return;
         }
--- a/fep/aknfep/src/AknFepUiInputStateInitialVietnameseMultitap.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateInitialVietnameseMultitap.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -128,22 +128,25 @@
                 fepMan->NewCharacterL(aChr);
                 fepMan->CommitInlineEditL();
                 
-               	if (fepMan->EditSubmenuInUse() && fepMan->IsAbleToLaunchSCT())
-        		    {
-        		    fepMan->LaunchSpecialCharacterTableL();
-        		    return ETrue;
-        		    }                         
+                if (fepMan->EditSubmenuInUse() && fepMan->IsAbleToLaunchSCT())
+                    {
+                    fepMan->LaunchSpecialCharacterTableL();
+                    return ETrue;
+                    }                         
                 }
-			else if (fepMan->EditSubmenuInUse())
-				{
-				aLength = ELongKeyPress;
-				}
+            else if (fepMan->EditSubmenuInUse())
+                {
+                aLength = ELongKeyPress;
+                }
             }
         }
     
     // Implementation for the Vietnamese back deletion
     if (aKey == EKeyBackspace)
         {
+        // Key looping should be cancelled as pressing backspace key
+        toneMgr->StopKeyLooping();
+    
         TBuf<2> newText;
         // Get the last character from the current editor
         TText prevChar = fepMan->PreviousChar();
@@ -155,11 +158,11 @@
             ((CAknFepManager*)fepMan)->RemovePreviousCharacterL();
             fepMan->NewCharacterL(newText);
             fepMan->CommitInlineEditL();
-			// Stop looping for backspace operation
-			if( toneMgr->IsLooping() )
-			    {
-				toneMgr->StopToneMarkLooping();
-				}
+            // Stop looping for backspace operation
+            if( toneMgr->IsLooping() )
+                {
+                toneMgr->StopToneMarkLooping();
+                }
             return ETrue;
             }
         else
@@ -177,65 +180,79 @@
             }
         }
     
-    if( toneMgr->IsKeyLooping( aKey ) )
+    if( aLength == EShortKeyPress )
         {
-        if( toneMgr->ToneMarkIndex() !=  KErrNotFound )
+        if( toneMgr->IsKeyLooping( aKey ) )
             {
-            // Get current tone mark
-            TText toneVowel;
-            if( toneMgr->GetLoopingToneMarkVowel( toneVowel ) )
+            if( toneMgr->ToneMarkIndex() !=  KErrNotFound )
                 {
-                // remove two previous chars
-                ((CAknFepManager*)fepMan)->RemovePreviousCharacterL();
-                ((CAknFepManager*)fepMan)->RemovePreviousCharacterL();
-    
-                TBuf<CAknFepManager::ESingleCharacter> aChr;
-                aChr.Append(toneVowel);
+                // Get current tone mark
+                TText toneVowel;
+                if( toneMgr->GetLoopingToneMarkVowel( toneVowel ) )
+                    {
+                    // remove two previous chars
+                    ((CAknFepManager*)fepMan)->RemovePreviousCharacterL();
+                    ((CAknFepManager*)fepMan)->RemovePreviousCharacterL();
+        
+                    TBuf<CAknFepManager::ESingleCharacter> aChr;
+                    aChr.Append(toneVowel);
+                    
+                    // Update inline character(s)
+                    fepMan->CancelInlineEdit();
+                    fepMan->NewCharacterL(aChr);
+                    
+                    toneMgr->SetLoopingCombined( ETrue );
+                    bHandled = ETrue;
+                    }
                 
-                // Update inline character(s)
-                fepMan->CancelInlineEdit();
-                fepMan->NewCharacterL(aChr);
+                // Reset the engine timer so that we can get timer expired message
+                // We send the * key, and clear it in the next loop
+                ptiEng->ClearCurrentWord();
+                ptiEng->AppendKeyPress((TPtiKey)EPtiKeyStar);
+                }
+            else
+                {
+                if( toneMgr->IsLoopingCombined() )
+                    {
+                    // remove tone mark
+                    TBuf<2> newText;
+                    // Get the last character from the current editor
+                    TText prevChar = fepMan->PreviousChar();
+                    
+                    // Judge if the last character needs to be converted
+                    if ( NeedsVietnameseBkDelSupport(prevChar, newText) )
+                        {
+                        // Delete the prev character and send the new character to editor
+                        ((CAknFepManager*)fepMan)->RemovePreviousCharacterL();
+                        fepMan->NewCharacterL(newText);
+                        fepMan->CommitInlineEditL();
+                        }
                 
-                toneMgr->SetLoopingCombined( ETrue );
-                bHandled = ETrue;
+                    toneMgr->SetLoopingCombined( EFalse );
+                    }
                 }
-            
-            // Reset the engine timer so that we can get timer expired message
-            // We send the * key, and clear it in the next loop
-            ptiEng->ClearCurrentWord();
-            ptiEng->AppendKeyPress((TPtiKey)EPtiKeyStar);
             }
         else
             {
-            if( toneMgr->IsLoopingCombined() )
+            // Key looping is not supported with Backspace key
+            // Otherwise the process of deleting a2222 is wrong
+            if ( aKey != EKeyBackspace )
                 {
-                // remove tone mark
-                TBuf<2> newText;
-                // Get the last character from the current editor
-                TText prevChar = fepMan->PreviousChar();
-                
-                // Judge if the last character needs to be converted
-                if ( NeedsVietnameseBkDelSupport(prevChar, newText) )
-                    {
-                    // Delete the prev character and send the new character to editor
-                    ((CAknFepManager*)fepMan)->RemovePreviousCharacterL();
-                    fepMan->NewCharacterL(newText);
-                    fepMan->CommitInlineEditL();
-                    }
-            
-                toneMgr->SetLoopingCombined( EFalse );
+                toneMgr->StartKeyLooping( aKey );
                 }
             }
         }
     else
         {
-        toneMgr->StartKeyLooping( aKey );
+        // Key looping should be cancelled as long pressing key  
+        // Otherwise a22 can not be inputted by press a, long press 2 and long press 2.
+        toneMgr->StopKeyLooping();
         }
     
     if(!bHandled && toneMgr->IsLooping())
-    	{
-    	toneMgr->StopToneMarkLooping();
-    	}
+        {
+        toneMgr->StopToneMarkLooping();
+        }
     
     return bHandled ? ETrue : TAknFepInputStateInitialMultitapBase::HandleKeyL(aKey, aLength);
     }
--- a/fep/aknfep/src/AknFepUiInputStateQwerty.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/src/AknFepUiInputStateQwerty.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -1196,8 +1196,11 @@
                     }
                 }
             // Disable UI framewroks's qwerty iCode conversion for simulated event.	
-            numKey.iModifiers |= EModifierSpecial;					
-            if(!(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric()))
+            numKey.iModifiers |= EModifierSpecial;		
+            
+            //as the editor is a Java number editor, we did not simulate the number key event  
+            if(!(fepMan->IsHybridAplhaEditor() && !fepMan->IsHybridAlphaModeChangedtoAplhanumeric())
+                 && !fepMan->IsSpecialNumericEditor() )
                 {
                 CCoeEnv::Static()->SimulateKeyEventL(numKey, EEventKey);                        
 #ifdef RD_INTELLIGENT_TEXT_INPUT
--- a/fep/aknfep/src/AknFepUiManagerKorean.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/src/AknFepUiManagerKorean.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -219,14 +219,17 @@
             {
             switch(iMode)
                 {
-                case ELatin:
-                    {
+                case EHangul:
                     iFepUiState = TAknFepInputStateQwertyKorean(this);
-                    break;               
-                    }
+                    break;                
+                case ELatin:
+                case ENumber:
+                case ENativeNumber:
+                	iFepUiState = TAknFepInputStateQwerty(this);
+                	break;
                 default:
-			AknFepPanic(EAknFepPanicBadInputState);	
-           	break;
+					AknFepPanic(EAknFepPanicBadInputState);	
+					break;
                 }
                break;
             }
--- a/fep/aknfep/src/aknfepuiinputstateqwertykorean.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/fep/aknfep/src/aknfepuiinputstateqwertykorean.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -24,7 +24,9 @@
 #include <PtiEngine.h>
 #include <PtiDefs.h>
 #include <PtiKeyMappings.h>
-#include <PtiDefs.h>        
+#include <PtiDefs.h>   
+
+const TInt KMaxPtiTextBufSize = 255;
 
 TAknFepInputStateQwertyKorean::TAknFepInputStateQwertyKorean(
         MAknFepUIManagerStateInterface* aOwner)
@@ -39,42 +41,113 @@
     {
     }
 
-TBool TAknFepInputStateQwertyKorean::HandleKeyL(TInt aKey, TKeyPressLength /*aLength*/)
-    {
-//    LOG2("KO.IS.QWERTY.HandleKeyL %d,%d",aKey,aLength);
-    CPtiEngine& ptiEngine(*(iOwner->PtiEngine()));
-    MAknFepManagerUIInterface& fepMan(*(iOwner->FepMan()));
-    
-    TPtrC text(ptiEngine.AppendKeyPress((TPtiKey)aKey));
-    TBuf<1> chr;            
-    for (TInt jj = 0; jj < text.Length(); jj++)
-        {
-        chr.Zero();
-        chr.Append(text[jj]);
-        fepMan.NewCharacterL(chr);
-        }
-    return ETrue;
+TBool TAknFepInputStateQwertyKorean::HandleKeyL(TInt aKey, TKeyPressLength aLength)
+    {	
+    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+    CPtiEngine* ptiengine = iOwner->PtiEngine();
+    TBool ret = ETrue;
+       
+	switch( aKey )
+		{
+		case EKeyDelete:
+		case EStdKeyDelete:
+		case EKeyBackspace:
+		case EStdKeyBackspace:
+			{
+			if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))
+				{
+				TPtrC newText = ptiengine->DeleteKeyPress();
+				if( newText.Length() > 0 )
+					{
+					  fepMan->UpdateInlineEditL(newText, newText.Length());
+					}
+				else
+					{
+					fepMan->CancelInlineEdit();
+					ptiengine->ClearCurrentWord();
+					}	      	
+				}
+			else
+				{
+				ret = EFalse;	
+				}
+			}
+			break;
+		case EStdKeyEnter:
+		case EStdKeySpace:
+		case EStdKeyTab:
+		case EStdKeyLeftArrow:
+		case EStdKeyRightArrow:
+		case EStdKeyDownArrow:
+		case EStdKeyUpArrow:
+			{
+			fepMan->CommitInlineEditL();	
+			ptiengine->CommitCurrentWord();
+			ret = EFalse; 
+			}
+			break;
+		default:
+			{
+			//normal character handled here
+			if ( EShortKeyPress == aLength )
+				{
+				if (!(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)))
+					{ 
+					// start inline edit
+					ptiengine->ClearCurrentWord();
+					fepMan->StartInlineEditL();
+					fepMan->SetInlineEditingCursorVisibilityL(ETrue);
+					}
+										 
+				TPtrC aText = ptiengine->AppendKeyPress((TPtiKey)aKey);
+				if( aText.Length() > 0 )
+					{
+					 fepMan->UpdateInlineEditL(aText, aText.Length());	
+					 if( aText.Length()  >= KMaxPtiTextBufSize )
+						{
+						// force commit 
+						fepMan->CommitInlineEditL();	
+						ptiengine->CommitCurrentWord();
+						}	
+					}	
+				}
+			else // long press
+				{
+				if (!fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))
+					{
+					return ETrue; 			
+					}
+				
+				//delete last input text
+				TPtrC text = ptiengine->DeleteKeyPress();
+				if( text.Length() >0 )
+					{
+				    fepMan->UpdateInlineEditL(text, text.Length());
+					}
+	            
+	            // add new text
+				TPtiTextCase previousCase = ptiengine->Case();
+				switch ( previousCase )
+					{
+					case EPtiCaseLower:
+					case EPtiCaseUpper:
+						ptiengine->SetCase( EPtiCaseFnLower );
+						break;
+					default:
+						break;
+					}
+					   
+				TPtrC newText = ptiengine->AppendKeyPress((TPtiKey)aKey);
+				if( newText.Length() >0 )
+					{
+					 fepMan->UpdateInlineEditL(newText, newText.Length());
+					}
+				ptiengine->SetCase( previousCase );
+				fepMan->CommitInlineEditL();
+				ptiengine->ClearCurrentWord();
+				}
+			}  
+			break;
+		}                                                             	  	                    				   
+    return ret;
     }
-
-void TAknFepInputStateQwertyKorean::KeyTimerExpired()
-    {
-//    LOG1("KO.IS.QWERTY.KeyTimerExpired %d",iData);
-    CPtiEngine& ptiEngine(*(iOwner->PtiEngine()));
-    MAknFepManagerUIInterface& fepMan(*(iOwner->FepMan()));
-    
-    TPtrC text(ptiEngine.CurrentWord());
-    TBuf<1> chr;            
-    for (TInt jj = 0; jj < text.Length(); jj++)
-        {
-        chr.Zero();
-        chr.Append(text[jj]);
-        TRAP_IGNORE( fepMan.NewCharacterL(chr) );
-        }
-    
-    //TRAPD(err, fepMan.CommitInlineEditL())
-    TRAP_IGNORE( fepMan.CommitInlineEditL() )
-    }
-
-//fepMan.StartInlineEditL(text);
-//iFepMan.StartInlineEditL()
-//virtual void SetCursorSelectionL(const TCursorSelection& aCurSel, TBool aSyncCursor) = 0;
--- a/inputmethods_plat/aknfep_definitions_api/inc/AknFepGlobalEnums.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/inputmethods_plat/aknfep_definitions_api/inc/AknFepGlobalEnums.h	Thu Aug 19 10:15:25 2010 +0300
@@ -173,7 +173,9 @@
     EPluginInputModeFSc = 16,    // new one
     EPluginInputModeMiniItut = 32,
     EPluginInputModeFingerHwr = 64,
-    EPluginInputModeAll = 127      // EPluginInputModeHwr | ... | EPluginInputModeFingerHwr|
+    EPluginInputModePortraitFSQ = 128, // For portrait FSQ
+    // EPluginInputModeHwr | ... | EPluginInputModePortraitFSQ
+    EPluginInputModeAll = 255         
     };
     
 #define KLatinToDevanagariDigitsDelta 0x0936
--- a/inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/inputmethods_plat/aknfep_settings_api/inc/AknFepInternalCRKeys.h	Thu Aug 19 10:15:25 2010 +0300
@@ -368,6 +368,19 @@
  * 0 is for latin number and 1 is for native number.
  */
 const TUint32 KAknFepDefaultArabicNumberMode = 0x00000025;
+
+/**
+ * This key is used for storing the last used input mode in portrait orientation.
+ * With adding portrait FSQ, users have two choices for portrait input mode,
+ * ITU-T and portrait FSQ.  The last used input mode in portrait orientation is
+ * kept to have the input mode if the phone changes the orientation to landscape
+ * and back to portrait.
+ * 
+ * Only EPluginInputModeItut(8) and EPluginInputModePortraitFSQ(128) are valid,
+ * and the default value is EPluginInputModeItut.
+ */
+const TUint32 KAknFepLastUsedPortraitInput = 0x00000026;
+
 #endif
 
 // End of file
--- a/inputmethods_plat/pen_input_server_api/inc/peninputcmd.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/inputmethods_plat/pen_input_server_api/inc/peninputcmd.h	Thu Aug 19 10:15:25 2010 +0300
@@ -153,6 +153,7 @@
     ESignalDeleteLastInput,
     ESignalArabicSCTChar,
     ESignalDeactivateSprite,
+    ESignalChangeAmPm,//notify  mfne editor to toggle AM or PM
     ESignalUserEventBase = 2000
     };
 
--- a/textinput/group/bld.inf	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/group/bld.inf	Thu Aug 19 10:15:25 2010 +0300
@@ -50,5 +50,6 @@
 #include "../peninputhwrfscn/group/bld.inf"
 #include "../peninputvkbkr/group/bld.inf"
 #include "../peninputfingerhwr/group/bld.inf"
+#include "../peninputfingerhwrar/group/bld.inf"
 #include "../peninputsplititut/group/bld.inf"
 #include "../peninputsplitqwerty/group/bld.inf"
--- a/textinput/peninputarc/gsplugin/gspeninputplugin/loc/gspeninputplugin.loc	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputarc/gsplugin/gspeninputplugin/loc/gspeninputplugin.loc	Thu Aug 19 10:15:25 2010 +0300
@@ -313,4 +313,108 @@
 // r:5.0
 //
 #define qtn_tin_option_menu_arabic_wdic "Recognition with dictionary"
+
+// d:Text in Handwriting input setting
+// d:Label's text for handwriting input setting in device view
+// l:list_single_large_graphic_pane_t1
+// r:TB9.2
+#define qtn_cp_folder_handwriting_input "Handwriting input settings"
+
+// d:Text in Handwriting input setting
+// d:It is title text in handwriting input setting view
+// l:title_pane_t2/opt9
+// r:TB9.2
+#define qtn_cp_title_handwriting_input "Handwriting input settings"
+
+// d:Text in Handwriting input setting
+// d:It is caption text for handwriting input settings in general settings
+// l:title_pane_t2/opt9
+// r:TB9.2
+#define qtn_gen_settings_handwriting_input "Handwriting input settings"
+
+// d:Text in Handwriting input setting
+// d:Setting name for handwriting input 
+// l:list_setting_pane_t1 
+// r:TB9.2
+#define qtn_as_settings_simple_hwr "Handwriting input"
+
+// d:Text in Handwriting input setting
+// d:Handwriting input can be actived 
+// l:list_set_graphic_pane_t1 
+// r:TB9.2
+#define qtn_ads_settings_enable_simple_hwr "On"
+
+// d:Text in Handwriting input setting
+// d:Handwriting input can not be actived
+// l:list_set_graphic_pane_t1 
+// r:TB9.2
+#define qtn_ads_settings_disable_simple_hwr "Off"
+
+
+// d:It is text for selecting the fuzzy pinyin input settings 
+// l:list_setting_pane_t1
+// r:9.2
+//
+#define qtn_tin_settings_fuzzy_pinyin "Fuzzy Pinyin"
+
+
+// d:It is text for showing fuzzy pinyin value in input settings 
+// l:list_set_graphic_pane_t1
+// r:9.2
+//
+#define qtn_tin_settings_fuzzy_pinyin_no_setting "No setting"
+
+
+// d:It is text for selecting the import contacts in input settings 
+// l:list_setting_pane_t1
+// r:9.2
+//
+#define qtn_tin_settings_import_contacts_name "Import contacts name of Phonebook"
+
+
+// d:It is text for showing the import date in input settings 
+// l:list_set_graphic_pane_t1
+// r:9.2
+//
+#define qtn_tin_settings_import_contacts_name_time "Import date: %U"
+
+
+// d:It is text for showing not import in input settings 
+// l:list_set_graphic_pane_t1
+// r:9.2
+//
+#define qtn_tin_settings_import_contacts_name_not_import_yet "Not imported"
+
+// d:It is text for softkey to stop import dialog
+// l:control_pane_t2/opt7
+// r:9.2
+//
+#define qtn_tin_settings_import_contacts_name_stop "stop"
+
+// d:It is note text for succeed import contacts 
+// l:popup_note_window/opt2
+// r:9.2
+//
+#define qtn_tin_settings_import_contacts_name_note "%0N contact names have been imported."
+
+// d:It is text for no phonebook contacts when import.
+// l:popup_note_window/opt2
+// r:9.2
+//
+#define qtn_tin_settings_import_contacts_name_empty "No contact in Phonebook."
+
+// d:It is text for showing the import process.
+// l:popup_note_wait_window
+// r:9.2
+//
+#define qtn_tin_settings_import_contacts_name_wait "Importing, please wait...\n(%0N/%1N)"
+
+
+// d:text display when we can't access the phonebook data
+// l:popup_note_window/opt2
+// r:9.2
+//
+#define qtn_tin_settings_import_contacts_name_error_access "Can't access phonebook data"
+
+
 // End Of File
--- a/textinput/peninputarc/inc/pensrvcliinc/penuiwndctrl.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputarc/inc/pensrvcliinc/penuiwndctrl.h	Thu Aug 19 10:15:25 2010 +0300
@@ -196,12 +196,51 @@
     void UpdateCursor(TBool aOnFlag,const CFbsBitmap* aCursorBmp,const TRect& aPos);
     void SetPopupArea(const TRect& aRect, TBool aFlag);
     void UpdateICFArea(const CFbsBitmap* aBmp,const TPoint& aPos);
-    void UpdateChangedArea(const CFbsBitmap* aBmp,const TRect& aRect,TBool aFlag);
-    void UpdateBubble(const CFbsBitmap* aBmp,const CFbsBitmap* aMaskBmp,const TRect& aPos,TBool aFlag);
+    
+    /**
+     * Update the bubble area list
+     *
+     * @since S60 v5.0
+     * @param aCtrl the Ctrl's address
+     * @param aBmp the bubble bitmap's address
+     * @param aRect the bubble rect
+     * @param aFlag ETrue means add bubble area and 
+     *              EFalse means remove bubble area
+     * @return void
+     */
+    void UpdateChangedArea( const TUint32 aCtrl, 
+    	const CFbsBitmap* aBmp, const TRect& aRect, TBool aFlag );
+    
+    /**
+     * Update the bubble area list
+     *
+     * @since S60 v5.0
+     * @param aCtrl the Ctrl's address
+     * @param aBmp the bubble bitmap's address
+     * @param aMaskBmp the bubble mask bitmap's address
+     * @param aPos the bubble rect
+     * @param aFlag ETrue means add bubble area and 
+     *              EFalse means remove bubble area
+     * @return void
+     */
+    void UpdateBubble( const TUint32 aCtrl, 
+    	const CFbsBitmap* aBmp, const CFbsBitmap* aMaskBmp, 
+    	const TRect& aPos, TBool aFlag );
+    
     void Clean();
     
     void HandleNGASpecificSignal(TInt aEventType, const TDesC& aEventData);
     void LiftUpPriority();
+    
+    /**
+     * Update the cursor color
+     *
+     * @since S60 v5.0
+     * @param none
+     * @return void
+     */
+    void SetCursorColor();
+    
 public: // Functions from base classes.
 
     /**
@@ -302,6 +341,12 @@
     CFbsBitmap* iChangedBmp;
     RPointerArray<CFbsBitmap> iBubblesArea;
     RPointerArray<CFbsBitmap> iBubblesMaskArea;
+    
+    /**
+     * An array of the Controls' addresses 
+     */
+    RArray<TUint32> iBubblesCtrl;
+    
     RArray<TRect> iBubblesPos;
     
     TPoint iCursorPos;
@@ -335,6 +380,11 @@
     TBool iNotUpdating;
     CCursorWindow* iCursorWnd;
     
+    /**
+     * The cursor's color 
+     */
+    TRgb iCursorColor;
+    
 friend class CCursorWindow;
     };
 class CInternalBkCtrl : public CCoeControl
--- a/textinput/peninputarc/src/peninputanim/peninputanim.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputarc/src/peninputanim/peninputanim.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -1051,7 +1051,7 @@
 // 
 void CPeninputAnim::StartTimer()
     {
-    if ( iIsActive )
+    if ( iIsActive && !iFlushTimer->IsActive())
         {
         iFlushTimer->Start(
             KFlushTimerPeriod, 
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutbubblectrl.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -66,6 +66,8 @@
         
 EXPORT_C CBubbleCtrl::~CBubbleCtrl()
     {
+	Close();
+	
     if ( iText )
         delete iText;
     
@@ -228,12 +230,14 @@
             {
             struct SData
                 {
+            	TUint32 ctrl;
                 TBool flag;
                 TRect pos;
                 CFbsBitmap* bmp;
                 CFbsBitmap* mask;
                 } data;
                 
+            data.ctrl = (TUint32)this;
             data.flag = ETrue;
             data.pos = Rect();
             data.bmp = iBitmap;
@@ -313,11 +317,13 @@
             {
             struct SData
                 {
+            	TUint32 ctrl;
                 TBool flag;
                 TRect pos;
                 CFbsBitmap* bmp;
                 } data;
                 
+            data.ctrl = (TUint32)this;
             data.flag = EFalse;
             data.pos = Rect();
             data.bmp = iBitmap;
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutmultilineicfeditor.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -46,6 +46,10 @@
 #include "peninputlayoutsmiley.h"
 
 #include <gdi.h>
+
+#include <e32std.h>
+#include <e32const.h>
+
 const TInt KParagraphSeperator = 0x2029;
 const TInt KSecretUpdateTimer = 1000000; // 1s
 const TInt KSecretInstantShowTimer = 100000; // 100ms
@@ -1049,6 +1053,7 @@
         }    
     
     TFontSpec fontSpec;
+    fontSpec = aFont->FontSpecInTwips();
     fontSpec.iHeight = aFont->HeightInPixels();
     CFont*  font;
     iCoeEnv->ScreenDevice()->ReleaseFont(CONST_CAST(CFont*, iFont));
@@ -1067,6 +1072,7 @@
     iCharFormat.iFontSpec.iHeight = iCoeEnv->ScreenDevice()->VerticalPixelsToTwips(iFontHeight);
     iCharFormat.iFontSpec.iFontStyle.SetStrokeWeight(EStrokeWeightNormal);
     iCharFormat.iFontSpec.iFontStyle.SetBitmapType(EAntiAliasedGlyphBitmap);
+    iCharFormat.iFontSpec.iTypeface = iFont->FontSpecInTwips().iTypeface;
 
     iRichText->ApplyCharFormatL(iCharFormat, iCharFormatMask, 0, iRichText->DocumentLength());    
     if( InlineStateOn() || AutoCompletionStateOn() )
@@ -1981,6 +1987,19 @@
         iCursorSel = TCursorSelection(cursorPos+iPromptTextLen, 
                                       iCursorSel.iAnchorPos);
         AdjustFepCursorPosForPromptText( ETrue );
+        
+        TAmPmName amName(EAm);
+        TAmPmName pmName(EPm);
+        TInt offset = iMfneIcfData->Find(amName)!= KErrNotFound?
+                        iMfneIcfData->Find(amName):iMfneIcfData->Find(pmName);
+	    //if current is 12-hour format and touch on correct position
+        if(offset != KErrNotFound &&
+           iCursorSel.LowerPos()-iPromptTextLen>= offset &&
+           iCursorSel.LowerPos()-iPromptTextLen<= offset+amName.Length())
+            {
+            UiLayout()->SignalOwner(ESignalChangeAmPm);
+            }
+
         return this;
         }
         
--- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkbkeyctrl.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutvkbkeyctrl.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -1081,10 +1081,13 @@
     {
     struct SData
         {
+    	TUint32 ctrl;
         TBool flag;
         CFbsBitmap* bmp;
         TRect pos;
         } data;
+        
+    data.ctrl = (TUint32)this;
     data.flag = aFlag;
     data.bmp = Keyboard()->Bitmap();//aFlag ? Keyboard()->iBitmap : 0;
     data.pos = Rect();
--- a/textinput/peninputarc/src/peninputserverapp/peninputserver.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputarc/src/peninputserverapp/peninputserver.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -57,6 +57,11 @@
 
 const TInt KWsSessionFlushPerioid = 50000;//50ms
 const TInt KInvalidValue = -1;
+// Layout UID for portrait FSQ.  Used for distinguish between 
+// landscape and portrait FSQ for EPluginInputModeFSQ, which 
+// is used for both orientation in Pen Input server side code.
+const TInt KPenInputSrvPrtFsqUiId = 0x20026837;
+
 
 enum TActivationFlag
 	{
@@ -443,7 +448,13 @@
     	}
     
     // we should not be able to activate and show pen ui if this mode is disabled currently
-    if(iUiLayout->PenInputType() & DisabledByOrientation())
+    TInt inputType = iUiLayout->PenInputType();
+    if( inputType == EPluginInputModeFSQ && iLayoutId.iUid == KPenInputSrvPrtFsqUiId )
+        {
+        inputType = EPluginInputModePortraitFSQ;
+        }
+    if( inputType & DisabledByOrientation() )
+
         {
         // we have activate the animation otherwise we will see the penui but not reponse
         // when clicking on it in the case we rotating the screen quickly and continously
@@ -559,7 +570,12 @@
     
     // [[[ temporary solution for Virtual keyboard becomes corrupted after several rotations
     // we should not be able to activate and show pen ui if this mode is disabled currently
-    if(iUiLayout->PenInputType() & DisabledByOrientation())
+    TInt inputType = iUiLayout->PenInputType();
+    if( inputType == EPluginInputModeFSQ && iLayoutId.iUid == KPenInputSrvPrtFsqUiId )
+        {
+        inputType = EPluginInputModePortraitFSQ;
+        }
+    if( inputType & DisabledByOrientation() )
         {
         // we have activate the animation otherwise we will see the penui but not reponse 
         // when clicking on it in the case we rotating the screen quickly and continously
@@ -2108,6 +2124,9 @@
 //    
 void CPeninputServer::HandleResourceChange(TInt aType)
     {
+	// Update the cursor color when resource is changed
+	iPenUiCtrl->SetCursorColor();
+	
 	#ifdef FIX_FOR_NGA 
 	// iEnablePriorityChangeOnOriChange will be set to be EFalse, if some dialog in FEP end were opened and 
 	// not close after rotation for example: Symbol Table, Writing Language list and Match Dialog on ITI
@@ -2121,7 +2140,13 @@
         TBool needToLiftUp = EFalse;
         TInt inputMode = 0; 
         inputMode = iUiLayout->PenInputType();
-        if(inputMode == EPluginInputModeItut)
+        
+        // If input mode is either ITU-T or portrait FSQ, and if orientation 
+        // is changed to landscape, highest priority is given to Pen UI to avoid 
+        // flickering problem while drawing landscape FSQ layout.        
+        if( inputMode == EPluginInputModeItut ||
+          ( inputMode == EPluginInputModeFSQ && 
+            iLayoutId.iUid == KPenInputSrvPrtFsqUiId ) )
             {
             if(!isPortrait)
                 {
@@ -2155,20 +2180,28 @@
             }
         }
 	#endif	
-    if(iUiLayout && !(iUiLayout->PenInputType() & DisabledByOrientation()) )
+    if( iUiLayout )
         {
-        //hide the layout if it's already shown
-        
-        if ( iActive )
+        TInt inputType = iUiLayout->PenInputType();
+        if( inputType == EPluginInputModeFSQ && iLayoutId.iUid == KPenInputSrvPrtFsqUiId )
+            {
+            inputType = EPluginInputModePortraitFSQ;
+            }
+        if( !( inputType & DisabledByOrientation() ) )
             {
-            iUiLayout->OnActivate();  
-            }  
+            //hide the layout if it's already shown
+        
+            if ( iActive )
+                {
+                iUiLayout->OnActivate();  
+                }  
         
-        iUiLayout->OnResourceChange(aType);
+            iUiLayout->OnResourceChange(aType);
         
-        if(iUseWindowCtrl)
-            {
-            iPenUiCtrl->DrawNow();
+            if(iUseWindowCtrl)
+                {
+                iPenUiCtrl->DrawNow();
+                }
             }
             
         //show the layout if it's active
@@ -2280,7 +2313,16 @@
         return;
         }
     
-	if(iActive && !iPrevActive && inputMode != EPluginInputModeFSQ && iBackgroudDefaultOri == CAknAppUiBase::EAppUiOrientationUnspecified )
+    // Both landscape and portrait FSQs are handled as EPluginInputModeFSQ
+    // in Pen Input server. iLayoutId can be used to check it's landscape or
+    // portrait.
+    TBool isLandscapeFSQ = 
+        ( inputMode == EPluginInputModeFSQ && 
+          iLayoutId.iUid != KPenInputSrvPrtFsqUiId )
+         ? ETrue : EFalse;
+    
+    if ( iActive && !iPrevActive && !isLandscapeFSQ && 
+         iBackgroudDefaultOri == CAknAppUiBase::EAppUiOrientationUnspecified )
         {
         #ifdef FIX_FOR_NGA
         if(inputMode == EPluginInputModeFingerHwr)
@@ -2893,7 +2935,14 @@
                     }
                 if( size.iPixelSize.iWidth > size.iPixelSize.iHeight )
                     {
-                    return disabled |= EPluginInputModeItut;
+                    // Portrait input modes which are ITU-T and Portrait FSQ
+                    // should be disabled in portrait orientation. 
+                    // Note: no need to check feature flag because if it is not
+                    // turned on, EPluginInputModePortraitFSQ will not be handled 
+                    // at all so adding it to "disabled" will take no effect.
+                    disabled |= EPluginInputModeItut | EPluginInputModePortraitFSQ;
+
+                    return disabled;
                     }
                 }
             }
--- a/textinput/peninputarc/src/peninputserverapp/penuiwndctrl.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputarc/src/peninputserverapp/penuiwndctrl.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -72,10 +72,10 @@
         iAutoRefreshTimer->Cancel();
         }
     delete iAutoRefreshTimer; 
-	iPopRegion.Close();
-	iBubblesArea.Close();
-    iBubblesMaskArea.Close();
-	iBubblesPos.Close();
+    
+
+	Clean();
+
     
 	delete iCursorWnd;   
 }
@@ -104,6 +104,9 @@
     //iCursorWnd->ConstructL(this);
     iCursorWnd->SetContainerWindowL(*this);
     
+    // Update the cursor color
+    SetCursorColor();
+    
     MakeVisible( EFalse );
 }
 
@@ -123,7 +126,7 @@
         gc.BitBlt(pos, iBitmap, rect);
 #ifdef FIX_FOR_NGA
         //draw bubble
-        for (TInt i = 0; i < iBubblesArea.Count(); ++i)
+        for ( TInt i = 0; i < iBubblesCtrl.Count(); ++i )
             {
             gc.BitBlt(iBubblesPos[i].iTl, iBubblesArea[i]);
             }
@@ -135,7 +138,7 @@
 #ifdef FIX_FOR_NGA
     gc.BitBlt(TPoint(0, 0), iBitmap, Rect());
     //draw bubble
-    for (TInt i = 0; i < iBubblesArea.Count(); ++i)
+    for ( TInt i = 0; i < iBubblesCtrl.Count(); ++i )
         {
         gc.BitBlt(iBubblesPos[i].iTl, iBubblesArea[i]);
         }
@@ -165,8 +168,9 @@
 void CPenUiWndCtrl::Clean()
     {
     iCursorBmp = NULL;
-    iBubblesArea.Reset();
-    iBubblesPos.Reset();
+    iBubblesArea.Close();
+    iBubblesCtrl.Close();
+    iBubblesPos.Close();
 	iBubblesMaskArea.Close();
 	iPopRegion.Close();
     iChangedBmp= NULL;
@@ -193,11 +197,33 @@
     iParent->DrawCursor(gc);  
     }
 
+// ---------------------------------------------------------------------------
+// CPenUiWndCtrl::SetCursorColor
+// ---------------------------------------------------------------------------
+//
+void CPenUiWndCtrl::SetCursorColor()
+	{
+	// Set default cursor color to black
+	TRgb color( KRgbBlack );
+	// if the skin is enabled
+    if ( AknsUtils::AvkonSkinEnabled())
+        {
+        // Get the text color under current theme
+        AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
+	                               color, 
+	                               KAknsIIDQsnTextColors, 
+	                               EAknsCIQsnTextColorsCG60 );
+        }
+    
+    // Set the cursor color
+    iCursorColor = color;
+	}
+
 void CPenUiWndCtrl::DrawCursor(CWindowGc& aGc) const
     {
-    aGc.SetPenColor(KRgbBlack);
+    aGc.SetPenColor( iCursorColor );
     aGc.SetBrushStyle(CGraphicsContext::ESolidBrush);
-    aGc.SetBrushColor(KRgbBlack);
+    aGc.SetBrushColor( iCursorColor );
     aGc.SetDrawMode(CGraphicsContext::EDrawModeNOTSCREEN);
     aGc.SetPenStyle(CGraphicsContext::ESolidPen);
     aGc.SetPenSize( TSize(1,1));
@@ -250,16 +276,29 @@
         }
     iCursorWnd->SetCursorVisible(aOnFlag);
     }
-	
-void CPenUiWndCtrl::UpdateBubble(const CFbsBitmap* aBmp,const CFbsBitmap* aMask,
-                                                const TRect& aPos,TBool aFlag)
+
+// ---------------------------------------------------------------------------
+// CPenUiWndCtrl::UpdateBubble
+// ---------------------------------------------------------------------------
+//
+void CPenUiWndCtrl::UpdateBubble( const TUint32 aCtrl, 
+		                          const CFbsBitmap* aBmp,
+		                          const CFbsBitmap* aMask,
+                                  const TRect& aPos,
+                                  TBool aFlag )
     {
-    TInt idx = iBubblesArea.Find(aBmp);
+
+	// Check whether the Ctrl address is exist
+	TInt idx = iBubblesCtrl.Find( aCtrl );
+
     
     if(aFlag)
         {
         if(KErrNotFound == idx)
             {
+
+            iBubblesCtrl.Append( aCtrl );
+
             iBubblesArea.Append(aBmp);
             iBubblesMaskArea.Append(aMask);
             iBubblesPos.Append(aPos);
@@ -275,6 +314,9 @@
         //remove
         if(idx != KErrNotFound)
             {
+
+            iBubblesCtrl.Remove( idx );
+
             iBubblesArea.Remove(idx);
             iBubblesMaskArea.Remove(idx);
             iBubblesPos.Remove(idx);            
@@ -288,13 +330,20 @@
     iIcfPos = aPos;
     Invalidate(Rect(), ETrue);   
     }
-void CPenUiWndCtrl::UpdateChangedArea(const CFbsBitmap* aBmp,const TRect& aPos,TBool aFlag)
+
+
+// ---------------------------------------------------------------------------
+// CPenUiWndCtrl::UpdateChangedArea
+// ---------------------------------------------------------------------------
+//
+void CPenUiWndCtrl::UpdateChangedArea( const TUint32 aCtrl, 
+		const CFbsBitmap* aBmp,const TRect& aPos,TBool aFlag)
     {
-    UpdateBubble(aBmp,0,aPos,aFlag);
-    return;
+    UpdateBubble( aCtrl, aBmp, 0, aPos, aFlag );
+    return;    
+    }
 
-    
-    }
+
 void CPenUiWndCtrl::SetPopupArea(const TRect& aRect, TBool aFlag)
     {
     if(aFlag) //add pop area
@@ -694,25 +743,27 @@
             {
             struct SData
                 {
+            	TUint32 ctrl;
                 TBool flag;
                 TRect pos;
                 CFbsBitmap* bmp;
                 CFbsBitmap* mask;
                 } data;
             data = * (reinterpret_cast<SData*>( const_cast<TUint16*>( aEventData.Ptr() )));
-            UpdateBubble(data.bmp,data.mask,data.pos,data.flag);
+            UpdateBubble( data.ctrl, data.bmp, data.mask, data.pos, data.flag );
             }
             break;
         case ESignalUpdateChangedArea:
             {
             struct SData
                 {
+            	TUint32 ctrl;
                 TBool flag;
                 CFbsBitmap* bmp;
                 TRect pos;
                 } data;
             data = * (reinterpret_cast<SData*>( const_cast<TUint16*>( aEventData.Ptr() )));
-            UpdateChangedArea(data.bmp,data.pos,data.flag);
+            UpdateChangedArea( data.ctrl, data.bmp, data.pos, data.flag );
             }
             break;
         case ESignalRegisterBkControl:
--- a/textinput/peninputcommonctrls/loc/peninputcommonctrls.loc	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputcommonctrls/loc/peninputcommonctrls.loc	Thu Aug 19 10:15:25 2010 +0300
@@ -30,16 +30,16 @@
 //r: 5.0   
 #define qtn_input_switcher_fs_qwerty "Full Screen Qwerty"
 
-//d:Text in touch input mode swither list
-//d:portrait touch input method (full sreen qwerty or ITU-T)
+//d:Text in touch input mode switcher list
+//d:Portrait full sreen qwerty touch input method
 //l:list_single_pane_t1_cp2
-//r: 5.0
+//r: 5.2
 #define qtn_tin_option_menu_portrait_editor "Edit portrait"
 
-//d:Text in touch input mode swither list
-//d:landscape full sreen qwerty touch input method
+//d:Text in touch input mode switcher list
+//d:Landscape full sreen qwerty touch input method
 //l:list_single_pane_t1_cp2
-//r: 5.0
+//r: 5.2
 #define qtn_tin_option_menu_landscape_editor "Edit landscape"
 
 //d:Text in touch input mode swither list
--- a/textinput/peninputcommonctrls/src/peninputselectionlist/peninputscrollablelist.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputcommonctrls/src/peninputselectionlist/peninputscrollablelist.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -37,6 +37,8 @@
 
 const TInt KDisplayTextLen = KMaxItemTextLength + KAknBidiExtraSpacePerLine;
 
+const TInt KTextRectMargin = 4;
+
 EXPORT_C CFepLayoutScrollableList* CFepLayoutScrollableList::NewL(CFepUiLayout* aUiLayout,
                                                                   TInt aControlId,
                                                                   TSize aItemSize,
@@ -500,6 +502,14 @@
         AknBidiTextUtils::ConvertToVisualAndClip(item->iText, buf, *iFont,
                                          itemRect.Width(), itemRect.Width());
 	    }
+    
+	if ( itemRect.Height() - font->FontMaxHeight() < KTextRectMargin )
+    	{
+	    // Make sure the height of the area for drawing text is larger than 
+	    // the max height of font by 4 pixels at least.
+	    // The piece of code is used to avoid clipping some characters, like 'g'.
+        itemRect.SetHeight( font->FontMaxHeight() + KTextRectMargin );
+    	}
 	gc->DrawText(buf, itemRect, baseLine, iAlign);
 	gc->DiscardFont();
     }
@@ -608,7 +618,7 @@
 
 EXPORT_C void CFepLayoutScrollableList::HandleControlEvent(TInt aEventType, 
                                                   CFepUiBaseCtrl* aCtrl,
-                                                  const TDesC& aEventData)
+                                                  const TDesC& /*aEventData*/)
     {
     if( aEventType ==  EEventButtonUp )
         {
--- a/textinput/peninputcommonlayout/inc/peninputlayoutwindowext.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputcommonlayout/inc/peninputlayoutwindowext.h	Thu Aug 19 10:15:25 2010 +0300
@@ -335,6 +335,15 @@
     
     IMPORT_C void CPeninputLayoutWindowExt::SetTextAlignmentL( TInt aAlignment );
        
+    /**
+     * Unlatch the dead key for all kinds of vkb layout
+     *
+     * @since S60 v5.0
+     * @param none
+     * @return void
+     */
+    void CancelDeadKey();
+    
 protected:
 
     /**
--- a/textinput/peninputcommonlayout/src/peninputlayoutwindowext.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputcommonlayout/src/peninputlayoutwindowext.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -490,7 +490,57 @@
         return ETrue;
         }
     }
-  
+
+// ---------------------------------------------------------------------------
+// CPeninputLayoutWindowExt::CancelDeadKey
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+void CPeninputLayoutWindowExt::CancelDeadKey()
+	{
+    // Get the dead key status
+	TInt latchedFlag = CPeninputDataConverter::AnyToInt(
+		iLayoutContext->RequestData( EAkninputDataTypeLatchedSet ));
+	// If the DeadKey is latched, cancel it
+	if ( latchedFlag )
+		{
+		RPointerArray<CPeninputVkbLayoutInfo> vkbListInfo;
+		RPointerArray<CPeninputVkbKeyInfo> keyInfoList;
+		
+		// Get the vkb layout list supportted by current writing language
+		vkbListInfo = iVkbLayout->VkbLayoutInfoList();
+		TInt vkbListNum = vkbListInfo.Count();
+		
+		CVirtualKey* pKey;
+		TBool deadKeyChange = EFalse;
+		
+		// Find the latched DeadKey in all kinds of vkb layout 
+		// which supportted by current writing language
+		for ( TInt i = 0; i < vkbListNum && !deadKeyChange ; i++ )
+			{
+			// Get the key info list in one vkb layout
+			keyInfoList = vkbListInfo[i]->KeyInfoList();
+			TInt keyListNum = keyInfoList.Count();
+			for ( TInt j = 0; j < keyListNum && !deadKeyChange ; j++ )
+				{
+				pKey = keyInfoList[j]->Key();
+				// If the Dead key is latched
+				if ( pKey->Latched())
+					{
+					// Unlatch the DeadKey
+					pKey->SetLatched( EFalse );
+					
+					// Set the DeadKey state
+					iLayoutContext->SetData( 
+						EAkninputDataTypeLatchedSet, &deadKeyChange );
+					
+					deadKeyChange = ETrue;
+					} 
+				}
+			}
+		}	
+	}
+
 // ---------------------------------------------------------------------------
 // CPeninputLayoutWindowExt::ChangeInputLanguageL
 // (other items were commented in a header)
@@ -518,6 +568,9 @@
         
     if ( found ) 
         {
+        // Remove the dead key's latched status
+		CancelDeadKey();
+    
         // Store language
         iLayoutContext->SetData( EPeninputDataTypeInputLanguage, &aLangID );
    
@@ -820,45 +873,10 @@
 //
 EXPORT_C void CPeninputLayoutWindowExt::ChangeVkbLayout( TInt aVkbLayoutId )
     {
-    TInt latchedFlag = CPeninputDataConverter::AnyToInt(
-                       iLayoutContext->RequestData(EAkninputDataTypeLatchedSet));
-    // If the DeadKey is latched, cancel it and then change the VKB layout
-    if(latchedFlag)
-        {
-        RPointerArray<CPeninputVkbLayoutInfo> vkbListInfo;
-        RPointerArray<CPeninputVkbKeyInfo> keyInfoList;
-        
-        vkbListInfo = iVkbLayout->VkbLayoutInfoList();
-        TInt vkbListNum = vkbListInfo.Count();
-        
-        CVirtualKey* pKey;
-        TBool deadKeyChange = EFalse;
-        // Find the latched DeadKey in all the Vkb layout
-        for(TInt i = 0; i < vkbListNum; i++)
-            {
-            // Get key info list in one VKB layout
-            keyInfoList = vkbListInfo[i]->KeyInfoList();
-            TInt keyListNum = keyInfoList.Count();
-            for(TInt j = 0; j < keyListNum; j++)
-                {
-                pKey = keyInfoList[j]->Key();
-                if(pKey->Latched())
-                    {
-                    // Unlatch the DeadKey
-                    pKey->SetLatched(EFalse);
-                    
-                    // Set the DeadKey state
-                    iLayoutContext->SetData(EAkninputDataTypeLatchedSet, &deadKeyChange);
-                    deadKeyChange = ETrue;
-                    break;
-                    } 
-                }
-            if(deadKeyChange)
-                {
-                break;
-                }
-            }
-        }
+
+	// Remove the dead key's latched status
+	CancelDeadKey();
+
     
     TInt curVkbId = CPeninputDataConverter::AnyToInt
         ( iLayoutContext->RequestData( EPeninputDataTypeVkbLayout ) );
--- a/textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputfingerhwrar/data/peninputfingerhwrarwnd.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -1322,4 +1322,4 @@
             scancode = 0x266B;
             }	
         };
-    }	
\ No newline at end of file
+    }	
--- a/textinput/peninputfingerhwrar/group/iconlist.txt	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputfingerhwrar/group/iconlist.txt	Thu Aug 19 10:15:25 2010 +0300
@@ -64,4 +64,3 @@
 -c8,8 qgn_indi_input_hwr_arabic_symbol_table.svg
 -c8,8 qgn_indi_input_hwr_arabic_writing_area.svg
 -c8,8 qgn_indi_input_arabic_backspace.svg
--c8,8 qgn_indi_input_enter.svg
\ No newline at end of file
--- a/textinput/peninputfingerhwrar/group/peninputfingerhwrar.mmp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputfingerhwrar/group/peninputfingerhwrar.mmp	Thu Aug 19 10:15:25 2010 +0300
@@ -43,6 +43,7 @@
 SOURCE    hbufcarrayar.cpp 
 SOURCE    peninputfingerhwrarwritingwnd.cpp
 SOURCE    peninputfingerhwrarnumsymboltable.cpp
+SOURCE    peninputfingerhwarvkbutility.cpp
 
 USERINCLUDE     ../inc
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwarvkbutility.h	Thu Aug 19 10:15:25 2010 +0300
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of virtual key ctrl utility for arabic hwr.
+*
+*/
+
+
+#ifndef C_PENINPUTFINGERHWARVKBUTILITY_H
+#define C_PENINPUTFINGERHWARVKBUTILITY_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class TResourceReader;
+class CVirtualKeyboard;
+class CVirtualKey;
+
+// CLASS DECLARATION
+
+/**
+ *  The virtual key board utility which implement a set of funtions:
+ *  1. create the virutal key
+ *  2. load virutal key image
+ *  3. load the virtual keys
+ * 
+ *  @lib peninputfingerhwrar.lib
+ *  @since S60 v5.0
+ */
+
+class PeninputFingerHwrArVkbUtility
+    {
+public:
+    /**
+	 * Load VKB image
+	 *
+	 */
+    static void LoadVkbKeyImageL(CVirtualKeyboard& aVkbCtrl, TInt aResId, const TSize& aKeySize);
+	
+	/**
+	 * Load virutal Key and set key rects.
+	 *
+	 */
+	static void LoadVirtualKeypadKeyL(CVirtualKeyboard& aVkbCtrl, const TInt aResId, const RArray<TRect>& aCellRects);
+
+    /** 
+	 * create a new virtual key
+	 *
+	 */
+	static CVirtualKey* CreateVkbKeyL(TResourceReader& aReader, const TRect& aKeyRect);
+	
+	/**
+	 * update the virtal key
+	 *
+	 */
+	static void UpdateVkbKeyL( CVirtualKey* aVirtualKey, TResourceReader& aReader, const TRect& aKeyRect );
+    };
+
+#endif // C_PENINPUTFINGERHWARVKBUTILITY_H
+
+//  End Of File
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrardatastore.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrardatastore.h	Thu Aug 19 10:15:25 2010 +0300
@@ -137,14 +137,6 @@
      */
     TInt PrimaryRange();
     
-    /**
-     * Get current range
-     *
-     * @since Symbian TB9.2
-     * @return Current range.
-     */   
-    TFingerHwrRange CurrentRange();
-    
      
     /**
      * Set case
@@ -456,11 +448,6 @@
     RArray<TInt> iPermittedRanges;
     
     /**
-     * Current range
-     */
-    TFingerHwrRange iCurrentRange;
-    
-    /**
      * Permitted range in int format
      */
     TInt iIntRange;
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlafmanager.h	Thu Aug 19 10:15:25 2010 +0300
@@ -153,6 +153,13 @@
      */       
     TInt IcfTextHeight();
     
+    /**
+     * get indicator bubble rect.
+     * 
+     * @since Symbian TB9.2
+     * @return bubble rect.
+     */
+    TRect IndicatorBubbleRect();
 public: //buttons
     
     /**
@@ -492,6 +499,11 @@
     TInt iIcfTextAlignment;
     CFont* iIcfFont;
     
+    /**
+     * Msg indicator bubble.
+     */
+    TRect iRectIndicatorBubble;
+    
 	/**
 	 * Candidate laf
 	 */
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlayout.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarlayout.h	Thu Aug 19 10:15:25 2010 +0300
@@ -30,8 +30,6 @@
 class CPeninputFingerHwrArDataStore;
 class CRepository;
 class CPeninputFingerHwrArWnd;
-class CPeninputFingerHwrArCallBack;
-
 // class DECLARATIONS
 
 /**
@@ -511,19 +509,12 @@
      */
     CRepository* iRepositorySetting;
     
-    /**
-     * repository object.
-     */
-//    CRepository* iCommonEngineRepository;    
-    
 	/**
 	 * Check if the stroke of drawing the character on the 
 	 * HWR box is started
 	 */
 	TBool iIsStrokeOfDrawingCharacerStarted;
 	
-	CPeninputFingerHwrArCallBack* iCallBack;
-	
 	/**
 	 * Check if the editor is MFNE
 	 */
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarnumsymboltable.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarnumsymboltable.h	Thu Aug 19 10:15:25 2010 +0300
@@ -100,8 +100,7 @@
 	 * sizechanged
 	 *
 	 */
-	void SizeChanged(const TRect aVirtualKeypadRect, const RArray<TRect> aBtnRects,
-                     const TInt aKeypadRow, const TInt aKeypadCol, TBool aIsLandscape = ETrue);
+	void SizeChanged(const TRect& aVirtualKeypadRect);
     
 	/**
 	 * Load VKB image
@@ -122,12 +121,6 @@
 	inline CVirtualKeyboard* KeyPad(){return iNumKeypad;}
     
 	/**
-	 * Navigate page
-	 *
-	 */
-	void UpdateNumSymbolTable(TInt aNumSctType = ENumSCTLatin);
-    
-	/**
 	 * Construct from resource
 	 * This funciton will be called when the resource has changed for example skin was changed
 	 */
@@ -140,7 +133,7 @@
      * @param aNumMapping a string contains numbers and related char. max length is 16.
      * @return none
      */
-    void SetNumericMapping( const TDesC& aNumMapping );
+    void UpdateTableSymbol( const TDesC& aNumMapping );
     
     /*
      * set arabic number mode.
@@ -149,6 +142,14 @@
      * @return none.
      */
     void SetNativeNumMode(const TBool aIsNativeNumMode);
+
+    /**
+     * Update the virtual keys rect.
+     * @since s60 5.2.
+     * @param aCellRects keypad cell rects.
+     * @return None.
+     */
+    void UpdateAllVirtualKeysRect(const RArray<TRect> & aCellRects);
 protected: //virtuals from CControlGroup (CFepUiBaseCtrl)
 
     /**
@@ -207,20 +208,6 @@
      */
 	void CreateVirtualKeypadL();
 	
-	/** 
-	 * create a new virtual key
-	 *
-	 */
-	CVirtualKey* CreateVkbKeyL(TResourceReader& aReader, const TRect aKeyRect);
-	
-	/**
-	 * update the virtal key
-	 *
-	 */
-	void UpdateVkbKeyL( CVirtualKey* aVirtualKey, TResourceReader& aReader, 
-	                    const TRect aKeyRect );
-    void OnActivate();
-	
 	/**
 	 * Update the virtual key feedback
 	 *
@@ -231,7 +218,14 @@
 	 * Draw group control
 	 */
 	void Draw();
-	
+
+private:
+	/**
+	 * Refresh the symbol table
+	 *
+	 */
+	void RefreshNumSymbolTable();
+		
 	/**
 	 * Load background from resource
 	 *
@@ -242,6 +236,13 @@
 	 * map latin number to arabic number.
 	 */
 	TInt16 MapLatinNumAccordingToNumMode(TInt16 aUnicode);
+	
+	/**
+	 * Generate the char talbe according to the aNumMapping
+	 *
+	 */
+	HBufC* GenerateCharTable(const TDesC& aNumMapping);
+	
 private:
     /**
 	 * multipage viritual keyboard
@@ -254,12 +255,6 @@
      */
     TBool iPopupVisible;
 	
-	/**
-	 * store the layout mode
-	 */
-	TBool iIsLandscape;
-	
-    TInt iCurrentNumSCTType;	
     /*
      * Default number mode.
      */
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarsymboltable.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarsymboltable.h	Thu Aug 19 10:15:25 2010 +0300
@@ -100,7 +100,7 @@
 	 * sizechanged
 	 *
 	 */
-	void SizeChanged(const TRect aVirtualKeypadRect, const RArray<TRect> aBtnRects,
+	void SizeChanged(const TRect aVirtualKeypadRect, const RArray<TRect> & aBtnRects,
                      const TInt aKeypadRow, const TInt aKeypadCol, TBool aIsLandscape = ETrue);
     
 	/**
@@ -223,20 +223,6 @@
      */     
     void MoveIconButton( CAknFepCtrlEventButton* aButton, const TRect& aRect, 
             TInt aXPadding=0, TInt aYPadding=0, TBool aReloadImages=ETrue );
-    
-	/** 
-	 * create a new virtual key
-	 *
-	 */
-	CVirtualKey* CreateVkbKeyL(TResourceReader& aReader, const TRect aKeyRect);
-	
-	/**
-	 * update the virtal key
-	 *
-	 */
-	void UpdateVkbKeyL( CVirtualKey* aVirtualKey, TResourceReader& aReader, 
-	                    const TRect aKeyRect );
-    void OnActivate();
 	
 	/**
 	 * Show the visible page button
--- a/textinput/peninputfingerhwrar/inc/peninputfingerhwrarwnd.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputfingerhwrar/inc/peninputfingerhwrarwnd.h	Thu Aug 19 10:15:25 2010 +0300
@@ -504,7 +504,8 @@
      * @param aCellRects rects of virtual keys.
      * @return None
      */      
-    void LoadNumSymbolVirtualKeysL( const TInt aResId, const RArray<TRect>& aCellRects );
+    void LoadNumSymbolVirtualKeysL( const TInt aResId, 
+            const RArray<TRect>& aCellRects, TBool aReload = ETrue );
     
     /**
      * relayout full ui, reset all controls position. 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwarvkbutility.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of virtual key ctrl utility for arabic hwr.
+*
+*/
+
+// INCLUDE
+#include <e32std.h>
+#include <barsread.h>
+#include <coemain.h>
+
+#include "peninputfingerhwarvkbutility.h"
+#include "peninputlayoutvkb.h"
+#include "peninputpluginutils.h"
+#include "hbufcarrayar.h"
+#include "peninputfingerhwrarstoreconstants.h"
+
+// ---------------------------------------------------------------------------
+// Load virtual keys image
+// ---------------------------------------------------------------------------
+//
+void PeninputFingerHwrArVkbUtility::LoadVirtualKeypadKeyL(CVirtualKeyboard& aVkbCtrl, const TInt aResId, const RArray<TRect>& aCellRects)        
+    {
+    aVkbCtrl.SetResourceId(aResId);
+	
+	TResourceReader reader;
+    CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId );
+
+    // construct keys
+    TInt resKeyCount = reader.ReadInt16();
+    TInt existsKeyCount = aVkbCtrl.KeyArray().Count();
+    TInt rectCount = aCellRects.Count();
+    
+    for ( TInt i = 0; i < resKeyCount; i++ )
+        {
+        if ( i < existsKeyCount )
+            {
+            CVirtualKey* vk = aVkbCtrl.KeyArray()[i];
+            UpdateVkbKeyL( vk, reader, aCellRects[i%rectCount] );
+            }
+        else
+            {
+            CVirtualKey* vk = CreateVkbKeyL( reader, aCellRects[i%rectCount] );
+            CleanupStack::PushL( vk );
+            aVkbCtrl.AddKeyL( vk );
+            
+            CleanupStack::Pop( vk );
+            }
+        }
+    
+    CleanupStack::PopAndDestroy( 1 ); // reader
+    
+    aVkbCtrl.Draw();
+    aVkbCtrl.UpdateArea( aVkbCtrl.Rect() );
+    }
+
+// ---------------------------------------------------------------------------
+// Create the virtual key
+// ---------------------------------------------------------------------------
+//
+CVirtualKey* PeninputFingerHwrArVkbUtility::CreateVkbKeyL(TResourceReader& aReader,const TRect& aKeyRect)
+	{
+	CHBufCArray* keytexts = CHBufCArray::NewL();
+    CleanupStack::PushL( keytexts );
+    
+    for ( TInt i = 0; i <= EPosLast; i++ )
+        {
+        HBufC* unicode = aReader.ReadHBufCL();
+        keytexts->Array().AppendL( unicode );
+        }
+
+    TInt keyscancode = aReader.ReadInt16();
+
+    HBufC* text = keytexts->Array()[0];
+    
+    CVirtualKey* vk = NULL;
+    if ( text )
+        {
+        vk = CVirtualKey::NewL( *text, keyscancode, aKeyRect, aKeyRect, 0 );
+        }
+    else 
+        {
+        vk = CVirtualKey::NewL( KNullDesC, keyscancode, aKeyRect, aKeyRect, 0 );
+        }
+
+    CleanupStack::PopAndDestroy( keytexts ); //keytexts
+
+    
+    TRect innerrect = aKeyRect;
+    innerrect.Shrink( TSize(10, 10) );
+    vk->SetInnerRect( innerrect );
+    
+    return vk;
+	}
+
+// ---------------------------------------------------------------------------
+// Load virtual keys image
+// ---------------------------------------------------------------------------
+//	
+void PeninputFingerHwrArVkbUtility::LoadVkbKeyImageL(CVirtualKeyboard& aVkbCtrl, TInt aResId, const TSize& aKeySize)
+    {
+	TResourceReader reader;    
+    CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId );      
+    
+    TPtrC bmpFileName = reader.ReadTPtrC();
+    TInt32 imgMajorSkinId = reader.ReadInt32();
+    TAknsItemID id;
+    
+    TSize keySize = aKeySize;
+    
+    for ( TInt index = 0; index <= EKeyBmpLastType ; index += 2 )
+        { 
+        // Get the image ids and mask ids from resource
+        TInt bmpId = reader.ReadInt16(); 
+        TInt bmpMskId = reader.ReadInt16();
+        
+        // read skin item id
+        const TInt skinitemid = reader.ReadInt16();
+        id.Set( TInt( imgMajorSkinId ), skinitemid );
+        
+        if ( bmpId != KInvalidImg )
+            {
+            CFbsBitmap* bmp = NULL;
+            CFbsBitmap* maskbmp = NULL;
+
+            if ( bmpMskId != KInvalidImg )
+                {
+                AknsUtils::CreateIconL( AknsUtils::SkinInstance(),
+                   id, bmp, maskbmp, bmpFileName, bmpId, bmpMskId );
+                
+                // set maskbmp and size
+                AknIconUtils::SetSize( maskbmp, keySize, EAspectRatioNotPreserved );
+                aVkbCtrl.SetNonIrregularKeyBitmapL(TVirtualKeyBmpType(EKeyBmpNormal + index + 1 ),maskbmp);
+                }
+            else
+                {
+                AknsUtils::CreateIconL( AknsUtils::SkinInstance(), id, 
+                    bmp, bmpFileName, bmpId );
+                }
+            // set bmp and size
+            AknIconUtils::SetSize( bmp, keySize, EAspectRatioNotPreserved );
+            aVkbCtrl.SetNonIrregularKeyBitmapL(TVirtualKeyBmpType( EKeyBmpNormal + index ),bmp);
+            }       
+        }
+    // Pop and destroy reader
+    CleanupStack::PopAndDestroy( 1 );        
+	}
+
+// ---------------------------------------------------------------------------
+// update virtual key info.
+// ---------------------------------------------------------------------------
+//
+void PeninputFingerHwrArVkbUtility::UpdateVkbKeyL(CVirtualKey* aVirtualKey, TResourceReader& aReader, const TRect& aKeyRect)
+    {
+    CHBufCArray* keytexts = CHBufCArray::NewL();
+    CleanupStack::PushL( keytexts );
+    
+    for ( TInt i = 0; i <= EPosLast; i++ )
+        {
+        HBufC* unicode = aReader.ReadHBufCL();
+        keytexts->Array().AppendL( unicode );
+        }
+
+    TInt keyscancode = aReader.ReadInt16();
+
+    HBufC* text = keytexts->Array()[0];
+    if ( text )
+        {
+        aVirtualKey->SetKeyData( *text );
+        }
+    else
+        {
+        aVirtualKey->SetKeyData( KNullDesC );
+        }
+    
+    aVirtualKey->SetKeyScancode( keyscancode );
+
+    CleanupStack::PopAndDestroy( keytexts ); //keytexts
+
+    aVirtualKey->SetRect(aKeyRect);
+    TRect innerrect = aKeyRect;
+    innerrect.Shrink( TSize(2,2) );
+    aVirtualKey->SetInnerRect( innerrect );
+    }
+          
+//  End Of File
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrardatastore.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrardatastore.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -24,6 +24,7 @@
 #include <aknfeppeninputenums.h>
 #include <AknFepGlobalEnums.h>
 #include <AknFepInternalCRKeys.h>
+#include <peninputcommonlayoutglobalenum.h>
 
 //USER INCLUDE
 #include "peninputfingerhwrarlayout.h"
@@ -72,7 +73,6 @@
 
     delete iRepositoryFep;
     delete iCommonEngineRepository;
-//    delete iTriggerStr;   
     delete iHwrEngine;
     delete iUserDefinedResource;
     
@@ -157,6 +157,10 @@
         {
         iPermittedRanges.Append( ERangeNative );
         }
+    if ( aPermittedRanges & ERangeNativeNumber )
+        {
+        iPermittedRanges.Append( ERangeNativeNumber );
+        }
     if ( aPermittedRanges & ERangeEnglish )
         {
         iPermittedRanges.Append( ERangeEnglish );
@@ -199,15 +203,6 @@
 	}
 	
 // ----------------------------------------------------------------------------
-// get current range
-// ----------------------------------------------------------------------------
-//
-TFingerHwrRange CPeninputFingerHwrArDataStore::CurrentRange()
-	{
-	return iCurrentRange;
-	}
-
-// ----------------------------------------------------------------------------
 // Set case
 // ----------------------------------------------------------------------------
 //
@@ -705,7 +700,7 @@
 //  
 TBool CPeninputFingerHwrArDataStore::IsNumberOnlyMode()
     {
-    if(PrimaryRange() == ERangeNumber)
+    if(PrimaryRange() == ERangeNumber || PrimaryRange() == ERangeNativeNumber)
         {
         return ETrue;
         }
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarengine.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarengine.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -16,11 +16,13 @@
 */
 
 
-//FEP INCLUDES
+//SYSTEM INCLUDES
 #include <AknFepGlobalEnums.h>
 #include <aknfeppeninputenums.h>
 #include <PtiHwrRecognizer.h>
 #include <e32property.h>
+#include <peninputcommonlayoutglobalenum.h>
+
 #include "ptidefs.h"
 
 //USER INCLUDES
@@ -367,6 +369,13 @@
             aRecognitionRange.iSubRange = EPtiRangeNumber;
             }
             break;
+        case ERangeNativeNumber:
+            {
+            //convert to ERangeNumber to let engine recognize both native number
+            //and latin number. 
+            aRecognitionRange.iSubRange = EPtiRangeNumber;
+            }
+            break;
         default:
             break;
         }
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -156,6 +156,18 @@
  	
 	// get font for text
     iIcfFont = const_cast<CFont*>(AknLayoutUtils::FontFromId(icfTextLineLayoutRow1.iFont, NULL));
+    
+    //indicator bubble.
+#ifdef ARABIC_LAF
+    if(iIsLandscape)
+        {
+        iRectIndicatorBubble.SetRect(543,17,624,41);
+        }
+    else
+        {
+        iRectIndicatorBubble.SetRect(263,17,344,41);
+        }
+#endif    
 	}
 
 // ---------------------------------------------------------------------------
@@ -1082,6 +1094,14 @@
     return iIcfTextHeight;
     }
        
+// ---------------------------------------------------------------------------
+// get indicator bubble rect.
+// ---------------------------------------------------------------------------
+// 
+TRect CPeninputFingerHwrArLafManager::IndicatorBubbleRect()
+    {
+    return iRectIndicatorBubble;
+    }
 
 // ---------------------------------------------------------------------------
 // get inner padding of buttons.
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarlayout.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -49,46 +49,6 @@
 
 const TInt16 KEmotionKeyMark = 0xFFFE;
 
-class CPeninputFingerHwrArCallBack : public CActive
-    {
-    friend class CPeninputFingerHwrArLayout;
-public:
-    void IssueRequestL();
-private:
-    CPeninputFingerHwrArCallBack(CPeninputFingerHwrArLayout* aHwrArLayout);
-	void RunL();
-	void DoCancel();
-private:
-    CPeninputFingerHwrArLayout* iHwrArLayout;
-	};
-
-CPeninputFingerHwrArCallBack::CPeninputFingerHwrArCallBack(CPeninputFingerHwrArLayout* aHwrArLayout)
-    :CActive(EPriorityHigh)
-    {
-	CActiveScheduler::Add(this);
-	iHwrArLayout = aHwrArLayout;
-	}
-void CPeninputFingerHwrArCallBack::IssueRequestL()
-    {
-    if(!IsActive())
-        {
-        iStatus=KRequestPending;
-        SetActive();        
-        TRequestStatus *pS=(&iStatus);
-        
-        User::RequestComplete(pS,0);
-        }
-    }
-void CPeninputFingerHwrArCallBack::RunL()
-    {
-    iHwrArLayout->CallBackL();
-    }
-
-void CPeninputFingerHwrArCallBack::DoCancel()
-    {
-    
-    }
-
 // ============================ MEMBER FUNCTIONS =============================
 
 // ---------------------------------------------------------------------------
@@ -141,9 +101,7 @@
 	
 	//retrieve the settings
     LoadAndPublishDefaultL();
-	
-    //iCallBack = new (ELeave) CPeninputFingerHwrArCallBack(this);
-    
+
     //set screen layout extent
     SetRect( TRect( TPoint( 0, 0 ), ScreenSize() ) );
     }
@@ -627,17 +585,7 @@
 
     iRepositorySetting->Get( KSettingsPenInputLang, newValue );
     iDataStore->SetLanguageL( newValue );
-    
-//    TInt displayLang = 0;
-//    iCommonEngineRepository->Get(KGSDisplayTxtLang,displayLang);
-//    if(displayLang == ELangArabic)
-//        {
-//        iHwrWnd->SetNativeNumMode(ETrue);
-//        }
-//    else
-//        {
-//        iHwrWnd->SetNativeNumMode(EFalse);
-//        }
+
     iHwrWnd->SetNativeNumMode(iDataStore->IsNativeNumMode());
     }
 
@@ -674,8 +622,6 @@
 	delete iStateMgr;
     delete iGSRepositoryWatcher;
     delete iRepositorySetting;
-//    delete iCommonEngineRepository;
-    //delete iCallBack;
     }
 
 // ---------------------------------------------------------------------------
@@ -932,7 +878,6 @@
 //                                              
 void CPeninputFingerHwrArLayout::OnHwrStrokeStartedL()
     {
-    //iCallBack->IssueRequestL(); 
 	iHwrWnd->HideIndicator();
 	
 	// The default candidate cell is not highlight
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarnumsymboltable.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarnumsymboltable.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -41,8 +41,9 @@
 #include "peninputfingerhwrarstoreconstants.h"
 #include "peninputlayoutvkb.h"
 #include "peninputfingerhwrarnumsymboltable.h"
+#include "peninputfingerhwarvkbutility.h"
 
-
+const TUint16 KInvalidChar = 0xFFFF;
 // ---------------------------------------------------------------------------
 // Symbian Constructor
 // ---------------------------------------------------------------------------
@@ -99,9 +100,25 @@
     {
     CapturePointer( ETrue );
     iPopupVisible = ETrue; 
-    iCurrentNumSCTType = ENumSCTLatin;
-	UiLayout()->LockArea(UiLayout()->Rect(),this);  
-    UpdateNumSymbolTable(ENumSCTLatin);
+    UiLayout()->LockArea(UiLayout()->Rect(),this);
+    // signal server to add the pop area        
+    if(UiLayout()->NotDrawToLayoutDevice())
+        {
+        struct SData
+            {
+            TRect rr;
+            TBool flag;
+            } data;
+            
+        data.rr = iNumKeypad->Rect();
+        data.flag = ETrue;
+        TPtrC ptrForAdd;
+        ptrForAdd.Set(reinterpret_cast<const TUint16*>(&data),sizeof(data)/sizeof(TUint16));
+
+        UiLayout()->SignalOwner(ESignalPopupArea,ptrForAdd);
+        }
+    
+    RefreshNumSymbolTable();;
 	}
 
 // ---------------------------------------------------------------------------
@@ -112,6 +129,22 @@
     {
     CapturePointer( EFalse );
     iPopupVisible = EFalse;
+    // signal server to remove the pop area        
+    if(UiLayout()->NotDrawToLayoutDevice())
+        {
+        struct SData
+            {
+            TRect rr;
+            TBool flag;
+            } data;
+            
+        data.rr = iNumKeypad->Rect();
+        data.flag = EFalse;
+        TPtrC ptrForRemove;
+        ptrForRemove.Set(reinterpret_cast<const TUint16*>(&data),sizeof(data)/sizeof(TUint16));
+
+        UiLayout()->SignalOwner(ESignalPopupArea,ptrForRemove);
+        }    
     UiLayout()->UnLockArea(UiLayout()->Rect(),this);
     }
 
@@ -210,15 +243,10 @@
 // SizeChanged
 // ---------------------------------------------------------------------------
 //	
-void CPeninputArabicFingerHwrNumSymbolTable::SizeChanged(
-                     const TRect aVirtualKeypadRect, const RArray<TRect> /*aBtnRects*/,
-                     const TInt /*aKeypadRow*/, const TInt /*aKeypadCol*/, TBool aIsLandscape)
+void CPeninputArabicFingerHwrNumSymbolTable::SizeChanged(const TRect& aVirtualKeypadRect)
     {
-	iIsLandscape = aIsLandscape;
-	
 	// relayout the virtual key pad
 	iNumKeypad->SetRect(aVirtualKeypadRect);
-	
 	}
 	
 // ---------------------------------------------------------------------------
@@ -247,11 +275,6 @@
     iNumKeypad->SetDrawOpaqueBackground( EFalse );    
     }
 
-void CPeninputArabicFingerHwrNumSymbolTable::OnActivate()
-    {
-    CControlGroup::OnActivate();
-	}
-
 // ---------------------------------------------------------------------------
 //  Read control's background info.
 // ---------------------------------------------------------------------------
@@ -339,53 +362,7 @@
 //	
 void CPeninputArabicFingerHwrNumSymbolTable::LoadVkbKeyImageL(TInt aResId, const TSize& aKeySize)
     {
-	TResourceReader reader;    
-    CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId );      
-    
-    TPtrC bmpFileName = reader.ReadTPtrC();
-    TInt32 imgMajorSkinId = reader.ReadInt32();
-    TAknsItemID id;
-    
-    TSize keySize = aKeySize;
-    
-    for ( TInt index = 0; index <= EKeyBmpLastType ; index += 2 )
-        { 
-        // Get the image ids and mask ids from resource
-        TInt bmpId = reader.ReadInt16(); 
-        TInt bmpMskId = reader.ReadInt16();
-        
-        // read skin item id
-        const TInt skinitemid = reader.ReadInt16();
-        id.Set( TInt( imgMajorSkinId ), skinitemid );
-        
-        if ( bmpId != KInvalidImg )
-            {
-            CFbsBitmap* bmp = NULL;
-            CFbsBitmap* maskbmp = NULL;
-
-            if ( bmpMskId != KInvalidImg )
-                {
-                AknsUtils::CreateIconL( AknsUtils::SkinInstance(),
-                   id, bmp, maskbmp, bmpFileName, bmpId, bmpMskId );
-                
-                // set maskbmp and size
-                AknIconUtils::SetSize( maskbmp, keySize, EAspectRatioNotPreserved );
-                iNumKeypad->SetNonIrregularKeyBitmapL( 
-                TVirtualKeyBmpType( EKeyBmpNormal + index + 1 ), maskbmp );
-                }
-            else
-                {
-                AknsUtils::CreateIconL( AknsUtils::SkinInstance(), id, 
-                    bmp, bmpFileName, bmpId );
-                }
-            // set bmp and size
-            AknIconUtils::SetSize( bmp, keySize, EAspectRatioNotPreserved );
-            iNumKeypad->SetNonIrregularKeyBitmapL( 
-                TVirtualKeyBmpType( EKeyBmpNormal + index ), bmp );
-            }       
-        }
-    // Pop and destroy reader
-    CleanupStack::PopAndDestroy( 1 );        
+    PeninputFingerHwrArVkbUtility::LoadVkbKeyImageL(*iNumKeypad,aResId,aKeySize);
 	}
 
 // ---------------------------------------------------------------------------
@@ -394,124 +371,57 @@
 //	
 void CPeninputArabicFingerHwrNumSymbolTable::LoadVirtualKeypadKeyL(const TInt aResId, const RArray<TRect>& aCellRects)
     {
-	iNumKeypad->SetResourceId(aResId);
-	
-	TResourceReader reader;
-    CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId );
-
-    // construct keys
-    TInt resKeyCount = reader.ReadInt16();
-    TInt existsKeyCount = iNumKeypad->KeyArray().Count();
-    TInt rectCount = aCellRects.Count();
-    
-    for ( TInt i = 0; i < resKeyCount; i++ )
-        {
-        if ( i < existsKeyCount )
-            {
-            CVirtualKey* vk = iNumKeypad->KeyArray()[i];
-            UpdateVkbKeyL( vk, reader, aCellRects[i%rectCount] );
-            }
-        else
-            {
-            CVirtualKey* vk = CreateVkbKeyL( reader, aCellRects[i%rectCount] );
-            CleanupStack::PushL( vk );
-            iNumKeypad->AddKeyL( vk );
-            
-            CleanupStack::Pop( vk );
-            }
-        }
-    
-    CleanupStack::PopAndDestroy( 1 ); // reader
-    
-    iNumKeypad->Draw();
-    iNumKeypad->UpdateArea( iNumKeypad->Rect() );
+	PeninputFingerHwrArVkbUtility::LoadVirtualKeypadKeyL(*iNumKeypad,aResId,aCellRects);
 	}
 
 // ---------------------------------------------------------------------------
-// create virtual key.
-// ---------------------------------------------------------------------------
-//
-CVirtualKey* CPeninputArabicFingerHwrNumSymbolTable::CreateVkbKeyL( TResourceReader& aReader, 
-    const TRect aKeyRect )
-    {
-    CHBufCArray* keytexts = CHBufCArray::NewL();
-    CleanupStack::PushL( keytexts );
-    
-    for ( TInt i = 0; i <= EPosLast; i++ )
-        {
-        HBufC* unicode = aReader.ReadHBufCL();
-        keytexts->Array().AppendL( unicode );
-        }
-
-    TInt keyscancode = aReader.ReadInt16();
-
-    HBufC* text = keytexts->Array()[0];
-    
-    CVirtualKey* vk = NULL;
-    if ( text )
-        {
-        vk = CVirtualKey::NewL( *text, keyscancode, aKeyRect, aKeyRect, 0 );
-        }
-    else 
-        {
-        vk = CVirtualKey::NewL( KNullDesC, keyscancode, aKeyRect, aKeyRect, 0 );
-        }
-
-    CleanupStack::PopAndDestroy( keytexts ); //keytexts
-
-    
-    TRect innerrect = aKeyRect;
-    innerrect.Shrink( TSize(10, 10) );
-    vk->SetInnerRect( innerrect );
-    
-    return vk;
-    }
-
-// ---------------------------------------------------------------------------
-// update virtual key info.
-// ---------------------------------------------------------------------------
-//
-void CPeninputArabicFingerHwrNumSymbolTable::UpdateVkbKeyL( CVirtualKey* aVirtualKey, 
-    TResourceReader& aReader, const TRect aKeyRect )
-    {
-    CHBufCArray* keytexts = CHBufCArray::NewL();
-    CleanupStack::PushL( keytexts );
-    
-    for ( TInt i = 0; i <= EPosLast; i++ )
-        {
-        HBufC* unicode = aReader.ReadHBufCL();
-        keytexts->Array().AppendL( unicode );
-        }
-
-    TInt keyscancode = aReader.ReadInt16();
-
-    HBufC* text = keytexts->Array()[0];
-    if ( text )
-        {
-        aVirtualKey->SetKeyData( *text );
-        }
-    else
-        {
-        aVirtualKey->SetKeyData( KNullDesC );
-        }
-    
-    aVirtualKey->SetKeyScancode( keyscancode );
-
-    CleanupStack::PopAndDestroy( keytexts ); //keytexts
-
-    aVirtualKey->SetRect(aKeyRect);
-    TRect innerrect = aKeyRect;
-    innerrect.Shrink( TSize(10,10) );
-    aVirtualKey->SetInnerRect( innerrect );
-    }
-
-// ---------------------------------------------------------------------------
 // accept editor's number mapping restriction.
 // ---------------------------------------------------------------------------
 //
-void CPeninputArabicFingerHwrNumSymbolTable::SetNumericMapping( const TDesC& aNumMapping )
+void CPeninputArabicFingerHwrNumSymbolTable::UpdateTableSymbol( const TDesC& aNumMapping )
     {
-    //format of aNumMapping is "0123456789******"
+    HBufC* charTable = GenerateCharTable(aNumMapping);
+    if(charTable)
+    	{
+    	TInt charTalbeCount = charTable->Length();
+     
+	    //numberpad
+	    TInt keyCount = iNumKeypad->KeyArray().Count();
+	    for ( TInt i = 0; i < keyCount; i++ )
+	        {
+	        CVirtualKey* vk = iNumKeypad->KeyArray()[i];
+	        
+	        if(i < charTalbeCount && (*charTable)[i] != KInvalidChar)
+	            {
+	            TBuf<1> keydata;
+                TUint16 keyCode = (*charTable)[i];	            
+	            keydata.Append(keyCode);
+	            vk->SetKeyData(keydata);
+	            vk->SetKeyScancode(keyCode);
+	            vk->SetDimmed( EFalse );
+	            }
+	        else
+	            {
+	            vk->SetKeyData( KNullDesC );
+	            vk->SetKeyScancode( KInvalidChar );
+	            vk->SetDimmed( EFalse );
+	            }
+	        }
+	    
+	    delete charTable;
+	    
+	    //sync feedback
+	    UpdateAllVirtualKeysFeedback();
+    	}
+    }
+
+// ---------------------------------------------------------------------------
+// Get reordered char table for key pad to render them
+// ---------------------------------------------------------------------------
+//
+HBufC* CPeninputArabicFingerHwrNumSymbolTable::GenerateCharTable(const TDesC& aNumMapping)
+	{
+	//format of aNumMapping is "0123456789******"
     
     //char offset in aNumMapping
     //cell 0 using aNumMapping[KNumOffsets[0]]
@@ -523,49 +433,36 @@
          14,  7,  8, 9,
          15,  10, 0, 11
         };
-    
-    TInt maxMappingItemCount = sizeof(KNumOffsets)/sizeof(TInt);
+    TInt tableSize = sizeof(KNumOffsets)/sizeof(TInt);
     TInt mappingItemCount = aNumMapping.Length();
     
-    //numberpad
-    TInt keyCount = iNumKeypad->KeyArray().Count();
-    for ( TInt i = 0; i < keyCount; i++ )
-        {
-        CVirtualKey* vk = iNumKeypad->KeyArray()[i];
-        
-        TInt offset = ( i < maxMappingItemCount ) ? KNumOffsets[i] : -1;
-        
-        if ( offset > -1  && offset < mappingItemCount )
-            {
-            TUint16 unicode = aNumMapping[offset];
-            TUint16 mappedCode = MapLatinNumAccordingToNumMode(unicode);
-            TBuf<1> keydata;
-            keydata.Append(mappedCode);
-            vk->SetKeyData(keydata);
-            vk->SetKeyScancode( mappedCode);
-            vk->SetDimmed( EFalse );
-            }
-        else
-            {
-            vk->SetKeyData( KNullDesC );
-            vk->SetKeyScancode( 0xFFFF );
-            vk->SetDimmed( EFalse );
-            }
-        }
+    HBufC* reorderedCharTable = HBufC::New(mappingItemCount +1);
+    if(reorderedCharTable)
+    	{
+    	for(TInt i = 0; i < tableSize; i++)
+    	    {    	    
+    	    if(KNumOffsets[i] < mappingItemCount)
+    	    	{
+    	    	TUint16 unicode = aNumMapping[KNumOffsets[i]];
+                TUint16 mappedCode = MapLatinNumAccordingToNumMode(unicode);	
+                reorderedCharTable->Des().Append(mappedCode); 
+    	    	}
+    	    else
+    	    	{
+    	        reorderedCharTable->Des().Append(KInvalidChar);
+    	    	}	
+    	    }
+    	}
     
-    
-    //sync feedback
-    UpdateAllVirtualKeysFeedback();
-    }
-
+    return reorderedCharTable;	    
+	}
+	
 // ---------------------------------------------------------------------------
 // Navigate the symbol page
 // ---------------------------------------------------------------------------
 //
-void CPeninputArabicFingerHwrNumSymbolTable::UpdateNumSymbolTable( TInt aNumSctType)
-    {	
-
-    iCurrentNumSCTType = aNumSctType;
+void CPeninputArabicFingerHwrNumSymbolTable::RefreshNumSymbolTable()
+    {
 	// Draw the symbol table 
     Draw();
 	
@@ -582,7 +479,7 @@
 //
 void CPeninputArabicFingerHwrNumSymbolTable::UpdateAllVirtualKeysFeedback()
     {
-    //update sctpad keys
+    //update numpad keys
     TInt keyCount = iNumKeypad->KeyArray().Count();
     for ( TInt i = 0; i < keyCount; i++ )
         {
@@ -593,6 +490,30 @@
     }
 
 // ---------------------------------------------------------------------------
+//  update rect of all virtual keys.
+// ---------------------------------------------------------------------------
+//
+void CPeninputArabicFingerHwrNumSymbolTable::UpdateAllVirtualKeysRect(const RArray<TRect> & aCellRects)
+    {
+    //update numpad keys rect
+    TInt keyCount = iNumKeypad->KeyArray().Count();
+    TInt rectCount = aCellRects.Count();
+    if(keyCount != rectCount)
+        {
+        return;
+        }
+    for ( TInt i = 0; i < keyCount; i++ )
+        {
+        CVirtualKey* vk = iNumKeypad->KeyArray()[i];
+        TRect rect = aCellRects[i%rectCount];        
+        vk->SetRect(aCellRects[i%rectCount]);
+        TRect innerrect = rect;
+        innerrect.Shrink( TSize(10,10) );
+        vk->SetInnerRect( innerrect );
+        }    
+    }
+
+// ---------------------------------------------------------------------------
 //  Draw new content to the screen
 // ---------------------------------------------------------------------------
 //
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarsymboltable.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -41,7 +41,7 @@
 #include "peninputfingerhwrarstoreconstants.h"
 #include "peninputfingerhwrarmultipagevkb.h"
 #include "peninputfingerhwrarsymboltable.h"
-
+#include "peninputfingerhwarvkbutility.h"
 
 //CONST DEFINATION
 const TInt KSymbolButtonInnerPadding = 6;
@@ -216,14 +216,16 @@
 // ---------------------------------------------------------------------------
 //	
 void CPeninputArabicFingerHwrSymbolTable::SizeChanged(
-                     const TRect aVirtualKeypadRect, const RArray<TRect> aBtnRects,
+                     const TRect aVirtualKeypadRect, const RArray<TRect> & aBtnRects,
                      const TInt aKeypadRow, const TInt aKeypadCol, TBool aIsLandscape)
     {
+	ASSERT(aBtnRects.Count() > 0);
+	
 	iIsLandscape = aIsLandscape;
 	
 	// relayout the button
-	TRect pageBtnRect(aBtnRects[0]);
-
+	TRect pageBtnRect = aBtnRects[0];
+    
 	if(aIsLandscape)
 	    {
 	    i2Page1Btn->Hide(EFalse);
@@ -253,7 +255,7 @@
 	
 	iMutiPageKeypad->UpdatePaging(aKeypadRow,aKeypadCol);
 	}
-	
+
 // ---------------------------------------------------------------------------
 // create symbol table keypad.
 // ---------------------------------------------------------------------------
@@ -330,11 +332,6 @@
     aButton->SizeChanged( aRect, rcInner, aReloadImages );
     }
 
-void CPeninputArabicFingerHwrSymbolTable::OnActivate()
-    {
-    CControlGroup::OnActivate();
-	}
-
 // ---------------------------------------------------------------------------
 //  Read control's background info.
 // ---------------------------------------------------------------------------
@@ -422,53 +419,7 @@
 //	
 void CPeninputArabicFingerHwrSymbolTable::LoadVkbKeyImageL(TInt aResId, const TSize& aKeySize)
     {
-	TResourceReader reader;    
-    CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId );      
-    
-    TPtrC bmpFileName = reader.ReadTPtrC();
-    TInt32 imgMajorSkinId = reader.ReadInt32();
-    TAknsItemID id;
-    
-    TSize keySize = aKeySize;
-    
-    for ( TInt index = 0; index <= EKeyBmpLastType ; index += 2 )
-        { 
-        // Get the image ids and mask ids from resource
-        TInt bmpId = reader.ReadInt16(); 
-        TInt bmpMskId = reader.ReadInt16();
-        
-        // read skin item id
-        const TInt skinitemid = reader.ReadInt16();
-        id.Set( TInt( imgMajorSkinId ), skinitemid );
-        
-        if ( bmpId != KInvalidImg )
-            {
-            CFbsBitmap* bmp = NULL;
-            CFbsBitmap* maskbmp = NULL;
-
-            if ( bmpMskId != KInvalidImg )
-                {
-                AknsUtils::CreateIconL( AknsUtils::SkinInstance(),
-                   id, bmp, maskbmp, bmpFileName, bmpId, bmpMskId );
-                
-                // set maskbmp and size
-                AknIconUtils::SetSize( maskbmp, keySize, EAspectRatioNotPreserved );
-                iMutiPageKeypad->SetNonIrregularKeyBitmapL( 
-                TVirtualKeyBmpType( EKeyBmpNormal + index + 1 ), maskbmp );
-                }
-            else
-                {
-                AknsUtils::CreateIconL( AknsUtils::SkinInstance(), id, 
-                    bmp, bmpFileName, bmpId );
-                }
-            // set bmp and size
-            AknIconUtils::SetSize( bmp, keySize, EAspectRatioNotPreserved );
-            iMutiPageKeypad->SetNonIrregularKeyBitmapL( 
-                TVirtualKeyBmpType( EKeyBmpNormal + index ), bmp );
-            }       
-        }
-    // Pop and destroy reader
-    CleanupStack::PopAndDestroy( 1 );        
+    PeninputFingerHwrArVkbUtility::LoadVkbKeyImageL(*iMutiPageKeypad,aResId,aKeySize);	    
 	}
 
 // ---------------------------------------------------------------------------
@@ -477,118 +428,10 @@
 //	
 void CPeninputArabicFingerHwrSymbolTable::LoadVirtualKeypadKeyL(const TInt aResId, const RArray<TRect>& aCellRects)
     {
-	iMutiPageKeypad->SetResourceId(aResId);
-	
-	TResourceReader reader;
-    CCoeEnv::Static()->CreateResourceReaderLC( reader, aResId );
-
-    // construct keys
-    TInt resKeyCount = reader.ReadInt16();
-    TInt existsKeyCount = iMutiPageKeypad->KeyArray().Count();
-    TInt rectCount = aCellRects.Count();
-    
-    for ( TInt i = 0; i < resKeyCount; i++ )
-        {
-        if ( i < existsKeyCount )
-            {
-            CVirtualKey* vk = iMutiPageKeypad->KeyArray()[i];
-            UpdateVkbKeyL( vk, reader, aCellRects[i%rectCount] );
-            }
-        else
-            {
-            CVirtualKey* vk = CreateVkbKeyL( reader, aCellRects[i%rectCount] );
-            CleanupStack::PushL( vk );
-            iMutiPageKeypad->AddKeyL( vk );
-            
-            CleanupStack::Pop( vk );
-            }
-        }
-    
-    CleanupStack::PopAndDestroy( 1 ); // reader
-    
-    iMutiPageKeypad->Draw();
-    iMutiPageKeypad->UpdateArea( iMutiPageKeypad->Rect() );
+	PeninputFingerHwrArVkbUtility::LoadVirtualKeypadKeyL(*iMutiPageKeypad,aResId,aCellRects);
 	}
 
 // ---------------------------------------------------------------------------
-// create virtual key.
-// ---------------------------------------------------------------------------
-//
-CVirtualKey* CPeninputArabicFingerHwrSymbolTable::CreateVkbKeyL( TResourceReader& aReader, 
-    const TRect aKeyRect )
-    {
-    CHBufCArray* keytexts = CHBufCArray::NewL();
-    CleanupStack::PushL( keytexts );
-    
-    for ( TInt i = 0; i <= EPosLast; i++ )
-        {
-        HBufC* unicode = aReader.ReadHBufCL();
-        keytexts->Array().AppendL( unicode );
-        }
-
-    TInt keyscancode = aReader.ReadInt16();
-
-    HBufC* text = keytexts->Array()[0];
-    
-    CVirtualKey* vk = NULL;
-    if ( text )
-        {
-        vk = CVirtualKey::NewL( *text, keyscancode, aKeyRect, aKeyRect, 0 );
-        }
-    else 
-        {
-        vk = CVirtualKey::NewL( KNullDesC, keyscancode, aKeyRect, aKeyRect, 0 );
-        }
-
-    CleanupStack::PopAndDestroy( keytexts ); //keytexts
-
-    
-    TRect innerrect = aKeyRect;
-    innerrect.Shrink( TSize(2, 2) );
-    vk->SetInnerRect( innerrect );
-    
-    return vk;
-    }
-
-// ---------------------------------------------------------------------------
-// update virtual key info.
-// ---------------------------------------------------------------------------
-//
-void CPeninputArabicFingerHwrSymbolTable::UpdateVkbKeyL( CVirtualKey* aVirtualKey, 
-    TResourceReader& aReader, const TRect aKeyRect )
-    {
-    CHBufCArray* keytexts = CHBufCArray::NewL();
-    CleanupStack::PushL( keytexts );
-    
-    for ( TInt i = 0; i <= EPosLast; i++ )
-        {
-        HBufC* unicode = aReader.ReadHBufCL();
-        keytexts->Array().AppendL( unicode );
-        }
-
-    TInt keyscancode = aReader.ReadInt16();
-
-    HBufC* text = keytexts->Array()[0];
-    if ( text )
-        {
-        aVirtualKey->SetKeyData( *text );
-        }
-    else
-        {
-        aVirtualKey->SetKeyData( KNullDesC );
-        }
-    
-    aVirtualKey->SetKeyScancode( keyscancode );
-
-    CleanupStack::PopAndDestroy( keytexts ); //keytexts
-
-    aVirtualKey->SetRect(aKeyRect);
-    TRect innerrect = aKeyRect;
-    innerrect.Shrink( TSize(2,2) );
-    aVirtualKey->SetInnerRect( innerrect );
-    }
-
-// ---------------------------------------------------------------------------
 // Navigate the symbol page
 // ---------------------------------------------------------------------------
 //
@@ -691,17 +534,14 @@
     {
 	if(AbleToDraw())
         {
-        //Draw button area background.
-//		DrawOpaqueMaskBackground( Rect() );
-//	    DrawOpaqueMaskBackground();
         DrawOpaqueMaskBackground(iMutiPageKeypad->Rect());
 		if( BackgroundBmp() && BackgroundBmp()->SizeInPixels() != Rect().Size() )
 			{
 			AknIconUtils::SetSize(BackgroundBmp(), Rect().Size(), EAspectRatioNotPreserved);
 			}
-        // draw background
-//		DrawBackground();    
+        // draw background    
         DrawBackground(iMutiPageKeypad->Rect());
+        
         // draw group		
 		CControlGroup::Draw();
 		
--- a/textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarwnd.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -87,7 +87,7 @@
 CPeninputFingerHwrArWnd::~CPeninputFingerHwrArWnd()
     {
     #ifdef RD_TACTILE_FEEDBACK
-    if(UiLayout())
+    if(UiLayout() && iWritingBox)
         {
 		UiLayout()->DeRegisterFeedbackArea(reinterpret_cast<TInt>(iWritingBox),
 	                                 iWritingBox->Rect());
@@ -352,7 +352,10 @@
     {
     if ( aInfo.Length() > 0 )
         {
-        iContextField->ShowBubble( aInfo, iContextField->MsgBubbleCtrl()->Rect() );
+        TRect rect(iLafManager->IndicatorBubbleRect());
+        iContextField->MsgBubbleCtrl()->SetRect(rect);
+//        iContextField->ShowBubble( aInfo, iContextField->MsgBubbleCtrl()->Rect());
+        iContextField->ShowBubble( aInfo, rect);
         }
     else
         {
@@ -619,6 +622,7 @@
                                           KAknsIIDQsnFrInputPreviewMiddle,
                                           KAknsIIDQsnFrInputPreviewSideR );  
     iContextField->SetMsgBubbleCtrlSize( TSize( bubbleLineLayout.iW,bubbleLineLayout.iH ) );    
+    iContextField->MsgBubbleCtrl()->SetTextL(KNullDesC);
     
     iContextField->SetLineSeparatorAfterPrompt(ETrue);
     
@@ -821,7 +825,7 @@
 // ---------------------------------------------------------------------------
 //
 void CPeninputFingerHwrArWnd::LoadNumSymbolVirtualKeysL( const TInt aResId, 
-    const RArray<TRect>& aCellRects )
+    const RArray<TRect>& aCellRects, TBool aReload)
     {
     TAknTextLineLayout txtlayout = iLafManager->NumpadKeyTxtLayout();
     iNumSymbolTable->KeyPad()->SetTextLineLayout( txtlayout );
@@ -829,8 +833,14 @@
     TInt fontid = txtlayout.FontId();
     const CFont* font = AknLayoutUtils::FontFromId( fontid );
     iNumSymbolTable->KeyPad()->SetFont( font );
-    
-    iNumSymbolTable->LoadVirtualKeypadKeyL(aResId,aCellRects);
+    if(aReload)
+        {
+        iNumSymbolTable->LoadVirtualKeypadKeyL(aResId,aCellRects);
+        }
+    else
+        {
+        iNumSymbolTable->UpdateAllVirtualKeysRect(aCellRects);
+        }
     }
 
 // ---------------------------------------------------------------------------
@@ -943,7 +953,7 @@
     iLafManager->GetNumVirtualKeyRects( numrects );
     
     // load keys
-    LoadNumSymbolVirtualKeysL(R_FINGER_HWR_NUMPAD, numrects);
+    LoadNumSymbolVirtualKeysL(R_FINGER_HWR_NUMPAD, numrects,EFalse);
         
     CleanupStack::PopAndDestroy();//rects
     
@@ -954,9 +964,7 @@
     rect = iLafManager->CtrlRect(iNumSymbolTable->ControlId());
     iNumSymbolTable->SetRect(rect);
     
-    iNumSymbolTable->SizeChanged(iLafManager->GetVirtualNumKeyRect(),
-                              iLafManager->GetSymBtnArray(), numpadrows, numpadcols,
-                              iLafManager->IsLandscape());
+    iNumSymbolTable->SizeChanged(iLafManager->GetVirtualNumKeyRect());
     }
 
 
@@ -1484,7 +1492,7 @@
 //
 void CPeninputFingerHwrArWnd::SetNumericMapping( const TDesC& aNumMapping )
     {
-    iNumSymbolTable->SetNumericMapping(aNumMapping);
+    iNumSymbolTable->UpdateTableSymbol(aNumMapping);
     }
 // ---------------------------------------------------------------------------
 //  set native number mode on or off.
--- a/textinput/peninputgenericitut/group/peninputgenericitut.mmp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericitut/group/peninputgenericitut.mmp	Thu Aug 19 10:15:25 2010 +0300
@@ -122,5 +122,6 @@
 LIBRARY 		bitgdi.lib 
 LIBRARY         commonengine.lib
 LIBRARY         centralrepository.lib
+LIBRARY         featmgr.lib
 
 // End Of File
--- a/textinput/peninputgenericitut/inc/peninputgenericitutdatamgr.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericitut/inc/peninputgenericitutdatamgr.h	Thu Aug 19 10:15:25 2010 +0300
@@ -301,7 +301,14 @@
 
     // resource id for generic itut resource file
     TInt iCommonResId;
-    RArray<TInt> iConfigResIds;
+    /**
+     * resource id for current input language
+     */    
+    TInt iConfigResId;
+    /**
+     * resource id for special controls in Chinese/Korean variant
+     */  
+    TInt iSpecialResId;
 
     TInt iAvkonResId;
     
--- a/textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -34,6 +34,7 @@
 #include <AknSettingCache.h>
 #include <AknFepInternalCRKeys.h>
 #include <centralrepository.h>
+#include <featmgr.h> 
 
 #include "peninputgenericitutdatamgr.h"
 #include "peninputgenericitutlayoutcontext.h"
@@ -100,13 +101,18 @@
     CCoeEnv::Static()->DeleteResourceFile(iAvkonResId);
         
     CCoeEnv::Static()->DeleteResourceFile(iCommonResId);
-
-    // Remove all resource files from control environment
-    for (TInt i=0; i< iConfigResIds.Count(); i++)
+    
+    // Remove the resource file of current input language
+    if ( iConfigResId )
         {
-        CCoeEnv::Static()->DeleteResourceFile(iConfigResIds[i]);
+        CCoeEnv::Static()->DeleteResourceFile( iConfigResId );
         }
-    iConfigResIds.Close();
+    
+    // Remove the resource file of some special controls
+    if ( iSpecialResId )
+        {
+        CCoeEnv::Static()->DeleteResourceFile( iSpecialResId );
+        }
 
     ClearChnCandidates(EItutCandidates);
     ClearChnCandidates(EItutPuncCandidates);
@@ -120,7 +126,6 @@
 
 void CGenericItutDataMgr::ConstructL()
     {
-
     // initialize layout info of controls and layout
     ReadLafInfo();
 
@@ -153,7 +158,33 @@
         iMenuItemList.Append( item );
         reader.ReadInt32(); // extension link
         }        
-    CleanupStack::PopAndDestroy(); //reader         
+    CleanupStack::PopAndDestroy(); //reader
+
+    // There are some special controls in Chinese and Korean VITUT,
+    // and these controls are hidden when changing to other input language, 
+    // so related resource file should be in control environment at all times.
+    // Otherwise crash happens when reading resource for them sometime. 
+    // For example: If writing language is Chinese, enters spell mode,
+    // then switches theme, crash happens. 
+    if ( FeatureManager::FeatureSupported( KFeatureIdChinese ) ||
+            FeatureManager::FeatureSupported( KFeatureIdKorean ) )
+        {
+        TFileName  resourceFilename( KConfigResourceFile ) ;
+        if ( FeatureManager::FeatureSupported( KFeatureIdChinese ) )
+            {
+            // Chinese variant
+            resourceFilename.Append( ResFileExtByScriptIdx( EChnExt ) );
+            }
+        else
+            {
+            // Korean variant
+            resourceFilename.Append( ResFileExtByScriptIdx( EHangulExt ) );
+            }
+        resourceFilename.Append(KResourceFileExtName);
+        
+        BaflUtils::NearestLanguageFile( coeEnv->FsSession(), resourceFilename );
+        iSpecialResId = coeEnv->AddResourceFileL( resourceFilename );        
+        }
     }
 
 CGenericItutDataMgr::TMenuItem* CGenericItutDataMgr::GetMenuItem(TInt aCommand)
@@ -1167,21 +1198,19 @@
 
             CCoeEnv* coeEnv = CCoeEnv::Static();
             
-            TFileName resourceConfigName(iResourceFilename);
-            BaflUtils::NearestLanguageFile(coeEnv->FsSession(), resourceConfigName);
-            // Do not delete resource file from control environment if changing language.
-            // Otherwise crash happens if switching theme. For example:If writing language
-            // is Chinese, enters spell mode, then switches theme, crash happens. 
-            TInt configResId = coeEnv->AddResourceFileL(resourceConfigName);
-            if ( iConfigResIds.Find(configResId) ==  KErrNotFound)
+            // Remove the resource file of previous input language.
+            // The previous resource file should be removed first,
+            // Because there are some same keypad ids in the resource file
+            // of latin, Cyrillic, and etc.
+            if ( iConfigResId )
                 {
-                iConfigResIds.Append( configResId );
+                coeEnv->DeleteResourceFile( iConfigResId );
                 }
-            else
-                {
-                // Remove resource file to ensure the resource file is added only one time.
-                coeEnv->DeleteResourceFile( configResId );
-                }
+
+            // Add the resource file of current input language
+            TFileName resourceConfigName( iResourceFilename );
+            BaflUtils::NearestLanguageFile( coeEnv->FsSession(), resourceConfigName );
+            iConfigResId = coeEnv->AddResourceFileL( resourceConfigName );
             
             if (IsChinese())
                 {
--- a/textinput/peninputgenericitut/src/peninputgenericitutlayout.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericitut/src/peninputgenericitutlayout.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -325,6 +325,14 @@
 
 TInt CGenericItutUiLayout::SizeChanged(const TAny* /*pData*/)
     {
+
+    // For avoiding that NULL pointer is called
+    // add UiMgr() and CurrentState() condition
+    if( !( UiMgr() && UiMgr()->CurrentState()))
+        {
+        return KErrBadHandle;
+        }
+
     TBool overLap = UiMgr()->CurrentState()->StateType() 
         == CGenericItutUiMgrBase::EStateMatchSelection ? ETrue: EFalse;
         
--- a/textinput/peninputgenericitut/srcdata/peninputitutconfig_korean.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericitut/srcdata/peninputitutconfig_korean.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -16,7 +16,10 @@
 */
 
 //  RESOURCE IDENTIFIER
-NAME ITUW
+// The name should not be the same as ITUW, Otherwise the keypad id of 
+// r_finger_input_keypad_korean is the same as the keypad id in latin, 
+// then crash occurs if switching writing language.
+NAME ITUK
 
 #include <eikon.hrh>
 
--- a/textinput/peninputgenericvkb/group/peninputgenericvkb.mmp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericvkb/group/peninputgenericvkb.mmp	Thu Aug 19 10:15:25 2010 +0300
@@ -134,3 +134,4 @@
 LIBRARY         aknskins.lib
 LIBRARY         fbscli.lib 
 LIBRARY         estor.lib 
+LIBRARY         featdiscovery.lib
--- a/textinput/peninputgenericvkb/inc/peninputgenericvkblayout.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericvkb/inc/peninputgenericvkblayout.h	Thu Aug 19 10:15:25 2010 +0300
@@ -233,6 +233,7 @@
      */
     static CPeninputGenericVkbLayoutImp* NewL( TAny* aInitParams );
     static CPeninputGenericVkbLayoutImp* NewFsqL( TAny* aInitParams );
+    static CPeninputGenericVkbLayoutImp* NewPrtFsqL( TAny* aInitParams );
 
     /**
      * Destructor
--- a/textinput/peninputgenericvkb/inc/peninputgenericvkbwindow.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericvkb/inc/peninputgenericvkbwindow.h	Thu Aug 19 10:15:25 2010 +0300
@@ -731,6 +731,11 @@
      * Indicates whether range button short press is handled.
      */
     TBool iHandleRangeShortPress;
+    
+    /**
+     * Indicates whether US rsc file exist or not
+     */   
+    TBool iUSRscFileExist;
 
 private:	
 	CFepLayoutScrollableList* iCandidateList;
--- a/textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -24,6 +24,7 @@
 #include <peninputpluginutils.h>
 #include <aknlayoutscalable_apps.cdl.h>
 #include <layoutmetadata.cdl.h>
+#include <featdiscovery.h>   // for CFeatureDiscovery
 
 // User includes
 #include "peninputgenericvkblafdatamgr.h"
@@ -1036,53 +1037,92 @@
     aDataInfo.iClientRect = rect;
     aDataInfo.iQwtRect = aParentWndRect;
     
-    TInt v1, v2;
+    TInt v1, v2, gridLayoutVariant;
     switch ( aLayoutType )
         {
         case ELayout10x3:
             {
             v1 = 0;
             v2 = 0;
+            gridLayoutVariant = 1;
             break;
             }
         case ELayout11x3:
             {
             v1 = 1;
             v2 = 2;
+            gridLayoutVariant = 1;
             break;
             }
         case ELayout11x4:
             {
             v1 = 1;
             v2 = 3;
+            gridLayoutVariant = 2;
             break;
             }
         default:
             {
             v1 = 0;
             v2 = 0;
+            gridLayoutVariant = 1;
             }
         }
     
-    // Bottom pane rect
-    linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(0).LayoutLine();
-    layoutrect.LayoutRect( aParentWndRect, linelayout );
-    rectBottomWin = layoutrect.Rect();
-    
-    // ICF pane rect
-    linelayout = AknLayoutScalable_Avkon::popup_fep_vkb_icf_pane(0).LayoutLine();
-    layoutrect.LayoutRect( aParentWndRect, linelayout );
-    rectICFpane = layoutrect.Rect();
-    
-    // ICF bg pane rect
-    linelayout = AknLayoutScalable_Avkon::bg_icf_pane(0).LayoutLine();
-    layoutrect.LayoutRect( rectICFpane, linelayout );
-    rectICFBg = layoutrect.Rect();
-    
-    // ICF area rect
-    linelayout = AknLayoutScalable_Avkon::list_vkb_icf_pane(0).LayoutLine();
-    layoutrect.LayoutRect( rectICFBg, linelayout );
-    rectICF = layoutrect.Rect();
+    // Landscape info is set if i) portrait FSQ feature is not enabled (landscape FSQ)
+    // or ii) portrait FSQ feature is enabled and the current orientation is landscape. 
+    // Note: Feature Manager is fading out and CFeatureDiscovery is recommended to use.
+    TBool isPortraitFSQEnabled = EFalse;
+    TRAP_IGNORE( isPortraitFSQEnabled = CFeatureDiscovery::IsFeatureSupportedL( 
+                        KFeatureIdFfVirtualFullscrPortraitQwertyInput ) );
+
+    if ( !isPortraitFSQEnabled ||
+        ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) )
+        {
+        // Bottom pane rect
+        linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(0).LayoutLine();
+        layoutrect.LayoutRect( aParentWndRect, linelayout );
+        rectBottomWin = layoutrect.Rect();
+        
+        // ICF pane rect
+        linelayout = AknLayoutScalable_Avkon::popup_fep_vkb_icf_pane(0).LayoutLine();
+        layoutrect.LayoutRect( aParentWndRect, linelayout );
+        rectICFpane = layoutrect.Rect();
+
+        // ICF bg pane rect
+        linelayout = AknLayoutScalable_Avkon::bg_icf_pane(0).LayoutLine();
+        layoutrect.LayoutRect( rectICFpane, linelayout );
+        rectICFBg = layoutrect.Rect();
+        
+        // ICF area rect
+        linelayout = AknLayoutScalable_Avkon::list_vkb_icf_pane(0).LayoutLine();
+        layoutrect.LayoutRect( rectICFBg, linelayout );
+        rectICF = layoutrect.Rect();
+        }
+    // Portrait info is set if portrait FSQ feature is enabled the current orientation 
+    // is portrait. 
+    else
+        {
+        // Bottom pane rect
+        linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(gridLayoutVariant).LayoutLine();
+        layoutrect.LayoutRect( aParentWndRect, linelayout );
+        rectBottomWin = layoutrect.Rect();
+        
+        // ICF pane rect
+        linelayout = AknLayoutScalable_Avkon::popup_fep_vkb_icf_pane(1).LayoutLine();
+        layoutrect.LayoutRect( aParentWndRect, linelayout );
+        rectICFpane = layoutrect.Rect();
+
+        // ICF bg pane rect
+        linelayout = AknLayoutScalable_Avkon::bg_icf_pane(1).LayoutLine();
+        layoutrect.LayoutRect( rectICFpane, linelayout );
+        rectICFBg = layoutrect.Rect();
+        
+        // ICF area rect
+        linelayout = AknLayoutScalable_Avkon::list_vkb_icf_pane(1).LayoutLine();
+        layoutrect.LayoutRect( rectICFBg, linelayout );
+        rectICF = layoutrect.Rect();
+        }
     
     aDataInfo.iICF.iRect = rectICF;
     cellText = AknLayoutScalable_Avkon::list_vkb_icf_pane_t1(0, 0, 0).LayoutLine();
@@ -1124,96 +1164,249 @@
     linelayout = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(v1).LayoutLine();
     keypadRect.LayoutRect( rectBottomWin, linelayout );
     
-    // key pane rect
-    linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(v2).LayoutLine();
-    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
-
-    // key cell rect
-    linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(v2).LayoutLine();
-    keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
+    if ( !isPortraitFSQEnabled ||
+        ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) )
+        {
+        // key pane rect
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(v2).LayoutLine();
+        keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
     
-    // key label rect
-    linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(v2).LayoutLine();
-    keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout );
-    
-    // pic3pane rect
-    linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane(v2).LayoutLine();
-    pic3paneRect.LayoutRect( keypaneRect.Rect(), linelayout );
+        // key cell rect
+        linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(v2).LayoutLine();
+        keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
+        
+        // key label rect
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(v2).LayoutLine();
+        keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout );
+        
+        // pic3pane rect
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane(v2).LayoutLine();
+        pic3paneRect.LayoutRect( keypaneRect.Rect(), linelayout );
+        
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g1(0).LayoutLine();
+        layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
+        pic3pLeftWidth = layoutrect.Rect().Width();
     
-    linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g1(0).LayoutLine();
-    layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
-    pic3pLeftWidth = layoutrect.Rect().Width();
-
-    linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g3(0).LayoutLine();
-    layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
-    pic3pRightWidth = layoutrect.Rect().Width();
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g3(0).LayoutLine();
+        layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
+        pic3pRightWidth = layoutrect.Rect().Width();
+        
+        TRect rectXPane = keypaneRect.Rect();
+        rect = keycellRect.Rect();
+        rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
+        TRect rectXBorder = rect;
+        rect = keylabelRect.Rect();
+        rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
+        TRect rectXInner = rect;
+        rect = pic3paneRect.Rect();
+        rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
+        TRect rect3PicPane = rect;
+        rectXPane.Move( - rectXPane.iTl );
+        
+        rect = keypadRect.Rect();
+        rect.Move( - base.iX, - base.iY );
+        TRect rectOfKeypad = rect;
+        TRect rectOfButtons = rectOfKeypad;
+        rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); 
+        rectOfButtons.iTl.iY += rectOfKeypad.Height();
+        
+        TInt spaceBtnWidth = rectOfButtons.Width() - rectXPane.Width() * 8;
+        TInt dx = rectOfButtons.iTl.iX;
+        TInt dy = rectOfButtons.iTl.iY;
+        
+        aDataInfo.iCloseButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iCloseButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+        dx += rectXPane.Width();
     
-    TRect rectXPane = keypaneRect.Rect();
-    rect = keycellRect.Rect();
-    rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
-    TRect rectXBorder = rect;
-    rect = keylabelRect.Rect();
-    rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
-    TRect rectXInner = rect;
-    rect = pic3paneRect.Rect();
-    rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
-    TRect rect3PicPane = rect;
-    rectXPane.Move( - rectXPane.iTl );
+        aDataInfo.iShiftButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iShiftButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+        dx += rectXPane.Width();
+    
+        aDataInfo.iMultiRangeButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iMultiRangeButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+        dx += rectXPane.Width();
+    
+        aDataInfo.iLeftButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iLeftButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+        dx += rectXPane.Width();
     
-    rect = keypadRect.Rect();
-    rect.Move( - base.iX, - base.iY );
-    TRect rectOfKeypad = rect;
-    TRect rectOfButtons = rectOfKeypad;
-    rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); 
-    rectOfButtons.iTl.iY += rectOfKeypad.Height();
+        TInt expand = spaceBtnWidth - rectXPane.Width();
+        aDataInfo.iSpaceButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iSpaceButton.iRect.Resize( expand, 0 );
+        aDataInfo.iSpaceButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+        aDataInfo.iSpaceButton.iInnerRect.Resize( expand, 0 );
+        aDataInfo.iSpaceButtonEx.iIconsFrameRect = OffsetRect( rect3PicPane, dx, dy );
+        aDataInfo.iSpaceButtonEx.iIconsFrameRect.Resize( expand, 0 );
+        aDataInfo.iSpaceButtonEx.iMiddleIconRect = 
+            aDataInfo.iSpaceButtonEx.iIconsFrameRect;
+        aDataInfo.iSpaceButtonEx.iMiddleIconRect.iTl.iX += pic3pLeftWidth;
+        aDataInfo.iSpaceButtonEx.iMiddleIconRect.iBr.iX -= pic3pRightWidth;    
+        dx += spaceBtnWidth;
+    
+        aDataInfo.iRightButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iRightButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+        dx += rectXPane.Width();
+    
+        aDataInfo.iOptionButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iOptionButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+        dx += rectXPane.Width();
+    
+        aDataInfo.iEnterButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iEnterButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+        dx += rectXPane.Width();
     
-    TInt spaceBtnWidth = rectOfButtons.Width() - rectXPane.Width() * 8;
-    TInt dx = rectOfButtons.iTl.iX;
-    TInt dy = rectOfButtons.iTl.iY;
-    
-    aDataInfo.iCloseButton.iRect = OffsetRect( rectXBorder, dx, dy );
-    aDataInfo.iCloseButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
-    dx += rectXPane.Width();
+        aDataInfo.iClearButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iClearButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+        }
+    else
+        {
+        TAknLayoutRect shiftRect, spaceRect, clearRect;
+        TAknLayoutRect bottomRowRect;
+        
+        // Second row of buttons (CLOSE, MULTIRANGE, LEFT, RIGHT, OPTIONS, ENTER)
+		// keypane v=15, keycell v=8, keylabel v=8
 
-    aDataInfo.iShiftButton.iRect = OffsetRect( rectXBorder, dx, dy );
-    aDataInfo.iShiftButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
-    dx += rectXPane.Width();
+        // key pane rect
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(15).LayoutLine();
+        bottomRowRect.LayoutRect( keypadRect.Rect(), linelayout );
+        
+        // key cell rect
+        linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(8).LayoutLine();
+        keycellRect.LayoutRect( bottomRowRect.Rect(), linelayout );
+        
+        // key label rect
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(8).LayoutLine();
+        keylabelRect.LayoutRect( bottomRowRect.Rect(), linelayout );
+        
+        TRect rectXPane = bottomRowRect.Rect();
+        rect = keycellRect.Rect();
+        rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
+        TRect rectXBorder = rect;
+        rect = keylabelRect.Rect();
+        rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
+        TRect rectXInner = rect;
+        rectXPane.Move( - rectXPane.iTl );
+        
+        rect = keypadRect.Rect();
+        rect.Move( - base.iX, - base.iY );
+        TRect rectOfKeypad = rect;
+        TRect rectOfButtons = rectOfKeypad;
+        rectOfKeypad.iBr.iY -= ( bottomRowRect.Rect().Height() );
+        rectOfButtons.iTl.iY += rectOfKeypad.Height();
+        
+        TInt dx = rectOfButtons.iTl.iX;
+        TInt dy = rectOfButtons.iTl.iY;
 
-    aDataInfo.iMultiRangeButton.iRect = OffsetRect( rectXBorder, dx, dy );
-    aDataInfo.iMultiRangeButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
-    dx += rectXPane.Width();
-
-    aDataInfo.iLeftButton.iRect = OffsetRect( rectXBorder, dx, dy );
-    aDataInfo.iLeftButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
-    dx += rectXPane.Width();
+        // CLOSE (15)
+        aDataInfo.iCloseButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iCloseButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); 
+        dx += rectXPane.Width();
+        
+        // MULTIRANGE (15)
+        aDataInfo.iMultiRangeButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iMultiRangeButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+        dx += rectXPane.Width();
+        
+        // LEFT (15)
+        aDataInfo.iLeftButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iLeftButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+        dx += rectXPane.Width();
+        
+        // RIGHT (15)
+        aDataInfo.iRightButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iRightButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+        dx += rectXPane.Width();
+        
+        // OPTIONS (15)
+        aDataInfo.iOptionButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iOptionButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+        dx += rectXPane.Width();
+        
+        // ENTER (15)
+        aDataInfo.iEnterButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iEnterButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
 
-    TInt expand = spaceBtnWidth - rectXPane.Width();
-    aDataInfo.iSpaceButton.iRect = OffsetRect( rectXBorder, dx, dy );
-    aDataInfo.iSpaceButton.iRect.Resize( expand, 0 );
-    aDataInfo.iSpaceButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
-    aDataInfo.iSpaceButton.iInnerRect.Resize( expand, 0 );
-    aDataInfo.iSpaceButtonEx.iIconsFrameRect = OffsetRect( rect3PicPane, dx, dy );
-    aDataInfo.iSpaceButtonEx.iIconsFrameRect.Resize( expand, 0 );
-    aDataInfo.iSpaceButtonEx.iMiddleIconRect = 
-        aDataInfo.iSpaceButtonEx.iIconsFrameRect;
-    aDataInfo.iSpaceButtonEx.iMiddleIconRect.iTl.iX += pic3pLeftWidth;
-    aDataInfo.iSpaceButtonEx.iMiddleIconRect.iBr.iX -= pic3pRightWidth;    
-    dx += spaceBtnWidth;
+        // First row of buttons (SHIFT, SPACE, CLEAR)
+        
+        // SHIFT (keypane v=4, keycell v=4, keylabel v=4)
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(4).LayoutLine();
+        shiftRect.LayoutRect( keypadRect.Rect(), linelayout );
+        
+        // key cell rect
+        linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(4).LayoutLine();
+        keycellRect.LayoutRect( shiftRect.Rect(), linelayout );
+        
+        // key label rect
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(4).LayoutLine();
+        keylabelRect.LayoutRect( shiftRect.Rect(), linelayout );
+        
+        rectXPane = shiftRect.Rect();
+        rect = keycellRect.Rect();
+        rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
+        rectXBorder = rect;
+        rect = keylabelRect.Rect();
+        rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
+        rectXInner = rect;
+        rectXPane.Move( - rectXPane.iTl );
+        
+        // Update the height to account for the second row
+        rectOfButtons.iTl.iY -= shiftRect.Rect().Height();
+        
+        dx = rectOfButtons.iTl.iX;
+        dy = rectOfButtons.iTl.iY;
 
-    aDataInfo.iRightButton.iRect = OffsetRect( rectXBorder, dx, dy );
-    aDataInfo.iRightButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
-    dx += rectXPane.Width();
-
-    aDataInfo.iOptionButton.iRect = OffsetRect( rectXBorder, dx, dy );
-    aDataInfo.iOptionButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
-    dx += rectXPane.Width();
-
-    aDataInfo.iEnterButton.iRect = OffsetRect( rectXBorder, dx, dy );
-    aDataInfo.iEnterButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
-    dx += rectXPane.Width();
-
-    aDataInfo.iClearButton.iRect = OffsetRect( rectXBorder, dx, dy );
-    aDataInfo.iClearButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+        aDataInfo.iShiftButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iShiftButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+        dx += rectXPane.Width();
+        
+        // SPACE (keypane v=8, keycell v=5, keylabel v=5, pic3pane v=5)
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(8).LayoutLine();
+        spaceRect.LayoutRect( keypadRect.Rect(), linelayout );
+        
+        // key cell rect
+        linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(5).LayoutLine();
+        keycellRect.LayoutRect( spaceRect.Rect(), linelayout );
+        
+        // key label rect
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(5).LayoutLine();
+        keylabelRect.LayoutRect( spaceRect.Rect(), linelayout );
+        
+        // pic3pane rect
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane(5).LayoutLine();
+        pic3paneRect.LayoutRect( spaceRect.Rect(), linelayout );
+        
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g1(0).LayoutLine();
+        layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
+        pic3pLeftWidth = layoutrect.Rect().Width();
+    
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g3(0).LayoutLine();
+        layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
+        pic3pRightWidth = layoutrect.Rect().Width();
+        
+        TRect rectSpacePane = spaceRect.Rect();
+        rect = keycellRect.Rect();
+        rect.Move( - rectSpacePane.iTl.iX, - rectSpacePane.iTl.iY );
+        TRect rectSpaceBorder = rect;
+        rect = keylabelRect.Rect();
+        rect.Move( - rectSpacePane.iTl.iX, - rectSpacePane.iTl.iY );
+        TRect rectSpaceInner = rect;
+        rect = pic3paneRect.Rect();
+        rect.Move( - rectSpacePane.iTl.iX, - rectSpacePane.iTl.iY );
+        TRect rect3PicPane = rect;
+        rectSpacePane.Move( - rectSpacePane.iTl );
+        
+        aDataInfo.iSpaceButton.iRect = OffsetRect( rectSpaceBorder, dx, dy );
+        aDataInfo.iSpaceButton.iInnerRect = OffsetRect( rectSpaceInner, dx, dy );
+        aDataInfo.iSpaceButtonEx.iIconsFrameRect = OffsetRect( rect3PicPane, dx, dy );
+        aDataInfo.iSpaceButtonEx.iMiddleIconRect = aDataInfo.iSpaceButtonEx.iIconsFrameRect;
+        aDataInfo.iSpaceButtonEx.iMiddleIconRect.iTl.iX += pic3pLeftWidth;
+        aDataInfo.iSpaceButtonEx.iMiddleIconRect.iBr.iX -= pic3pRightWidth;    
+        dx += rectSpacePane.Width();
+        
+        // CLEAR (keypane v=4, keycell v=4, keylabel v=4)
+        aDataInfo.iClearButton.iRect = OffsetRect( rectXBorder, dx, dy );
+        aDataInfo.iClearButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
+        }
     
     // preview popup window
     TAknWindowLineLayout previewWnd, previewWndInner;
@@ -1455,7 +1648,7 @@
     TAknWindowLineLayout wndLayout;
     TAknWindowLineLayout linelayout;
     TAknLayoutRect layoutrect, keypaneRect, keycellRect, keylabelRect;
-    TRect rectBottomWin, rectVkbCtrl;
+    TRect rectBottomWin, rectBottomWin11x4, rectVkbCtrl;
     TPoint base;
     TAknWindowLineLayout keypad, cellpane;
     
@@ -1467,15 +1660,37 @@
     TAknLayoutText keyTextLayout; 
 	TAknTextLineLayout keyText;
 	TRect keyRect;
+
+    TBool isLandscape = Layout_Meta_Data::IsLandscapeOrientation();
+
 	// -----------------------Landscape Mode--------------------------
 	appWnd = AknLayoutScalable_Avkon::application_window(0).LayoutLine();
 	wndLayout = AknLayoutScalable_Avkon::main_fep_vtchi_ss_pane(0).LayoutLine();
 	wndRect.LayoutRect(appWnd.Rect(), wndLayout);
 	// Bottom pane rect
-	linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(0).LayoutLine();
+    // Landscape info is read if i) portrait FSQ feature is not enabled (landscape FSQ)
+    // or ii) portrait FSQ feature is enabled and the current orientation is landscape. 
+    // Portrait info is set if portrait FSQ feature is enabled the current orientation 
+    // is portrait. 
+    TBool isPortraitFSQEnabled = EFalse;
+    TRAP_IGNORE( isPortraitFSQEnabled = CFeatureDiscovery::IsFeatureSupportedL( 
+                        KFeatureIdFfVirtualFullscrPortraitQwertyInput ) );
+    linelayout = ( !isPortraitFSQEnabled ||
+        ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) )
+        ? AknLayoutScalable_Avkon::popup_fep_vkbss_window(0).LayoutLine()
+        : AknLayoutScalable_Avkon::popup_fep_vkbss_window(1).LayoutLine();
+
 	layoutrect.LayoutRect( wndRect.Rect(), linelayout );
 	rectBottomWin = layoutrect.Rect();
 	base = wndRect.Rect().iTl;
+    
+    if( !isLandscape )
+        {
+        linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(2).LayoutLine();
+        layoutrect.LayoutRect( wndRect.Rect(), linelayout );
+        rectBottomWin11x4 = layoutrect.Rect();
+        }
+		
 	// ==================10x3====================
 	// top pane and bottom pane
 	GetTopAndBottomPaneInfo( wndRect.Rect(), ELayout10x3, 0, *dataInfo );
@@ -1489,11 +1704,36 @@
     keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(0).LayoutLine();
   	keypadRect.LayoutRect( rectBottomWin, keypad );
   	
-  	linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(0).LayoutLine();
-  	keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+    TInt functionKeyRowsHeight = 0;
+	
+    if ( !isPortraitFSQEnabled ||
+        ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) )
+        {
+        // In landscape mode, there is only one function key row, and the height 
+        // of this row is identical to all the other rows
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(0).LayoutLine();
+  	    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+        functionKeyRowsHeight += keypaneRect.Rect().Height();
+        }
+    else
+        {
+        // In portrait mode, there are two function key rows
+        // First row is represented as variety 4 (SHIFT, SPACE, CLEAR)
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(4).LayoutLine();
+  	    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+        functionKeyRowsHeight += keypaneRect.Rect().Height();
+        // Second row is represented as variety 15 (CLOSE, MULTIRANGE, LEFT, RIGHT, 
+        // OPTIONS, ENTER)
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(15).LayoutLine();
+        keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+        functionKeyRowsHeight += keypaneRect.Rect().Height();
+        // Reset keypane rect
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(0).LayoutLine();
+        keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+        }
   	    
   	rectVkbCtrl = keypadRect.Rect();
-    rectVkbCtrl.iBr.iY -= keypaneRect.Rect().Height();
+    rectVkbCtrl.iBr.iY -= functionKeyRowsHeight;
   	dataInfo->iKeypad.iKaypadRect = rectVkbCtrl;
 
   	linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(0).LayoutLine();
@@ -1548,7 +1788,6 @@
   	// Candidate list's parent Layout window is ITUT window
     TPeninputCandidateListLayoutData candidateListLAF;
     TAknWindowLineLayout parentWnd;
-    TBool isLandscape = Layout_Meta_Data::IsLandscapeOrientation();
    	// Add tooltip box laf data for ITI features.
    	TPeninputTooltipBoxLayoutData tooltipBoxLAF;    	                                
     if ( isLandscape )
@@ -1561,8 +1800,19 @@
         tooltipBoxLAF = ReadLafForTooltipBox( wndRect.Rect() );
        	dataInfo->iTooltipBox = tooltipBoxLAF;
         }
-   	
-   	
+        
+    // if portrait FSQ feature is enabled and the current orientation is portrait. 
+    if ( isPortraitFSQEnabled && !isLandscape )
+        {
+        parentWnd = AknLayoutScalable_Apps::popup_vitu2_window( 0 ).LayoutLine();
+        TAknLayoutRect parentRectLayout;
+        parentRectLayout.LayoutRect( appWnd.Rect(), parentWnd );
+        candidateListLAF = ReadLafForCandidateList( parentRectLayout.Rect() );
+        dataInfo->iCandidateList = candidateListLAF;
+        tooltipBoxLAF = ReadLafForTooltipBox( wndRect.Rect() );
+        dataInfo->iTooltipBox = tooltipBoxLAF;
+        }
+
    	iLayoutDataInfo.AppendL( dataInfo ); 
   	
 	// ==================11x3====================
@@ -1609,11 +1859,36 @@
     keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(1).LayoutLine();
     keypadRect.LayoutRect( rectBottomWin, keypad );
     
-    linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(2).LayoutLine();
-    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
-    
-    rectVkbCtrl = keypadRect.Rect();
-    rectVkbCtrl.iBr.iY -= keypaneRect.Rect().Height();
+    functionKeyRowsHeight = 0;
+	
+    if ( !isPortraitFSQEnabled ||
+        ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) )
+        {
+        // In landscape mode, there is only one function key row, and the height 
+        // of this row is identical to all the other rows
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(2).LayoutLine();
+  	    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+        functionKeyRowsHeight += keypaneRect.Rect().Height();
+        }
+    else
+        {
+        // In portrait mode, there are two function key rows
+        // First row is represented as variety 4 (SHIFT, SPACE, CLEAR)
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(4).LayoutLine();
+  	    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+        functionKeyRowsHeight += keypaneRect.Rect().Height();
+        // Second row is represented as variety 15 (CLOSE, MULTIRANGE, LEFT, RIGHT, 
+        // OPTIONS, ENTER)
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(15).LayoutLine();
+        keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+        functionKeyRowsHeight += keypaneRect.Rect().Height();
+        // Reset keypane rect
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(2).LayoutLine();
+        keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+        }
+  	    
+  	rectVkbCtrl = keypadRect.Rect();
+    rectVkbCtrl.iBr.iY -= functionKeyRowsHeight;
     dataInfo->iKeypad.iKaypadRect = rectVkbCtrl;
 
     linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(2).LayoutLine();
@@ -1667,6 +1942,14 @@
        	dataInfo->iTooltipBox = tooltipBoxLAF;
         }
    	
+    // if portrait FSQ feature is enabled and the current orientation is portrait. 
+    if ( isPortraitFSQEnabled && !isLandscape )
+        {
+        // Add candate list laf data for ITI features
+        dataInfo->iCandidateList = candidateListLAF;
+        // Add tooltip box laf data for ITI features.
+        dataInfo->iTooltipBox = tooltipBoxLAF;
+        }
 
    	iLayoutDataInfo.AppendL( dataInfo ); 
 	
@@ -1711,13 +1994,45 @@
     dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId( keyText.iFont, NULL );
     
     keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(1).LayoutLine();
-    keypadRect.LayoutRect( rectBottomWin, keypad );
+    if( isLandscape )
+        {
+        keypadRect.LayoutRect( rectBottomWin, keypad );
+        }
+    else
+        {
+        keypadRect.LayoutRect( rectBottomWin11x4, keypad );
+        }
 
-    linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(3).LayoutLine();
-    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
-    
-    rectVkbCtrl = keypadRect.Rect();
-    rectVkbCtrl.iBr.iY -= keypaneRect.Rect().Height();
+    functionKeyRowsHeight = 0;
+	
+    if ( !isPortraitFSQEnabled ||
+        ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) )
+        {
+        // In landscape mode, there is only one function key row, and the height 
+        // of this row is identical to all the other rows
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(3).LayoutLine();
+  	    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+        functionKeyRowsHeight += keypaneRect.Rect().Height();
+        }
+    else
+        {
+        // In portrait mode, there are two function key rows
+        // First row is represented as variety 4 (SHIFT, SPACE, CLEAR)
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(4).LayoutLine();
+  	    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+        functionKeyRowsHeight += keypaneRect.Rect().Height();
+        // Second row is represented as variety 15 (CLOSE, MULTIRANGE, LEFT, RIGHT, 
+        // OPTIONS, ENTER)
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(15).LayoutLine();
+        keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+        functionKeyRowsHeight += keypaneRect.Rect().Height();
+        // Reset keypane rect
+        linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(3).LayoutLine();
+        keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
+        }
+  	    
+  	rectVkbCtrl = keypadRect.Rect();
+    rectVkbCtrl.iBr.iY -= functionKeyRowsHeight;
     dataInfo->iKeypad.iKaypadRect = rectVkbCtrl;    
 
     linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(3).LayoutLine();
@@ -1771,7 +2086,15 @@
        	dataInfo->iTooltipBox = tooltipBoxLAF;
         }
    	
-   	
+     // if portrait FSQ feature is enabled and the current orientation is portrait. 
+    if ( isPortraitFSQEnabled && !isLandscape )
+        {
+        // Add candate list laf data for ITI features
+        dataInfo->iCandidateList = candidateListLAF;
+        // Add tooltip box laf data for ITI features.
+        dataInfo->iTooltipBox = tooltipBoxLAF;
+        }
+  	
    	iLayoutDataInfo.AppendL( dataInfo ); 
    	   	
 	}	
@@ -1783,26 +2106,63 @@
 TPeninputCandidateListLayoutData CPeninputLafDataFSQ::
                                  ReadLafForCandidateList( const TRect& aRect )
     {    
-	// candidate list
-	TAknWindowLineLayout candidateList 
-	             = AknLayoutScalable_Apps::popup_vitu2_match_list_window( 3 )
-	               .LayoutLine();	
-	TAknLayoutRect candidateListRect;
-	candidateListRect.LayoutRect( aRect, candidateList );	
-	
-	// list pane, its parent is candidate list
-	TAknWindowLineLayout listpane
-	             = AknLayoutScalable_Apps::list_vitu2_match_list_pane( 1 )
-	               .LayoutLine();
     TAknLayoutRect listpaneRect;
-    listpaneRect.LayoutRect( candidateListRect.Rect(), listpane );
+    TAknLayoutRect scrollRect;
+    TAknLayoutRect candidateListRect;
+    TAknWindowLineLayout listpane;
+    TAknWindowLineLayout scrollpane;
+    TAknWindowLineLayout candidateList;   
     
-    // scroll pane, its parent is candidate list
-    TAknWindowLineLayout scrollpane
-                 = AknLayoutScalable_Apps::vitu2_page_scroll_pane( 1 )
-                   .LayoutLine();
-    TAknLayoutRect scrollRect;
-    scrollRect.LayoutRect( candidateListRect.Rect(), scrollpane );
+    // If portrait FSQ feature is enabled.
+    TBool isPortraitFSQEnabled = EFalse;
+    TRAP_IGNORE( isPortraitFSQEnabled = CFeatureDiscovery::IsFeatureSupportedL( 
+                        KFeatureIdFfVirtualFullscrPortraitQwertyInput ) );
+
+    if ( isPortraitFSQEnabled )
+        {
+        if ( Layout_Meta_Data::IsLandscapeOrientation() )
+            {
+            // candidate list
+            candidateList = AknLayoutScalable_Apps::popup_vitu2_match_list_window( 3 ).LayoutLine();	
+            candidateListRect.LayoutRect( aRect, candidateList );	
+ 
+            // list pane, its parent is candidate list
+            listpane = AknLayoutScalable_Apps::list_vitu2_match_list_pane( 1 ).LayoutLine();
+            listpaneRect.LayoutRect( candidateListRect.Rect(), listpane );
+        
+            // scroll pane, its parent is candidate list
+            scrollpane = AknLayoutScalable_Apps::vitu2_page_scroll_pane( 1 ).LayoutLine();  
+            scrollRect.LayoutRect( candidateListRect.Rect(), scrollpane );
+            }
+        else
+            {
+            // candidate list
+            candidateList = AknLayoutScalable_Apps::popup_vitu2_match_list_window( 2 ).LayoutLine();   
+            candidateListRect.LayoutRect( aRect, candidateList );   
+          
+            // list pane, its parent is candidate list
+            listpane = AknLayoutScalable_Apps::list_vitu2_match_list_pane( 0 ).LayoutLine();
+            listpaneRect.LayoutRect( candidateListRect.Rect(), listpane );
+        
+            // scroll pane, its parent is candidate list
+            scrollpane = AknLayoutScalable_Apps::vitu2_page_scroll_pane( 0 ).LayoutLine();
+            scrollRect.LayoutRect( candidateListRect.Rect(), scrollpane );
+            }
+        }
+    else
+        {
+        // candidate list
+        candidateList = AknLayoutScalable_Apps::popup_vitu2_match_list_window( 3 ).LayoutLine();	
+        candidateListRect.LayoutRect( aRect, candidateList );	
+ 
+        // list pane, its parent is candidate list
+        listpane = AknLayoutScalable_Apps::list_vitu2_match_list_pane( 1 ).LayoutLine();
+        listpaneRect.LayoutRect( candidateListRect.Rect(), listpane );
+    
+        // scroll pane, its parent is candidate list
+        scrollpane = AknLayoutScalable_Apps::vitu2_page_scroll_pane( 1 ).LayoutLine();  
+        scrollRect.LayoutRect( candidateListRect.Rect(), scrollpane );
+        }
     
     // Item pane, its parent is list pane
     TAknWindowLineLayout itemPane 
--- a/textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericvkb/src/peninputgenericvkblayout.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -71,6 +71,11 @@
     return self;
     }
 
+// ---------------------------------------------------------------------------
+// CPeninputGenericVkbLayoutImp::NewFsqL
+// Entry point for landscape FSQ.
+// ---------------------------------------------------------------------------
+//
 CPeninputGenericVkbLayoutImp* CPeninputGenericVkbLayoutImp::NewFsqL( 
     TAny* /*aInitParams*/ )
     {
@@ -84,6 +89,23 @@
     }
 
 // ---------------------------------------------------------------------------
+// CPeninputGenericVkbLayoutImp::NewPrtFsqL
+// Entry point for portrait FSQ.
+// ---------------------------------------------------------------------------
+//
+CPeninputGenericVkbLayoutImp* CPeninputGenericVkbLayoutImp::NewPrtFsqL( 
+    TAny* /*aInitParams*/ )
+    {
+    CPeninputGenericVkbLayoutImp* self = new ( ELeave ) 
+        CPeninputGenericVkbLayoutImp();
+    CleanupStack::PushL( self );
+    self->Construct( ETrue ); 
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
 // CPeninputGenericVkbLayoutImp::~CPeninputGenericVkbLayoutImp
 // (other items were commented in a header)
 // ---------------------------------------------------------------------------
--- a/textinput/peninputgenericvkb/src/peninputgenericvkbproxy.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericvkb/src/peninputgenericvkbproxy.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -32,7 +32,9 @@
     IMPLEMENTATION_PROXY_ENTRY( 0x10282359, 
                                 CPeninputGenericVkbLayoutImp::NewL ),
     IMPLEMENTATION_PROXY_ENTRY( 0x2001114D, 
-                                CPeninputGenericVkbLayoutImp::NewFsqL )
+                                CPeninputGenericVkbLayoutImp::NewFsqL ),
+    IMPLEMENTATION_PROXY_ENTRY( 0x20026837,
+                                CPeninputGenericVkbLayoutImp::NewPrtFsqL )
     };
 
 // --------------------------------------------------------------------------
--- a/textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericvkb/src/peninputgenericvkbwindow.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -37,7 +37,7 @@
 #include <peninputclientlayoutinfo.h>
 #include <peninputlayoutchoicelist.h>
 #include <peninputlongpressbutton.h>
-
+#include <bautils.h>
 #include <aknlayoutscalable_apps.cdl.h>
 #include <peninputlayoutbubblectrl.h>
 #include <peninputscrollablelist.h>
@@ -95,7 +95,8 @@
       iPopupSet(EFalse),
       iLafMgr(NULL),
       iFirstConstruct(ETrue),
-      iIndiWithText( EFalse )
+      iIndiWithText( EFalse ),
+      iUSRscFileExist( EFalse )
     {
     }
 
@@ -140,6 +141,20 @@
     iLafMgr->SetInputModeL(TPluginInputMode (iLayoutContext->LayoutType()));
     CPeninputLayoutWindowExt::ConstructL();
 
+    // Save whether American rsc file exist or not
+    TBuf<KMaxFileLength>  usUSRscFileName; 
+    usUSRscFileName= KConfigurationResourceFile();
+    usUSRscFileName.AppendNum( ELangAmerican );
+    usUSRscFileName.Append( KResourceFileExtName );
+
+    RFs fileSession;
+    User::LeaveIfError( fileSession.Connect() );
+    CleanupClosePushL( fileSession );
+    if ( BaflUtils::FileExists( fileSession , usUSRscFileName ))
+    	{
+        iUSRscFileExist = ETrue;
+    	}
+    CleanupStack::PopAndDestroy( 1 );
     // For addition of ITI features, add a candidate list in vkb window   
     CreateCandidateListL();    
     }
@@ -458,8 +473,12 @@
             file.Close();
             aLangID = ELangCanadianFrench;   
             }
-
         }
+     // If US Rsc file exist, use it instead of English rsc file
+     if(( aLangID == ELangEnglish ) && ( iUSRscFileExist ))
+    	 {
+         aLangID = ELangAmerican; 
+    	 }
     iResourceFilename.Zero();
     // Generate resource file name according to language id
     iResourceFilename = KConfigurationResourceFile();
--- a/textinput/peninputgenericvkb/srcdata/10282358.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericvkb/srcdata/10282358.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -44,6 +44,15 @@
                 // Info for CImplementation1
                 IMPLEMENTATION_INFO
                     {
+                    implementation_uid = 0x20026837;
+                    version_no = 1;
+                    display_name = "Portrait QWERTY Keypad";
+                    default_data = "1||16||33||37||42||50||57||54||93||94||96"; // Supported language
+                    opaque_data= "16||33||37||42||50||57||54||93||94||96"; // Prefered lanaguage
+                    },
+                // Info for CImplementation1
+                IMPLEMENTATION_INFO
+                    {
                     implementation_uid = 0x2001114D;
                     version_no = 1;
                     display_name = "Generic FSQ Implementation version 1";
--- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_01.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_01.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -1051,8 +1051,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0022>;
-                    scancode=0x0022;
+                    unicode=<0x0026>;
+                    scancode=0x0026;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -1164,8 +1164,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0026>;
-                    scancode=0x0026;
+                    unicode=<0x0022>;
+                    scancode=0x0022;
                     beginrow=0;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -1353,8 +1353,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x00A2>;
-                    scancode=0x00A2;
+                    unicode=<0x20AA>;
+                    scancode=0x20AA;
                     beginrow=2;
                     begincolumn=8;
                     highlightbmpindex=0;
@@ -1362,8 +1362,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x20AA>;
-                    scancode=0x20AA;
+                    unicode=<0x00A2>;
+                    scancode=0x00A2;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
--- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_10.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_10.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -463,8 +463,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x003F>;
-                    scancode=0x003F;
+                    unicode=<0x0040>;
+                    scancode=0x0040;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -685,8 +685,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002F>;
-                    scancode=0x002F;
+                    unicode=<0x0027>;
+                    scancode=0x0027;
                     beginrow=1;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -757,8 +757,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002B>;
-                    scancode=0x002B;
+                    unicode=<0x002C>;
+                    scancode=0x002C;
                     beginrow=2;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -766,8 +766,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002D>;
-                    scancode=0x002D;
+                    unicode=<0x002E>;
+                    scancode=0x002E;
                     beginrow=2;
                     begincolumn=8;
                     highlightbmpindex=0;
@@ -775,8 +775,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0021>;
-                    scancode=0x0021;
+                    unicode=<0x0040>;
+                    scancode=0x0040;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -2734,8 +2734,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0070>;
-                    scancode=0x0070;
+                    unicode=<0x002A>;
+                    scancode=0x002A;
                     beginrow=0;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -2761,8 +2761,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x003B>;
-                    scancode=0x003B;
+                    unicode=<0x0026>;
+                    scancode=0x0026;
                     beginrow=0;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -2779,8 +2779,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x003F>;
-                    scancode=0x003F;
+                    unicode=<0x0025>;
+                    scancode=0x0025;
                     beginrow=0;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -2824,8 +2824,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0077>;
-                    scancode=0x0077;
+                    unicode=<0x0070>;
+                    scancode=0x0070;
                     beginrow=1;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -2833,8 +2833,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002D>;
-                    scancode=0x002D;
+                    unicode=<0x0021>;
+                    scancode=0x0021;
                     beginrow=1;
                     begincolumn=5;
                     highlightbmpindex=0;
@@ -2842,8 +2842,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x005F>;
-                    scancode=0x005F;
+                    unicode=<0x0024>;
+                    scancode=0x0024;
                     beginrow=1;
                     begincolumn=6;
                     highlightbmpindex=0;
@@ -2869,8 +2869,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0021>;
-                    scancode=0x0021;
+                    unicode=<0x005F>;
+                    scancode=0x005F;
                     beginrow=1;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -2914,8 +2914,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002A>;
-                    scancode=0x002A;
+                    unicode=<0x0077>;
+                    scancode=0x0077;
                     beginrow=2;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -2923,8 +2923,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0040>;
-                    scancode=0x0040;
+                    unicode=<0x002D>;
+                    scancode=0x002D;
                     beginrow=2;
                     begincolumn=5;
                     highlightbmpindex=0;
@@ -2932,8 +2932,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002F>;
-                    scancode=0x002F;
+                    unicode=<0x003D>;
+                    scancode=0x003D;
                     beginrow=2;
                     begincolumn=6;
                     highlightbmpindex=0;
@@ -2941,26 +2941,26 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
+                    unicode=<0x003F>;
+                    scancode=0x003F;
+                    beginrow=2;
+                    begincolumn=7;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+	PENINPUT_LAYOUT_UNIT_KEY
+                    {
                     unicode=<0x005C>;
                     scancode=0x005C;
                     beginrow=2;
-                    begincolumn=7;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-	PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0027>;
-                    scancode=0x0027;
-                    beginrow=2;
                     begincolumn=8;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0022>;
-                    scancode=0x0022;
+                    unicode=<0x002F>;
+                    scancode=0x002F;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -3046,8 +3046,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x007E>;
-                    scancode=0x007E;
+                    unicode=<0x003B>;
+                    scancode=0x003B;
                     beginrow=0;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -3055,8 +3055,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x005E>;
-                    scancode=0x005E;
+                    unicode=<0x201E>;
+                    scancode=0x201E;
                     beginrow=0;
                     begincolumn=5;
                     highlightbmpindex=0;
@@ -3064,8 +3064,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0060>;
-                    scancode=0x0060;
+                    unicode=<0x201D>;
+                    scancode=0x201D;
                     beginrow=0;
                     begincolumn=6;
                     highlightbmpindex=0;
@@ -3073,8 +3073,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0026>;
-                    scancode=0x0026;
+                    unicode=<0x005F>;
+                    scancode=0x005F;
                     beginrow=0;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -3082,8 +3082,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x003D>;
-                    scancode=0x003D;
+                    unicode=<0x003C>;
+                    scancode=0x003C;
                     beginrow=0;
                     begincolumn=8;
                     highlightbmpindex=0;
@@ -3091,8 +3091,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x00BF>;
-                    scancode=0x00BF;
+                    unicode=<0x003E>;
+                    scancode=0x003E;
                     beginrow=0;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -3136,8 +3136,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0025>;
-                    scancode=0x0025;
+                    unicode=<0x005E>;
+                    scancode=0x005E;
                     beginrow=1;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -3145,8 +3145,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x005B>;
-                    scancode=0x005B;
+                    unicode=<0x0060>;
+                    scancode=0x0060;
                     beginrow=1;
                     begincolumn=5;
                     highlightbmpindex=0;
@@ -3154,8 +3154,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x005D>;
-                    scancode=0x005D;
+                    unicode=<0x00B4>;
+                    scancode=0x00B4;
                     beginrow=1;
                     begincolumn=6;
                     highlightbmpindex=0;
@@ -3163,8 +3163,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x201E>;
-                    scancode=0x201E;
+                    unicode=<0x007E>;
+                    scancode=0x007E;
                     beginrow=1;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -3172,8 +3172,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x201D>;
-                    scancode=0x201D;
+                    unicode=<0x0027>;
+                    scancode=0x0027;
                     beginrow=1;
                     begincolumn=8;
                     highlightbmpindex=0;
@@ -3181,8 +3181,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x00A1>;
-                    scancode=0x00A1;
+                    unicode=<0x0022>;
+                    scancode=0x0022;
                     beginrow=1;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -3226,8 +3226,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0045>;
-                    scancode=0x0045;
+                    unicode=<0x007B>;
+                    scancode=0x007B;
                     beginrow=2;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -3235,8 +3235,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x20AC>;
-                    scancode=0x20AC;
+                    unicode=<0x007D>;
+                    scancode=0x007D;
                     beginrow=2;
                     begincolumn=5;
                     highlightbmpindex=0;
@@ -3244,8 +3244,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x00A3>;
-                    scancode=0x00A3;
+                    unicode=<0x005B>;
+                    scancode=0x005B;
                     beginrow=2;
                     begincolumn=6;
                     highlightbmpindex=0;
@@ -3253,8 +3253,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0024>;
-                    scancode=0x0024;
+                    unicode=<0x005D>;
+                    scancode=0x005D;
                     beginrow=2;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -3262,18 +3262,18 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
+                    unicode=<0x007C>;
+                    scancode=0x007C;
+                    beginrow=2;
+                    begincolumn=8;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+	PENINPUT_LAYOUT_UNIT_KEY
+                    {
                     unicode=<0x00A2>;
                     scancode=0x00A2;
                     beginrow=2;
-                    begincolumn=8;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-	PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x20AA>;
-                    scancode=0x20AA;
-                    beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
--- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_18.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_18.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -463,8 +463,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x003F>;
-                    scancode=0x003F;
+                    unicode=<0x0040>;
+                    scancode=0x0040;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -685,8 +685,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002F>;
-                    scancode=0x002F;
+                    unicode=<0x0022>;
+                    scancode=0x0022;
                     beginrow=1;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -757,8 +757,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002B>;
-                    scancode=0x002B;
+                    unicode=<0x003F>;
+                    scancode=0x003F;
                     beginrow=2;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -766,18 +766,18 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002D>;
-                    scancode=0x002D;
-                    beginrow=2;
-                    begincolumn=8;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
                     unicode=<0x0021>;
                     scancode=0x0021;
                     beginrow=2;
+                    begincolumn=8;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x002F>;
+                    scancode=0x002F;
+                    beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
--- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_39.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_39.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -463,8 +463,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x003F>;
-                    scancode=0x003F;
+                    unicode=<0x0040>;
+                    scancode=0x0040;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -685,8 +685,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002F>;
-                    scancode=0x002F;
+                    unicode=<0x0022>;
+                    scancode=0x0022;
                     beginrow=1;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -757,8 +757,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002B>;
-                    scancode=0x002B;
+                    unicode=<0x003F>;
+                    scancode=0x003F;
                     beginrow=2;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -766,18 +766,18 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002D>;
-                    scancode=0x002D;
-                    beginrow=2;
-                    begincolumn=8;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
                     unicode=<0x0021>;
                     scancode=0x0021;
                     beginrow=2;
+                    begincolumn=8;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x002F>;
+                    scancode=0x002F;
+                    beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
--- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_42.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_42.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -291,8 +291,8 @@
                 {
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002C>;
-                    scancode=0x002C;
+                    unicode=<0x044F>;
+                    scancode=0x044F;
                     beginrow=0;
                     begincolumn=0;
                     highlightbmpindex=0;
@@ -300,8 +300,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0443>;
-                    scancode=0x0443;
+                    unicode=<0x0432>;
+                    scancode=0x0432;
                     beginrow=0;
                     begincolumn=1;
                     highlightbmpindex=0;
@@ -318,8 +318,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0438>;
-                    scancode=0x0438;
+                    unicode=<0x0440>;
+                    scancode=0x0440;
                     beginrow=0;
                     begincolumn=3;
                     highlightbmpindex=0;
@@ -327,8 +327,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0448>;
-                    scancode=0x0448;
+                    unicode=<0x0442>;
+                    scancode=0x0442;
                     beginrow=0;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -336,8 +336,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0449>;
-                    scancode=0x0449;
+                    unicode=<0x044A>;
+                    scancode=0x044A;
                     beginrow=0;
                     begincolumn=5;
                     highlightbmpindex=0;
@@ -345,8 +345,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x043A>;
-                    scancode=0x043A;
+                    unicode=<0x0443>;
+                    scancode=0x0443;
                     beginrow=0;
                     begincolumn=6;
                     highlightbmpindex=0;
@@ -354,8 +354,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0441>;
-                    scancode=0x0441;
+                    unicode=<0x0438>;
+                    scancode=0x0438;
                     beginrow=0;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -363,8 +363,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0434>;
-                    scancode=0x0434;
+                    unicode=<0x043E>;
+                    scancode=0x043E;
                     beginrow=0;
                     begincolumn=8;
                     highlightbmpindex=0;
@@ -372,8 +372,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0437>;
-                    scancode=0x0437;
+                    unicode=<0x043F>;
+                    scancode=0x043F;
                     beginrow=0;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -381,8 +381,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0446>;
-                    scancode=0x0446;
+                    unicode=<0x0447>;
+                    scancode=0x0447;
                     beginrow=0;
                     begincolumn=10;
                     highlightbmpindex=0;
@@ -390,35 +390,35 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x044C>;
-                    scancode=0x044C;
-                    beginrow=1;
-                    begincolumn=0;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x044F>;
-                    scancode=0x044F;
-                    beginrow=1;
-                    begincolumn=1;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
                     unicode=<0x0430>;
                     scancode=0x0430;
                     beginrow=1;
+                    begincolumn=0;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0441>;
+                    scancode=0x0441;
+                    beginrow=1;
+                    begincolumn=1;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0434>;
+                    scancode=0x0434;
+                    beginrow=1;
                     begincolumn=2;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x043E>;
-                    scancode=0x043E;
+                    unicode=<0x0444>;
+                    scancode=0x0444;
                     beginrow=1;
                     begincolumn=3;
                     highlightbmpindex=0;
@@ -426,108 +426,9 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0436>;
-                    scancode=0x0436;
-                    beginrow=1;
-                    begincolumn=4;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
                     unicode=<0x0433>;
                     scancode=0x0433;
                     beginrow=1;
-                    begincolumn=5;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0442>;
-                    scancode=0x0442;
-                    beginrow=1;
-                    begincolumn=6;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x043D>;
-                    scancode=0x043D;
-                    beginrow=1;
-                    begincolumn=7;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0432>;
-                    scancode=0x0432;
-                    beginrow=1;
-                    begincolumn=8;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x043C>;
-                    scancode=0x043C;
-                    beginrow=1;
-                    begincolumn=9;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0447>;
-                    scancode=0x0447;
-                    beginrow=1;
-                    begincolumn=10;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x044E>;
-                    scancode=0x044E;
-                    beginrow=2;
-                    begincolumn=0;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0439>;
-                    scancode=0x0439;
-                    beginrow=2;
-                    begincolumn=1;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x044A>;
-                    scancode=0x044A;
-                    beginrow=2;
-                    begincolumn=2;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x044D>;
-                    scancode=0x044D;
-                    beginrow=2;
-                    begincolumn=3;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0444>;
-                    scancode=0x0444;
-                    beginrow=2;
                     begincolumn=4;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
@@ -536,25 +437,25 @@
                     {
                     unicode=<0x0445>;
                     scancode=0x0445;
-                    beginrow=2;
+                    beginrow=1;
                     begincolumn=5;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x043F>;
-                    scancode=0x043F;
-                    beginrow=2;
+                    unicode=<0x0439>;
+                    scancode=0x0439;
+                    beginrow=1;
                     begincolumn=6;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0440>;
-                    scancode=0x0440;
-                    beginrow=2;
+                    unicode=<0x043A>;
+                    scancode=0x043A;
+                    beginrow=1;
                     begincolumn=7;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
@@ -563,8 +464,62 @@
                     {
                     unicode=<0x043B>;
                     scancode=0x043B;
+                    beginrow=1;
+                    begincolumn=8;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x044E>;
+                    scancode=0x044E;
+                    beginrow=1;
+                    begincolumn=9;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0040>;
+                    scancode=0x0040;
+                    beginrow=1;
+                    begincolumn=10;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0437>;
+                    scancode=0x0437;
                     beginrow=2;
-                    begincolumn=8;
+                    begincolumn=0;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x044C>;
+                    scancode=0x044C;
+                    beginrow=2;
+                    begincolumn=1;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0446>;
+                    scancode=0x0446;
+                    beginrow=2;
+                    begincolumn=2;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0436>;
+                    scancode=0x0436;
+                    beginrow=2;
+                    begincolumn=3;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
@@ -573,6 +528,51 @@
                     unicode=<0x0431>;
                     scancode=0x0431;
                     beginrow=2;
+                    begincolumn=4;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x043D>;
+                    scancode=0x043D;
+                    beginrow=2;
+                    begincolumn=5;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x043C>;
+                    scancode=0x043C;
+                    beginrow=2;
+                    begincolumn=6;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0448>;
+                    scancode=0x0448;
+                    beginrow=2;
+                    begincolumn=7;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0449>;
+                    scancode=0x0449;
+                    beginrow=2;
+                    begincolumn=8;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x002C>;
+                    scancode=0x002C;
+                    beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
@@ -630,8 +630,8 @@
                 {
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x044B>;
-                    scancode=0x044B;
+                    unicode=<0x042F>;
+                    scancode=0x042F;
                     beginrow=0;
                     begincolumn=0;
                     highlightbmpindex=0;
@@ -639,8 +639,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0423>;
-                    scancode=0x0423;
+                    unicode=<0x0412>;
+                    scancode=0x0412;
                     beginrow=0;
                     begincolumn=1;
                     highlightbmpindex=0;
@@ -657,8 +657,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0418>;
-                    scancode=0x0418;
+                    unicode=<0x0420>;
+                    scancode=0x0420;
                     beginrow=0;
                     begincolumn=3;
                     highlightbmpindex=0;
@@ -666,8 +666,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0428>;
-                    scancode=0x0428;
+                    unicode=<0x0422>;
+                    scancode=0x0422;
                     beginrow=0;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -675,8 +675,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0429>;
-                    scancode=0x0429;
+                    unicode=<0x042A>;
+                    scancode=0x042A;
                     beginrow=0;
                     begincolumn=5;
                     highlightbmpindex=0;
@@ -684,8 +684,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x041A>;
-                    scancode=0x041A;
+                    unicode=<0x0423>;
+                    scancode=0x0423;
                     beginrow=0;
                     begincolumn=6;
                     highlightbmpindex=0;
@@ -693,8 +693,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0421>;
-                    scancode=0x0421;
+                    unicode=<0x0418>;
+                    scancode=0x0418;
                     beginrow=0;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -702,8 +702,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0414>;
-                    scancode=0x0414;
+                    unicode=<0x041E>;
+                    scancode=0x041E;
                     beginrow=0;
                     begincolumn=8;
                     highlightbmpindex=0;
@@ -711,8 +711,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0417>;
-                    scancode=0x0417;
+                    unicode=<0x041F>;
+                    scancode=0x041F;
                     beginrow=0;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -720,8 +720,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0426>;
-                    scancode=0x0426;
+                    unicode=<0x0427>;
+                    scancode=0x0427;
                     beginrow=0;
                     begincolumn=10;
                     highlightbmpindex=0;
@@ -729,35 +729,35 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x042C>;
-                    scancode=0x042C;
-                    beginrow=1;
-                    begincolumn=0;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x042F>;
-                    scancode=0x042F;
-                    beginrow=1;
-                    begincolumn=1;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
                     unicode=<0x0410>;
                     scancode=0x0410;
                     beginrow=1;
+                    begincolumn=0;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0421>;
+                    scancode=0x0421;
+                    beginrow=1;
+                    begincolumn=1;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0414>;
+                    scancode=0x0414;
+                    beginrow=1;
                     begincolumn=2;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x041E>;
-                    scancode=0x041E;
+                    unicode=<0x0424>;
+                    scancode=0x0424;
                     beginrow=1;
                     begincolumn=3;
                     highlightbmpindex=0;
@@ -765,108 +765,9 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0416>;
-                    scancode=0x0416;
-                    beginrow=1;
-                    begincolumn=4;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
                     unicode=<0x0413>;
                     scancode=0x0413;
                     beginrow=1;
-                    begincolumn=5;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0422>;
-                    scancode=0x0422;
-                    beginrow=1;
-                    begincolumn=6;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x041D>;
-                    scancode=0x041D;
-                    beginrow=1;
-                    begincolumn=7;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0412>;
-                    scancode=0x0412;
-                    beginrow=1;
-                    begincolumn=8;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x041C>;
-                    scancode=0x041C;
-                    beginrow=1;
-                    begincolumn=9;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0427>;
-                    scancode=0x0427;
-                    beginrow=1;
-                    begincolumn=10;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x042E>;
-                    scancode=0x042E;
-                    beginrow=2;
-                    begincolumn=0;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0419>;
-                    scancode=0x0419;
-                    beginrow=2;
-                    begincolumn=1;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x042A>;
-                    scancode=0x042A;
-                    beginrow=2;
-                    begincolumn=2;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x042D>;
-                    scancode=0x042D;
-                    beginrow=2;
-                    begincolumn=3;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0424>;
-                    scancode=0x0424;
-                    beginrow=2;
                     begincolumn=4;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
@@ -875,25 +776,25 @@
                     {
                     unicode=<0x0425>;
                     scancode=0x0425;
-                    beginrow=2;
+                    beginrow=1;
                     begincolumn=5;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x041F>;
-                    scancode=0x041F;
-                    beginrow=2;
+                    unicode=<0x0419>;
+                    scancode=0x0419;
+                    beginrow=1;
                     begincolumn=6;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0420>;
-                    scancode=0x0420;
-                    beginrow=2;
+                    unicode=<0x041A>;
+                    scancode=0x041A;
+                    beginrow=1;
                     begincolumn=7;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
@@ -902,8 +803,62 @@
                     {
                     unicode=<0x041B>;
                     scancode=0x041B;
+                    beginrow=1;
+                    begincolumn=8;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x042E>;
+                    scancode=0x042E;
+                    beginrow=1;
+                    begincolumn=9;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x002F>;
+                    scancode=0x002F;
+                    beginrow=1;
+                    begincolumn=10;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0417>;
+                    scancode=0x0417;
                     beginrow=2;
-                    begincolumn=8;
+                    begincolumn=0;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x042C>;
+                    scancode=0x042C;
+                    beginrow=2;
+                    begincolumn=1;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0426>;
+                    scancode=0x0426;
+                    beginrow=2;
+                    begincolumn=2;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0416>;
+                    scancode=0x0416;
+                    beginrow=2;
+                    begincolumn=3;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
@@ -912,7 +867,43 @@
                     unicode=<0x0411>;
                     scancode=0x0411;
                     beginrow=2;
-                    begincolumn=9;
+                    begincolumn=4;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x041D>;
+                    scancode=0x041D;
+                    beginrow=2;
+                    begincolumn=5;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x041C>;
+                    scancode=0x041C;
+                    beginrow=2;
+                    begincolumn=6;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0428>;
+                    scancode=0x0428;
+                    beginrow=2;
+                    begincolumn=7;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0429>;
+                    scancode=0x0429;
+                    beginrow=2;
+                    begincolumn=8;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
@@ -921,6 +912,15 @@
                     unicode=<0x003F>;
                     scancode=0x003F;
                     beginrow=2;
+                    begincolumn=9;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0021>;
+                    scancode=0x0021;
+                    beginrow=2;
                     begincolumn=10;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
--- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_59.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_59.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -431,8 +431,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x003F>;
-                    scancode=0x003F;
+                    unicode=<0x0040>;
+                    scancode=0x0040;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -650,8 +650,8 @@
                     },     
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002F>;
-                    scancode=0x002F;
+                    unicode=<0x0022>;
+                    scancode=0x0022;
                     beginrow=1;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -722,8 +722,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002B>;
-                    scancode=0x002B;
+                    unicode=<0x003F>;
+                    scancode=0x003F;
                     beginrow=2;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -731,18 +731,18 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002D>;
-                    scancode=0x002D;
-                    beginrow=2;
-                    begincolumn=8;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
                     unicode=<0x0021>;
                     scancode=0x0021;
                     beginrow=2;
+                    begincolumn=8;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x002F>;
+                    scancode=0x002F;
+                    beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
--- a/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_70.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputgenericvkb/srcdata/peninputvkbwindowconfiginfo_70.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -431,8 +431,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x003F>;
-                    scancode=0x003F;
+                    unicode=<0x0040>;
+                    scancode=0x0040;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -650,8 +650,8 @@
                     },     
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002F>;
-                    scancode=0x002F;
+                    unicode=<0x0022>;
+                    scancode=0x0022;
                     beginrow=1;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -722,8 +722,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002B>;
-                    scancode=0x002B;
+                    unicode=<0x003F>;
+                    scancode=0x003F;
                     beginrow=2;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -731,18 +731,18 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002D>;
-                    scancode=0x002D;
-                    beginrow=2;
-                    begincolumn=8;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
                     unicode=<0x0021>;
                     scancode=0x0021;
                     beginrow=2;
+                    begincolumn=8;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x002F>;
+                    scancode=0x002F;
+                    beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
--- a/textinput/peninputsplititut/src/peninputsplititutwesternuimgr.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputsplititut/src/peninputsplititutwesternuimgr.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -133,14 +133,23 @@
         }
 
     iCurrentState = newstate;    
-    if(DataMgr()->IsUpdate())  
-    	{
-    	DataMgr()->SetUpdate(EFalse);
-    	CSplitItutUiLayout* itutLayout = 
-			static_cast<CSplitItutUiLayout*>( LayoutContext()->UiLayout() );
-		itutLayout->SizeChanged( NULL );
-    	}
-    iCurrentState->OnEntryL();
+    if ( DataMgr()->IsUpdate() )  
+        {
+        DataMgr()->SetUpdate( EFalse );
+        CSplitItutUiLayout* itutLayout = 
+            static_cast<CSplitItutUiLayout*>( LayoutContext()->UiLayout() );
+        itutLayout->SizeChanged( NULL );
+
+        iCurrentState->OnEntryL();
+        
+        //redraw layout immediately to minimize flicker
+        itutLayout->DisableLayoutDrawing( EFalse );
+        itutLayout->Draw();
+        }
+    else
+        {
+        iCurrentState->OnEntryL();
+        }
     }
 
 // ---------------------------------------------------------------------------
--- a/textinput/peninputsplitqwerty/inc/peninputsplitqwertylayout.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputsplitqwerty/inc/peninputsplitqwertylayout.h	Thu Aug 19 10:15:25 2010 +0300
@@ -113,6 +113,13 @@
      */
     virtual ~CPeninputSplitQwertyLayout();
 
+    /**
+     * Check if  ITI is enabled.
+     *
+     * @return ETrue if ITI is enabled.
+     */
+    inline TBool IsEnableITI() const;
+    
 public: // From base class CPeninputCommonLayout
 
     /**
@@ -277,5 +284,12 @@
     TBool iITIEnabled;
     };
 
+/**
+* Check if  ITI is enabled.
+*/ 
+inline TBool CPeninputSplitQwertyLayout::IsEnableITI() const
+    {
+    return iITIEnabled;
+    }
 
 #endif // C_PENINPUTSPLITQWERTYLAYOUT_H
--- a/textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputsplitqwerty/inc/peninputsplitqwertywindow.h	Thu Aug 19 10:15:25 2010 +0300
@@ -291,6 +291,14 @@
     TBool HandleVirtualKeyUpEvent( TInt aEventType, CFepUiBaseCtrl* aCtrl,
                                    const TDesC& aEventData );
 
+    /**
+     * Submit dead key
+     *
+     * @param abuf Dead key buffer 
+     * @return None
+     */   
+    void SubmitDeadKeyL( const TDesC& abuf );
+
     /*
      * Set dead key
      *
--- a/textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputsplitqwerty/src/peninputsplitqwertywindow.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -62,6 +62,8 @@
 // Constants
 const TInt KPeninputVkbWndInvalidIndex = -1;
 const TInt KInvalidImg = -1 ;
+const TInt KKeyCodeSize = 1;
+const TInt KKeyDouble = 2;
 
 _LIT( KVkbWindowResourceFile, "z:\\resource\\plugins\\peninputssqwin.rsc" );
 _LIT( KConfigurationResourceFile, "z:\\resource\\plugins\\peninputssqwinconfiginfo_" );
@@ -550,7 +552,9 @@
             break;
         case EEventVirtualKeyUnLatched:
             {
-            UiLayout()->SignalOwner( ESignalKeyEvent, iNewDeadKeyBuf );
+            // Sumbit Deadkey
+            TRAP_IGNORE( SubmitDeadKeyL( iNewDeadKeyBuf ) );
+             
             TBool deadKeyChange = EFalse;
             iLayoutContext->SetData( EAkninputDataTypeLatchedSet, &deadKeyChange );
             iNewDeadKeyBuf = KNullDesC;
@@ -578,13 +582,21 @@
             TInt latchedFlag = IntContext( EAkninputDataTypeLatchedSet );
             if ( latchedFlag )
                 {
-                TInt length = aEventData.Length() + iNewDeadKeyBuf.Length();
-                HBufC* newCharBuf = HBufC::New( length );
-                if ( newCharBuf )
+                HBufC* newCharBuf = HBufC::New( KKeyDouble * iNewDeadKeyBuf.Length() 
+                                                + aEventData.Length() );
+                if( newCharBuf )
                     {
+                    CPeninputSplitQwertyLayout* layout 
+                         = static_cast<CPeninputSplitQwertyLayout*>( UiLayout() );
+                    if( layout->IsEnableITI() )
+                        {
+                        // If ITI is open, double same keys should be send for one dead key,
+                        // core will handle them as one key.                    
+                        newCharBuf->Des().Append( iNewDeadKeyBuf );
+                        }
                     newCharBuf->Des().Append( iNewDeadKeyBuf );
                     newCharBuf->Des().Append( aEventData );
-                    }                
+                    }
                 
                 UnLatchDeadKey( iNewDeadKeyBuf );
 
@@ -599,6 +611,7 @@
                     }
                 iNewDeadKeyBuf = KNullDesC;
                 delete newCharBuf;
+                newCharBuf = NULL;
                 }
             }
             break;
@@ -776,10 +789,11 @@
         iOldDeadKeyBuf = iNewDeadKeyBuf;
         iNewDeadKeyBuf = deadKey;
 
-        // When type another DeadKey, submit the previous one.
-        UiLayout()->SignalOwner( ESignalKeyEvent, iOldDeadKeyBuf );
+        // Submit old Deadkey
+        TRAP_IGNORE( SubmitDeadKeyL( iOldDeadKeyBuf ) );
+     
         // Unlatch the previous DeadKey
-        UnLatchDeadKey(iOldDeadKeyBuf);
+        UnLatchDeadKey( iOldDeadKeyBuf );
         }
     else
         {
@@ -796,6 +810,31 @@
     }
 
 // ---------------------------------------------------------------------------
+// Submit dead key
+// ---------------------------------------------------------------------------
+//
+void CPeninputSplitQwertyWindow::SubmitDeadKeyL( const TDesC& abuf )
+    {
+    HBufC* newCharBuf = HBufC::NewL( KKeyDouble * abuf.Length() );
+    if( newCharBuf )
+        {
+        CPeninputSplitQwertyLayout* layout 
+                = static_cast<CPeninputSplitQwertyLayout*>( UiLayout() );
+        if( layout->IsEnableITI() )
+            {
+            // If ITI is open, double same keys should be send for one dead key,
+            // core will handle them as one key.
+            newCharBuf->Des().Append( abuf );
+            }
+        newCharBuf->Des().Append( abuf );
+        
+        // Submit DeadKey
+        UiLayout()->SignalOwner( ESignalKeyEvent, *newCharBuf );
+        delete newCharBuf;
+        newCharBuf = NULL;
+        }
+    }
+// ---------------------------------------------------------------------------
 // Handle virtual key up event
 // ---------------------------------------------------------------------------
 //
@@ -1682,14 +1721,39 @@
 //
  TBool CPeninputSplitQwertyWindow::HandleDeadKeyL( TInt aEventType, 
                                                    const TDesC& aEventData )
-     {
+    {
     // Set DeadKey to unlatched state
     TBool deadKeyChange = EFalse;
     iLayoutContext->SetData( EAkninputDataTypeLatchedSet, &deadKeyChange );
     UnLatchDeadKey( iNewDeadKeyBuf );
 
+    // Handle dead key when ITI is enable
+    CPeninputSplitQwertyLayout* layout 
+                      = static_cast<CPeninputSplitQwertyLayout*>( UiLayout() );
+    if ( layout->IsEnableITI() )
+         {
+         TBuf<KKeyCodeSize> buf;
+         TKeyEvent* event = (TKeyEvent*) aEventData.Ptr();
+         buf.Append( event->iCode );
+
+         HBufC* newCharBuf = HBufC::NewL( iNewDeadKeyBuf.Length() + buf.Length() );
+         if( newCharBuf )
+             {
+             newCharBuf->Des().Append( iNewDeadKeyBuf );
+             newCharBuf->Des().Append( buf );
+
+             // Submit DeadKey + Key at the same time
+             UiLayout()->SignalOwner(ESignalKeyEvent,*newCharBuf);
+
+             delete newCharBuf;
+             newCharBuf = NULL;
+             }
+         
+         return ETrue;
+         }
+     
     // Get the accent char
-    HBufC* newCharBuf = HBufC::NewL( 1 );
+    HBufC* newCharBuf = HBufC::NewL( KKeyCodeSize );
     
     TBool handled = HandleAccentCharEvent( aEventType, 
                                            aEventData, 
@@ -1702,13 +1766,15 @@
         UiLayout()->SignalOwner( ESignalKeyEvent, *newCharBuf );
         iNewDeadKeyBuf = KNullDesC;
         delete newCharBuf;
+        newCharBuf = NULL;
         return ETrue;
         }
     
     delete newCharBuf;
+    newCharBuf = NULL;
     
     return EFalse;
-     }
+    }
 
  // --------------------------------------------------------------------------
  // Handle resource of button(base on language direction)
--- a/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_01.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_01.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -1051,8 +1051,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0022>;
-                    scancode=0x0022;
+                    unicode=<0x0026>;
+                    scancode=0x0026;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -1164,8 +1164,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0026>;
-                    scancode=0x0026;
+                    unicode=<0x0022>;
+                    scancode=0x0022;
                     beginrow=0;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -1353,8 +1353,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x00A2>;
-                    scancode=0x00A2;
+                    unicode=<0x20AA>;
+                    scancode=0x20AA;
                     beginrow=2;
                     begincolumn=8;
                     highlightbmpindex=0;
@@ -1362,8 +1362,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x20AA>;
-                    scancode=0x20AA;
+                    unicode=<0x00A2>;
+                    scancode=0x00A2;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
--- a/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_10.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_10.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -463,8 +463,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x003F>;
-                    scancode=0x003F;
+                    unicode=<0x0040>;
+                    scancode=0x0040;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -685,8 +685,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002F>;
-                    scancode=0x002F;
+                    unicode=<0x0027>;
+                    scancode=0x0027;
                     beginrow=1;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -757,8 +757,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002B>;
-                    scancode=0x002B;
+                    unicode=<0x002C>;
+                    scancode=0x002C;
                     beginrow=2;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -766,8 +766,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002D>;
-                    scancode=0x002D;
+                    unicode=<0x002E>;
+                    scancode=0x002E;
                     beginrow=2;
                     begincolumn=8;
                     highlightbmpindex=0;
@@ -775,8 +775,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0021>;
-                    scancode=0x0021;
+                    unicode=<0x0040>;
+                    scancode=0x0040;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -2734,8 +2734,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0070>;
-                    scancode=0x0070;
+                    unicode=<0x002A>;
+                    scancode=0x002A;
                     beginrow=0;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -2761,8 +2761,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x003B>;
-                    scancode=0x003B;
+                    unicode=<0x0026>;
+                    scancode=0x0026;
                     beginrow=0;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -2779,8 +2779,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x003F>;
-                    scancode=0x003F;
+                    unicode=<0x0025>;
+                    scancode=0x0025;
                     beginrow=0;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -2824,8 +2824,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0077>;
-                    scancode=0x0077;
+                    unicode=<0x0070>;
+                    scancode=0x0070;
                     beginrow=1;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -2833,8 +2833,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002D>;
-                    scancode=0x002D;
+                    unicode=<0x0021>;
+                    scancode=0x0021;
                     beginrow=1;
                     begincolumn=5;
                     highlightbmpindex=0;
@@ -2842,8 +2842,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x005F>;
-                    scancode=0x005F;
+                    unicode=<0x0024>;
+                    scancode=0x0024;
                     beginrow=1;
                     begincolumn=6;
                     highlightbmpindex=0;
@@ -2869,8 +2869,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0021>;
-                    scancode=0x0021;
+                    unicode=<0x005F>;
+                    scancode=0x005F;
                     beginrow=1;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -2914,8 +2914,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002A>;
-                    scancode=0x002A;
+                    unicode=<0x0077>;
+                    scancode=0x0077;
                     beginrow=2;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -2923,8 +2923,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0040>;
-                    scancode=0x0040;
+                    unicode=<0x002D>;
+                    scancode=0x002D;
                     beginrow=2;
                     begincolumn=5;
                     highlightbmpindex=0;
@@ -2932,8 +2932,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002F>;
-                    scancode=0x002F;
+                    unicode=<0x003D>;
+                    scancode=0x003D;
                     beginrow=2;
                     begincolumn=6;
                     highlightbmpindex=0;
@@ -2941,26 +2941,26 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
+                    unicode=<0x003F>;
+                    scancode=0x003F;
+                    beginrow=2;
+                    begincolumn=7;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+	PENINPUT_LAYOUT_UNIT_KEY
+                    {
                     unicode=<0x005C>;
                     scancode=0x005C;
                     beginrow=2;
-                    begincolumn=7;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-	PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0027>;
-                    scancode=0x0027;
-                    beginrow=2;
                     begincolumn=8;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0022>;
-                    scancode=0x0022;
+                    unicode=<0x002F>;
+                    scancode=0x002F;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -3046,8 +3046,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x007E>;
-                    scancode=0x007E;
+                    unicode=<0x003B>;
+                    scancode=0x003B;
                     beginrow=0;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -3055,8 +3055,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x005E>;
-                    scancode=0x005E;
+                    unicode=<0x201E>;
+                    scancode=0x201E;
                     beginrow=0;
                     begincolumn=5;
                     highlightbmpindex=0;
@@ -3064,8 +3064,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0060>;
-                    scancode=0x0060;
+                    unicode=<0x201D>;
+                    scancode=0x201D;
                     beginrow=0;
                     begincolumn=6;
                     highlightbmpindex=0;
@@ -3073,8 +3073,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0026>;
-                    scancode=0x0026;
+                    unicode=<0x005F>;
+                    scancode=0x005F;
                     beginrow=0;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -3082,8 +3082,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x003D>;
-                    scancode=0x003D;
+                    unicode=<0x003C>;
+                    scancode=0x003C;
                     beginrow=0;
                     begincolumn=8;
                     highlightbmpindex=0;
@@ -3091,8 +3091,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x00BF>;
-                    scancode=0x00BF;
+                    unicode=<0x003E>;
+                    scancode=0x003E;
                     beginrow=0;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -3136,8 +3136,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0025>;
-                    scancode=0x0025;
+                    unicode=<0x005E>;
+                    scancode=0x005E;
                     beginrow=1;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -3145,8 +3145,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x005B>;
-                    scancode=0x005B;
+                    unicode=<0x0060>;
+                    scancode=0x0060;
                     beginrow=1;
                     begincolumn=5;
                     highlightbmpindex=0;
@@ -3154,8 +3154,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x005D>;
-                    scancode=0x005D;
+                    unicode=<0x00B4>;
+                    scancode=0x00B4;
                     beginrow=1;
                     begincolumn=6;
                     highlightbmpindex=0;
@@ -3163,8 +3163,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x201E>;
-                    scancode=0x201E;
+                    unicode=<0x007E>;
+                    scancode=0x007E;
                     beginrow=1;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -3172,8 +3172,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x201D>;
-                    scancode=0x201D;
+                    unicode=<0x0027>;
+                    scancode=0x0027;
                     beginrow=1;
                     begincolumn=8;
                     highlightbmpindex=0;
@@ -3181,8 +3181,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x00A1>;
-                    scancode=0x00A1;
+                    unicode=<0x0022>;
+                    scancode=0x0022;
                     beginrow=1;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -3226,8 +3226,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0045>;
-                    scancode=0x0045;
+                    unicode=<0x007B>;
+                    scancode=0x007B;
                     beginrow=2;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -3235,8 +3235,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x20AC>;
-                    scancode=0x20AC;
+                    unicode=<0x007D>;
+                    scancode=0x007D;
                     beginrow=2;
                     begincolumn=5;
                     highlightbmpindex=0;
@@ -3244,8 +3244,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x00A3>;
-                    scancode=0x00A3;
+                    unicode=<0x005B>;
+                    scancode=0x005B;
                     beginrow=2;
                     begincolumn=6;
                     highlightbmpindex=0;
@@ -3253,8 +3253,8 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0024>;
-                    scancode=0x0024;
+                    unicode=<0x005D>;
+                    scancode=0x005D;
                     beginrow=2;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -3262,18 +3262,18 @@
                     },
 	PENINPUT_LAYOUT_UNIT_KEY
                     {
+                    unicode=<0x007C>;
+                    scancode=0x007C;
+                    beginrow=2;
+                    begincolumn=8;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+	PENINPUT_LAYOUT_UNIT_KEY
+                    {
                     unicode=<0x00A2>;
                     scancode=0x00A2;
                     beginrow=2;
-                    begincolumn=8;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-	PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x20AA>;
-                    scancode=0x20AA;
-                    beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
--- a/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_18.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_18.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -463,8 +463,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x003F>;
-                    scancode=0x003F;
+                    unicode=<0x0040>;
+                    scancode=0x0040;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -685,8 +685,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002F>;
-                    scancode=0x002F;
+                    unicode=<0x0022>;
+                    scancode=0x0022;
                     beginrow=1;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -757,8 +757,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002B>;
-                    scancode=0x002B;
+                    unicode=<0x003F>;
+                    scancode=0x003F;
                     beginrow=2;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -766,18 +766,18 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002D>;
-                    scancode=0x002D;
-                    beginrow=2;
-                    begincolumn=8;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
                     unicode=<0x0021>;
                     scancode=0x0021;
                     beginrow=2;
+                    begincolumn=8;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x002F>;
+                    scancode=0x002F;
+                    beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
--- a/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_39.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_39.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -463,8 +463,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x003F>;
-                    scancode=0x003F;
+                    unicode=<0x0040>;
+                    scancode=0x0040;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -685,8 +685,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002F>;
-                    scancode=0x002F;
+                    unicode=<0x0022>;
+                    scancode=0x0022;
                     beginrow=1;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -757,8 +757,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002B>;
-                    scancode=0x002B;
+                    unicode=<0x003F>;
+                    scancode=0x003F;
                     beginrow=2;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -766,18 +766,18 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002D>;
-                    scancode=0x002D;
-                    beginrow=2;
-                    begincolumn=8;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
                     unicode=<0x0021>;
                     scancode=0x0021;
                     beginrow=2;
+                    begincolumn=8;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x002F>;
+                    scancode=0x002F;
+                    beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
--- a/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_42.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_42.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -291,8 +291,8 @@
                 {
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002C>;
-                    scancode=0x002C;
+                    unicode=<0x044F>;
+                    scancode=0x044F;
                     beginrow=0;
                     begincolumn=0;
                     highlightbmpindex=0;
@@ -300,8 +300,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0443>;
-                    scancode=0x0443;
+                    unicode=<0x0432>;
+                    scancode=0x0432;
                     beginrow=0;
                     begincolumn=1;
                     highlightbmpindex=0;
@@ -318,8 +318,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0438>;
-                    scancode=0x0438;
+                    unicode=<0x0440>;
+                    scancode=0x0440;
                     beginrow=0;
                     begincolumn=3;
                     highlightbmpindex=0;
@@ -327,8 +327,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0448>;
-                    scancode=0x0448;
+                    unicode=<0x0442>;
+                    scancode=0x0442;
                     beginrow=0;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -336,8 +336,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0449>;
-                    scancode=0x0449;
+                    unicode=<0x044A>;
+                    scancode=0x044A;
                     beginrow=0;
                     begincolumn=5;
                     highlightbmpindex=0;
@@ -345,8 +345,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x043A>;
-                    scancode=0x043A;
+                    unicode=<0x0443>;
+                    scancode=0x0443;
                     beginrow=0;
                     begincolumn=6;
                     highlightbmpindex=0;
@@ -354,8 +354,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0441>;
-                    scancode=0x0441;
+                    unicode=<0x0438>;
+                    scancode=0x0438;
                     beginrow=0;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -363,8 +363,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0434>;
-                    scancode=0x0434;
+                    unicode=<0x043E>;
+                    scancode=0x043E;
                     beginrow=0;
                     begincolumn=8;
                     highlightbmpindex=0;
@@ -372,8 +372,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0437>;
-                    scancode=0x0437;
+                    unicode=<0x043F>;
+                    scancode=0x043F;
                     beginrow=0;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -381,8 +381,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0446>;
-                    scancode=0x0446;
+                    unicode=<0x0447>;
+                    scancode=0x0447;
                     beginrow=0;
                     begincolumn=10;
                     highlightbmpindex=0;
@@ -390,35 +390,35 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x044C>;
-                    scancode=0x044C;
-                    beginrow=1;
-                    begincolumn=0;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x044F>;
-                    scancode=0x044F;
-                    beginrow=1;
-                    begincolumn=1;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
                     unicode=<0x0430>;
                     scancode=0x0430;
                     beginrow=1;
+                    begincolumn=0;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0441>;
+                    scancode=0x0441;
+                    beginrow=1;
+                    begincolumn=1;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0434>;
+                    scancode=0x0434;
+                    beginrow=1;
                     begincolumn=2;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x043E>;
-                    scancode=0x043E;
+                    unicode=<0x0444>;
+                    scancode=0x0444;
                     beginrow=1;
                     begincolumn=3;
                     highlightbmpindex=0;
@@ -426,108 +426,9 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0436>;
-                    scancode=0x0436;
-                    beginrow=1;
-                    begincolumn=4;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
                     unicode=<0x0433>;
                     scancode=0x0433;
                     beginrow=1;
-                    begincolumn=5;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0442>;
-                    scancode=0x0442;
-                    beginrow=1;
-                    begincolumn=6;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x043D>;
-                    scancode=0x043D;
-                    beginrow=1;
-                    begincolumn=7;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0432>;
-                    scancode=0x0432;
-                    beginrow=1;
-                    begincolumn=8;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x043C>;
-                    scancode=0x043C;
-                    beginrow=1;
-                    begincolumn=9;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0447>;
-                    scancode=0x0447;
-                    beginrow=1;
-                    begincolumn=10;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x044E>;
-                    scancode=0x044E;
-                    beginrow=2;
-                    begincolumn=0;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0439>;
-                    scancode=0x0439;
-                    beginrow=2;
-                    begincolumn=1;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x044A>;
-                    scancode=0x044A;
-                    beginrow=2;
-                    begincolumn=2;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x044D>;
-                    scancode=0x044D;
-                    beginrow=2;
-                    begincolumn=3;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0444>;
-                    scancode=0x0444;
-                    beginrow=2;
                     begincolumn=4;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
@@ -536,25 +437,25 @@
                     {
                     unicode=<0x0445>;
                     scancode=0x0445;
-                    beginrow=2;
+                    beginrow=1;
                     begincolumn=5;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x043F>;
-                    scancode=0x043F;
-                    beginrow=2;
+                    unicode=<0x0439>;
+                    scancode=0x0439;
+                    beginrow=1;
                     begincolumn=6;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0440>;
-                    scancode=0x0440;
-                    beginrow=2;
+                    unicode=<0x043A>;
+                    scancode=0x043A;
+                    beginrow=1;
                     begincolumn=7;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
@@ -563,8 +464,62 @@
                     {
                     unicode=<0x043B>;
                     scancode=0x043B;
+                    beginrow=1;
+                    begincolumn=8;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x044E>;
+                    scancode=0x044E;
+                    beginrow=1;
+                    begincolumn=9;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0040>;
+                    scancode=0x0040;
+                    beginrow=1;
+                    begincolumn=10;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0437>;
+                    scancode=0x0437;
                     beginrow=2;
-                    begincolumn=8;
+                    begincolumn=0;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x044C>;
+                    scancode=0x044C;
+                    beginrow=2;
+                    begincolumn=1;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0446>;
+                    scancode=0x0446;
+                    beginrow=2;
+                    begincolumn=2;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0436>;
+                    scancode=0x0436;
+                    beginrow=2;
+                    begincolumn=3;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
@@ -573,6 +528,51 @@
                     unicode=<0x0431>;
                     scancode=0x0431;
                     beginrow=2;
+                    begincolumn=4;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x043D>;
+                    scancode=0x043D;
+                    beginrow=2;
+                    begincolumn=5;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x043C>;
+                    scancode=0x043C;
+                    beginrow=2;
+                    begincolumn=6;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0448>;
+                    scancode=0x0448;
+                    beginrow=2;
+                    begincolumn=7;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0449>;
+                    scancode=0x0449;
+                    beginrow=2;
+                    begincolumn=8;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x002C>;
+                    scancode=0x002C;
+                    beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
@@ -630,8 +630,8 @@
                 {
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x044B>;
-                    scancode=0x044B;
+                    unicode=<0x042F>;
+                    scancode=0x042F;
                     beginrow=0;
                     begincolumn=0;
                     highlightbmpindex=0;
@@ -639,8 +639,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0423>;
-                    scancode=0x0423;
+                    unicode=<0x0412>;
+                    scancode=0x0412;
                     beginrow=0;
                     begincolumn=1;
                     highlightbmpindex=0;
@@ -657,8 +657,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0418>;
-                    scancode=0x0418;
+                    unicode=<0x0420>;
+                    scancode=0x0420;
                     beginrow=0;
                     begincolumn=3;
                     highlightbmpindex=0;
@@ -666,8 +666,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0428>;
-                    scancode=0x0428;
+                    unicode=<0x0422>;
+                    scancode=0x0422;
                     beginrow=0;
                     begincolumn=4;
                     highlightbmpindex=0;
@@ -675,8 +675,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0429>;
-                    scancode=0x0429;
+                    unicode=<0x042A>;
+                    scancode=0x042A;
                     beginrow=0;
                     begincolumn=5;
                     highlightbmpindex=0;
@@ -684,8 +684,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x041A>;
-                    scancode=0x041A;
+                    unicode=<0x0423>;
+                    scancode=0x0423;
                     beginrow=0;
                     begincolumn=6;
                     highlightbmpindex=0;
@@ -693,8 +693,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0421>;
-                    scancode=0x0421;
+                    unicode=<0x0418>;
+                    scancode=0x0418;
                     beginrow=0;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -702,8 +702,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0414>;
-                    scancode=0x0414;
+                    unicode=<0x041E>;
+                    scancode=0x041E;
                     beginrow=0;
                     begincolumn=8;
                     highlightbmpindex=0;
@@ -711,8 +711,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0417>;
-                    scancode=0x0417;
+                    unicode=<0x041F>;
+                    scancode=0x041F;
                     beginrow=0;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -720,8 +720,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0426>;
-                    scancode=0x0426;
+                    unicode=<0x0427>;
+                    scancode=0x0427;
                     beginrow=0;
                     begincolumn=10;
                     highlightbmpindex=0;
@@ -729,35 +729,35 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x042C>;
-                    scancode=0x042C;
-                    beginrow=1;
-                    begincolumn=0;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x042F>;
-                    scancode=0x042F;
-                    beginrow=1;
-                    begincolumn=1;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
                     unicode=<0x0410>;
                     scancode=0x0410;
                     beginrow=1;
+                    begincolumn=0;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0421>;
+                    scancode=0x0421;
+                    beginrow=1;
+                    begincolumn=1;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0414>;
+                    scancode=0x0414;
+                    beginrow=1;
                     begincolumn=2;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x041E>;
-                    scancode=0x041E;
+                    unicode=<0x0424>;
+                    scancode=0x0424;
                     beginrow=1;
                     begincolumn=3;
                     highlightbmpindex=0;
@@ -765,108 +765,9 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0416>;
-                    scancode=0x0416;
-                    beginrow=1;
-                    begincolumn=4;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
                     unicode=<0x0413>;
                     scancode=0x0413;
                     beginrow=1;
-                    begincolumn=5;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0422>;
-                    scancode=0x0422;
-                    beginrow=1;
-                    begincolumn=6;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x041D>;
-                    scancode=0x041D;
-                    beginrow=1;
-                    begincolumn=7;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0412>;
-                    scancode=0x0412;
-                    beginrow=1;
-                    begincolumn=8;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x041C>;
-                    scancode=0x041C;
-                    beginrow=1;
-                    begincolumn=9;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0427>;
-                    scancode=0x0427;
-                    beginrow=1;
-                    begincolumn=10;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x042E>;
-                    scancode=0x042E;
-                    beginrow=2;
-                    begincolumn=0;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0419>;
-                    scancode=0x0419;
-                    beginrow=2;
-                    begincolumn=1;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x042A>;
-                    scancode=0x042A;
-                    beginrow=2;
-                    begincolumn=2;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x042D>;
-                    scancode=0x042D;
-                    beginrow=2;
-                    begincolumn=3;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
-                    unicode=<0x0424>;
-                    scancode=0x0424;
-                    beginrow=2;
                     begincolumn=4;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
@@ -875,25 +776,25 @@
                     {
                     unicode=<0x0425>;
                     scancode=0x0425;
-                    beginrow=2;
+                    beginrow=1;
                     begincolumn=5;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x041F>;
-                    scancode=0x041F;
-                    beginrow=2;
+                    unicode=<0x0419>;
+                    scancode=0x0419;
+                    beginrow=1;
                     begincolumn=6;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x0420>;
-                    scancode=0x0420;
-                    beginrow=2;
+                    unicode=<0x041A>;
+                    scancode=0x041A;
+                    beginrow=1;
                     begincolumn=7;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
@@ -902,8 +803,62 @@
                     {
                     unicode=<0x041B>;
                     scancode=0x041B;
+                    beginrow=1;
+                    begincolumn=8;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x042E>;
+                    scancode=0x042E;
+                    beginrow=1;
+                    begincolumn=9;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x002F>;
+                    scancode=0x002F;
+                    beginrow=1;
+                    begincolumn=10;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0417>;
+                    scancode=0x0417;
                     beginrow=2;
-                    begincolumn=8;
+                    begincolumn=0;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x042C>;
+                    scancode=0x042C;
+                    beginrow=2;
+                    begincolumn=1;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0426>;
+                    scancode=0x0426;
+                    beginrow=2;
+                    begincolumn=2;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0416>;
+                    scancode=0x0416;
+                    beginrow=2;
+                    begincolumn=3;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
@@ -912,7 +867,43 @@
                     unicode=<0x0411>;
                     scancode=0x0411;
                     beginrow=2;
-                    begincolumn=9;
+                    begincolumn=4;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x041D>;
+                    scancode=0x041D;
+                    beginrow=2;
+                    begincolumn=5;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x041C>;
+                    scancode=0x041C;
+                    beginrow=2;
+                    begincolumn=6;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0428>;
+                    scancode=0x0428;
+                    beginrow=2;
+                    begincolumn=7;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0429>;
+                    scancode=0x0429;
+                    beginrow=2;
+                    begincolumn=8;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
                     },
@@ -921,6 +912,15 @@
                     unicode=<0x003F>;
                     scancode=0x003F;
                     beginrow=2;
+                    begincolumn=9;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x0021>;
+                    scancode=0x0021;
+                    beginrow=2;
                     begincolumn=10;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
--- a/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_59.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_59.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -431,8 +431,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x003F>;
-                    scancode=0x003F;
+                    unicode=<0x0040>;
+                    scancode=0x0040;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -650,8 +650,8 @@
                     },     
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002F>;
-                    scancode=0x002F;
+                    unicode=<0x0022>;
+                    scancode=0x0022;
                     beginrow=1;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -722,8 +722,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002B>;
-                    scancode=0x002B;
+                    unicode=<0x003F>;
+                    scancode=0x003F;
                     beginrow=2;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -731,18 +731,18 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002D>;
-                    scancode=0x002D;
-                    beginrow=2;
-                    begincolumn=8;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
                     unicode=<0x0021>;
                     scancode=0x0021;
                     beginrow=2;
+                    begincolumn=8;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x002F>;
+                    scancode=0x002F;
+                    beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
--- a/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_70.rss	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputsplitqwerty/srcdata/peninputssqwinconfiginfo_70.rss	Thu Aug 19 10:15:25 2010 +0300
@@ -431,8 +431,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x003F>;
-                    scancode=0x003F;
+                    unicode=<0x0040>;
+                    scancode=0x0040;
                     beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -650,8 +650,8 @@
                     },     
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002F>;
-                    scancode=0x002F;
+                    unicode=<0x0022>;
+                    scancode=0x0022;
                     beginrow=1;
                     begincolumn=9;
                     highlightbmpindex=0;
@@ -722,8 +722,8 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002B>;
-                    scancode=0x002B;
+                    unicode=<0x003F>;
+                    scancode=0x003F;
                     beginrow=2;
                     begincolumn=7;
                     highlightbmpindex=0;
@@ -731,18 +731,18 @@
                     },
                 PENINPUT_LAYOUT_UNIT_KEY
                     {
-                    unicode=<0x002D>;
-                    scancode=0x002D;
-                    beginrow=2;
-                    begincolumn=8;
-                    highlightbmpindex=0;
-                    highlightmaskbmpindex=0;
-                    },
-                PENINPUT_LAYOUT_UNIT_KEY
-                    {
                     unicode=<0x0021>;
                     scancode=0x0021;
                     beginrow=2;
+                    begincolumn=8;
+                    highlightbmpindex=0;
+                    highlightmaskbmpindex=0;
+                    },
+                PENINPUT_LAYOUT_UNIT_KEY
+                    {
+                    unicode=<0x002F>;
+                    scancode=0x002F;
+                    beginrow=2;
                     begincolumn=9;
                     highlightbmpindex=0;
                     highlightmaskbmpindex=0;
--- a/textinput/peninputvkbkr/src/PeninputVkbKrWindow.cpp	Thu Jul 15 19:01:13 2010 +0300
+++ b/textinput/peninputvkbkr/src/PeninputVkbKrWindow.cpp	Thu Aug 19 10:15:25 2010 +0300
@@ -490,6 +490,13 @@
     else
         {
         iVkbCtrl->SetIrregularKeyBoard(EFalse);
+
+
+        //Add Skin id to Vkb Control for 9 piece picture.
+        iVkbCtrl->SetKeySkinId( EKeyBmpNormal, KAknsIIDQsnFrKeypadButtonFrNormal );
+        iVkbCtrl->SetKeySkinId( EKeyBmpHighlight, KAknsIIDQsnFrKeypadButtonFrPressed );
+        iVkbCtrl->SetKeySkinId( EKeyBmpDim, KAknsIIDQsnFrKeypadButtonFrInactive );
+
         iVkbLayout->SetNonIrregularResourceId(R_AKN_FEP_VKB_NONIRREGULAR_BITMAP);
         iVkbLayout->ConstructFromNonIrregularResourceL();        
         }
@@ -621,8 +628,7 @@
         x = 0;
         y = 0;
         }
-        
-        
+
     for ( TInt i = 0; i < count; i++ )
         {
         controlID = controlList[i]->ControlID();
@@ -687,7 +693,9 @@
                 TRAP_IGNORE(SetRangeBarSizeL(x, y));
                 }
             }
-        }    
+        }
+    
+    RootControl()->Draw(); 
     }
 
 void CPeninputVkbKrWindow::DoCaseChange( TInt aNewCase )
@@ -1195,7 +1203,6 @@
         {
         iTableUpButton->Hide(EFalse);
         iTableUpButton->SizeChanged( exRect, inRect, ETrue );
-        iTableUpButton->Draw();        
         }
 
     iLafMgr->GetButtonRect(
@@ -1258,7 +1265,6 @@
         {
         iTablePageLabel->Hide(EFalse);
         iTablePageLabel->SizeChanged( exRect, inRect, ETrue );
-        iTablePageLabel->Draw();
         }
 
     iLafMgr->GetButtonRect(
@@ -1275,7 +1281,6 @@
         {
         iTableDownButton->Hide(EFalse);
         iTableDownButton->SizeChanged( exRect, inRect, ETrue );
-        iTableDownButton->Draw();
         }
     
     TRect updateArea;
@@ -1471,7 +1476,7 @@
         buf.Format(_L("%d/%d"),SymbolTableUtil::FindIndex(vkbLayoutToUpdate)+1,KMaxSymbolTable);
         //iTablePageLabel->SetCaptionL(buf);
         iTablePageLabel->SetTextL(buf);
-        iTablePageLabel->Draw();
+        RootControl()->Draw();
         }
     }