diff --git a/ipojo/ant/pom.xml b/ipojo/ant/pom.xml
index 0359294..ceac3e6 100644
--- a/ipojo/ant/pom.xml
+++ b/ipojo/ant/pom.xml
@@ -1,99 +1,87 @@
-<!--
-	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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<parent>
-		<groupId>org.apache.felix</groupId>
-		<artifactId>felix</artifactId>
-		<version>1.0.2</version>
-		<relativePath>../../pom/pom.xml</relativePath>
-	</parent>
-	<modelVersion>4.0.0</modelVersion>
-	<artifactId>org.apache.felix.ipojo.ant</artifactId>
-	<groupId>org.apache.felix</groupId>
-	<version>0.9.0-SNAPSHOT</version>
-	<packaging>bundle</packaging>
-	<name>Apache Felix iPOJO Ant Task</name>
-	<dependencies>
-		<dependency>
-			<groupId>org.apache.felix</groupId>
-			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
-			<version>0.9.0-SNAPSHOT</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.felix</groupId>
-			<artifactId>org.apache.felix.ipojo.manipulator</artifactId>
-			<version>0.9.0-SNAPSHOT</version>
-		</dependency>
-		<dependency>
-			<groupId>xerces</groupId>
-			<artifactId>xercesImpl</artifactId>
-			<version>2.4.0</version>
-		</dependency>
-		<dependency>
-			<groupId>ant</groupId>
-			<artifactId>ant</artifactId>
-			<version>1.6.5</version>
-		</dependency>
-	</dependencies>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.felix</groupId>
-				<artifactId>maven-bundle-plugin</artifactId>
-				<version>1.4.2</version>
-				<extensions>true</extensions>
-				<configuration>
-					<instructions>
-						<Bundle-Name>iPOJO Ant Task</Bundle-Name>
-						<Bundle-Vendor>
-							The Apache Software Foundation
-						</Bundle-Vendor>
-						<Bundle-Description>
-							iPOJO Ant Task
-						</Bundle-Description>
-						<Private-Package>
-							org.apache.felix.ipojo.metadata,
-							org.apache.felix.ipojo.manipulator,
-							org.apache.felix.ipojo.xml.parser,
-							org.apache.felix.ipojo.manipulation*,
-							org.objectweb.asm.util;-split-package:=merge-first,
-							org.objectweb.asm;-split-package:=merge-first,
-							org.objectweb.asm.commons;-split-package:=merge-first,
-							org.apache.xerces.parsers,
-							org.apache.xerces.xni*,
-							org.apache.xerces.impl*,
-							org.apache.xerces.util.*,
-							org.apache.xerces.dom.*,
-							org.apache.xerces.dom3.*
-						</Private-Package>
-						<Export-Package>
-							org.apache.felix.ipojo.task
-						</Export-Package>
-						<Include-Resource>
-							META-INF/LICENCE=LICENSE,
-							META-INF/NOTICE=NOTICE,
-							META-INF/LICENSE.asm=LICENSE.asm
-						</Include-Resource>
-					</instructions>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<parent>
+		<groupId>org.apache.felix</groupId>
+		<artifactId>felix</artifactId>
+		<version>1.0.2</version>
+		<relativePath>../../pom/pom.xml</relativePath>
+	</parent>
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>org.apache.felix.ipojo.ant</artifactId>
+	<groupId>org.apache.felix</groupId>
+	<version>1.0.0</version>
+	<packaging>bundle</packaging>
+	<name>Apache Felix iPOJO Ant Task</name>
+	<dependencies>
+		<dependency>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.apache.felix.ipojo.metadata</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.apache.felix.ipojo.manipulator</artifactId>
+			<version>1.0.0</version>
+		</dependency>
+		<dependency>
+			<groupId>xerces</groupId>
+			<artifactId>xercesImpl</artifactId>
+			<version>2.4.0</version>
+		</dependency>
+		<dependency>
+			<groupId>ant</groupId>
+			<artifactId>ant</artifactId>
+			<version>1.6.5</version>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<version>1.4.2</version>
+				<extensions>true</extensions>
+				<configuration>
+					<instructions>
+						<Bundle-Name>iPOJO Ant Task</Bundle-Name>
+						<Bundle-Vendor>
+							The Apache Software Foundation
+						</Bundle-Vendor>
+						<Bundle-Description>
+							iPOJO Ant Task
+						</Bundle-Description>
+						<Private-Package>
+							org.apache.felix.ipojo.metadata,
+							org.apache.felix.ipojo.manipulator,
+							org.apache.felix.ipojo.xml.parser,
+							org.apache.felix.ipojo.manipulation*,
+							org.objectweb.asm.util;-split-package:=merge-first,
+							org.objectweb.asm;-split-package:=merge-first,
+							org.objectweb.asm.commons;-split-package:=merge-first,
+							org.apache.xerces.parsers,
+							org.apache.xerces.xni*,
+							org.apache.xerces.impl*,
+							org.apache.xerces.util.*,
+							org.apache.xerces.dom.*,
+							org.apache.xerces.dom3.*
+						</Private-Package>
+						<Export-Package>
+							org.apache.felix.ipojo.task
+						</Export-Package>
+						<Include-Resource>
+							META-INF/LICENCE=LICENSE,
+							META-INF/NOTICE=NOTICE,
+							META-INF/LICENSE.asm=LICENSE.asm
+						</Include-Resource>
+					</instructions>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+  <scm>
+    <connection>scm:svn:https://svn.apache.org/repos/asf/felix/releases/org.apache.felix.ipojo.ant-1.0.0</connection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/felix/releases/org.apache.felix.ipojo.ant-1.0.0</developerConnection>
+    <url>scm:svn:https://svn.apache.org/repos/asf/felix/releases/org.apache.felix.ipojo.ant-1.0.0</url>
+  </scm>
 </project>
\ No newline at end of file
