Index: main/workspace-admin/i18n/messages_en.xml
===================================================================
--- main/workspace-admin/i18n/messages_en.xml	(revision 31872)
+++ main/workspace-admin/i18n/messages_en.xml	(nonexistent)
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2012 Anyware Services
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-   -->
-<catalogue xml:lang="en">
-
-    <!-- Template -->
-    <message key="WORKSPACE_ADMIN_LABEL_SHORT">Administration</message>
-    <message key="WORKSPACE_ADMIN_LABEL_LONG">Administrator area</message>
-    <message key="WORKSPACE_ADMIN_HOME">Home</message>
-    
-    <!-- Home page -->
-    <message key="WORKSPACE_ADMIN_HELP_LABEL">Help</message>
-    <message key="WORKSPACE_ADMIN_HELP">This area is restricted to application administrators. It allows you to set-up deployment (directories, database access, ...), monitor the JVM, ...</message>
-    <message key="WORKSPACE_ADMIN_VERSION_LABEL">Versions</message>
-    <message key="WORKSPACE_ADMIN_VERSION_DATED">on</message>
-    <message key="WORKSPACE_ADMIN_VERSION_DATEDTIME">at</message>
-    <message key="WORKSPACE_ADMIN_VERSION_UNKNOWN">N/A</message>
-	<message key="WORKSPACE_ADMIN_LINK_WEBSITE">web site</message>
-	<message key="WORKSPACE_ADMIN_LINK_DOCUMENTATION">documentation</message>
-	<message key="WORKSPACE_ADMIN_LINK_ISSUE">issue tracker</message>
-   
-    <!-- No config -->    
-    <message key="WORKSPACE_ADMIN_CONFIG_TITLE">Unable to load configuration</message>
-    <message key="WORKSPACE_ADMIN_CONFIG_TEXT">The application configuration is incomplete or incorrect<br/>You must configure the application before using it.</message>
-    <message key="WORKSPACE_ADMIN_CONFIG_ACT">Configure the application</message>
-    <message key="WORKSPACE_ADMIN_CONFIG_DESCRIPTION">Go to the application parameters management screen</message>
-    
-    <!-- Navigator -->
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_UNSUPPORTED_TITLE">Web browser not supported</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_UNSUPPORTED_TEXT">This application does not support your Web browser or the version you are using{0}.<br/>Here is the list of supported browsers:</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_UNSUPPORTED_TEXT2">Consult the user manual of your application to know the recommanded browsers.</message>
-    
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_UNKNOWN_TITLE">Unknown web browser</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_UNKNOWN_TEXT">This application does not support your Web browser or the version you are using{0}.<br/>Here is the list of supported browsers:</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_UNKNOWN_TEXT2">Consult the user manual of your application to know the recommanded browsers.</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_UNKNOWN_TEXT3">You may try to proceed with your current browser by using the following link:</message>
-    
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_UNKNOWN">Unknown</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_VERSION_ALL">All versions</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_VERSION_UPTO">Up to version {0} included</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_VERSION_AFTER">{0} version and newer</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_VERSION_BETWEEN">From {0} to {1} versions</message>    
-    
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_FORCE_TEXT">If you still want to access this application with your current browser you can force the access by clicking on the link below.<br/>By doing this problems may occured (in display or operational): bugs encountered in this configuration will not be supported.</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_FORCE_LINK">Force access to the application using current browser &gt;&gt;</message>
-</catalogue>
\ No newline at end of file
Index: main/workspace-admin/i18n/messages_fr.xml
===================================================================
--- main/workspace-admin/i18n/messages_fr.xml	(revision 31872)
+++ main/workspace-admin/i18n/messages_fr.xml	(nonexistent)
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2012 Anyware Services
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-   -->
-<catalogue xml:lang="fr">
-
-    <!-- Template -->
-    <message key="WORKSPACE_ADMIN_LABEL_SHORT">Administration</message>
-    <message key="WORKSPACE_ADMIN_LABEL_LONG">Espace administrateur</message>
-    <message key="WORKSPACE_ADMIN_HOME">Accueil</message>
-    
-    <!-- Home page -->
-    <message key="WORKSPACE_ADMIN_HELP_LABEL">Aide</message>
-    <message key="WORKSPACE_ADMIN_HELP">Cet espace de travail, réservé aux administrateurs systèmes, permet de paramétrer le déploiement de l'application (répertoires, accès aux bases de données, ...), de surveiller l'état de la machine virtuelle...</message>
-    <message key="WORKSPACE_ADMIN_VERSION_LABEL">Versions</message>
-    <message key="WORKSPACE_ADMIN_VERSION_DATED">du</message>
-    <message key="WORKSPACE_ADMIN_VERSION_DATEDTIME">à</message>
-    <message key="WORKSPACE_ADMIN_VERSION_UNKNOWN">N/A</message>
-	<message key="WORKSPACE_ADMIN_LINK_WEBSITE">site web</message>
-	<message key="WORKSPACE_ADMIN_LINK_DOCUMENTATION">documentation</message>
-	<message key="WORKSPACE_ADMIN_LINK_ISSUE">suivi de tickets</message>
-
-    <!-- No config -->    
-    <message key="WORKSPACE_ADMIN_CONFIG_TITLE">Impossible de charger la configuration</message>
-    <message key="WORKSPACE_ADMIN_CONFIG_TEXT">La configuration de l'application est incomplète ou incorrecte.<br/>Vous devez configurer l'application avant de pouvoir l'utiliser.</message>
-    <message key="WORKSPACE_ADMIN_CONFIG_ACT">Configurer l'application</message>
-    <message key="WORKSPACE_ADMIN_CONFIG_DESCRIPTION">Aller sur l'écran des paramètres de configuration de l'application</message>
-    
-    <!-- Navigator -->
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_UNSUPPORTED_TITLE">Navigateur internet incompatible</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_UNSUPPORTED_TEXT">L'application n'est pas compatible avec votre navigateur internet ou la version que vous utilisez{0}.<br/>Voici la liste des navigateurs compatibles :</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_UNSUPPORTED_TEXT2">Consultez le manuel utilisateur pour connaître les navigateurs recommandés.</message>
-    
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_UNKNOWN_TITLE">Navigateur internet inconnu</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_UNKNOWN_TEXT">L'application n'est pas compatible avec pas votre navigateur internet ou la version que vous utilisez{0}.<br/>Voici la liste des navigateurs compatibles :</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_UNKNOWN_TEXT2">Consultez le manuel utilisateur pour connaître les navigateurs recommandés.</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_UNKNOWN_TEXT3">Vous pouvez cependant essayer d'utiliser l'application avec votre votre navigateur actuel en utilisant le lien suivant :</message>
-    
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_UNKNOWN">Inconnu</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_VERSION_ALL">Toutes versions</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_VERSION_UPTO">Jusqu'à la version {0} incluse</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_VERSION_AFTER">Version {0} et plus récentes</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_VERSION_BETWEEN">Versions {0} à {1}</message>
-    
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_FORCE_TEXT">Si vous souhaitez tout de même accéder à l'application avec votre navigateur actuel vous pouvez forcer l'accès en cliquant sur le lien ci-dessous.<br/>En faisant cela vous vous exposez à tomber sur des problèmes (d'affichage ou fonctionnel) : les anomalies rencontrées ne seront pas supportées.</message>
-    <message key="WORKSPACE_ADMIN_NAVIGATOR_FORCE_LINK">Forcer l'accès à l'application avec votre navigateur actuel &gt;&gt;</message>
-</catalogue>
\ No newline at end of file
Index: main/workspace-admin/index.xsl
===================================================================
--- main/workspace-admin/index.xsl	(revision 31872)
+++ main/workspace-admin/index.xsl	(nonexistent)
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2015 Anyware Services
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-   -->
-<xsl:stylesheet version="1.0" 
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
-                xmlns:escaper="org.apache.commons.lang.StringEscapeUtils"
-                xmlns:ametys="org.ametys.runtime.plugins.core.ui.AmetysXSLTHelper"
-                xmlns:i18n="http://apache.org/cocoon/i18n/2.1">
-                
-    <xsl:import href="kernel://stylesheets/kernel.xsl"/>
-    
-    <xsl:template match="/">
-        <html>
-            <head>
-                <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
-                <title>Admin test</title>
-                <xsl:call-template name="kernel-base"/>
-                
-                <xsl:variable name="uriPrefix" select="ametys:uriPrefix()"/>
-<!--                 <script type="text/javascript" src="{$uriPrefix}/resources/js/simple.js"></script> -->
-<!-- 		        <script type="text/javascript" src="{$uriPrefix}/resources/js/home.js"></script> -->
-<!-- 		        <script type="text/javascript" src="{$uriPrefix}/resources/js/toggle.js"></script> -->
-<!-- 		        <script type="text/javascript" src="{$uriPrefix}/resources/js/menu.js"></script> -->
-<!-- 		        <script type="text/javascript" src="{$uriPrefix}/resources/js/split.js"></script> -->
-<!-- 		        <script type="text/javascript" src="{$uriPrefix}/resources/js/splittoggle.js"></script> -->
-<!-- 		        <script type="text/javascript" src="{$uriPrefix}/resources/js/components.js"></script> -->
-<!-- 		        <script type="text/javascript" src="{$uriPrefix}/resources/js/contextual.js"></script> -->
-		        <script type="text/javascript" src="{$uriPrefix}/resources/js/base.js"></script>
-            </head>
-            <body>
-            </body>
-        </html>
-    </xsl:template>
-    
-</xsl:stylesheet>
Index: main/workspace-admin/sitemap.xmap
===================================================================
--- main/workspace-admin/sitemap.xmap	(revision 31872)
+++ main/workspace-admin/sitemap.xmap	(working copy)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright 2012 Anyware Services
+   Copyright 2015 Anyware Services
 
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
@@ -15,239 +15,210 @@
    limitations under the License.
    -->
 <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
-
-<!-- =========================== Components ================================ -->
-
-	<map:components>
+    
+    <!-- =========================== Components ================================ -->
+    
+    <map:components>
         <map:generators>
-            <map:generator name="version" src="org.ametys.runtime.plugins.core.administrator.version.VersionsGenerator" logger="org.ametys.runtime.workspaces.admin.sitemap.generator.versions">
-            </map:generator>
-            <map:generator name="desktop" src="org.ametys.runtime.plugins.core.ui.generator.DesktopGenerator" logger="org.ametys.runtime.workspaces.admin.sitemap.generator.desktop">
-                <element>Desktop</element>
-            </map:generator>
+            <map:generator name="workspace" src="org.ametys.runtime.workspace.WorkspaceGenerator" logger="org.ametys.runtime.workspace.WorkspaceGenerator"/>
+            <map:generator name="version" src="org.ametys.runtime.plugins.core.administrator.version.VersionsGenerator" logger="org.ametys.runtime.workspaces.admin.sitemap.generator.versions"/>
+            <map:generator name="user-prefs" src="org.ametys.runtime.plugins.core.userpref.UserPreferencesValuesGenerator"/>
         </map:generators>
         
+        <map:actions>
+            <map:action name="authenticate" src="org.ametys.runtime.workspaces.admin.authentication.AdminAuthenticateAction" logger="org.ametys.runtime.workspaces.admin.sitemap.action.authentication"/>
+            <map:action name="set-authorization-header" src="org.ametys.runtime.workspaces.admin.authentication.SetAuthorizationHeaderAction"  logger="org.ametys.runtime.workspaces.admin.sitemap.action.setheader"/>
+            <map:action name="resource-exists" src="org.apache.cocoon.acting.ResourceExistsAction"/>
+        </map:actions>
+        
         <map:transformers>
             <map:transformer name="minimizer" src="org.ametys.runtime.plugins.core.ui.minimize.MinimizeTransformer"/>
         </map:transformers>
         
-		<map:actions>
-			<map:action name="authenticate" src="org.ametys.runtime.workspaces.admin.authentication.AdminAuthenticateAction" logger="org.ametys.runtime.workspaces.admin.sitemap.action.authentication"/>
-            <map:action name="set-authorization-header" src="org.ametys.runtime.workspaces.admin.authentication.SetAuthorizationHeaderAction" logger="org.ametys.runtime.workspaces.admin.sitemap.action.setheader"/>
-            <map:action name="has-not-right" src="org.ametys.runtime.plugins.core.right.actions.HasRightAction" logger="org.ametys.runtime.plugins.core.administrator.sitemap.action.hasRight">
-                <has-right>false</has-right>
-            </map:action>
-		</map:actions>
-        
-        <map:selectors default="exception">
-            <map:selector logger="org.ametys.runtime.workspaces.admin.sitemap.selector.exception" name="exception" src="org.apache.cocoon.selection.ExceptionSelector">
+         <map:selectors default="exception">
+            <map:selector logger="sitemap.selector.exception" name="exception" src="org.apache.cocoon.selection.ExceptionSelector">
                 <exception class="org.apache.cocoon.ResourceNotFoundException" name="not-found"/>
                 <exception class="org.ametys.runtime.authentication.AccessDeniedException" name="access-denied"/>
                 <exception class="org.ametys.runtime.authentication.AuthorizationRequiredException" name="authorization-required"/>
                 <!-- The statement below tells the selector to unroll as much exceptions as possible -->
                 <exception class="java.lang.Throwable" unroll="true"/>
             </map:selector>
-        </map:selectors>        
-	</map:components>
-
-<!-- =========================== Views =================================== -->
-
-	<map:views>
-		<map:view name="content" from-label="content">
-			<map:serialize type="xml"/>
-		</map:view>
-	</map:views>
-
-<!-- =========================== Pipelines ================================= -->
+        </map:selectors>   
+    </map:components>
+    
+    <!-- =========================== Views =================================== -->
 
-	<map:pipelines>
+    <map:views>
+        <map:view name="content" from-label="content">
+            <map:serialize type="xml"/>
+        </map:view>
+    </map:views>
+    
+    <!-- =========================== Pipelines ================================= -->
+    
+    <map:pipelines>
     
         <map:pipeline internal-only="true">
-            <map:match pattern="homepage-desktop.xml">
-				<map:generate type="desktop" label="content">
-                    <map:parameter name="DesktopManager.ROLE" value="org.ametys.runtime.workspaces.admin.DesktopManager"/>
-				</map:generate>
+            <map:match pattern="workspace.xml">
+                <map:generate type="workspace">
+                    <!-- File names for ribbon and ui-tools can be defined here. Removed the 
+                         parameters to use the default values (ribbon and uitools) -->
+                    <map:parameter name="ribbonFileName" value="admin-ribbon"/>
+                    <map:parameter name="toolsFileName" value="admin-uitools"/>
+                </map:generate>
                 <map:serialize type="xml"/>
             </map:match>
-
-            <map:match pattern="homepage-versions.xml">
-                <map:generate type="version" label="content"/>
+	        
+	        <map:match pattern="homepage-versions.xml">
+	            <map:generate type="version" label="content"/>
+	            <map:serialize type="xml"/>
+	        </map:match>
+	        
+	        <map:match pattern="userprefs/values.xml">
+                <map:generate type="user-prefs">
+                    <map:parameter name="username" value="admin"/>
+                </map:generate>
                 <map:serialize type="xml"/>
             </map:match>
         </map:pipeline>
-        
-        <!-- Resources -->
+            
         <map:pipeline>
             <map:match pattern="resources/**.js">
-                <map:generate src="resources/{1}.js" type="i18nizabletext"/>
+                <!-- FIXME temporary compatible with .i18nfiles -->
+                <map:act type="resource-exists" src="resources/{1}.js">
+                    <map:generate src="resources/{../1}.js" type="i18nizabletext"/>
+                    <map:transform type="i18n">
+                        <map:parameter name="locale" value="{locale:locale}"/>
+                        <map:parameter name="workspace" value="workspace"/><!-- Workspace name have to be hardcoded -->
+                    </map:transform>
+                    <map:serialize type="text" mime-type="text/javascript;charset=utf-8"/>
+                </map:act>
+                <map:generate src="resources/{1}.i18n.js" type="i18nizabletext"/>
                 <map:transform type="i18n">
                     <map:parameter name="locale" value="{locale:locale}"/>
-                    <map:parameter name="workspace" value="{request-attr:workspaceName}"/>
+                    <map:parameter name="workspace" value="workspace"/><!-- Workspace name have to be hardcoded since it can be call through the web workspace -->
                 </map:transform>
                 <map:serialize type="text" mime-type="text/javascript;charset=utf-8"/>
             </map:match>
             
+            <!-- Workspace resources -->
             <map:match pattern="resources/**">
                 <map:read src="resources/{1}"/>
             </map:match>
-        </map:pipeline>
-	
-		<map:pipeline>
-			<!-- redirect to application entry point -->
-			<map:match pattern="">
-				<map:redirect-to uri="index.html"/>
-			</map:match>
-			
-			<!-- unauthenticated pages -->
-			<map:match pattern="public/*.html">
-				<map:generate type="action-result"/>
-				<map:transform src="pages/public/{1}.xsl">
-					<map:parameter name="contextPath" value="{request:contextPath}"/>
-                    <map:parameter name="workspaceName" value="{request-attr:workspaceName}"/>
-                    <map:parameter name="workspaceURI" value="{request-attr:workspaceURI}"/>
-                    
-                    <map:parameter name="redirect" value="{request-param:uri}"/>
-                    <map:parameter name="doc" value="{request-param:doc}"/>
-                    
-                    <map:parameter name="browser" value="{request-param:browser}"/>
-                    <map:parameter name="browserversion" value="{request-param:browserversion}"/>
-                    <map:parameter name="supported" value="{request-param:supported}"/>
-                    <map:parameter name="mode" value="{request-param:mode}"/>
-				</map:transform>
-				<map:transform type="i18n">
-					<map:parameter name="locale" value="{locale:locale}"/>
-                    <map:parameter name="workspace" value="{request-attr:workspaceName}"/>
-				</map:transform>
-                <!-- Do not minimize here. See RUNTIME-877 -->
-				<map:serialize/>
-			</map:match>
-			
-			<!-- *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- -->
-			<!-- Authentication -->
-			<!-- *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- -->			
-			<map:match pattern="**">
-				<map:act type="authenticate"/>
-			</map:match>
+            
+            <!-- base redirection -->
+            <map:match pattern="">
+                <map:redirect-to uri="index.html"/>
+            </map:match>
+            
+            <!-- ************** -->
+            <!-- AUTHENTICATION -->
+            <!-- ************** -->
+            <map:match pattern="**">
+                <map:act type="authenticate"/>
+            </map:match>
             
-			<!-- Page d'index -->
-			<map:match pattern="index.html">
-                <map:aggregate element="Admin" label="content">
-                    <map:part src="cocoon:/homepage-desktop.xml"/>
+            <map:match pattern="index.html">
+                <map:aggregate element="Ametys">
                     <map:part src="cocoon:/homepage-versions.xml"/>
+                    <map:part src="cocoon:/workspace.xml"/>
+                    <map:part src="cocoon:/userprefs/values.xml?prefContext=/WORKSPACE_NAME"/>
                 </map:aggregate>
-               
-				<map:transform type="xslt" src="pages/index.xsl">
-					<map:parameter name="contextPath" value="{request:contextPath}"/>
-                    <map:parameter name="workspaceName" value="{request-attr:workspaceName}"/>
+                <map:transform type="i18n">
+                    <map:parameter name="locale" value="{locale:locale}"/>
+                </map:transform>
+                <map:transform type="xslt" src="stylesheets/index.xsl">
+                    <map:parameter name="contextPath" value="{request:contextPath}"/>
                     <map:parameter name="workspaceURI" value="{request-attr:workspaceURI}"/>
-				</map:transform>
-				<map:transform type="i18n">
-					<map:parameter name="locale" value="{locale:locale}"/>
-                    <map:parameter name="workspace" value="{request-attr:workspaceName}"/>
-				</map:transform>
-                <map:transform type="minimizer" src="{request:contextPath}{request-attr:workspaceURI}/plugins/core"/>
-				<map:serialize/>
-			</map:match>
-			
-			<!-- ******* -->
-			<!-- PLUGINS -->
-			<!-- ******* -->
-			
-			<!-- Pages -->
-			<map:match pattern="plugins/*/**">
-                <map:act type="setter">
-                    <map:parameter name="pluginName" value="{1}"/>
-                </map:act>
-				<map:mount check-reload="yes" src="plugin:{1}://" uri-prefix="plugins/{1}"/>
-			</map:match>
-            
-            <map:match pattern="_internal_plugins/*/**">
-                <map:act type="setter">
-                    <map:parameter name="pluginName" value="{1}"/>
-                </map:act> 
-                <map:mount check-reload="yes" src="plugin:{1}://" uri-prefix="_internal_plugins/{1}"/>
-            </map:match>            
+                    <map:parameter name="workspaceName" value="{request-attr:workspaceName}"/>
+                    <map:parameter name="max-upload-size" value="{config:runtime.upload.max-size}"/>
+                    <map:parameter name="debug-mode-config" value="{config:runtime.debug.ui}"/>
+                    <map:parameter name="debug-mode-request" value="{request-param:debug.ui}"/>
+                </map:transform>
+                <map:transform type="i18n">
+                    <map:parameter name="locale" value="{locale:locale}"/>
+                </map:transform>
+                <map:transform type="minimizer" src="{request:contextPath}{request-attr:workspaceURI}/plugins/core">
+                    <map:parameter name="debug-mode-request" value="{request-param:debug.ui}"/>
+                </map:transform>
+                <map:serialize type="xhtml"/>
+            </map:match>
             
-			<map:match pattern="_plugins/*/**">
+            <!-- Direct plugins url -->
+            <map:match pattern="plugins/*/**">
                 <map:act type="setter">
                     <map:parameter name="pluginName" value="{1}"/>
                 </map:act>
-                
-                <map:aggregate element="Plugins" label="content">
-                    <map:part src="cocoon:/homepage-desktop.xml"/>
-                    <map:part src="cocoon:/homepage-versions.xml"/>
-                    <map:part src="cocoon:/_internal_plugins/{1}/{2}"/>
-                </map:aggregate>
-				<map:transform src="pages/wrapper.xsl">
-					<map:parameter name="contextPath" value="{request:contextPath}"/>
-                    <map:parameter name="workspaceName" value="{request-attr:workspaceName}"/>
-                    <map:parameter name="workspaceURI" value="{request-attr:workspaceURI}"/>
-				</map:transform>
-				<map:transform type="i18n">
-					<map:parameter name="locale" value="{locale:locale}"/>
-					<map:parameter name="plugin" value="{1}"/>
-				</map:transform>
-                <map:transform type="minimizer" src="{request:contextPath}{request-attr:workspaceURI}/plugins/core"/>
-				<map:serialize/>
-			</map:match>
-			
-			<map:handle-errors>
-				<map:select type="exception">
-					<map:when test="not-found">
-		        		<map:generate type="exception" label="content"/>
-		          		<map:transform src="kernel://pages/error/error.xsl">
-	    	        		<map:parameter name="contextPath" value="{request:contextPath}"/>
-		            		<map:parameter name="realpath" value="{realpath:}"/>
-		            		<map:parameter name="pageTitle" value="ADMINISTRATION - Resource not found"/>
-		            		<map:parameter name="code" value="404"/>
-		          		</map:transform>
-                        <map:transform type="i18n">
-                            <map:parameter name="locale" value="{locale:locale}"/>
-                        </map:transform>
-		          		<map:serialize status-code="404"/>		          		
-					</map:when>
-					<map:when test="authorization-required">
-						<map:act type="set-authorization-header"/>
-		        		<map:generate type="exception" label="content"/>
-		          		<map:transform src="kernel://pages/error/error.xsl">
-	    	        		<map:parameter name="contextPath" value="{request:contextPath}"/>
-		            		<map:parameter name="realpath" value="{realpath:}"/>
-		            		<map:parameter name="code" value="401"/>
-		            		<map:parameter name="pageTitle" value="ADMINISTRATION - Authorization required"/>
-		          		</map:transform>
-                        <map:transform type="i18n">
-                            <map:parameter name="locale" value="{locale:locale}"/>
-                        </map:transform>
-		          		<map:serialize status-code="401"/>		          		
-					</map:when>
-					<map:when test="access-denied">
-		        		<map:generate type="exception" label="content"/>
-		          		<map:transform src="kernel://pages/error/error.xsl">
-	    	        		<map:parameter name="contextPath" value="{request:contextPath}"/>
-		            		<map:parameter name="realpath" value="{realpath:}"/>
-		            		<map:parameter name="pageTitle" value="ADMINISTRATION - Access denied"/>
-		            		<map:parameter name="code" value="403"/>
-		          		</map:transform>
-                        <map:transform type="i18n">
-                            <map:parameter name="locale" value="{locale:locale}"/>
-                        </map:transform>
-		          		<map:serialize status-code="403"/>		          		
-					</map:when>
-					<map:otherwise>					
-		        		<map:generate type="exception" label="content"/>
-		          		<map:transform src="kernel://pages/error/error.xsl">
-	    	        		<map:parameter name="contextPath" value="{request:contextPath}"/>
-		            		<map:parameter name="realpath" value="{realpath:}"/>
-		            		<map:parameter name="code" value="500"/>
-                            <map:parameter name="pageTitle" value="ADMINISTRATION - An error occured"/>
-		          		</map:transform>
-                        <map:transform type="i18n">
-                            <map:parameter name="locale" value="{locale:locale}"/>
-                        </map:transform>
-		          		<map:serialize status-code="500"/>		          		
-					</map:otherwise>
-				</map:select>
-			</map:handle-errors>
+                <map:mount check-reload="yes" src="plugin:{1}://" uri-prefix="plugins/{1}"/>
+            </map:match>
+            
+            <!-- ERRORS -->
+            <map:handle-errors>
+                <map:select type="exception">
+                    <map:when test="not-found">
+                        <map:act type="exception" src="404">
+                            <map:generate type="exception" label="content"/>
+                            <map:transform src="{xsl}">
+                                <map:parameter name="realPath" value="{realpath:}"/>
+                                <map:parameter name="contextPath" value="{request:contextPath}"/>
+                                <map:parameter name="code" value="404"/>
+                                <map:parameter name="pageTitle" value="Page not found"/>
+                            </map:transform>
+                            <map:transform type="i18n">
+                                <map:parameter name="locale" value="{locale:locale}"/>
+                            </map:transform>
+                            <map:serialize status-code="404"/>
+                        </map:act>
+                    </map:when>
+                    <map:when test="authorization-required">
+                        <!-- Basic authentication needs to set a special header when this exception is thrown -->
+                        <map:act type="set-authorization-header"/>
+                        <map:act type="exception" src="401">
+                            <map:generate type="exception" label="content"/>
+                            <map:transform src="{xsl}">
+                                <map:parameter name="realPath" value="{realpath:}"/>
+                                <map:parameter name="contextPath" value="{request:contextPath}"/>
+                                <map:parameter name="code" value="401"/>
+                                <map:parameter name="pageTitle" value="Authorization required"/>
+                            </map:transform>
+                            <map:transform type="i18n">
+                                <map:parameter name="locale" value="{locale:locale}"/>
+                            </map:transform>
+                            <map:serialize status-code="401"/>                      
+                        </map:act>
+                    </map:when>
+                    <map:when test="access-denied">
+                        <map:act type="exception" src="403">
+                            <map:generate type="exception" label="content"/>
+                            <map:transform src="{xsl}">
+                                <map:parameter name="realPath" value="{realpath:}"/>
+                                <map:parameter name="contextPath" value="{request:contextPath}"/>
+                                <map:parameter name="code" value="403"/>
+                                <map:parameter name="pageTitle" value="Access denied"/>
+                            </map:transform>
+                            <map:transform type="i18n">
+                                <map:parameter name="locale" value="{locale:locale}"/>
+                            </map:transform>
+                            <map:serialize status-code="403"/>                      
+                        </map:act>
+                    </map:when>
+                    <map:otherwise>
+                        <map:act type="exception" src="500">
+                            <map:generate type="exception" label="content"/>
+                            <map:transform src="{xsl}">
+                                <map:parameter name="realPath" value="{realpath:}"/>
+                                <map:parameter name="contextPath" value="{request:contextPath}"/>
+                                <map:parameter name="code" value="500"/>
+                                <map:parameter name="pageTitle" value="An error occured"/>
+                            </map:transform>
+                            <map:transform type="i18n">
+                                <map:parameter name="locale" value="{locale:locale}"/>
+                            </map:transform>
+                            <map:serialize status-code="500"/>
+                        </map:act>
+                    </map:otherwise>
+                </map:select>
+            </map:handle-errors>
 		</map:pipeline>
 	</map:pipelines>
 </map:sitemap>
Index: main/workspace-admin/src/org/ametys/runtime/workspaces/admin/authentication/AdminAuthenticateAction.java
===================================================================
--- main/workspace-admin/src/org/ametys/runtime/workspaces/admin/authentication/AdminAuthenticateAction.java	(revision 31872)
+++ main/workspace-admin/src/org/ametys/runtime/workspaces/admin/authentication/AdminAuthenticateAction.java	(working copy)
@@ -151,8 +151,12 @@
                 return false;
             }
 
-            try (InputStream is = new FileInputStream(_envContext.getRealPath(ADMINISTRATOR_PASSWORD_FILENAME)))
+            InputStream is = null;
+            
+            try
             {
+                is = new FileInputStream(_envContext.getRealPath(ADMINISTRATOR_PASSWORD_FILENAME));
+                
                 XPath xpath = XPathFactory.newInstance().newXPath();
                 String pass = xpath.evaluate("admin/password", new InputSource(is));
                 if (pass == null || "".equals(pass))
@@ -186,6 +190,13 @@
                 }
                 return "admin".equals(passwd);
             }
+            finally
+            {
+                if (is != null)
+                {
+                    is.close();
+                }
+            }
         }
         catch (Exception e)
         {
Index: main/workspace-admin/stylesheets/index.xsl
===================================================================
--- main/workspace-admin/stylesheets/index.xsl	(revision 0)
+++ main/workspace-admin/stylesheets/index.xsl	(revision 0)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2015 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<xsl:stylesheet version="1.0" 
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+    <xsl:import href="plugin:core://stylesheets/workspace.xsl"/>
+
+    <xsl:template name="ui-extension-load">
+	    <!-- CSS -->
+<!-- 	    <link rel="stylesheet" type="text/css" href="{$workspace-resources}/css/workspace.css" /> -->
+	    
+	    <!-- JS -->
+<!-- 	    <script type="text/javascript" src="{$workspace-resources}/js/workspace.js" /> -->
+    </xsl:template>
+    
+</xsl:stylesheet>
Index: main/workspace-admin/workspace.xml
===================================================================
--- main/workspace-admin/workspace.xml	(revision 31872)
+++ main/workspace-admin/workspace.xml	(working copy)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright 2012 Anyware Services
+   Copyright 2015 Anyware Services
 
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
@@ -16,6 +16,5 @@
    -->
 <workspace xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:noNamespaceSchemaLocation="http://ametys.org/Runtime/1.2/workspace.xsd">
-        
-        <dependencies/>
+
 </workspace>
\ No newline at end of file
Index: main/workspace-admin/src/org/ametys/runtime/workspaces/admin/authentication/AdminAuthenticateAction.java
===================================================================
--- main/workspace-admin/src/org/ametys/runtime/workspaces/admin/authentication/AdminAuthenticateAction.java	(revision 31872)
+++ main/workspace-admin/src/org/ametys/runtime/workspaces/admin/authentication/AdminAuthenticateAction.java	(working copy)
@@ -151,8 +151,12 @@
                 return false;
             }
 
-            try (InputStream is = new FileInputStream(_envContext.getRealPath(ADMINISTRATOR_PASSWORD_FILENAME)))
+            InputStream is = null;
+            
+            try
             {
+                is = new FileInputStream(_envContext.getRealPath(ADMINISTRATOR_PASSWORD_FILENAME));
+                
                 XPath xpath = XPathFactory.newInstance().newXPath();
                 String pass = xpath.evaluate("admin/password", new InputSource(is));
                 if (pass == null || "".equals(pass))
@@ -186,6 +190,13 @@
                 }
                 return "admin".equals(passwd);
             }
+            finally
+            {
+                if (is != null)
+                {
+                    is.close();
+                }
+            }
         }
         catch (Exception e)
         {
