diff --git a/externals/build.sh b/externals/build.sh
index 188b802..1176b3e 100755
--- a/externals/build.sh
+++ b/externals/build.sh
@@ -38,6 +38,14 @@
 echo "============================================="
 patch -N -p0 < cocoon-sitemaptags2daisy-plugin.patch
 
+# Invoke patch
+echo ""
+echo ""
+echo "============================================="
+echo "Apply patch to cocoon test fail (comment test), TODO : report this issue"
+echo "============================================="
+patch -N -p0 < image-op-test-fail.patch
+
 
 # Invoke maven
 cd cocoon-rev-959219
@@ -49,6 +57,8 @@
 
 #"-Xmx256m"
 #mvn install
-mvn -P allblocks -Dmaven.test.skip=true install
+# remove test skiping as some dependencies are on test jar
+#mvn -P allblocks -Dmaven.test.skip=true install
+mvn -P allblocks install
 
 echo $MAVEN_OPTS
\ No newline at end of file
diff --git a/org.apache.lenya.core.api/pom.xml b/org.apache.lenya.core.api/pom.xml
index 4491757..6ac0075 100644
--- a/org.apache.lenya.core.api/pom.xml
+++ b/org.apache.lenya.core.api/pom.xml
@@ -14,70 +14,97 @@
   <artifactId>lenya-core-api</artifactId>
   <packaging>jar</packaging>
   <name>Apache Lenya Core API</name>
-  
+
+	<!-- TODO : see how to rename it and extract xml related stuff (merge with core-impl one)
+		TODO : see how to clean the build and properties parts  
+	 -->
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+	<version>2.2</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>test-jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>  
   
   <properties>
     <lenya.home>${basedir}/..</lenya.home>
   </properties>
   
   <dependencies>
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>servlet-api</artifactId>
-    </dependency>
+  	<dependency>
+  		<groupId>commons-logging</groupId>
+  		<artifactId>commons-logging</artifactId>
+  	</dependency>
+<!--    <dependency>-->
+<!--      <groupId>javax.servlet</groupId>-->
+<!--      <artifactId>servlet-api</artifactId>-->
+<!--    </dependency>-->
     <dependency>
       <groupId>org.apache.avalon.framework</groupId>
       <artifactId>avalon-framework-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-flowscript-impl</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-validator</groupId>
-      <artifactId>commons-validator</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-validation-impl</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-serializers-impl</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-chaperon-impl</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-xsp-impl</artifactId>
-      <version>1.0.0-SNAPSHOT</version>
-    </dependency>
+        <groupId>org.apache.cocoon</groupId>
+        <artifactId>cocoon-util</artifactId>
+        </dependency>
+<!--    <dependency>-->
+<!--      <groupId>org.apache.cocoon</groupId>-->
+<!--      <artifactId>cocoon-core</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.apache.cocoon</groupId>-->
+<!--      <artifactId>cocoon-flowscript-impl</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>commons-validator</groupId>-->
+<!--      <artifactId>commons-validator</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.apache.cocoon</groupId>-->
+<!--      <artifactId>cocoon-validation-impl</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.apache.cocoon</groupId>-->
+<!--      <artifactId>cocoon-serializers-impl</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.apache.cocoon</groupId>-->
+<!--      <artifactId>cocoon-chaperon-impl</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.apache.cocoon</groupId>-->
+<!--      <artifactId>cocoon-xsp-impl</artifactId>-->
+<!--      <version>1.0.0-SNAPSHOT</version>-->
+<!--    </dependency>-->
     
     <!-- Tests -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-core</artifactId>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
+<!--    <dependency>-->
+<!--      <groupId>junit</groupId>-->
+<!--      <artifactId>junit</artifactId>-->
+<!--      <scope>test</scope>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.apache.cocoon</groupId>-->
+<!--      <artifactId>cocoon-core</artifactId>-->
+<!--      <type>test-jar</type>-->
+<!--      <scope>test</scope>-->
+<!--    </dependency>-->
     <!-- FIXME: This dependency is transitive and should be obtained automatically
       see http://jira.codehaus.org/browse/MNG-1378 -->
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-sitemap-impl</artifactId>
-      <scope>test</scope>
-      <type>test-jar</type>
-    </dependency>
+<!--    <dependency>-->
+<!--      <groupId>org.apache.cocoon</groupId>-->
+<!--      <artifactId>cocoon-sitemap-impl</artifactId>-->
+<!--      <scope>test</scope>-->
+<!--      <type>test-jar</type>-->
+<!--    </dependency>-->
   </dependencies>
 </project>
diff --git a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilder.java b/org.apache.lenya.core.api/src/main/java/org/apache/lenya/exceptions/ResourceNotFoundException.java
similarity index 62%
copy from org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilder.java
copy to org.apache.lenya.core.api/src/main/java/org/apache/lenya/exceptions/ResourceNotFoundException.java
index c0f333c..bee8d72 100644
--- a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilder.java
+++ b/org.apache.lenya.core.api/src/main/java/org/apache/lenya/exceptions/ResourceNotFoundException.java
@@ -15,18 +15,26 @@
  *  limitations under the License.
  *
  */
-package org.apache.lenya.cms.publication;
+package org.apache.lenya.exceptions;
 
-/**
- * Document factory builder.
- */
-public interface DocumentFactoryBuilder {
+public class ResourceNotFoundException extends RuntimeException {
 
-    /**
-     * Creates a new document factory.
-     * @param session The session.
-     * @return A document identity map.
-     */
-    DocumentFactory createDocumentFactory(Session session);
+    private static final long serialVersionUID = 1L;
+
+    public ResourceNotFoundException() {
+        super();
+    }
+
+    public ResourceNotFoundException(String arg0, Throwable arg1) {
+        super(arg0, arg1);
+    }
+
+    public ResourceNotFoundException(String arg0) {
+        super(arg0);
+    }
+
+    public ResourceNotFoundException(Throwable arg0) {
+        super(arg0);
+    }
 
 }
diff --git a/org.apache.lenya.core.api/src/test/java/org/apache/lenya/cms/publication/URLInformationTest.java b/org.apache.lenya.core.api/src/test/java/org/apache/lenya/cms/publication/URLInformationTest.java
deleted file mode 100644
index 7a9564b..0000000
--- a/org.apache.lenya.core.api/src/test/java/org/apache/lenya/cms/publication/URLInformationTest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.apache.lenya.cms.publication;
-
-import org.junit.Ignore;
-import org.junit.Test;
-
-public class URLInformationTest {
-	
-	@Ignore("First draft for mock the spring session") @Test
-	public void testSpringSessionSetUp() throws Exception{
-		/**
-		 * see this thread : http://forum.springsource.org/archive/index.php/t-50722.html
-		 * and specially the post of pbdavey ; May 28th, 2008, 03:10 PM
-		 * 
-		 * This issue is reported here : https://jira.springframework.org/browse/SPR-4588
-		 * 	
-		 */
-		
-	}
-}
diff --git a/org.apache.lenya.core.document.api/pom.xml b/org.apache.lenya.core.document.api/pom.xml
index 73e9637..69bd8f7 100644
--- a/org.apache.lenya.core.document.api/pom.xml
+++ b/org.apache.lenya.core.document.api/pom.xml
@@ -12,48 +12,56 @@
   <groupId>org.apache.lenya</groupId>
   <artifactId>lenya-core-document-api</artifactId>
   <packaging>jar</packaging>
-  <name>Apache Lenya Document</name>
+  <name>Apache Lenya Document API</name>
   <description>API for Lenya Document</description>
   
   <dependencies>
-   <dependency>
-      <groupId>org.apache.lenya</groupId>
-      <artifactId>lenya-core-repository-api</artifactId>
-    </dependency>
-   <dependency>
-      <groupId>org.apache.lenya</groupId>
-      <artifactId>lenya-core-transaction-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.lenya</groupId>
-      <artifactId>lenya-core-metadata-api</artifactId>
-    </dependency>
      <dependency>
       <groupId>org.apache.lenya</groupId>
       <artifactId>lenya-core-api</artifactId>
     </dependency>
-  <!-- TODO : see if all theses dependencies are required -->
+<!--   <dependency>-->
+<!--      <groupId>org.apache.lenya</groupId>-->
+<!--      <artifactId>lenya-core-repository-api</artifactId>-->
+<!--    </dependency>-->
+<!--   <dependency>-->
+<!--      <groupId>org.apache.lenya</groupId>-->
+<!--      <artifactId>lenya-core-transaction-api</artifactId>-->
+<!--    </dependency>-->
     <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-core</artifactId>
+      <groupId>org.apache.lenya</groupId>
+      <artifactId>lenya-core-metadata-api</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-servlet-service-components</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-template-impl</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-flowscript-impl</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>servlet-api</artifactId>
-      <version>2.4</version>
-      <scope>provided</scope>
-    </dependency>
+<!--   TODO : see if all theses dependencies are required -->
+<!--    <dependency>-->
+<!--      <groupId>org.apache.cocoon</groupId>-->
+<!--      <artifactId>cocoon-core</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.apache.cocoon</groupId>-->
+<!--      <artifactId>cocoon-servlet-service-components</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.apache.cocoon</groupId>-->
+<!--      <artifactId>cocoon-template-impl</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.apache.cocoon</groupId>-->
+<!--      <artifactId>cocoon-flowscript-impl</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>javax.servlet</groupId>-->
+<!--      <artifactId>servlet-api</artifactId>-->
+<!--      <version>2.4</version>-->
+<!--      <scope>provided</scope>-->
+<!--    </dependency>-->
+	<dependency>
+	 <groupId>org.apache.cocoon</groupId>
+      <artifactId>cocoon-pipeline-api</artifactId>
+</dependency>
+	<dependency>
+	 <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+</dependency>
   </dependencies>
 </project>
diff --git a/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/Document.java b/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/Document.java
index fa1bb72..e828a7c 100644
--- a/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/Document.java
+++ b/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/Document.java
@@ -27,16 +27,20 @@
 //florent : removed import as they create cyclic dependencies
 /*import org.apache.lenya.cms.site.Link;
 import org.apache.lenya.cms.publication.Node;*/
-import org.apache.lenya.cms.repository.Node;
-import org.apache.lenya.cms.repository.History;
-import org.apache.lenya.cms.repository.RepositoryException;
+//florent remove to change way of dependency : it's now repository that depend to document
+//import org.apache.lenya.cms.repository.Node;
+//import org.apache.lenya.cms.repository.History;
+//import org.apache.lenya.cms.repository.RepositoryException;
+
+//TODO : this include a dependency to cocoon-pipeline-api... see how to remove it as it a lot for a less...
 import org.apache.cocoon.ResourceNotFoundException;
 
 /**
  * A CMS document.
  */
-public interface Document extends Node, MetaDataOwner {
-    
+//florent : not still repository dependent
+//public interface Document extends Node, MetaDataOwner {
+public interface Document extends MetaDataOwner {
     /**
      * The document namespace URI.
      */
@@ -343,13 +347,14 @@
      * @return A revision.
      * @throws RepositoryException if the revision doesn't exist.
      */
-    Document getRevision(int i) throws RepositoryException;
+    //florent Document getRevision(int i) throws RepositoryException;
+    Document getRevision(int i) throws DocumentException;
 
     /**
      * @return The revision number of this document.
      */
     int getRevisionNumber();
     
-    History getHistory();
+    //History getHistory();
 
 }
diff --git a/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentBuildException.java b/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentBuildException.java
index b9031b9..985a3ba 100644
--- a/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentBuildException.java
+++ b/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentBuildException.java
@@ -18,7 +18,7 @@
 
 package org.apache.lenya.cms.publication;
 
-import org.apache.lenya.cms.repository.RepositoryException;
+//import org.apache.lenya.cms.repository.RepositoryException;
 
 /**
  * Document build exception.
@@ -26,7 +26,9 @@
  */
 //florent : change exceptions extension in order to repect dependencies
 //public class DocumentBuildException extends PublicationException {
-public class DocumentBuildException extends RepositoryException {
+//florent : now remove dependency to repository
+//public class DocumentBuildException extends RepositoryException {
+public class DocumentBuildException extends DocumentException {
 	
     /**
 	 * 
diff --git a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentBuilder.java b/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentBuilder.java
similarity index 82%
rename from org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentBuilder.java
rename to org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentBuilder.java
index 5675ba4..f1c3ba2 100644
--- a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentBuilder.java
+++ b/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentBuilder.java
@@ -21,7 +21,7 @@
 package org.apache.lenya.cms.publication;
 
 import java.net.MalformedURLException;
-import org.apache.lenya.cms.publication.Session;
+//import org.apache.lenya.cms.publication.Session;
 //import from core-document-api
 import org.apache.lenya.cms.publication.DocumentLocator;
 /**
@@ -41,7 +41,8 @@
      * @return A document identifier.
      * @throws MalformedURLException if the URL is not a webapp URL. 
      */
-    DocumentLocator getLocator(Session session, String webappUrl) throws MalformedURLException;
+    //florent DocumentLocator getLocator(Session session, String webappUrl) throws MalformedURLException;
+    DocumentLocator getLocator(String webappUrl) throws MalformedURLException;
 
     /**
      * Checks if an URL corresponds to a CMS document.
@@ -50,7 +51,8 @@
      * @return A boolean value.
      * @throws DocumentBuildException when something went wrong.
      */
-    boolean isDocument(Session session, String url);
+    //boolean isDocument(Session session, String url);
+    boolean isDocument(String url);
 
     /**
      * Builds an URL corresponding to a CMS document.
@@ -58,7 +60,8 @@
      * @param locator The locator.
      * @return a String The corresponding URL.
      */
-    String buildCanonicalUrl(Session session, DocumentLocator locator);
+    //String buildCanonicalUrl(Session session, DocumentLocator locator);
+    String buildCanonicalUrl(DocumentLocator locator);
 
     /**
      * Checks if a document name is valid.
diff --git a/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentException.java b/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentException.java
index 3396739..773b547 100644
--- a/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentException.java
+++ b/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentException.java
@@ -20,14 +20,15 @@
 
 package org.apache.lenya.cms.publication;
 
-import org.apache.lenya.cms.repository.RepositoryException;
+//import org.apache.lenya.cms.repository.RepositoryException;
 
 /**
  * Document exception
  */
 //florent : change exceptions extension in order to repect dependencies
 //public class DocumentException extends PublicationException {
-public class DocumentException extends RepositoryException {
+//public class DocumentException extends RepositoryException {
+public class DocumentException extends Exception {
 
     /**
 	 * 
diff --git a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactory.java b/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactory.java
similarity index 80%
rename from org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactory.java
rename to org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactory.java
index c5009b4..cba9ddf 100644
--- a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactory.java
+++ b/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactory.java
@@ -17,6 +17,7 @@
  */
 package org.apache.lenya.cms.publication;
 
+import org.apache.lenya.exceptions.ResourceNotFoundException;
 /**
  * A DocumentIdentityMap avoids the multiple instanciation of a document object.
  * 
@@ -40,7 +41,9 @@
      * @return A document.
      * @throws ResourceNotFoundException if the document does not exist.
      */
-    Document get(Publication publication, String area, String uuid, String language)
+    //florent : document don't depend on a publication or area
+    //Document get(Publication publication, String area, String uuid, String language)
+    Document get(String uuid, String language)
             throws ResourceNotFoundException;
 
     /**
@@ -53,7 +56,8 @@
      * @return A document.
      * @throws ResourceNotFoundException if the document does not exist.
      */
-    Document get(Publication publication, String area, String uuid, String language, int revision)
+    //florent Document get(Publication publication, String area, String uuid, String language, int revision)
+    Document get(String uuid, String language, int revision)
             throws ResourceNotFoundException;
 
     /**
@@ -72,7 +76,8 @@
      * @return A document.
      * @throws ResourceNotFoundException if an error occurs.
      */
-    Document get(Publication publication, String area, String uuid)
+    //florent Document get(Publication publication, String area, String uuid)
+    Document get(String uuid)
             throws ResourceNotFoundException;
 
     /**
@@ -85,28 +90,28 @@
     /**
      * @return The session.
      */
-    Session getSession();
+    //Session getSession();
     
     /**
      * @param id The publication ID.
      * @return A publication.
      * @throws PublicationException if the publication does not exist.
      */
-    Publication getPublication(String id) throws PublicationException;
+    //Publication getPublication(String id) throws PublicationException;
     
     /**
      * @return All publication IDs.
      */
-    String[] getPublicationIds();
+    //String[] getPublicationIds();
     
     /**
      * @param id The publication ID.
      * @return If a publication with this ID exists.
      */
-    boolean existsPublication(String id);
+    /*boolean existsPublication(String id);
     
     void setPublicationManager(PublicationManager pubManager);
     
-    PublicationManager getPublicationManager();
+    PublicationManager getPublicationManager();*/
 
 }
diff --git a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilder.java b/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilder.java
similarity index 90%
rename from org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilder.java
rename to org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilder.java
index c0f333c..db0173e 100644
--- a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilder.java
+++ b/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilder.java
@@ -27,6 +27,7 @@
      * @param session The session.
      * @return A document identity map.
      */
-    DocumentFactory createDocumentFactory(Session session);
+    //florent DocumentFactory createDocumentFactory(Session session);
+	DocumentFactory createDocumentFactory();
 
 }
diff --git a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentManager.java b/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentManager.java
similarity index 99%
rename from org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentManager.java
rename to org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentManager.java
index e963562..680d361 100644
--- a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentManager.java
+++ b/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/DocumentManager.java
@@ -17,7 +17,7 @@
  */
 package org.apache.lenya.cms.publication;
 
-import org.apache.lenya.cms.publication.util.DocumentSet;
+//import org.apache.lenya.cms.publication.util.DocumentSet;
 
 /**
  * Helper to manage documents. It takes care of attachments etc.
diff --git a/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/util/DocumentVisitor.java b/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/util/DocumentVisitor.java
index 909f8fa..309890e 100644
--- a/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/util/DocumentVisitor.java
+++ b/org.apache.lenya.core.document.api/src/main/java/org/apache/lenya/cms/publication/util/DocumentVisitor.java
@@ -16,8 +16,6 @@
  *
  */
 
-/* $Id$  */
-
 package org.apache.lenya.cms.publication.util;
 
 import org.apache.lenya.cms.publication.Document;
diff --git a/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/DefaultDocumentBuilder.java b/org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DefaultDocumentBuilder.java
similarity index 72%
rename from org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/DefaultDocumentBuilder.java
rename to org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DefaultDocumentBuilder.java
index 32d4424..9caab85 100644
--- a/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/DefaultDocumentBuilder.java
+++ b/org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DefaultDocumentBuilder.java
@@ -23,13 +23,12 @@
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.avalon.framework.service.Serviceable;
 import org.apache.avalon.framework.thread.ThreadSafe;
+import org.apache.cocoon.spring.configurator.WebAppContextUtils;
 import org.apache.cocoon.util.AbstractLogEnabled;
 import org.apache.lenya.cms.site.SiteNode;
-
+import org.apache.lenya.utils.URLInformation;
 /**
  * Default document builder implementation.
- * 
- * @version $Id$
  */
 public class DefaultDocumentBuilder extends AbstractLogEnabled implements DocumentBuilder,
         Serviceable, ThreadSafe {
@@ -99,11 +98,14 @@
         return suffix;
     }
 
-    public boolean isDocument(Session session, String url) {
+    //florent : public boolean isDocument(Session session, String url) {
+    public boolean isDocument(String url) {
         try {
-            DocumentLocator locator = getLocatorWithoutCheck(session, url);
+            //DocumentLocator locator = getLocatorWithoutCheck(session, url);
+        	DocumentLocator locator = getLocatorWithoutCheck(url);
             if (locator != null) {
-                Publication pub = session.getPublication(locator.getPublicationId());
+                //Publication pub = session.getPublication(locator.getPublicationId());
+            	Publication pub = (Publication)WebAppContextUtils.getCurrentWebApplicationContext().getBean(Publication.class.getName()+"/"+locator.getPublicationId());
                 String path = locator.getPath();
                 Area area = pub.getArea(locator.getArea());
                 if (area.getSite().contains(path)) {
@@ -126,12 +128,14 @@
      * @param locator The document locator.
      * @return A string.
      */
-    protected String buildCanonicalDocumentUrl(Session session, DocumentLocator locator) {
+    //florent : protected String buildCanonicalDocumentUrl(Session session, DocumentLocator locator) {
+    protected String buildCanonicalDocumentUrl(DocumentLocator locator) {
 
         String languageSuffix = "";
         String language = locator.getLanguage();
 
-        Publication pub = session.getPublication(locator.getPublicationId());
+        //florent : Publication pub = session.getPublication(locator.getPublicationId());
+        Publication pub = (Publication)WebAppContextUtils.getCurrentWebApplicationContext().getBean(Publication.class.getName()+"/"+locator.getPublicationId());
 
         if (!language.equals(pub.getDefaultLanguage())) {
             languageSuffix = "_" + language;
@@ -140,16 +144,20 @@
         return locator.getPath() + languageSuffix + ".html";
     }
 
-    public String buildCanonicalUrl(Session session, DocumentLocator doc) {
+    //florent public String buildCanonicalUrl(Session session, DocumentLocator doc) {
+    public String buildCanonicalUrl(DocumentLocator doc) {
 
-        String documentUrl = buildCanonicalDocumentUrl(session, doc);
+        //String documentUrl = buildCanonicalDocumentUrl(session, doc);
+    	String documentUrl = buildCanonicalDocumentUrl(doc);
         String url = "/" + doc.getPublicationId() + "/" + doc.getArea() + documentUrl;
         return url;
     }
 
-    public DocumentLocator getLocator(Session session, String webappUrl) throws MalformedURLException {
+    //florent public DocumentLocator getLocator(Session session, String webappUrl) throws MalformedURLException {
+    public DocumentLocator getLocator(String webappUrl) throws MalformedURLException {
 
-        DocumentLocator locator = getLocatorWithoutCheck(session, webappUrl);
+        //DocumentLocator locator = getLocatorWithoutCheck(session, webappUrl);
+    	DocumentLocator locator = getLocatorWithoutCheck(webappUrl);
         if (locator == null) {
             throw new ResourceNotFoundException("The webapp URL [" + webappUrl
                     + "] does not refer to a document!");
@@ -166,7 +174,9 @@
      *         refer to a locator.
      * @throws MalformedURLException if the URL is not a webapp URL. 
      */
-    protected DocumentLocator getLocatorWithoutCheck(Session session, String webappUrl) throws MalformedURLException {
+    //florent : protected DocumentLocator getLocatorWithoutCheck(Session session, String webappUrl) throws MalformedURLException {
+    //TODO : remove the webappUrl param, not used
+    protected DocumentLocator getLocatorWithoutCheck(String webappUrl) throws MalformedURLException {
 
         if (!webappUrl.startsWith("/")) {
             return null;
@@ -175,9 +185,10 @@
             return null;
         }
 
-        URLInformation info = new URLInformation(webappUrl);
+        URLInformation info = new URLInformation();
 
-        Publication publication = session.getPublication(info.getPublicationId());
+        //Publication publication = session.getPublication(info.getPublicationId());
+        Publication publication = (Publication)WebAppContextUtils.getCurrentWebApplicationContext().getBean(Publication.class.getName()+"/"+info.getPublicationId());
         String documentURL = info.getDocumentUrl();
         documentURL = removeExtensions(documentURL);
 
diff --git a/org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryImpl.java b/org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryImpl.java
index 46e7446..ec71109 100644
--- a/org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryImpl.java
+++ b/org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryImpl.java
@@ -265,7 +265,8 @@
      * @see org.apache.lenya.transaction.IdentifiableFactory#build(org.apache.lenya.transaction.IdentityMap,
      *      java.lang.String)
      */
-    public RepositoryItem buildItem(org.apache.lenya.cms.repository.Session session, String key) throws RepositoryException {
+    //florent : public RepositoryItem buildItem(org.apache.lenya.cms.repository.Session session, String key) throws RepositoryException {
+    public RepositoryItem buildItem(String key) throws RepositoryException {
         if (logger.isDebugEnabled())
             logger.debug("DocumentFactory::build() called with key [" + key + "]");
 
diff --git a/org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DocumentImpl.java b/org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DocumentImpl.java
index a10cd26..3b0fd64 100644
--- a/org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DocumentImpl.java
+++ b/org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DocumentImpl.java
@@ -199,7 +199,7 @@
     public String getLanguage() {
         return this.identifier.getLanguage();
     }
-
+    
     public String[] getLanguages() {
 
         List documentLanguages = new ArrayList();
diff --git a/org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DocumentLocatorImpl.java b/org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DocumentLocatorImpl.java
index fb81b09..07d38ba 100644
--- a/org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DocumentLocatorImpl.java
+++ b/org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DocumentLocatorImpl.java
@@ -26,6 +26,7 @@
  * document doesn't have to exist.
  * It helps to locate a document inside a publication
  */
+//@deprecated move this locator outside of document, have to move in "publication"
 public class DocumentLocatorImpl implements DocumentLocator {
 
     private static Map locators = new WeakHashMap();
diff --git a/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java b/org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java
similarity index 99%
rename from org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java
rename to org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java
index b0fbd0c..d95201a 100644
--- a/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java
+++ b/org.apache.lenya.core.document.impl/src/main/java/org/apache/lenya/cms/publication/DocumentManagerImpl.java
@@ -223,6 +223,8 @@
         }
     }
 
+    //Florent : move to repositoryimpl. this is the place to save a document
+    /*
     protected void create(InputStream stream, Document document) throws Exception {
 
         // Read initial contents as DOM
@@ -232,8 +234,9 @@
                             + "]");
 
         copy(getSourceResolver(), stream, document);
-    }
-
+    }*/
+    //Florent : move to repositoryimpl. this is the place to save a document
+    /*
     protected void copy(SourceResolver resolver, InputStream sourceInputStream, Document destination)
             throws IOException {
 
@@ -259,7 +262,7 @@
                 sourceInputStream.close();
             }
         }
-    }
+    }*/
 
     //florent commented cause of change in document api
     /*
@@ -870,15 +873,7 @@
 
         return document;
     }*/
-
-    public SourceResolver getSourceResolver() {
-        return sourceResolver;
-    }
-
-    public void setSourceResolver(SourceResolver sourceResolver) {
-        this.sourceResolver = sourceResolver;
-    }
-
+    
     public UUIDGenerator getUuidGenerator() {
         return uuidGenerator;
     }
diff --git a/org.apache.lenya.core.metadata.api/pom.xml b/org.apache.lenya.core.metadata.api/pom.xml
index e20ccde..a9a01c2 100644
--- a/org.apache.lenya.core.metadata.api/pom.xml
+++ b/org.apache.lenya.core.metadata.api/pom.xml
@@ -15,30 +15,4 @@
   <name>Apache Lenya Metadata API</name>
   <description>API for Lenya Metadata</description>
   
-  <dependencies>
-  
-  <!-- TODO : see if all theses dependencies are required -->
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-servlet-service-components</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-template-impl</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-flowscript-impl</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>servlet-api</artifactId>
-      <version>2.4</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
 </project>
diff --git a/org.apache.lenya.core.metadata.api/src/main/java/org/apache/lenya/cms/metadata/MetaDataOwner.java b/org.apache.lenya.core.metadata.api/src/main/java/org/apache/lenya/cms/metadata/MetaDataOwner.java
index 16ba4c5..b022bdd 100644
--- a/org.apache.lenya.core.metadata.api/src/main/java/org/apache/lenya/cms/metadata/MetaDataOwner.java
+++ b/org.apache.lenya.core.metadata.api/src/main/java/org/apache/lenya/cms/metadata/MetaDataOwner.java
@@ -20,7 +20,6 @@
 /**
  * Owner of meta-data.
  *
- * @version $Id$
  */
 public interface MetaDataOwner {
 
diff --git a/org.apache.lenya.core.metadata.impl/pom.xml b/org.apache.lenya.core.metadata.impl/pom.xml
index 8f2a8bd..2268265 100644
--- a/org.apache.lenya.core.metadata.impl/pom.xml
+++ b/org.apache.lenya.core.metadata.impl/pom.xml
@@ -13,7 +13,7 @@
   <groupId>org.apache.lenya</groupId>
   <artifactId>lenya-core-metadata-impl</artifactId>
   <packaging>jar</packaging>
-  <name>Apache Lenya Core Metadata Implementation</name>
+  <name>Apache Lenya Metadata Implementation</name>
   <dependencies>
     <dependency>
       <groupId>javax.servlet</groupId>
diff --git a/org.apache.lenya.core.metadata.impl/src/main/java/org/apache/lenya/cms/metadata/dublincore/DublinCore.java b/org.apache.lenya.core.metadata.impl/src/main/java/org/apache/lenya/cms/metadata/dublincore/DublinCore.java
index 772c9eb..4ee6710 100644
--- a/org.apache.lenya.core.metadata.impl/src/main/java/org/apache/lenya/cms/metadata/dublincore/DublinCore.java
+++ b/org.apache.lenya.core.metadata.impl/src/main/java/org/apache/lenya/cms/metadata/dublincore/DublinCore.java
@@ -28,7 +28,6 @@
  * The descriptions are citing the <a href="http://www.dublincore.org">Dublin Core website </a>.
  * </p>
  * 
- * @version $Id$
  */
 public interface DublinCore extends MetaData {
 
diff --git a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/ConfigurableElementSet.java b/org.apache.lenya.core.metadata.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/ConfigurableElementSet.java
similarity index 100%
rename from org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/ConfigurableElementSet.java
rename to org.apache.lenya.core.metadata.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/ConfigurableElementSet.java
diff --git a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/ElementImpl.java b/org.apache.lenya.core.metadata.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/ElementImpl.java
similarity index 100%
rename from org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/ElementImpl.java
rename to org.apache.lenya.core.metadata.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/ElementImpl.java
diff --git a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/MetaDataRegistryImpl.java b/org.apache.lenya.core.metadata.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/MetaDataRegistryImpl.java
similarity index 100%
rename from org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/MetaDataRegistryImpl.java
rename to org.apache.lenya.core.metadata.impl/src/main/java/org/apache/lenya/cms/repository/metadata/impl/MetaDataRegistryImpl.java
diff --git a/org.apache.lenya.core.observation/pom.xml b/org.apache.lenya.core.observation/pom.xml
index 04da6ac..0549405 100644
--- a/org.apache.lenya.core.observation/pom.xml
+++ b/org.apache.lenya.core.observation/pom.xml
@@ -13,7 +13,7 @@
   <groupId>org.apache.lenya</groupId>
   <artifactId>lenya-core-observation</artifactId>
   <packaging>jar</packaging>
-  <name>Apache Lenya Core Observation</name>
+  <name>Apache Lenya Observation</name>
   <dependencies>
 <!--    <dependency>-->
 <!--      <groupId>org.apache.avalon.framework</groupId>-->
@@ -23,17 +23,25 @@
 <!--      <groupId>org.apache.lenya</groupId>-->
 <!--      <artifactId>lenya-core-api</artifactId>-->
 <!--    </dependency>-->
-    <dependency>
-      <groupId>org.apache.lenya</groupId>
-      <artifactId>lenya-core-repository-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.lenya</groupId>
-      <artifactId>lenya-core-document-api</artifactId>
-    </dependency>
+<!--    <dependency>-->
+<!--      <groupId>org.apache.lenya</groupId>-->
+<!--      <artifactId>lenya-core-repository-api</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.apache.lenya</groupId>-->
+<!--      <artifactId>lenya-core-document-api</artifactId>-->
+<!--    </dependency>-->
 <!--        <dependency>-->
 <!--      <groupId>org.apache.lenya</groupId>-->
 <!--      <artifactId>lenya-core-publication</artifactId>-->
 <!--    </dependency>-->
+  <dependency>
+      <groupId>org.apache.cocoon</groupId>
+      <artifactId>cocoon-util</artifactId>
+    </dependency>
+     <dependency>
+        <groupId>commons-lang</groupId>
+        <artifactId>commons-lang</artifactId>
+      </dependency>
   </dependencies>
 </project>
diff --git a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/AbstractRepositoryListener.java b/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/AbstractRepositoryListener.java
similarity index 100%
rename from org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/AbstractRepositoryListener.java
rename to org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/AbstractRepositoryListener.java
diff --git a/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/DocumentEventSource.java b/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/DocumentEventSource.java
index 61feb6f..6a39d31 100644
--- a/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/DocumentEventSource.java
+++ b/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/DocumentEventSource.java
@@ -18,13 +18,14 @@
 package org.apache.lenya.cms.observation;
 
 import org.apache.commons.lang.Validate;
-import org.apache.lenya.cms.publication.Document;
+//florent : change concept of observation
+/*import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentIdentifier;
 import org.apache.lenya.cms.publication.ResourceType;
-
+*/
 public class DocumentEventSource {
     
-    private DocumentIdentifier identifier;
+  /*  private DocumentIdentifier identifier;
     private ResourceType resourceType;
 
     public DocumentEventSource(Document doc) {
@@ -39,5 +40,5 @@
     public ResourceType getResourceType() {
         return resourceType;
     }
-
+	*/
 }
diff --git a/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/ObservationManager.java b/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/ObservationManager.java
index e9074ee..0ce339f 100644
--- a/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/ObservationManager.java
+++ b/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/ObservationManager.java
@@ -25,8 +25,9 @@
 
 import org.apache.cocoon.util.AbstractLogEnabled;
 import org.apache.commons.lang.Validate;
-import org.apache.lenya.cms.publication.Document;
-import org.apache.lenya.cms.publication.DocumentIdentifier;
+//florent : change observation 
+//import org.apache.lenya.cms.publication.Document;
+//import org.apache.lenya.cms.publication.DocumentIdentifier;
 
 /**
  * Observation manager. Works as an observation registry and sends the notifications.
@@ -38,23 +39,26 @@
 
     public synchronized void registerListener(RepositoryListener listener, Object observeable)
             throws ObservationException {
-        Document doc = (Document) observeable;
+        //florent
+    	/*Document doc = (Document) observeable;
         Set listeners = getListeners(doc.getIdentifier());
         if (listeners.contains(listener)) {
             throw new ObservationException("The listener [" + listener
                     + "] is already registered for the document [" + doc + "].");
         }
-        listeners.add(listener);
+        listeners.add(listener);*/
     }
-
-    protected Set getListeners(DocumentIdentifier doc) {
+    
+   //florent : change observation management
+    /*
+   protected Set getListeners(DocumentIdentifier doc) {
         Set listeners = (Set) this.identifier2listeners.get(doc);
         if (listeners == null) {
             listeners = new HashSet();
             this.identifier2listeners.put(doc, listeners);
         }
         return listeners;
-    }
+    }*/
 
     public synchronized void registerListener(RepositoryListener listener)
             throws ObservationException {
@@ -64,6 +68,7 @@
         this.listeners.add(listener);
     }
 
+    	/*
     protected Set getAllListeners(DocumentIdentifier doc) {
         Set allListeners = new HashSet();
         synchronized (this) {
@@ -71,7 +76,7 @@
             allListeners.addAll(getListeners(doc));
         }
         return allListeners;
-    }
+    }*/
 
     protected void notify(Set listeners, RepositoryEvent event) {
         for (Iterator i = listeners.iterator(); i.hasNext();) {
@@ -82,13 +87,14 @@
 
     public void eventFired(RepositoryEvent event) {
         Validate.notNull(event);
-        Set listeners;
+        Set listeners = this.listeners;
         Object source = event.getSource();
         if (source instanceof DocumentEventSource) {
+        	//florent
+        	/*
             DocumentIdentifier id = ((DocumentEventSource) source).getIdentifier();
             listeners = getAllListeners(id);
-        } else {
-            listeners = this.listeners;
+            */
         }
         notify(listeners, event);
     }
diff --git a/org.apache.lenya.core.repository.api/src/main/java/org/apache/lenya/cms/observation/RepositoryEvent.java b/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/RepositoryEvent.java
similarity index 100%
rename from org.apache.lenya.core.repository.api/src/main/java/org/apache/lenya/cms/observation/RepositoryEvent.java
rename to org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/RepositoryEvent.java
diff --git a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryEventDescriptor.java b/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/RepositoryEventDescriptor.java
similarity index 100%
rename from org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryEventDescriptor.java
rename to org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/RepositoryEventDescriptor.java
diff --git a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryEventFactory.java b/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/RepositoryEventFactory.java
similarity index 90%
rename from org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryEventFactory.java
rename to org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/RepositoryEventFactory.java
index 8ecc0eb..b1a1960 100644
--- a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryEventFactory.java
+++ b/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/RepositoryEventFactory.java
@@ -19,15 +19,16 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.lenya.cms.publication.Document;
+//import org.apache.lenya.cms.publication.Document;
 //florent import org.apache.lenya.cms.publication.DocumentImpl;
-import org.apache.lenya.cms.publication.Publication;
+/*import org.apache.lenya.cms.publication.Publication;
 import org.apache.lenya.cms.repository.Node;
-import org.apache.lenya.cms.repository.Session;
+import org.apache.lenya.cms.repository.Session;*/
 
 /**
  * Factory to create repository events.
  */
+//public class RepositoryEventFactory implements RepositoryEventFactory {
 public class RepositoryEventFactory {
 
     private static final Log logger = LogFactory.getLog(RepositoryEventFactory.class);
@@ -38,8 +39,11 @@
      * @param descriptor The descriptor.
      * @return An event.
      */
-    public static final RepositoryEvent createEvent(Session session, Object descriptor) {
+    /*public static final RepositoryEvent createEvent(Session session, Object descriptor) {
         return new RepositoryEventImpl(session, descriptor);
+    }*/
+    public static final RepositoryEvent createEvent(Object descriptor) {
+        return new RepositoryEventImpl(descriptor);
     }
 
     /**
@@ -68,6 +72,7 @@
      * @param descriptor The descriptor.
      * @return An event.
      */
+    /*
     public static final RepositoryEvent createEvent(Node node, Object descriptor) {
         RepositoryEvent event;
         Document doc = null;
@@ -81,13 +86,14 @@
             event.setNodeUri(node.getSourceURI());
         }
         return event;
-    }
+    }*/
 
     /**
      * @param node The node.
      * @return The document represented by the node or <code>null</code> if the node doesn't
      *         represent a document.
      */
+    /*
     protected static final Document getDocument(Node node) {
 
         final String sourceUri = node.getSourceURI();
@@ -131,6 +137,6 @@
             throw new RuntimeException(e);
         }
         return doc;
-    }
+    }*/
 
 }
diff --git a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryEventImpl.java b/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/RepositoryEventImpl.java
similarity index 75%
rename from org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryEventImpl.java
rename to org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/RepositoryEventImpl.java
index 621095c..19f4770 100644
--- a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryEventImpl.java
+++ b/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/RepositoryEventImpl.java
@@ -18,14 +18,14 @@
 package org.apache.lenya.cms.observation;
 
 import org.apache.commons.lang.Validate;
-import org.apache.lenya.cms.repository.Session;
+//florent session remove import org.apache.lenya.cms.repository.Session;
 
 /**
  * A repository event provides additional information if a document was added, changed, or removed.
  */
 public class RepositoryEventImpl implements RepositoryEvent {
 
-    private Session session;
+    //private Session session;
     private Object descriptor = null;
     private int revision = -1;
     private Object source;
@@ -36,8 +36,10 @@
      * @param source The source of the event.
      * @param descriptor More information about the event.
      */
-    public RepositoryEventImpl(Session session, Object source, Object descriptor) {
-        this(session, descriptor);
+    //florent public RepositoryEventImpl(Session session, Object source, Object descriptor) {
+    public RepositoryEventImpl(Object source, Object descriptor) {
+        //this(session, descriptor);
+    	this(descriptor);
         Validate.notNull(source);
         this.source = source;
     }
@@ -47,19 +49,22 @@
      * @param session The session.
      * @param descriptor More information about the event.
      */
-    public RepositoryEventImpl(Session session, Object descriptor) {
-        Validate.notNull(session);
+    //florent public RepositoryEventImpl(Session session, Object descriptor) {
+    public RepositoryEventImpl(Object descriptor) {
+        //Validate.notNull(session);
         Validate.notNull(descriptor);
-        this.session = session;
+        //this.session = session;
         this.descriptor = descriptor;
     }
 
     /**
      * @return The session.
      */
+    //florent
+    /*
     public Session getSession() {
         return this.session;
-    }
+    }*/
 
     /**
      * @return The descriptor.
@@ -72,7 +77,9 @@
 		 * @see org.apache.lenya.cms.observation.RepositoryEvent#toString()
 		 */
     public String toString() {
-        return "identity:" + getSession().getIdentity().toString() + " " + getNodeUri() + " " + getDescriptor();
+    	//florent : peut être qu'il faudrait passer l'identity en paramètre plutot que la session ?
+       // return "identity:" + getSession().getIdentity().toString() + " " + getNodeUri() + " " + getDescriptor();
+    	 return "identity:" + "TODO see repositoryEventImpl Classe" + " " + getNodeUri() + " " + getDescriptor();
     }
     
     private String nodeUri;
diff --git a/org.apache.lenya.core.repository.api/src/main/java/org/apache/lenya/cms/observation/RepositoryListener.java b/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/RepositoryListener.java
similarity index 100%
rename from org.apache.lenya.core.repository.api/src/main/java/org/apache/lenya/cms/observation/RepositoryListener.java
rename to org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/RepositoryListener.java
diff --git a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryLogger.java b/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/RepositoryLogger.java
similarity index 99%
rename from org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryLogger.java
rename to org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/RepositoryLogger.java
index 8da8ce8..978e939 100644
--- a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/observation/RepositoryLogger.java
+++ b/org.apache.lenya.core.observation/src/main/java/org/apache/lenya/cms/observation/RepositoryLogger.java
@@ -35,7 +35,7 @@
     public void eventFired(RepositoryEvent event) {
         getLogger().info(event.toString());
     }
-
+    
     public void start() throws Exception {
         ObservationRegistry registry = null;
         try {
diff --git a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/Publication.java b/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/Publication.java
index fd71db6..daac01d 100644
--- a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/Publication.java
+++ b/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/Publication.java
@@ -257,7 +257,7 @@
     /**
      * @return The session this publication object belongs to.
      */
-    Session getSession();
+    //Session getSession();
 
     /**
      * @return The source URI of the publication directory.
diff --git a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/PublicationManager.java b/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/PublicationManager.java
index bcb4c83..1bd5fb4 100644
--- a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/PublicationManager.java
+++ b/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/PublicationManager.java
@@ -34,6 +34,13 @@
     Publication[] getPublications(DocumentFactory factory);
     
     /**
+     * get a publication from his id from spring
+     * @param pubID the publication id
+     * @return a publication
+     */
+    Publication getPublication(String pubID);
+    
+    /**
      * @param factory The factory.
      * @param id The publication ID.
      * @return A publication.
diff --git a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/Repository.java b/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/Repository.java
index 78491b6..a754445 100644
--- a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/Repository.java
+++ b/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/Repository.java
@@ -18,14 +18,15 @@
 package org.apache.lenya.cms.publication;
 
 import javax.servlet.http.HttpServletRequest;
-import org.apache.lenya.cms.publication.Session;
+//import org.apache.lenya.cms.publication.Session;
 
 
 //import org.apache.lenya.ac.Identity;
 
+//TODO : remove this interface from here as there is publication and not repository
 public interface Repository {
     
-    Session getSession(HttpServletRequest request);
+    //Session getSession(HttpServletRequest request);
     
     //florent : remove as it create cycliq dependencies.
     //note : can be re-enable now as identity is in lenya-core-identity
diff --git a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/ResourceNotFoundException.java b/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/ResourceNotFoundException.java
index d2761a0..62e5c2c 100644
--- a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/ResourceNotFoundException.java
+++ b/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/ResourceNotFoundException.java
@@ -17,6 +17,7 @@
  */
 package org.apache.lenya.cms.publication;
 
+//@deprecated use lenya-core-api o.a.l.exceptions.ResourceNotFoundException
 public class ResourceNotFoundException extends RuntimeException {
 
     private static final long serialVersionUID = 1L;
diff --git a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/site/SiteManager.java b/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/site/SiteManager.java
index a1c83e3..cd43c93 100644
--- a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/site/SiteManager.java
+++ b/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/site/SiteManager.java
@@ -21,7 +21,7 @@
 import org.apache.lenya.cms.publication.Document;
 import org.apache.lenya.cms.publication.DocumentLocator;
 import org.apache.lenya.cms.publication.Publication;
-import org.apache.lenya.cms.publication.Session;
+//import org.apache.lenya.cms.publication.Session;
 
 /**
  * <p>
@@ -40,7 +40,6 @@
  * <strong>&lt; </strong>f</li>
  * </ul>
  * 
- * @version $Id$
  */
 public interface SiteManager {
 
@@ -66,7 +65,8 @@
      * @return An array of resources.
      * @throws SiteException if an error occurs.
      */
-    DocumentLocator[] getRequiredResources(Session session, DocumentLocator locator)
+    //florent DocumentLocator[] getRequiredResources(Session session, DocumentLocator locator)
+    DocumentLocator[] getRequiredResources(DocumentLocator locator)
             throws SiteException;
 
     /**
@@ -176,7 +176,8 @@
      * @return A locator.
      * @throws SiteException if the new document could not be built.
      */
-    DocumentLocator getAvailableLocator(Session session, DocumentLocator locator)
+    //florent : DocumentLocator getAvailableLocator(Session session, DocumentLocator locator)
+    DocumentLocator getAvailableLocator(DocumentLocator locator)
             throws SiteException;
 
 }
diff --git a/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/AreaImpl.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/AreaImpl.java
index 3ede48a..de2a4d7 100644
--- a/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/AreaImpl.java
+++ b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/AreaImpl.java
@@ -39,15 +39,16 @@
     private String name;
     private Publication pub;
     private NodeFactory nodeFactory;
-    private Session session;
+    //florent : private Session session;
 
     /**
      * @param session The factory.
      * @param pub The publication.
      * @param name The area name.
      */
-    public AreaImpl(Session session, NodeFactory nodeFactory, Publication pub, String name) {
-        this.session = session;
+    /* florent public AreaImpl(Session session, NodeFactory nodeFactory, Publication pub, String name) {
+        this.session = session;*/
+    public AreaImpl(NodeFactory nodeFactory, Publication pub, String name) {
         this.pub = pub;
         this.name = name;
         this.nodeFactory = nodeFactory;
diff --git a/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationImpl.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationImpl.java
index 3d39ed5..df6c9cc 100644
--- a/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationImpl.java
+++ b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationImpl.java
@@ -37,7 +37,9 @@
 
     private PublicationConfiguration delegate;
     private NodeFactory nodeFactory;
-    private Session session;
+    //private Session session;
+    //florent : TODO : bean wiring for pubmanager
+    private PublicationManager pubmanager;
 
     protected PublicationImpl(Session session, NodeFactory nodeFactory,
             PublicationConfiguration delegate) {
@@ -153,7 +155,8 @@
         String schema = this.delegate.getWorkflowSchema(resourceType);
         if (schema == null && getTemplateId() != null) {
             String templateId = getTemplateId();
-            Publication template = getSession().getPublication(templateId);
+            //Publication template = getSession().getPublication(templateId);
+            Publication template = pubmanager.getPublication(templateId);
             schema = template.getWorkflowSchema(resourceType);
         }
         return schema;
diff --git a/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationManagerImpl.java b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationManagerImpl.java
index 86d80be..c1aca7b 100644
--- a/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationManagerImpl.java
+++ b/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/PublicationManagerImpl.java
@@ -87,6 +87,12 @@
         return this.id2config;
     }
 
+    //florent : to get publication from spring
+    public Publication getPublication(String pubID){
+    	return (Publication)WebAppContextUtils.getCurrentWebApplicationContext().getBean(Publication.class.getName()+"/"+pubID);
+    }
+    	
+    
     public Publication getPublication(DocumentFactory factory, String id)
             throws PublicationException {
         Validate.notNull(id);
diff --git a/org.apache.lenya.core.repository.api/src/main/java/org/apache/lenya/cms/repository/Node.java b/org.apache.lenya.core.repository.api/src/main/java/org/apache/lenya/cms/repository/Node.java
index 322b5fe..a1a1ec4 100644
--- a/org.apache.lenya.core.repository.api/src/main/java/org/apache/lenya/cms/repository/Node.java
+++ b/org.apache.lenya.core.repository.api/src/main/java/org/apache/lenya/cms/repository/Node.java
@@ -23,7 +23,6 @@
 /**
  * A repository node is used to persist a {@link Persistable}.
  * 
- * @version $Id$
  */
 public interface Node extends RepositoryItem, ContentHolder {
 
diff --git a/org.apache.lenya.core.repository.api/src/main/java/org/apache/lenya/cms/repository/SharedItemStore.java b/org.apache.lenya.core.repository.api/src/main/java/org/apache/lenya/cms/repository/SharedItemStore.java
index 97a46d0..1c8d62b 100644
--- a/org.apache.lenya.core.repository.api/src/main/java/org/apache/lenya/cms/repository/SharedItemStore.java
+++ b/org.apache.lenya.core.repository.api/src/main/java/org/apache/lenya/cms/repository/SharedItemStore.java
@@ -22,7 +22,9 @@
 /**
  * Store for read-only items which are shared by all sessions for performance reasons.
  */
-public interface SharedItemStore extends Session {
+//florent : public interface SharedItemStore extends Session {
+public interface SharedItemStore {
+	
 
     /**
      * The service role.
diff --git a/org.apache.lenya.core.repository.impl/pom.xml b/org.apache.lenya.core.repository.impl/pom.xml
index f0de736..e3cfe2a 100644
--- a/org.apache.lenya.core.repository.impl/pom.xml
+++ b/org.apache.lenya.core.repository.impl/pom.xml
@@ -13,64 +13,76 @@
   <groupId>org.apache.lenya</groupId>
   <artifactId>lenya-core-repository-impl</artifactId>
   <packaging>jar</packaging>
-  <name>Apache Lenya Core Repository implementation</name>
+  <name>Apache Lenya Repository implementation</name>
   <dependencies>
     <dependency>
       <groupId>org.apache.lenya</groupId>
       <artifactId>lenya-core-repository-api</artifactId>
     </dependency>
-     <dependency>
-      <groupId>org.apache.lenya</groupId>
-      <artifactId>lenya-core-publication-api</artifactId>
-    </dependency>
     <dependency>
       <groupId>org.apache.lenya</groupId>
-      <artifactId>lenya-core-metadata-api</artifactId>
+      <artifactId>lenya-core-document-api</artifactId>
     </dependency>
-    <dependency>
+         <dependency>
       <groupId>org.apache.lenya</groupId>
       <artifactId>lenya-core-observation</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.apache.lenya</groupId>
-      <artifactId>lenya-core-transaction-impl</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.lenya</groupId>
-      <artifactId>lenya-core-identity</artifactId>
-    </dependency>
-    
+<!--     <dependency>-->
+<!--      <groupId>org.apache.lenya</groupId>-->
+<!--      <artifactId>lenya-core-publication-api</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.apache.lenya</groupId>-->
+<!--      <artifactId>lenya-core-metadata-api</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.apache.lenya</groupId>-->
+<!--      <artifactId>lenya-core-observation</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.apache.lenya</groupId>-->
+<!--      <artifactId>lenya-core-transaction-impl</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>org.apache.lenya</groupId>-->
+<!--      <artifactId>lenya-core-identity</artifactId>-->
+<!--    </dependency>-->
+<!--    -->
     <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>servlet-api</artifactId>
-      <scope>provided</scope>
     </dependency>
-    <dependency>
-      <groupId>commons-logging</groupId>
-      <artifactId>commons-logging</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-    </dependency>
+<!--    <dependency>-->
+<!--      <groupId>commons-logging</groupId>-->
+<!--      <artifactId>commons-logging</artifactId>-->
+<!--    </dependency>-->
+<!--    <dependency>-->
+<!--      <groupId>commons-lang</groupId>-->
+<!--      <artifactId>commons-lang</artifactId>-->
+<!--    </dependency>-->
+		<dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+</dependency>
         <dependency>
       <groupId>org.apache.cocoon</groupId>
       <artifactId>cocoon-util</artifactId>
     </dependency>
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-core</artifactId>
-    </dependency>
+<!--    <dependency>-->
+<!--      <groupId>org.apache.cocoon</groupId>-->
+<!--      <artifactId>cocoon-core</artifactId>-->
+<!--    </dependency>-->
     
     <!-- TODO: remove dependencies on Avalon and Excalibur -->
-    <dependency>
-      <groupId>org.apache.avalon.framework</groupId>
-      <artifactId>avalon-framework-api</artifactId>
-    </dependency>
+<!--    <dependency>-->
+<!--      <groupId>org.apache.avalon.framework</groupId>-->
+<!--      <artifactId>avalon-framework-api</artifactId>-->
+<!--    </dependency>-->
     <dependency>
       <groupId>org.apache.excalibur.components</groupId>
       <artifactId>excalibur-sourceresolve</artifactId>
-      <version>2.2.3</version>
-    </dependency>
+      </dependency>
+<!--      <version>2.2.3</version>-->
+<!--    </dependency>-->
   </dependencies>
 </project>
diff --git a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/publication/RepositoryImpl.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/publication/RepositoryImpl.java
index 328eb55..61fa65b 100644
--- a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/publication/RepositoryImpl.java
+++ b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/publication/RepositoryImpl.java
@@ -17,73 +17,87 @@
  */
 package org.apache.lenya.cms.publication;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
+import org.apache.cocoon.util.AbstractLogEnabled;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.output.ByteArrayOutputStream;
 import org.apache.commons.lang.Validate;
-import org.apache.lenya.ac.Identity;
+import org.apache.excalibur.source.SourceResolver;
+//import org.apache.lenya.ac.Identity;
 import org.apache.lenya.cms.repository.RepositoryException;
 import org.apache.lenya.cms.repository.RepositoryManager;
-import org.apache.lenya.cms.repository.SessionImpl;
-import org.apache.lenya.cms.repository.Session;
+//florent  : session remove
+//import org.apache.lenya.cms.repository.SessionImpl;
+//import org.apache.lenya.cms.repository.Session;
 
 
 public class RepositoryImpl implements Repository {
+	
+	//TODO : bean / cocoon wiring
+    private SourceResolver sourceResolver;
 
     private RepositoryManager repositoryManager;
     private DocumentFactoryBuilder documentFactoryBuilder;
 
-    public Session getSession(HttpServletRequest request) {
-        Validate.notNull(request);
-        SessionImpl session = (SessionImpl) request.getAttribute(Session.class.getName());
-        
-        if (session == null) {
-            Identity identity = getIdentity(request);
-            // attach a read-only repository session to the HTTP request
-            session = (SessionImpl) startSession(identity, false);
-            request.setAttribute(Session.class.getName(), session);
-        } else if (session.getIdentity() == null) {
-            Identity identity = getIdentity(request);
-            if (identity != null) {
-                session.setIdentity(identity);
-            }
-        }
-        return session;
-    }
+//    public Session getSession(HttpServletRequest request) {
+//        Validate.notNull(request);
+//        SessionImpl session = (SessionImpl) request.getAttribute(Session.class.getName());
+//        
+//        if (session == null) {
+//            Identity identity = getIdentity(request);
+//            // attach a read-only repository session to the HTTP request
+//            session = (SessionImpl) startSession(identity, false);
+//            request.setAttribute(Session.class.getName(), session);
+//        } else if (session.getIdentity() == null) {
+//            Identity identity = getIdentity(request);
+//            if (identity != null) {
+//                session.setIdentity(identity);
+//            }
+//        }
+//        return session;
+//    }
+//
+//    public Session startSession(Identity identity, boolean modifiable) {
+//
+//        if (modifiable && identity == null) {
+//            throw new IllegalArgumentException(
+//                    "Can't start a modifiable session without an identity.");
+//        }
+//
+//        /*florent : user the repository session 
+//        IdentityWrapper wrapper = new IdentityWrapper(identity);
+//        org.apache.lenya.cms.repository.Session repoSession;
+//        try {
+//            repoSession = this.repositoryManager.createSession(wrapper, modifiable);
+//        } catch (RepositoryException e) {
+//            throw new RuntimeException(e);
+//        }
+//        SessionImpl session = new SessionImpl(this, repoSession);*/
+//        SessionImpl session = new SessionImpl(identity,modifiable);
+//        session.setDocumentFactoryBuilder(this.documentFactoryBuilder);
+//        return session;
+//    }
 
-    public Session startSession(Identity identity, boolean modifiable) {
-
-        if (modifiable && identity == null) {
-            throw new IllegalArgumentException(
-                    "Can't start a modifiable session without an identity.");
-        }
-
-        /*florent : user the repository session 
-        IdentityWrapper wrapper = new IdentityWrapper(identity);
-        org.apache.lenya.cms.repository.Session repoSession;
-        try {
-            repoSession = this.repositoryManager.createSession(wrapper, modifiable);
-        } catch (RepositoryException e) {
-            throw new RuntimeException(e);
-        }
-        SessionImpl session = new SessionImpl(this, repoSession);*/
-        SessionImpl session = new SessionImpl(identity,modifiable);
-        session.setDocumentFactoryBuilder(this.documentFactoryBuilder);
-        return session;
-    }
-
+    //florent : repository don't have to deal with identity
+    /*
     protected static Identity getIdentity(HttpServletRequest request) {
         HttpSession session = request.getSession();
         return (Identity) session.getAttribute(Identity.class.getName());
-    }
+    }*/
 
     /**
      * Removes the repository session from the servlet session.
      * @param request The current request.
      */
-    public void removeSession(HttpServletRequest request) {
-        request.removeAttribute(Session.class.getName());
-    }
+//    public void removeSession(HttpServletRequest request) {
+//        request.removeAttribute(Session.class.getName());
+//    }
 
     public void setRepositoryManager(RepositoryManager repositoryManager) {
         this.repositoryManager = repositoryManager;
@@ -96,5 +110,54 @@
     public void setDocumentFactoryBuilder(DocumentFactoryBuilder documentFactoryBuilder) {
         this.documentFactoryBuilder = documentFactoryBuilder;
     }
+    
+    protected void create(InputStream stream, Document document) throws Exception {
+
+        // Read initial contents as DOM
+    	/* florent : to re-enable the logger add "extends AbstractLogEnabled" on the class
+        if (getLogger().isDebugEnabled())
+            getLogger().debug(
+                    "DefaultCreator::create(), ready to read initial contents from URI [" + stream
+                            + "]");
+                            */
+
+        copy(getSourceResolver(), stream, document);
+    }
+
+    protected void copy(SourceResolver resolver, InputStream sourceInputStream, Document destination)
+            throws IOException {
+
+        boolean useBuffer = true;
+
+        OutputStream destOutputStream = null;
+        try {
+            destOutputStream = destination.getOutputStream();
+
+            if (useBuffer) {
+                final ByteArrayOutputStream sourceBos = new ByteArrayOutputStream();
+                IOUtils.copy(sourceInputStream, sourceBos);
+                IOUtils.write(sourceBos.toByteArray(), destOutputStream);
+            } else {
+                IOUtils.copy(sourceInputStream, destOutputStream);
+            }
+        } finally {
+            if (destOutputStream != null) {
+                destOutputStream.flush();
+                destOutputStream.close();
+            }
+            if (sourceInputStream != null) {
+                sourceInputStream.close();
+            }
+        }
+    }
+    
+    public SourceResolver getSourceResolver() {
+        return sourceResolver;
+    }
+
+    public void setSourceResolver(SourceResolver sourceResolver) {
+        this.sourceResolver = sourceResolver;
+    }
+
 
 }
diff --git a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryItemFactoryWrapper.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryItemFactoryWrapper.java
index a9e6efa..9290829 100644
--- a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryItemFactoryWrapper.java
+++ b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryItemFactoryWrapper.java
@@ -27,22 +27,24 @@
 public class RepositoryItemFactoryWrapper implements IdentifiableFactory {
     
     private RepositoryItemFactory delegate;
-    private Session session;
+    //florent : remove session private Session session;
     
     /**
      * Ctor.
      * @param delegate The factory to wrap.
      * @param session The session.
      */
-    public RepositoryItemFactoryWrapper(RepositoryItemFactory delegate, Session session) {
+    //public RepositoryItemFactoryWrapper(RepositoryItemFactory delegate, Session session) {
+    public RepositoryItemFactoryWrapper(RepositoryItemFactory delegate) {
         Validate.notNull(delegate, "factory");
-        Validate.notNull(session, "session");
+        //Validate.notNull(session, "session");
         this.delegate = delegate;
-        this.session = session;
+        //this.session = session;
     }
 
     public Object build(IdentityMap map, String key) throws Exception {
-        return delegate.buildItem(this.session, key);
+        //return delegate.buildItem(this.session, key);
+    	return delegate.buildItem(key);
     }
 
     public String getType() {
diff --git a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryManagerImpl.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryManagerImpl.java
index 3819729..9ed2e3c 100644
--- a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryManagerImpl.java
+++ b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/RepositoryManagerImpl.java
@@ -21,23 +21,23 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.lenya.cms.observation.ObservationRegistry;
 //florent import org.apache.lenya.transaction.Identity;
-import org.apache.lenya.ac.Identity;
-import org.apache.lenya.cms.repository.SessionImpl;
-import org.apache.lenya.cms.repository.Session;
+//import org.apache.lenya.ac.Identity;
+//florent remove session
+//import org.apache.lenya.cms.repository.SessionImpl;
+//import org.apache.lenya.cms.repository.Session;
 /**
  * Repository manager implementation.
- * @version $Id:$
  */
 public class RepositoryManagerImpl implements RepositoryManager {
     
     private static final Log logger = LogFactory.getLog(RepositoryManagerImpl.class);
     
-    public Session createSession(Identity identity, boolean modifiable) throws RepositoryException {
-        SessionImpl session = new SessionImpl(identity, modifiable);
-        session.setObservationRegistry(getObservationRegistry());
-        session.setSharedItemStore(getSharedItemStore());
-        return session;
-    }
+//    public Session createSession(Identity identity, boolean modifiable) throws RepositoryException {
+//        SessionImpl session = new SessionImpl(identity, modifiable);
+//        session.setObservationRegistry(getObservationRegistry());
+//        session.setSharedItemStore(getSharedItemStore());
+//        return session;
+//    }
 
     private SharedItemStore sharedItemStore;
     private UUIDGenerator uuidGenerator;
diff --git a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/SharedItemStoreImpl.java b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/SharedItemStoreImpl.java
index d4d3210..d998c87 100644
--- a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/SharedItemStoreImpl.java
+++ b/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/SharedItemStoreImpl.java
@@ -22,7 +22,7 @@
 import org.apache.lenya.cms.observation.RepositoryListener;
 //florent remove this identity as duplication of the core-ac one 
 //import org.apache.lenya.transaction.Identity;
-import org.apache.lenya.ac.Identity;
+//import org.apache.lenya.ac.Identity;
 import org.apache.lenya.transaction.Lock;
 import org.apache.lenya.transaction.Lockable;
 import org.apache.lenya.transaction.TransactionException;
@@ -33,7 +33,7 @@
  */
 public class SharedItemStoreImpl extends AbstractLogEnabled implements SharedItemStore {
 
-    private Session session;
+    //florent : remove session private Session session;
     private RepositoryManager repositoryManager;
 
     public RepositoryManager getRepositoryManager() {
@@ -44,16 +44,16 @@
         this.repositoryManager = repositoryManager;
     }
 
-    public synchronized Session getSession() {
-        if (this.session == null) {
-            try {
-                this.session = getRepositoryManager().createSession(null, false);
-            } catch (RepositoryException e) {
-                throw new RuntimeException(e);
-            }
-        }
-        return this.session;
-    }
+//    public synchronized Session getSession() {
+//        if (this.session == null) {
+//            try {
+//                this.session = getRepositoryManager().createSession(null, false);
+//            } catch (RepositoryException e) {
+//                throw new RuntimeException(e);
+//            }
+//        }
+//        return this.session;
+//    }
 
     public void addListener(RepositoryListener listener) throws RepositoryException {
         throw new UnsupportedOperationException();
@@ -67,13 +67,14 @@
         throw new UnsupportedOperationException();
     }
 
-    public Identity getIdentity() {
+    /*public Identity getIdentity() {
         throw new UnsupportedOperationException();
-    }
+    }*/
 
     public RepositoryItem getRepositoryItem(RepositoryItemFactory factory, String key)
             throws RepositoryException {
-        return (RepositoryItem) getSession().getRepositoryItem(factory, key);
+        //florent remove session return (RepositoryItem) getSession().getRepositoryItem(factory, key);
+    	throw new UnsupportedOperationException();
     }
 
     public boolean isListenerRegistered(RepositoryListener listener) {
@@ -88,9 +89,9 @@
         throw new UnsupportedOperationException();
     }
 
-    public void setIdentity(Identity identity) {
+    /*public void setIdentity(Identity identity) {
         throw new UnsupportedOperationException();
-    }
+    }*/
 
     public Lock createLock(Lockable lockable, int version) throws TransactionException {
         throw new UnsupportedOperationException();
@@ -116,20 +117,20 @@
         throw new UnsupportedOperationException();
     }
 
-    public synchronized void clear() {
-        this.session = null;
-    }
+//    public synchronized void clear() {
+//        this.session = null;
+//    }
 
     public String getId() {
         return getClass().getName();
     }
 
-    public SessionHolder getHolder() {
+    /*public SessionHolder getHolder() {
         throw new UnsupportedOperationException();
     }
 
     public void setHolder(SessionHolder holder) {
         throw new UnsupportedOperationException();
-    }
+    }*/
 
 }
diff --git a/org.apache.lenya.core.session.api/pom.xml b/org.apache.lenya.core.session.api/pom.xml
new file mode 100644
index 0000000..bb346bb
--- /dev/null
+++ b/org.apache.lenya.core.session.api/pom.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.lenya</groupId>
+    <artifactId>lenya-parent</artifactId>
+    <version>2.2.0-SNAPSHOT</version>
+    <relativePath>../org.apache.lenya.parent/pom.xml</relativePath>
+  </parent>
+  
+  <groupId>org.apache.lenya</groupId>
+  <artifactId>lenya-session-api</artifactId>
+  <packaging>jar</packaging>
+  <name>Apache Lenya Session interface</name>
+  <description>Interface for the lenya session API</description>
+  
+  <dependencies>
+
+    <dependency>
+      <groupId>org.apache.lenya</groupId>
+      <artifactId>lenya-core-transaction-api</artifactId>
+    </dependency>
+  <dependency>
+      <groupId>org.apache.lenya</groupId>
+      <artifactId>lenya-core-identity</artifactId>
+    </dependency>
+<dependency>
+      <groupId>org.apache.lenya</groupId>
+      <artifactId>lenya-core-repository-api</artifactId>
+    </dependency>
+<dependency>
+      <groupId>org.apache.lenya</groupId>
+      <artifactId>lenya-core-publication-api</artifactId>
+    </dependency>
+
+  <!-- TODO : see if all theses dependencies are required -->
+    <dependency>
+      <groupId>org.apache.cocoon</groupId>
+      <artifactId>cocoon-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cocoon</groupId>
+      <artifactId>cocoon-servlet-service-components</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cocoon</groupId>
+      <artifactId>cocoon-template-impl</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cocoon</groupId>
+      <artifactId>cocoon-flowscript-impl</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+      <version>2.4</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/org.apache.lenya.core.session.api/rcl.properties b/org.apache.lenya.core.session.api/rcl.properties
new file mode 100644
index 0000000..c7e729b
--- /dev/null
+++ b/org.apache.lenya.core.session.api/rcl.properties
@@ -0,0 +1,17 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+#
+org.apache.lenya.lenya-session-api.service%classes-dir=./target/classes
diff --git a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/Session.java b/org.apache.lenya.core.session.api/src/main/java/org/apache/lenya/cms/publication/Session.java
similarity index 100%
rename from org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/Session.java
rename to org.apache.lenya.core.session.api/src/main/java/org/apache/lenya/cms/publication/Session.java
diff --git a/org.apache.lenya.core.session.api/src/main/java/org/apache/lenya/cms/repository/Session.java b/org.apache.lenya.core.session.api/src/main/java/org/apache/lenya/cms/repository/Session.java
new file mode 100644
index 0000000..70a5c72
--- /dev/null
+++ b/org.apache.lenya.core.session.api/src/main/java/org/apache/lenya/cms/repository/Session.java
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You 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.
+ *
+ */
+package org.apache.lenya.cms.repository;
+
+import org.apache.lenya.cms.observation.RepositoryEvent;
+import org.apache.lenya.cms.observation.RepositoryListener;
+import org.apache.lenya.transaction.ConcurrentModificationException;
+//florent remove this identity as duplication of the core-ac one 
+//import org.apache.lenya.transaction.Identity;
+import org.apache.lenya.ac.Identity;
+
+import org.apache.lenya.transaction.UnitOfWork;
+
+/**
+ * Repository session.
+ */
+public interface Session extends UnitOfWork {
+
+    /**
+     * @return the identity this session belongs to.
+     */
+    Identity getIdentity();
+
+    /**
+     * Commits the transaction.
+     * @throws RepositoryException if an error occurs.
+     * @throws ConcurrentModificationException if a transactionable has been
+     *         modified by another session.
+     */
+    void commit() throws RepositoryException, ConcurrentModificationException;
+
+    /**
+     * Rolls the transaction back.
+     * @throws RepositoryException if an error occurs.
+     */
+    void rollback() throws RepositoryException;
+
+    /**
+     * @param factory The factory.
+     * @param key The key.
+     * @return The item for the specific key.
+     * @throws RepositoryException if an error occurs.
+     */
+    RepositoryItem getRepositoryItem(RepositoryItemFactory factory, String key)
+            throws RepositoryException;
+
+    /**
+     * @param listener The listener to add.
+     * @throws RepositoryException if the listener is already registered.
+     */
+    void addListener(RepositoryListener listener) throws RepositoryException;
+
+    /**
+     * Checks if a listener is registered.
+     * @param listener The listener.
+     * @return A boolean value.
+     */
+    boolean isListenerRegistered(RepositoryListener listener);
+
+    /**
+     * @param event The event to add to the queue.
+     */
+    void enqueueEvent(RepositoryEvent event);
+
+    /**
+     * @param identity The identity.
+     */
+    void setIdentity(Identity identity);
+
+    /**
+     * @return if the repository items in this session can be modified.
+     */
+    boolean isModifiable();
+
+    /**
+     * @return The ID of this session.
+     */
+    String getId();
+
+    /**
+     * @return The holder of this session.
+     */
+    SessionHolder getHolder();
+    
+    /**
+     * @param holder The holder of this session.
+     */
+    void setHolder(SessionHolder holder);
+
+}
diff --git a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilder.java b/org.apache.lenya.core.session.api/src/main/java/org/apache/lenya/cms/repository/SessionHolder.java
similarity index 71%
copy from org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilder.java
copy to org.apache.lenya.core.session.api/src/main/java/org/apache/lenya/cms/repository/SessionHolder.java
index c0f333c..0fcd7d4 100644
--- a/org.apache.lenya.core.publication.api/src/main/java/org/apache/lenya/cms/publication/DocumentFactoryBuilder.java
+++ b/org.apache.lenya.core.session.api/src/main/java/org/apache/lenya/cms/repository/SessionHolder.java
@@ -15,18 +15,10 @@
  *  limitations under the License.
  *
  */
-package org.apache.lenya.cms.publication;
+package org.apache.lenya.cms.repository;
 
-/**
- * Document factory builder.
- */
-public interface DocumentFactoryBuilder {
-
-    /**
-     * Creates a new document factory.
-     * @param session The session.
-     * @return A document identity map.
-     */
-    DocumentFactory createDocumentFactory(Session session);
+public interface SessionHolder {
+    
+    Session getRepositorySession();
 
 }
diff --git a/org.apache.lenya.core.session.impl/pom.xml b/org.apache.lenya.core.session.impl/pom.xml
new file mode 100644
index 0000000..1d36304
--- /dev/null
+++ b/org.apache.lenya.core.session.impl/pom.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.lenya</groupId>
+    <artifactId>lenya-parent</artifactId>
+    <version>2.2.0-SNAPSHOT</version>
+    <relativePath>../org.apache.lenya.parent/pom.xml</relativePath>
+  </parent>
+  
+  <groupId>org.apache.lenya</groupId>
+  <artifactId>lenya-session-impl</artifactId>
+  <packaging>jar</packaging>
+  <name>Apache Lenya session implementation</name>
+  <description>Implementation of the session interface</description>
+  
+  <dependencies>
+
+	<dependency>
+      <groupId>org.apache.lenya</groupId>
+      <artifactId>lenya-session-api</artifactId>
+    </dependency>  
+    <dependency>
+      <groupId>org.apache.lenya</groupId>
+      <artifactId>lenya-core-repository-api</artifactId>
+    </dependency>
+	<dependency>
+      <groupId>org.apache.lenya</groupId>
+      <artifactId>lenya-core-observation</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lenya</groupId>
+      <artifactId>lenya-core-identity</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.lenya</groupId>
+      <artifactId>lenya-core-transaction-impl</artifactId>
+    </dependency>
+    <!--  TODO : see to have just a dependency with publication-api and not with impl -->
+    <dependency>
+      <groupId>org.apache.lenya</groupId>
+      <artifactId>lenya-core-publication-impl</artifactId>
+    </dependency>
+  <!-- TODO : see if all theses dependencies are required -->
+    <dependency>
+      <groupId>org.apache.cocoon</groupId>
+      <artifactId>cocoon-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cocoon</groupId>
+      <artifactId>cocoon-servlet-service-components</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cocoon</groupId>
+      <artifactId>cocoon-template-impl</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cocoon</groupId>
+      <artifactId>cocoon-flowscript-impl</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>javax.servlet</groupId>
+      <artifactId>servlet-api</artifactId>
+      <version>2.4</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/org.apache.lenya.core.session.impl/rcl.properties b/org.apache.lenya.core.session.impl/rcl.properties
new file mode 100644
index 0000000..bea7e7a
--- /dev/null
+++ b/org.apache.lenya.core.session.impl/rcl.properties
@@ -0,0 +1,17 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+#
+org.apache.lenya.lenya-session-impl.service%classes-dir=./target/classes
diff --git a/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/SessionImpl.java b/org.apache.lenya.core.session.impl/src/main/java/org/apache/lenya/cms/publication/SessionImpl.java
similarity index 97%
rename from org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/SessionImpl.java
rename to org.apache.lenya.core.session.impl/src/main/java/org/apache/lenya/cms/publication/SessionImpl.java
index ac76eb1..d9a4811 100644
--- a/org.apache.lenya.core.publication.impl/src/main/java/org/apache/lenya/cms/publication/SessionImpl.java
+++ b/org.apache.lenya.core.session.impl/src/main/java/org/apache/lenya/cms/publication/SessionImpl.java
@@ -35,11 +35,12 @@
     private static final Log logger = LogFactory.getLog(SessionImpl.class);
 
     private org.apache.lenya.cms.repository.Session repositorySession;
-    private RepositoryImpl repository;
+    //florent private RepositoryImpl repository;
+    private Repository repository;
     private DocumentFactory documentFactory;
     private DocumentFactoryBuilder documentFactoryBuilder;
 
-    public SessionImpl(RepositoryImpl repository,
+    public SessionImpl(Repository repository,
             org.apache.lenya.cms.repository.Session repoSession) {
         Validate.notNull(repository, "repository");
         Validate.notNull(repoSession, "repository session");
diff --git a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/SessionImpl.java b/org.apache.lenya.core.session.impl/src/main/java/org/apache/lenya/cms/repository/SessionImpl.java
similarity index 95%
rename from org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/SessionImpl.java
rename to org.apache.lenya.core.session.impl/src/main/java/org/apache/lenya/cms/repository/SessionImpl.java
index 563fdba..8ad9a25 100644
--- a/org.apache.lenya.core.repository.impl/src/main/java/org/apache/lenya/cms/repository/SessionImpl.java
+++ b/org.apache.lenya.core.session.impl/src/main/java/org/apache/lenya/cms/repository/SessionImpl.java
@@ -36,7 +36,7 @@
 //import org.apache.lenya.transaction.Identity;
 import org.apache.lenya.ac.Identity;
 import org.apache.lenya.transaction.IdentityMap;
-import org.apache.lenya.transaction.IdentityMapImpl;
+//import org.apache.lenya.transaction.IdentityMapImpl;
 import org.apache.lenya.transaction.Lock;
 import org.apache.lenya.transaction.Lockable;
 import org.apache.lenya.transaction.TransactionException;
@@ -129,7 +129,7 @@
             synchronized (TransactionLock.LOCK) {
 
                 getUnitOfWork().commit();
-                getSharedItemStore().clear();
+                //florent : remove session getSharedItemStore().clear();
             }
         } catch (ConcurrentModificationException e) {
             throw e;
@@ -194,7 +194,8 @@
      */
     public RepositoryItem getRepositoryItem(RepositoryItemFactory factory, String key)
             throws RepositoryException {
-        RepositoryItemFactoryWrapper wrapper = new RepositoryItemFactoryWrapper(factory, this);
+        //florent remove session RepositoryItemFactoryWrapper wrapper = new RepositoryItemFactoryWrapper(factory, this);
+    	RepositoryItemFactoryWrapper wrapper = new RepositoryItemFactoryWrapper(factory);
         return (RepositoryItem) getIdentityMap().get(wrapper, key);
     }
 
@@ -249,7 +250,7 @@
     private SessionHolder holder;
 
     public synchronized void enqueueEvent(RepositoryEvent event) {
-        Validate.isTrue(event.getSession() == this, "event belongs to session");
+        //florent : remove session Validate.isTrue(event.getSession() == this, "event belongs to session");
         if (!isModifiable()) {
             throw new RuntimeException("Can't enqueue event in unmodifiable session!");
         }
diff --git a/org.apache.lenya.core.transaction.api/pom.xml b/org.apache.lenya.core.transaction.api/pom.xml
index 270f401..da99446 100644
--- a/org.apache.lenya.core.transaction.api/pom.xml
+++ b/org.apache.lenya.core.transaction.api/pom.xml
@@ -16,29 +16,10 @@
   <description>API for Lenya Transactions</description>
   
   <dependencies>
-  
-  <!-- TODO : see if all theses dependencies are required -->
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-servlet-service-components</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-template-impl</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.cocoon</groupId>
-      <artifactId>cocoon-flowscript-impl</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>javax.servlet</groupId>
-      <artifactId>servlet-api</artifactId>
-      <version>2.4</version>
-      <scope>provided</scope>
-    </dependency>
+  	<dependency>
+        <groupId>commons-lang</groupId>
+        <artifactId>commons-lang</artifactId>
+        <version>2.4</version>
+      </dependency>
   </dependencies>
 </project>
diff --git a/org.apache.lenya.core.transaction.api/src/main/java/org/apache/lenya/transaction/TransactionException.java b/org.apache.lenya.core.transaction.api/src/main/java/org/apache/lenya/transaction/TransactionException.java
index 238f846..3ffce9c 100644
--- a/org.apache.lenya.core.transaction.api/src/main/java/org/apache/lenya/transaction/TransactionException.java
+++ b/org.apache.lenya.core.transaction.api/src/main/java/org/apache/lenya/transaction/TransactionException.java
@@ -20,7 +20,6 @@
 /**
  * Transaction exception.
  *
- * @version $Id$
  */
 public class TransactionException extends Exception {
 
diff --git a/org.apache.lenya.core.transaction.api/src/main/java/org/apache/lenya/transaction/UnitOfWork.java b/org.apache.lenya.core.transaction.api/src/main/java/org/apache/lenya/transaction/UnitOfWork.java
index 2f5d13c..4125055 100644
--- a/org.apache.lenya.core.transaction.api/src/main/java/org/apache/lenya/transaction/UnitOfWork.java
+++ b/org.apache.lenya.core.transaction.api/src/main/java/org/apache/lenya/transaction/UnitOfWork.java
@@ -27,7 +27,6 @@
  *
  * <p>This interface may be extended in the future to allow for access to further types of business objects.</p>
  * 
- * @version $Id$
  */
 public interface UnitOfWork {
 
diff --git a/org.apache.lenya.core.transaction.impl/pom.xml b/org.apache.lenya.core.transaction.impl/pom.xml
index b21babc..a128fce 100644
--- a/org.apache.lenya.core.transaction.impl/pom.xml
+++ b/org.apache.lenya.core.transaction.impl/pom.xml
@@ -12,7 +12,7 @@
   <groupId>org.apache.lenya</groupId>
   <artifactId>lenya-core-transaction-impl</artifactId>
   <packaging>jar</packaging>
-  <name>Apache Lenya Transactions</name>
+  <name>Apache Lenya Transaction implementation</name>
   <description>Deals with transactions</description>
   
   <dependencies>
diff --git a/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockFactory.java b/org.apache.lenya.core.transaction.impl/src/test/java/transaction/MockFactory.java
similarity index 100%
rename from org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockFactory.java
rename to org.apache.lenya.core.transaction.impl/src/test/java/transaction/MockFactory.java
diff --git a/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockRevisionController.java b/org.apache.lenya.core.transaction.impl/src/test/java/transaction/MockRevisionController.java
similarity index 100%
rename from org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockRevisionController.java
rename to org.apache.lenya.core.transaction.impl/src/test/java/transaction/MockRevisionController.java
diff --git a/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockTransactionable.java b/org.apache.lenya.core.transaction.impl/src/test/java/transaction/MockTransactionable.java
similarity index 100%
rename from org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockTransactionable.java
rename to org.apache.lenya.core.transaction.impl/src/test/java/transaction/MockTransactionable.java
diff --git a/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockUser.java b/org.apache.lenya.core.transaction.impl/src/test/java/transaction/MockUser.java
similarity index 100%
rename from org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/MockUser.java
rename to org.apache.lenya.core.transaction.impl/src/test/java/transaction/MockUser.java
diff --git a/org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/TransactionTest.java b/org.apache.lenya.core.transaction.impl/src/test/java/transaction/TransactionTest.java
similarity index 100%
rename from org.apache.lenya.core.repository.impl/src/test/java/org/apache/lenya/transaction/TransactionTest.java
rename to org.apache.lenya.core.transaction.impl/src/test/java/transaction/TransactionTest.java
diff --git a/org.apache.lenya.parent/pom.xml b/org.apache.lenya.parent/pom.xml
index a7e7819..107c17e 100644
--- a/org.apache.lenya.parent/pom.xml
+++ b/org.apache.lenya.parent/pom.xml
@@ -320,6 +320,7 @@
     </plugins>
   </build>
 
+	<!--  TODO : see if all dependencies have to be here. Maybe just all application shared one -->
   <dependencyManagement>
     <dependencies>
       <dependency>
@@ -334,6 +335,11 @@
         <version>1.4</version>
       </dependency>
       <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <version>2.0.1</version>
+	</dependency>
+      <dependency>
         <groupId>commons-codec</groupId>
         <artifactId>commons-codec</artifactId>
         <version>1.3</version>
@@ -368,6 +374,13 @@
         <artifactId>avalon-framework-impl</artifactId>
         <version>${avalon.version}</version>
       </dependency>
+      
+      <dependency>
+		<groupId>org.apache.excalibur.components</groupId>
+		<artifactId>excalibur-sourceresolve</artifactId>
+		<version>2.2.3</version>
+	  </dependency>
+      
       <!--
       <dependency>
         <groupId>batik</groupId>
diff --git a/org.apache.lenya.webapp.welcome/pom.xml b/org.apache.lenya.webapp.welcome/pom.xml
index 3d92b32..f459514 100644
--- a/org.apache.lenya.webapp.welcome/pom.xml
+++ b/org.apache.lenya.webapp.welcome/pom.xml
@@ -24,7 +24,7 @@
   
   <parent>
     <groupId>org.apache.lenya</groupId>
-    <artifactId>lenya</artifactId>
+    <artifactId>lenya-parent</artifactId>
     <version>2.2.0-SNAPSHOT</version>
     <relativePath>../org.apache.lenya.parent/pom.xml</relativePath>
   </parent>
diff --git a/org.apache.lenya.webapp/pom.xml b/org.apache.lenya.webapp/pom.xml
index ee6a4b7..2bd3243 100644
--- a/org.apache.lenya.webapp/pom.xml
+++ b/org.apache.lenya.webapp/pom.xml
@@ -21,7 +21,7 @@
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>org.apache.lenya</groupId>
-    <artifactId>lenya</artifactId>
+    <artifactId>lenya-parent</artifactId>
     <version>2.2.0-SNAPSHOT</version>
     <relativePath>../org.apache.lenya.parent/pom.xml</relativePath>
   </parent>
diff --git a/pom.xml b/pom.xml
index 2232968..c744b2b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
   <groupId>org.apache.lenya</groupId>
   <artifactId>lenya</artifactId>
 
-  <name>Apache Lenya Project</name>
+  <name>Apache Lenya</name>
 
   <reporting>
     <plugins>
@@ -44,79 +44,89 @@
   </reporting>
   <modules>
     <module>org.apache.lenya.parent</module>
-    <module>org.apache.lenya.core.ac</module>
-    <module>org.apache.lenya.core.acusecases</module>
-    <module>org.apache.lenya.core.administration</module>
+    <!-- foundation modules -->
     <module>org.apache.lenya.core.api</module>
-    <module>org.apache.lenya.core.cache</module>
-    <module>org.apache.lenya.core.gui</module>
-    <module>org.apache.lenya.core.i18n</module>
-    <module>org.apache.lenya.core.impl</module>
-    <!-- <module>org.apache.lenya.core.janitor</module> -->
-    <module>org.apache.lenya.core.ldap</module>
-    <module>org.apache.lenya.core.linking</module>
+    <module>org.apache.lenya.core.transaction.api</module>
+    <!--    <module>org.apache.lenya.core.transaction.impl</module>-->
     <module>org.apache.lenya.core.metadata.api</module>
-    <module>org.apache.lenya.core.metadata.impl</module>
-    <module>org.apache.lenya.core.monitoring</module>
+    <!--    <module>org.apache.lenya.core.metadata.impl</module>-->
     <module>org.apache.lenya.core.observation</module>
-    <module>org.apache.lenya.core.properties</module>
+    <!-- document and repository layers -->
+    <module>org.apache.lenya.core.document.api</module>
+    <!--    <module>org.apache.lenya.core.document.impl</module>-->
     <module>org.apache.lenya.core.repository.api</module>
     <module>org.apache.lenya.core.repository.impl</module>
-    <module>org.apache.lenya.core.resourcetype</module>
-    <module>org.apache.lenya.core.sitemanagement</module>
-    <module>org.apache.lenya.core.templating</module>
-    <module>org.apache.lenya.core.usecase</module>
-    <module>org.apache.lenya.core.workflow</module>
-    <module>org.apache.lenya.core.utils</module>
-    <module>org.apache.lenya.core.cocoon</module>
-    <module>org.apache.lenya.core.publication.api</module>
-    <module>org.apache.lenya.core.publication.impl</module>
-    <module>org.apache.lenya.core.document.api</module>
-    <module>org.apache.lenya.core.document.impl</module>
-    <module>org.apache.lenya.core.transaction.api</module>
-    <module>org.apache.lenya.core.transaction.impl</module>
-    <module>org.apache.lenya.core.identity</module>
-    <module>org.apache.lenya.core.proxy</module>
-    <module>org.apache.lenya.core.session.api</module>
-    <module>org.apache.lenya.core.session.impl</module>
-    <module>org.apache.lenya.module.blog</module>
-    <module>org.apache.lenya.module.bxe</module>
-    <module>org.apache.lenya.module.cforms</module>
-    <module>org.apache.lenya.module.collection</module>
-    <module>org.apache.lenya.module.contactform</module>
-    <module>org.apache.lenya.module.development</module>
-    <module>org.apache.lenya.module.editors</module>
-    <module>org.apache.lenya.module.export</module>
-    <module>org.apache.lenya.module.fckeditor</module>
-    <module>org.apache.lenya.module.kupu</module>
-    <module>org.apache.lenya.module.languageselector</module>
-    <module>org.apache.lenya.module.lenyadoc</module>
-    <module>org.apache.lenya.module.linkcheck</module>
-    <module>org.apache.lenya.module.links</module>
-    <module>org.apache.lenya.module.lucene</module>
-    <module>org.apache.lenya.module.menubar</module>
-    <module>org.apache.lenya.module.migration</module>
-    <module>org.apache.lenya.module.navigation</module>
-    <module>org.apache.lenya.module.neutron</module>
-    <module>org.apache.lenya.module.news</module>
-    <module>org.apache.lenya.module.notification</module>
-    <module>org.apache.lenya.module.opendocument</module>
-    <module>org.apache.lenya.module.prettyprinting</module>
-    <module>org.apache.lenya.module.profiling</module>
-    <module>org.apache.lenya.module.resource</module>
-    <module>org.apache.lenya.module.simplesite</module>
-    <module>org.apache.lenya.module.sitetree</module>
-    <module>org.apache.lenya.module.sourcerepository</module>
-    <module>org.apache.lenya.module.svg</module>
-    <module>org.apache.lenya.module.tinymce</module>
-    <module>org.apache.lenya.module.usecasedocument</module>
-    <module>org.apache.lenya.module.webdav</module>
-    <module>org.apache.lenya.module.xhtml</module>
-    <module>org.apache.lenya.module.xopus</module>
-    <module>org.apache.lenya.optional.jcrsource</module>
-    <module>org.apache.lenya.webapp</module>
-    <module>org.apache.lenya.webapp.welcome</module>
-    <module>org.apache.lenya.deprecated</module>
+    
+    
+
+<!--    <module>org.apache.lenya.core.identity</module>	    -->
+<!--    <module>org.apache.lenya.core.ac</module>-->
+<!--    <module>org.apache.lenya.core.acusecases</module>-->
+<!--    <module>org.apache.lenya.core.administration</module>-->
+<!--    <module>org.apache.lenya.core.api</module>-->
+<!--    <module>org.apache.lenya.core.cache</module>-->
+<!--    <module>org.apache.lenya.core.gui</module>-->
+<!--    <module>org.apache.lenya.core.i18n</module>-->
+<!--    <module>org.apache.lenya.core.impl</module>-->
+    <!-- <module>org.apache.lenya.core.janitor</module> -->
+<!--    <module>org.apache.lenya.core.ldap</module>-->
+<!--    <module>org.apache.lenya.core.linking</module>-->
+
+<!--    <module>org.apache.lenya.core.monitoring</module>-->
+<!--    <module>org.apache.lenya.core.observation</module>-->
+<!--    <module>org.apache.lenya.core.properties</module>-->
+<!--    <module>org.apache.lenya.core.resourcetype</module>-->
+<!--    <module>org.apache.lenya.core.sitemanagement</module>-->
+<!--    <module>org.apache.lenya.core.templating</module>-->
+<!--    <module>org.apache.lenya.core.usecase</module>-->
+<!--    <module>org.apache.lenya.core.workflow</module>-->
+<!--    <module>org.apache.lenya.core.utils</module>-->
+<!--    <module>org.apache.lenya.core.cocoon</module>-->
+<!--    <module>org.apache.lenya.core.publication.api</module>-->
+<!--    <module>org.apache.lenya.core.publication.impl</module>-->
+
+
+<!--    <module>org.apache.lenya.core.proxy</module>-->
+<!--    <module>org.apache.lenya.core.session.api</module>-->
+<!--    <module>org.apache.lenya.core.session.impl</module>-->
+<!--    <module>org.apache.lenya.module.blog</module>-->
+<!--    <module>org.apache.lenya.module.bxe</module>-->
+<!--    <module>org.apache.lenya.module.cforms</module>-->
+<!--    <module>org.apache.lenya.module.collection</module>-->
+<!--    <module>org.apache.lenya.module.contactform</module>-->
+<!--    <module>org.apache.lenya.module.development</module>-->
+<!--    <module>org.apache.lenya.module.editors</module>-->
+<!--    <module>org.apache.lenya.module.export</module>-->
+<!--    <module>org.apache.lenya.module.fckeditor</module>-->
+<!--    <module>org.apache.lenya.module.kupu</module>-->
+<!--    <module>org.apache.lenya.module.languageselector</module>-->
+<!--    <module>org.apache.lenya.module.lenyadoc</module>-->
+<!--    <module>org.apache.lenya.module.linkcheck</module>-->
+<!--    <module>org.apache.lenya.module.links</module>-->
+<!--    <module>org.apache.lenya.module.lucene</module>-->
+<!--    <module>org.apache.lenya.module.menubar</module>-->
+<!--    <module>org.apache.lenya.module.migration</module>-->
+<!--    <module>org.apache.lenya.module.navigation</module>-->
+<!--    <module>org.apache.lenya.module.neutron</module>-->
+<!--    <module>org.apache.lenya.module.news</module>-->
+<!--    <module>org.apache.lenya.module.notification</module>-->
+<!--    <module>org.apache.lenya.module.opendocument</module>-->
+<!--    <module>org.apache.lenya.module.prettyprinting</module>-->
+<!--    <module>org.apache.lenya.module.profiling</module>-->
+<!--    <module>org.apache.lenya.module.resource</module>-->
+<!--    <module>org.apache.lenya.module.simplesite</module>-->
+<!--    <module>org.apache.lenya.module.sitetree</module>-->
+<!--    <module>org.apache.lenya.module.sourcerepository</module>-->
+<!--    <module>org.apache.lenya.module.svg</module>-->
+<!--    <module>org.apache.lenya.module.tinymce</module>-->
+<!--    <module>org.apache.lenya.module.usecasedocument</module>-->
+<!--    <module>org.apache.lenya.module.webdav</module>-->
+<!--    <module>org.apache.lenya.module.xhtml</module>-->
+<!--    <module>org.apache.lenya.module.xopus</module>-->
+<!--    <module>org.apache.lenya.optional.jcrsource</module>-->
+<!--    <module>org.apache.lenya.webapp</module>-->
+<!--    <module>org.apache.lenya.webapp.welcome</module>-->
+<!--    <module>org.apache.lenya.deprecated</module>-->
   </modules>
   
   <scm>
