diff --git a/Sankore_3.1.pro b/Sankore_3.1.pro
index 21dda686..a9a3b7d9 100644
--- a/Sankore_3.1.pro
+++ b/Sankore_3.1.pro
@@ -113,7 +113,7 @@ win32 {
    UB_I18N.path = $$DESTDIR/i18n
    UB_ETC.path = $$DESTDIR
    UB_THIRDPARTY_INTERACTIVE.path = $$DESTDIR/library
-   system(md $$replace(BUILD_DIR, /, \))
+   system(md $$replace(BUILD_DIR, /, \\))
    system(echo "$$VERSION" > $$BUILD_DIR/version)
    system(echo "$$LONG_VERSION" > $$BUILD_DIR/longversion)
    system(echo "$$SVN_VERSION" > $$BUILD_DIR/svnversion)
diff --git a/src/adaptors/UBImportDocument.cpp b/src/adaptors/UBImportDocument.cpp
index 86cd8b80..d57e07b7 100644
--- a/src/adaptors/UBImportDocument.cpp
+++ b/src/adaptors/UBImportDocument.cpp
@@ -39,7 +39,7 @@ QStringList UBImportDocument::supportedExtentions()
 
 QString UBImportDocument::importFileFilter()
 {
-    return tr("Uniboard (*.ubz)");
+    return tr("Sankore 3.1 (*.ubz)");
 }
 
 
@@ -77,9 +77,8 @@ QString UBImportDocument::expandFileToDir(const QFile& pZipFile, const QString&
     }
 
     if (createNewDocument)
-    {
         documentRootFolder = UBPersistenceManager::persistenceManager()->generateUniqueDocumentPath();
-    }
+
 
     QFile out;
     char c;
diff --git a/src/core/UBApplication.cpp b/src/core/UBApplication.cpp
index 4b47f73a..6d70af89 100644
--- a/src/core/UBApplication.cpp
+++ b/src/core/UBApplication.cpp
@@ -199,6 +199,7 @@ int UBApplication::exec(const QString& pFileToImport)
 
     QWebSettings *gs = QWebSettings::globalSettings();
     gs->setAttribute(QWebSettings::PluginsEnabled, true);
+	gs->setAttribute(QWebSettings::JavaEnabled, true);
     gs->setAttribute(QWebSettings::LocalStorageDatabaseEnabled, true);
     gs->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, true);
     gs->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true);
@@ -435,10 +436,12 @@ void UBApplication::decorateActionMenu(QAction* action)
 
             // SANKORE-48: Hide the check update action if the setting
             // EnableAutomaticSoftwareUpdates is false in Uniboard.config
-            if(UBSettings::settings()->appEnableAutomaticSoftwareUpdates->get().toBool())
-            {
+            if(UBSettings::settings()->appEnableAutomaticSoftwareUpdates->get().toBool()){
                 menu->addAction(mainWindow->actionCheckUpdate);
             }
+            else{
+                mainWindow->actionCheckUpdate->setEnabled(false);
+            }
 
 #ifndef Q_WS_X11 // No Podcast on Linux yet
             menu->addAction(mainWindow->actionPodcast);
diff --git a/src/gui/UBDocumentToolsPalette.cpp b/src/gui/UBDocumentToolsPalette.cpp
index 60e39008..c2edb2a6 100644
--- a/src/gui/UBDocumentToolsPalette.cpp
+++ b/src/gui/UBDocumentToolsPalette.cpp
@@ -14,15 +14,10 @@ UBDocumentToolsPalette::UBDocumentToolsPalette(QWidget *parent)
 {
     QList<QAction*> actions;
 
-     if (UBPlatformUtils::hasVirtualKeyboard())
-     {
-         actions << UBApplication::mainWindow->actionVirtualKeyboard;
-     }
+    setActions(actions);
+    setButtonIconSize(QSize(42, 42));
 
-     setActions(actions);
-     setButtonIconSize(QSize(42, 42));
-
-     adjustSizeAndPosition();
+    adjustSizeAndPosition();
 }
 
 
diff --git a/src/gui/UBKeyboardPalette.cpp b/src/gui/UBKeyboardPalette.cpp
index 3a6dc992..a2752511 100644
--- a/src/gui/UBKeyboardPalette.cpp
+++ b/src/gui/UBKeyboardPalette.cpp
@@ -49,6 +49,9 @@ UBKeyboardPalette::UBKeyboardPalette(QWidget *parent)
 QList<UBKeyboardPalette*> UBKeyboardPalette::instances;
 UBKeyboardPalette* UBKeyboardPalette::create(QWidget *parent)
 {
+	if (!UBPlatformUtils::hasVirtualKeyboard())
+		return NULL;
+
 	UBKeyboardPalette* instance = new UBKeyboardPalette(parent);
 	instances.append(instance);
 
diff --git a/src/web/UBWebController.cpp b/src/web/UBWebController.cpp
index 48499329..5bf53c9c 100644
--- a/src/web/UBWebController.cpp
+++ b/src/web/UBWebController.cpp
@@ -24,6 +24,7 @@
 #include "gui/UBScreenMirror.h"
 #include "gui/UBMainWindow.h"
 #include "gui/UBWebToolsPalette.h"
+#include "gui/UBKeyboardPalette.h"
 
 #include "core/UBSettings.h"
 #include "core/UBSetting.h"
@@ -46,6 +47,7 @@ UBWebController::UBWebController(UBMainWindow* mainWindow)
     , mBrowserWidget(0)
     , mTrapFlashController(0)
     , mToolsCurrentPalette(0)
+	, mKeyboardCurrentPalette(0)
     , mToolsPalettePositionned(false)
     , mDownloadViewIsVisible(false)
 
@@ -81,6 +83,7 @@ void UBWebController::webBrowserInstance()
     {
         mCurrentWebBrowser = &mWebBrowserList[WebBrowser];
         mToolsCurrentPalette = &mToolsPaletteList[WebBrowser];
+		mKeyboardCurrentPalette = &mKeyboardPaletteList[WebBrowser];
         mToolsPalettePositionned = mToolsPalettePositionnedList[WebBrowser];
         if (!(*mCurrentWebBrowser))
         {
@@ -137,9 +140,9 @@ void UBWebController::tutorialWebInstance()
 {
     QLocale locale = QLocale();
     QString language = "_" + locale.name().left(2);
-    qDebug() << language;
+
     QString tutorialHtmlIndexFile = 0;
-    QString tutorialPath = "/etc/Paraschool/Tutorial/site" + language + "/index.html";
+    QString tutorialPath = "/etc/Tutorial/tutorial" + language + "/index.html";
 #if defined(Q_WS_MAC)
     tutorialHtmlIndexFile = QApplication::applicationDirPath()+ "/../Resources" + tutorialPath;
 #elif defined(Q_WS_WIN)
@@ -158,6 +161,7 @@ void UBWebController::tutorialWebInstance()
     {
         mCurrentWebBrowser = &mWebBrowserList[Tutorial];
         mToolsCurrentPalette = &mToolsPaletteList[Tutorial];
+		mKeyboardCurrentPalette = &mKeyboardPaletteList[Tutorial];
         mToolsPalettePositionned = &mToolsPalettePositionnedList[Tutorial];
         if (!(*mCurrentWebBrowser))
         {
@@ -195,19 +199,29 @@ void UBWebController::tutorialWebInstance()
 
 void UBWebController::paraschoolWebInstance()
 {
-    QUrl currentUrl("http://host9.paraschool.net/editor/#home");
-
-    if (UBSettings::settings()->webUseExternalBrowser->get().toBool())
-    {
+    QLocale locale = QLocale();
+    QString language = "_" + locale.name().left(2);
+    QString editorPath = "/etc/SankoreEditor/editor" + language + "/index.html";
+    QString editorHtmlIndexFile;
+    #if defined(Q_WS_MAC)
+        editorHtmlIndexFile = QApplication::applicationDirPath() + "/../Resources" + editorPath;
+    #elif defined(Q_WS_WIN)
+        editorHtmlIndexFile = QApplication::applicationDirPath() + editorPath;
+    #else
+        editorHtmlIndexFile = QApplication::applicationDirPath() + editorPath;
+    #endif
+
+    QUrl currentUrl = QUrl::fromLocalFile(editorHtmlIndexFile);
+
+    if (UBSettings::settings()->webUseExternalBrowser->get().toBool()){
         QDesktopServices::openUrl(currentUrl);
     }
-    else
-    {
+    else {
         mCurrentWebBrowser = &mWebBrowserList[Paraschool];
         mToolsCurrentPalette = &mToolsPaletteList[Paraschool];
+		mKeyboardCurrentPalette = &mKeyboardPaletteList[Paraschool];
         mToolsPalettePositionned = &mToolsPalettePositionnedList[Paraschool];
-        if (!(*mCurrentWebBrowser))
-        {
+        if (!(*mCurrentWebBrowser)){
             (*mCurrentWebBrowser) = new WBBrowserWindow(mMainWindow->centralWidget(), mMainWindow, true);
             connect((*mCurrentWebBrowser), SIGNAL(activeViewChange(QWidget*)), this, SLOT(setSourceWidget(QWidget*)));
 
@@ -343,9 +357,12 @@ QPixmap UBWebController::captureCurrentPage()
 
 void UBWebController::setupPalettes()
 {
-	if(!(*mToolsCurrentPalette)){
+	if(!(*mToolsCurrentPalette))
+	{
 		(*mToolsCurrentPalette) = new UBWebToolsPalette((*mCurrentWebBrowser),false);
 
+		(*mKeyboardCurrentPalette) = UBKeyboardPalette::create(*mCurrentWebBrowser);
+
 		connect(mMainWindow->actionWebTrapFlash, SIGNAL(triggered()), this, SLOT(trapFlash()));
 	    connect(mMainWindow->actionWebCustomCapture, SIGNAL(triggered()), this, SLOT(customCapture()));
 		connect(mMainWindow->actionWebWindowCapture, SIGNAL(triggered()), this, SLOT(captureWindow()));
@@ -355,9 +372,12 @@ void UBWebController::setupPalettes()
 		connect(mMainWindow->actionWebShowHideOnDisplay, SIGNAL(toggled(bool)), this, SLOT(toogleMirroring(bool)));
 		connect(mMainWindow->actionWebTrap, SIGNAL(toggled(bool)), this, SLOT(toggleWebTrap(bool)));
 
+		connect(mMainWindow->actionVirtualKeyboard, SIGNAL(toggled(bool)), this, SLOT(showKeyboard(bool)));
+
 		(*mToolsCurrentPalette)->hide();
 		(*mToolsCurrentPalette)->adjustSizeAndPosition();
 
+		(*mKeyboardCurrentPalette)->adjustSizeAndPosition();
 
 		if (controlView()){
 			int left = controlView()->width() - 20 - (*mToolsCurrentPalette)->width();
@@ -381,6 +401,15 @@ void UBWebController::toggleWebTrap(bool checked)
     }
 }
 
+void UBWebController::showKeyboard(bool checked)
+{
+	if (mKeyboardCurrentPalette
+        && (*mKeyboardCurrentPalette))
+    {
+		(*mKeyboardCurrentPalette)->setVisible(checked);
+    }
+}
+
 
 void UBWebController::toggleWebToolsPalette(bool checked)
 {
diff --git a/src/web/UBWebController.h b/src/web/UBWebController.h
index 2a9acd83..1737354f 100644
--- a/src/web/UBWebController.h
+++ b/src/web/UBWebController.h
@@ -20,6 +20,7 @@ class UBMainWindow;
 class UBWebToolsPalette;
 class WBWebView;
 class UBServerXMLHttpRequest;
+class UBKeyboardPalette;
 
 
 class UBWebController : public QObject
@@ -92,6 +93,8 @@ class UBWebController : public QObject
         UBTrapFlashController* mTrapFlashController;
         UBWebToolsPalette** mToolsCurrentPalette;
         UBWebToolsPalette* mToolsPaletteList[TotalNumberOfWebInstances];
+		UBKeyboardPalette** mKeyboardCurrentPalette;
+		UBKeyboardPalette* mKeyboardPaletteList[TotalNumberOfWebInstances];
 
         bool mToolsPalettePositionned;
         bool mToolsPalettePositionnedList[TotalNumberOfWebInstances];
@@ -115,6 +118,9 @@ class UBWebController : public QObject
 
         void toggleWebTrap(bool checked);
 
+		void showKeyboard(bool checked);
+
+
         void getOEmbedProviderListResponse(bool success, const QByteArray& payload);
 
     signals: