diff --git a/ipojo/manipulator/pom.xml b/ipojo/manipulator/pom.xml
index 0c8248b..b2d308b 100644
--- a/ipojo/manipulator/pom.xml
+++ b/ipojo/manipulator/pom.xml
@@ -45,10 +45,10 @@
           <instructions>          
             <Bundle-Name>iPOJO Manipulator</Bundle-Name>
             <Bundle-Vendor>Clement ESCOFFIER</Bundle-Vendor>
-            <Bundle-Description> iPOJO Manipulator </Bundle-Description>
+            <Bundle-Description> iPOJO Manipulator </Bundle-Description>
+            <Export-Package>org.apache.felix.ipojo.manipulator</Export-Package>
             <Private-Package>
             	org.apache.felix.ipojo.manipulation,
-            	org.apache.felix.ipojo.manipulator,
             	org.apache.felix.ipojo.xml.parser,
               	org.objectweb.asm,
               	org.objectweb.asm.commons,
diff --git a/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/Manipulator.java b/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/Manipulator.java
index f614b96..2cad656 100644
--- a/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/Manipulator.java
+++ b/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/Manipulator.java
@@ -201,7 +201,11 @@
             finalWriter = cw0;
         }
         // The file is in the bundle
-        return finalWriter.toByteArray();
+        if (ck.isalreadyManipulated()) {
+            return new byte[0];
+        } else {
+            return finalWriter.toByteArray();
+        }
     }
 
     /**
diff --git a/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/Pojoization.java b/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/Pojoization.java
index eac5afa..6c4b43b 100644
--- a/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/Pojoization.java
+++ b/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/Pojoization.java
@@ -147,7 +147,7 @@
         try {
             inputJar = new JarFile(in);
         } catch (IOException e) {
-            error("Cannot the input file is not a JarFile : " + in.getAbsolutePath());
+            error("The input file is not a JarFile : " + in.getAbsolutePath());
             return;
         }
 
@@ -182,6 +182,7 @@
                         jos.write(outClazz);
                         jos.closeEntry();
                     } else { // The class is already manipulated
+                        jos.putNextEntry(curEntry);
                         InputStream currIn = inputJar.getInputStream(curEntry);
                         int c;
                         int i = 0;
@@ -415,7 +416,9 @@
         for (int i = 0; i < m_metadata.length; i++) {
             meta += buildManifestMetadata(m_metadata[i], "");
         }
-        att.putValue("iPOJO-Components", meta);
+        if (!meta.equals("")) { 
+            att.putValue("iPOJO-Components", meta);
+        }
     }
 
     /**
@@ -555,7 +558,7 @@
         }
 
         if (meta == null || meta.length == 0) {
-            warn("Neither component, neither instance in " + path);
+            warn("Neither component types, nor instances in " + path);
         }
 
         return meta;
@@ -595,3 +598,4 @@
     }
 
 }
+
diff --git a/ipojo/metadata/pom.xml b/ipojo/metadata/pom.xml
index 1d14370..56f4c5e 100644
--- a/ipojo/metadata/pom.xml
+++ b/ipojo/metadata/pom.xml
@@ -7,7 +7,25 @@
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>org.apache.felix.ipojo.metadata</artifactId>
-  <packaging>jar</packaging>
+  <packaging>bundle</packaging>
   <version>0.7.3-SNAPSHOT</version>
   <name>Apache Felix iPOJO Metadata</name>
+  <build>
+  <plugins>
+  	<plugin>
+    	<groupId>org.apache.felix</groupId>
+    	<artifactId>maven-bundle-plugin</artifactId>
+    	<version>1.1.0-SNAPSHOT</version>
+    	<extensions>true</extensions>
+    	<configuration>
+        	<instructions>          
+          		<Bundle-Name>iPOJO Manipulator</Bundle-Name>
+		        <Bundle-Vendor>Clement ESCOFFIER</Bundle-Vendor>
+        		<Bundle-Description> iPOJO Metadata </Bundle-Description>
+          		<Export-Package>org.apache.felix.ipojo.metadata</Export-Package>
+        	</instructions>
+    	</configuration>
+  	</plugin>
+  </plugins>
+  </build>
 </project>
