diff --git a/scrplugin-annotations/LICENSE b/scrplugin-annotations/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/scrplugin-annotations/LICENSE
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/scrplugin-annotations/NOTICE b/scrplugin-annotations/NOTICE
new file mode 100644
index 0000000..776aef1
--- /dev/null
+++ b/scrplugin-annotations/NOTICE
@@ -0,0 +1,21 @@
+Apache Felix SCR Maven Plugin Annotations
+Copyright 2007-2009 The Apache Software Foundation
+
+
+I. Included Software
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+Licensed under the Apache License 2.0.
+
+
+II. Used Software
+
+This product uses software developed at
+The Apache Software Foundation (http://www.apache.org/).
+Licensed under the Apache License 2.0.
+
+This product uses software developed at
+The OSGi Alliance (http://www.osgi.org/).
+Copyright 2006 The OSGi Alliance.
+Licensed under the Apache License 2.0.
diff --git a/scrplugin-annotations/pom.xml b/scrplugin-annotations/pom.xml
new file mode 100644
index 0000000..e8417cc
--- /dev/null
+++ b/scrplugin-annotations/pom.xml
@@ -0,0 +1,61 @@
+<!-- 
+ 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/maven-v4_0_0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>felix</artifactId>
+		<groupId>org.apache.felix</groupId>
+		<version>1.0.4</version>
+	</parent>
+	
+	<groupId>org.apache.felix</groupId>
+	<artifactId>maven-scr-plugin-annotations</artifactId>
+
+	<version>1.0.11-SNAPSHOT</version>
+	<packaging>jar</packaging>
+
+	<name>Annotations for Maven SCR Plugin</name>
+	<description>
+		Annotations for generating OSGi service descriptors with Maven SCR plugin.
+	</description>
+
+	<scm>
+		<connection>scm:svn:http://svn.apache.org/repos/asf/felix/trunk/scrplugin-annotations</connection>
+		<developerConnection>scm:svn:http://svn.apache.org/repos/asf/felix/trunk/scrplugin-annotations</developerConnection>
+		<url>http://svn.apache.org/repos/asf/felix/scrplugin-annotations</url>
+	</scm>
+
+	<build>
+		<plugins>
+
+		  <!-- JDK 1.5 needed for annotation support -->
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<configuration>
+				  <source>1.5</source>
+				  <target>1.5</target>
+				</configuration>
+			</plugin>
+			
+		</plugins>
+  </build>
+	
+</project>
diff --git a/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/AutoDetect.java b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/AutoDetect.java
new file mode 100644
index 0000000..125e56a
--- /dev/null
+++ b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/AutoDetect.java
@@ -0,0 +1,31 @@
+/*
+ * 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.scrplugin.annotations;
+
+/**
+ * Placeholder class for default value of annotation properties with
+ * "auto detect" capabilities.
+ */
+public final class AutoDetect {
+
+    private AutoDetect() {
+        // disallows instancing this class
+    }
+
+}
diff --git a/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Component.java b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Component.java
new file mode 100644
index 0000000..ce4625d
--- /dev/null
+++ b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Component.java
@@ -0,0 +1,113 @@
+/*
+ * 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.scrplugin.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The <code>Component</code> annotation is the only required annotation. If
+ * this annotation is not declared in a Java class, the class is not declared as
+ * a component.
+ * <p>
+ * This annotation is used to declare the &lt;component&gt; element of the
+ * component declaration. See section 112.4.3, Component Element, in the OSGi
+ * Service Platform Service Compendium Specification for more information. The
+ * required &lt;implementation&gt; element is automatically generated with the
+ * fully qualified name of the class containing the <code>Component</code>
+ * annotation.
+ * </p>
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Component {
+
+    /**
+     * Defines the Component name also used as the PID for the Configuration
+     * Admin Service. Default value: Fully qualified name of the Java class.
+     */
+    String name() default "";
+
+    /**
+     * This is generally used as a title for the object described by the meta
+     * type. This name may be localized by prepending a % sign to the name.
+     * Default value: %&lt;name&gt;.name
+     */
+    String label() default "";
+
+    /**
+     * This is generally used as a description for the object described by the
+     * meta type. This name may be localized by prepending a % sign to the name.
+     * Default value: %&lt;name&gt;.name
+     */
+    String description() default "";
+
+    /**
+     * Whether the component is enabled when the bundle starts.
+     */
+    boolean enabled() default true;
+
+    /**
+     * Whether the component is a factory component.
+     */
+    String factory() default "";
+
+    /**
+     * Whether the component is immediately activated.
+     */
+    boolean immediate() default false;
+
+    /**
+     * Whether any service, property and reference declarations from base
+     * classes should be inherited by this class.
+     */
+    boolean inherit() default true;
+
+    /**
+     * Whether Metatype Service data is generated or not. If this parameter is
+     * not set or set to true Metatype Service data is generated in the
+     * <code>metatype.xml</code> file for this component. Otherwise no Metatype
+     * Service data is generated for this component.
+     */
+    boolean metatype() default true;
+
+    /**
+     * This marks an abstract service description which is not added to the
+     * descriptor but intended for reuse through inheritance. This attribute
+     * defaults to true for abstract classes and false for concrete classes.
+     */
+    boolean componentAbstract() default false;
+
+    /**
+     * Whether Declarative Services descriptor is generated or not. If this
+     * parameter is not set or set to true the Declarative Services descriptor
+     * is generated in the service descriptor file for this component. Otherwise
+     * no Declarative Services descriptor is generated for this component.
+     */
+    boolean ds() default true;
+
+    /**
+     * Generated <code>service.pid</code> property by default, if none declared
+     * explicitly.
+     */
+    boolean createPid() default true;
+
+}
diff --git a/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Properties.java b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Properties.java
new file mode 100644
index 0000000..0c72e30
--- /dev/null
+++ b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Properties.java
@@ -0,0 +1,40 @@
+/*
+ * 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.scrplugin.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Allows to define multiple {@link Property} annotations for one type.
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Properties {
+
+    /**
+     * List of {@link Property} annotations.
+     */
+    Property[] value();
+
+}
diff --git a/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Property.java b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Property.java
new file mode 100644
index 0000000..ab6a4cc
--- /dev/null
+++ b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Property.java
@@ -0,0 +1,124 @@
+/*
+ * 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.scrplugin.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The <code>Property</code> annotation defines properties which are made
+ * available to the component through the ComponentContext.getProperties()
+ * method. These annotations are not strictly required but may be used by
+ * components to defined initial configuration. Additionally properties may be
+ * set here to identify the component if it is registered as a service, for
+ * example the service.description and service.vendor properties.
+ * <p>
+ * This tag is used to declare &lt;property&gt; elements of the component
+ * declaration. See section 112.4.5, Properties and Property Elements, in the
+ * OSGi Service Platform Service Compendium Specification for more information.
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Property {
+
+    /**
+     * The name of the property
+     */
+    String name();
+
+    /**
+     * The label to display in a form to configure this property. This name may
+     * be localized by prepending a % sign to the name. Default value:
+     * %&lt;name&gt;.name
+     */
+    String label() default "";
+
+    /**
+     * A descriptive text to provide the client in a form to configure this
+     * property. This name may be localized by prepending a % sign to the name.
+     * Default value: %&lt;name&gt;.description
+     */
+    String description() default "";
+
+    /**
+     * The value(s) of the property. If the property type is not String, parsing
+     * of the value is done using the valueOf(String) method of the class
+     * defined by the property type.
+     */
+    String[] value();
+
+    /**
+     * The type of the property value. This must be one of {@link String},
+     * {@link Long}, {@link Double}, {@link Float}, {@link Integer},
+     * {@link Byte}, {@link Character}, {@link Boolean} and {@link Short}.
+     */
+    Class type() default AutoDetect.class;
+
+    /**
+     * Defines the cardinality of the property and its collection type. If the
+     * cardinality is negative, the property is expected to be stored in a
+     * {@link java.util.Vector} (primitive types such as boolean are boxed in
+     * the Wrapper class), if the cardinality is positive, the property is
+     * stored in an array (primitve types are unboxed, that is Boolean type
+     * values are stored in boolean[]). The actual value defines the maximum
+     * number of elements in the vector or array, where Integer.MIN_INT
+     * describes an unbounded Vector and Integer.MAX_INT describes an unbounded
+     * array. If the cardinality is zero, the property is a scalar value. If the
+     * defined value of the property is set in the value attribute, the
+     * cardinality defaults to 0 (zero for scalar value). If the property is
+     * defined in one or more properties starting with values, the cardinality
+     * defaults to Integer.MAX_INT, that is an unbounded array.
+     */
+    int cardinality() default 0;
+
+    /**
+     * Boolean flag defining whether a metatype descriptor entry should be
+     * generated for this property or not. By default a metatype descriptor
+     * entry, i.e. an AD element, is generated except for the properties
+     * <code>service.pid</code>, <code>service.description</code>,
+     * <code>service.id</code>, <code>service.ranking</code>,
+     * <code>service.vendor</code>, <code>service.bundlelocation</code> and
+     * <code>service.factoryPid</code>. If a property should not be available
+     * for display in a configuration user interface, this parameter should be
+     * set to true.
+     */
+    boolean propertyPrivate() default false;
+
+    /**
+     * Some properties may only be set to a set of possible values. To support
+     * user interfaces which provide a selection list of values or a list of
+     * checkboxes the option values and labels may be defined as parameters to
+     * the {@link Property} annotation. All parameters in the form of name-value
+     * pairs are used to build the list of available value options. The
+     * parameter name is used as the value while the parameter value is used as
+     * the label in the user interface. This label may be prepended with a %
+     * sign to localize the string.
+     * <p>
+     * The options are written to the metatype.xml file as Option elements
+     * inside the AD element defining the property. The name of the parameter
+     * will be used for the Option.value attribute while the value of the
+     * parameter defines the Option.label attribute.
+     */
+    PropertyOption[] options() default {};
+
+}
diff --git a/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/PropertyOption.java b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/PropertyOption.java
new file mode 100644
index 0000000..07b5b26
--- /dev/null
+++ b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/PropertyOption.java
@@ -0,0 +1,45 @@
+/*
+ * 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.scrplugin.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Defines a {@link Property} option.
+ */
+@Target(ElementType.ANNOTATION_TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface PropertyOption {
+
+    /**
+     * Name of the option
+     */
+    String name();
+
+    /**
+     * Value of the option
+     */
+    String value();
+
+}
diff --git a/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Reference.java b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Reference.java
new file mode 100644
index 0000000..e0daac0
--- /dev/null
+++ b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Reference.java
@@ -0,0 +1,112 @@
+/*
+ * 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.scrplugin.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The <code>Reference</code> annotation defines references to other services
+ * made available to the component by the Service Component Runtime.
+ * <p>
+ * This annotation may be declared for a Java Class or any Java Field to which
+ * it might apply. Depending on where the annotation is declared, the parameters
+ * may have different default values.
+ * <p>
+ * This annotation is used to declare &lt;reference&gt; elements of the
+ * component declaration. See section 112.4.7, Reference Element, in the OSGi
+ * Service Platform Service Compendium Specification for more information.
+ */
+@Target( { ElementType.TYPE, ElementType.FIELD })
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Reference {
+
+    /**
+     * The local name of the reference. If the annotation is declared on class
+     * level, this parameter is required. If the tag is declared for a field,
+     * the default value for the name parameter is the name of the field.
+     */
+    String name() default "";
+
+    /**
+     * The name of the service interface. This name is used by the Service
+     * Component Runtime to access the service on behalf of the component. If
+     * the annotation is declared on class level, this parameter is required. If
+     * the annotation is declared for a field, the default value for the
+     * interface parameter is the type of the field.
+     */
+    Class referenceInterface() default AutoDetect.class;
+
+    /**
+     * The cardinality of the service reference. This must be one of 0..1, 1..1,
+     * 0..n, and 1..n.
+     */
+    ReferenceCardinality cardinality() default ReferenceCardinality.ONE_TO_ONE;
+
+    /**
+     * The dynamicity policy of the reference. If dynamic the service will be
+     * made available to the component as it comes and goes. If static the
+     * component will be deactivated and re-activated if the service comes
+     * and/or goes away.
+     */
+    ReferencePolicy policy() default ReferencePolicy.STATIC;
+
+    /**
+     * A service target filter to select specific services to be made available.
+     * In order to be able to overwrite the value of this value by a
+     * configuration property, this parameter must be declared. If the parameter
+     * is not declared, the respective declaration attribute will not be
+     * generated.
+     */
+    String target() default "";
+
+    /**
+     * The name of the method to be called when the service is to be bound to
+     * the component. The default value is the name created by appending the
+     * reference name to the string bind. The method must be declared
+     * <code>public</code> or <code>protected</code> and take single argument
+     * which is declared with the service interface type.
+     */
+    String bind() default "";
+
+    /**
+     * The name of the method to be called when the service is to be unbound
+     * from the component. The default value is the name created by appending
+     * the reference name to the string unbind. The method must be declared
+     * <code>public</code> or <code>protected</code> and take single argument
+     * which is declared with the service interface type.
+     */
+    String unbind() default "";
+
+    /**
+     * TODO: parameter documentation missing
+     */
+    boolean checked() default false;
+
+    /**
+     * TODO: parameter documentation missing
+     * @since 1.0.9
+     */
+    String strategy() default "";
+
+}
diff --git a/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/ReferenceCardinality.java b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/ReferenceCardinality.java
new file mode 100644
index 0000000..fea82f7
--- /dev/null
+++ b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/ReferenceCardinality.java
@@ -0,0 +1,59 @@
+/*
+ * 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.scrplugin.annotations;
+
+/**
+ * Options for {@link Reference#cardinality()} property.
+ */
+public enum ReferenceCardinality {
+
+    /**
+     * Cardinality 0..1
+     */
+    ZERO_TO_ONE("0..1"),
+
+    /**
+     * Cardinality 1..1
+     */
+    ONE_TO_ONE("1..1"),
+
+    /**
+     * Cardinality 0..n
+     */
+    ZERO_TO_MANY("0..n"),
+
+    /**
+     * Cardinality 1..n
+     */
+    ONE_TO_MANY("1..n");
+
+    private final String cardinalityString;
+
+    private ReferenceCardinality(final String cardinalityString) {
+        this.cardinalityString = cardinalityString;
+    }
+
+    /**
+     * @return String representation of cardinality
+     */
+    public String getCardinalityString() {
+        return this.cardinalityString;
+    }
+
+}
diff --git a/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/ReferencePolicy.java b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/ReferencePolicy.java
new file mode 100644
index 0000000..598e7e1
--- /dev/null
+++ b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/ReferencePolicy.java
@@ -0,0 +1,44 @@
+/*
+ * 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.scrplugin.annotations;
+
+/**
+ * Options for {@link Reference#policy()} property.
+ */
+public enum ReferencePolicy {
+
+    /**
+     * The component will be deactivated and re-activated if the service comes
+     * and/or goes away.
+     */
+    STATIC,
+
+    /**
+     * The service will be made available to the component as it comes and goes.
+     */
+    DYNAMIC;
+
+    /**
+     * @return String representation of policy
+     */
+    public String getPolicyString() {
+        return this.name().toLowerCase();
+    }
+
+}
diff --git a/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/References.java b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/References.java
new file mode 100644
index 0000000..6706935
--- /dev/null
+++ b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/References.java
@@ -0,0 +1,40 @@
+/*
+ * 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.scrplugin.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Allows to define multiple {@link Reference} annotations for one type.
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface References {
+
+    /**
+     * List of {@link Reference} annotations.
+     */
+    Reference[] value();
+
+}
diff --git a/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Service.java b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Service.java
new file mode 100644
index 0000000..94e13be
--- /dev/null
+++ b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Service.java
@@ -0,0 +1,54 @@
+/*
+ * 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.scrplugin.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * The <code>Service</code> annotation defines whether and which service
+ * interfaces are provided by the component.
+ * <p>
+ * This annotation is used to declare &lt;service&gt; and &lt;provide&gt;
+ * elements of the component declaration. See section 112.4.6, Service Elements,
+ * in the OSGi Service Platform Service Compendium Specification for more
+ * information.
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Service {
+
+    /**
+     * The class of the service interface provided by the component. If this
+     * property is not set provide elements will be generated for all interfaces
+     * generated by the class
+     */
+    Class value() default AutoDetect.class;
+
+    /**
+     * Whether the component is registered as a
+     * <code>org.osgi.framework.ServiceFactory</code> or not.
+     */
+    boolean serviceFactory() default false;
+
+}
diff --git a/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Services.java b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Services.java
new file mode 100644
index 0000000..5acf325
--- /dev/null
+++ b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/Services.java
@@ -0,0 +1,40 @@
+/*
+ * 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.scrplugin.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Allows to define multiple {@link Service} annotations for one type.
+ */
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Services {
+
+    /**
+     * List of {@link Service} annotations.
+     */
+    Service[] value();
+
+}
diff --git a/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/package-info.java b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/package-info.java
new file mode 100644
index 0000000..d48edb2
--- /dev/null
+++ b/scrplugin-annotations/src/main/java/org/apache/felix/scrplugin/annotations/package-info.java
@@ -0,0 +1,24 @@
+/*
+ * 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.
+ */
+/**
+ * The scr goal of the maven-scr-plugin looks for the annotations defined in the package when building component descriptors.
+ * The annotations are not interpreted in runtime.   
+ */
+package org.apache.felix.scrplugin.annotations;
+
