diff --git a/scr-ext-anno/pom.xml b/scr-ext-anno/pom.xml
new file mode 100644
index 0000000..3d7ac91
--- /dev/null
+++ b/scr-ext-anno/pom.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0"?>
+<!--
+ 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 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.felix</groupId>
+        <artifactId>felix-parent</artifactId>
+        <version>3</version>
+        <relativePath />
+    </parent>
+  <artifactId>org.apache.felix.scr.ext.anno</artifactId>
+  <version>0.1-SNAPSHOT</version>
+    <name>Apache Felix Declarative Services Extensions BND annotation</name>
+    <description>
+        BND meta-annotation for adding felix ds extension attributes
+	to generated xml component descriptors
+    </description>
+     <scm>
+        <connection>scm:svn:https://svn.apache.org/repos/asf/felix/trunk/scr-ext-anno</connection>
+        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/felix/trunk/scr-ext-anno</developerConnection>
+        <url>scm:svn:https://svn.apache.org/repos/asf/felix/trunk/scr-ext-anno</url>
+    </scm>
+ <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+  <dependencies>
+    <dependency>
+  <groupId>biz.aQute.bnd</groupId>
+  <artifactId>biz.aQute.bnd.annotation</artifactId>
+  <version>3.1.0</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/scr-ext-anno/src/main/java/org/apache/felix/scr/ext/annotation/DSExt.java b/scr-ext-anno/src/main/java/org/apache/felix/scr/ext/annotation/DSExt.java
new file mode 100644
index 0000000..c7a0c45
--- /dev/null
+++ b/scr-ext-anno/src/main/java/org/apache/felix/scr/ext/annotation/DSExt.java
@@ -0,0 +1,73 @@
+/*
+ * 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.felix.scr.ext.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import aQute.bnd.annotation.xml.XMLAttribute;
+
+
+public interface DSExt {
+	
+	@XMLAttribute(namespace = "http://felix.apache.org/xmlns/scr/extensions/v1.0.0", prefix = "felix", mapping="value=configurableServiceProperties")
+	@Retention(RetentionPolicy.CLASS)
+	@Target(ElementType.TYPE)
+	@interface ConfigurableServiceProperties {
+		boolean value() default true;
+	}
+	
+	@XMLAttribute(namespace = "http://felix.apache.org/xmlns/scr/extensions/v1.0.0", prefix = "felix", mapping="value=persistentFactoryComponent")
+	@Retention(RetentionPolicy.CLASS)
+	@Target(ElementType.TYPE)
+	@interface PersistentFactoryComponent {
+		boolean value() default true;
+	}
+	
+	@XMLAttribute(namespace = "http://felix.apache.org/xmlns/scr/extensions/v1.0.0", prefix = "felix", mapping="value=deleteCallsModify")
+	@Retention(RetentionPolicy.CLASS)
+	@Target(ElementType.TYPE)
+	@interface DeleteCallsModify {
+		boolean value() default true;
+	}
+	
+	@XMLAttribute(namespace = "http://felix.apache.org/xmlns/scr/extensions/v1.0.0", prefix = "felix", mapping="value=obsoleteFactoryComponentFactory")
+	@Retention(RetentionPolicy.CLASS)
+	@Target(ElementType.TYPE)
+	@interface ObsoleteFactoryComponentFactory {
+		boolean value() default true;
+	}
+	
+	@XMLAttribute(namespace = "http://felix.apache.org/xmlns/scr/extensions/v1.0.0", prefix = "felix", mapping="value=configureWithInterfaces")
+	@Retention(RetentionPolicy.CLASS)
+	@Target(ElementType.TYPE)
+	@interface ConfigureWithInterfaces {
+		boolean value() default true;
+	}
+	
+	@XMLAttribute(namespace = "http://felix.apache.org/xmlns/scr/extensions/v1.0.0", prefix = "felix", mapping="value=delayedKeepInstances")
+	@Retention(RetentionPolicy.CLASS)
+	@Target(ElementType.TYPE)
+	@interface DelayedKeepInstances {
+		boolean value() default true;
+	}
+
+}
diff --git a/scr-ext-anno/src/main/java/org/apache/felix/scr/ext/annotation/package-info.java b/scr-ext-anno/src/main/java/org/apache/felix/scr/ext/annotation/package-info.java
new file mode 100644
index 0000000..4870361
--- /dev/null
+++ b/scr-ext-anno/src/main/java/org/apache/felix/scr/ext/annotation/package-info.java
@@ -0,0 +1,19 @@
+/*
+ * 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.felix.scr.ext.annotation;
