diff --git a/ipojo/annotations/src/main/java/org/apache/felix/ipojo/handlers/event/Publisher.java b/ipojo/annotations/src/main/java/org/apache/felix/ipojo/handlers/event/Publisher.java
index 3db2069..0144d03 100644
--- a/ipojo/annotations/src/main/java/org/apache/felix/ipojo/handlers/event/Publisher.java
+++ b/ipojo/annotations/src/main/java/org/apache/felix/ipojo/handlers/event/Publisher.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * 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
@@ -24,18 +24,18 @@
 
 /**
  * Event Admin Publisher handler.
- * Be aware that despite is it provided in the annotations jar, 
+ * Be aware that despite is it provided in the annotations jar,
  * it refers to an external handler.
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
 @Target(ElementType.FIELD)
 public @interface Publisher {
-    
+
     /**
      * Sets the publisher name.
      */
     String name();
-    
+
     /**
      * Sets topics on which event are sent.
      * The topics are separated by a ',' such as in
@@ -43,18 +43,26 @@
      * Default : no topics (configured in the instance configuration)
      */
     String topics() default "";
-    
+
     /**
      * Enables/Disables synchronous sending.
-     * Default : false (asynchronous) 
+     * Default : false (asynchronous)
      */
     boolean synchronous() default false;
-    
+
+    /**
+     * Sets the data key in which the data is
+     * put.
+     * Default : user.data
+     * @deprecated replaced by dataKey
+     */
+    String data_key() default "user.data";
+
     /**
      * Sets the data key in which the data is
      * put.
      * Default : user.data
      */
-    String data_key() default "user.data";
+    String dataKey() default "user.data";
 
 }
diff --git a/ipojo/annotations/src/main/java/org/apache/felix/ipojo/handlers/event/Subscriber.java b/ipojo/annotations/src/main/java/org/apache/felix/ipojo/handlers/event/Subscriber.java
index b0b2372..70cb7a8 100644
--- a/ipojo/annotations/src/main/java/org/apache/felix/ipojo/handlers/event/Subscriber.java
+++ b/ipojo/annotations/src/main/java/org/apache/felix/ipojo/handlers/event/Subscriber.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * 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
@@ -24,18 +24,18 @@
 
 /**
  * Event Admin Subscriber handler.
- * Be aware that despite is it provided in the annotations jar, 
+ * Be aware that despite is it provided in the annotations jar,
  * it refers to an external handler.
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
 @Target(ElementType.METHOD)
 public @interface Subscriber {
-    
+
     /**
      * Sets the subscriber name.
      */
     String name();
-    
+
     /**
      * Sets topics on which event are received.
      * The topics are separated by a ',' such as in
@@ -43,23 +43,38 @@
      * Default : no topics (configured in the instance configuration)
      */
     String topics() default "";
-    
+
+    /**
+     * Sets the data key in which the data is
+     * stored.
+     * Default : no key
+     * @deprecated replaced by dataKey
+     */
+    String data_key() default "";
+
+    /**
+     * Sets the data type (type of the received data).
+     * Default : no type.
+     * @deprecated replaced by dataType
+     */
+    String data_type() default "";
+
     /**
      * Sets the data key in which the data is
      * stored.
      * Default : no key
      */
-    String data_key() default "";
-    
+    String dataKey() default "";
+
     /**
      * Sets the data type (type of the received data).
      * Default : no type.
      */
-    String data_type() default "";
-    
-    
+    String dataType() default "";
+
+
     /**
-     * Sets the event filter. Only event matching with the 
+     * Sets the event filter. Only event matching with the
      * specified LDAP filter are received.
      * default : no filter;
      */
diff --git a/ipojo/handler/eventadmin/src/main/java/org/apache/felix/ipojo/handlers/event/publisher/EventAdminPublisherMetadata.java b/ipojo/handler/eventadmin/src/main/java/org/apache/felix/ipojo/handlers/event/publisher/EventAdminPublisherMetadata.java
index 4358836..1c210ea 100644
--- a/ipojo/handler/eventadmin/src/main/java/org/apache/felix/ipojo/handlers/event/publisher/EventAdminPublisherMetadata.java
+++ b/ipojo/handler/eventadmin/src/main/java/org/apache/felix/ipojo/handlers/event/publisher/EventAdminPublisherMetadata.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * 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
@@ -25,7 +25,7 @@
 
 /**
  * Represent a publisher.
- * 
+ *
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
 class EventAdminPublisherMetadata {
@@ -96,7 +96,7 @@
 
     /**
      * Constructs a publisher from its metadata description.
-     * 
+     *
      * @param publisher the publisher metadata description.
      * @throws ConfigurationException if the configuration of the component or
      *             the instance is invalid.
@@ -151,7 +151,11 @@
         if (publisher.containsAttribute(DATA_KEY_ATTRIBUTE)) {
             m_dataKey = publisher.getAttribute(DATA_KEY_ATTRIBUTE);
         } else if (publisher.containsAttribute("data_key")) {
+        	// XML Case
             m_dataKey = publisher.getAttribute("data_key");
+        } else if (publisher.containsAttribute("dataKey")) {
+        	// Annotation case.
+        	m_dataKey = publisher.getAttribute("dataKey");
         } else {
             m_dataKey = DEFAULT_DATA_KEY_VALUE;
         }
@@ -159,7 +163,7 @@
 
     /**
      * Sets the topics attribute of the publisher.
-     * 
+     *
      * @param topicsString the comma separated list of the topics on which
      *            events are sent
      * @throws ConfigurationException the specified topic string is malformed
@@ -180,7 +184,7 @@
 
     /**
      * Checks that the required instance configurable attributes are all set.
-     * 
+     *
      * @throws ConfigurationException if a required attribute is missing
      */
     public void check() throws ConfigurationException {
@@ -193,7 +197,7 @@
 
     /**
      * Gets the name attribute of the publisher.
-     * 
+     *
      * @return the name
      */
     public String getName() {
@@ -202,7 +206,7 @@
 
     /**
      * Gets the field attribute of the publisher.
-     * 
+     *
      * @return the field
      */
     public String getField() {
@@ -211,7 +215,7 @@
 
     /**
      * Gets the topics attribute of the publisher.
-     * 
+     *
      * @return the topics
      */
     public String[] getTopics() {
@@ -220,7 +224,7 @@
 
     /**
      * Gets the synchronous attribute of the publisher.
-     * 
+     *
      * @return the synchronous mode
      */
     public boolean isSynchronous() {
@@ -229,7 +233,7 @@
 
     /**
      * Gets the dataKey attribute of the publisher.
-     * 
+     *
      * @return the data key
      */
     public String getDataKey() {
diff --git a/ipojo/handler/eventadmin/src/main/java/org/apache/felix/ipojo/handlers/event/subscriber/EventAdminSubscriberMetadata.java b/ipojo/handler/eventadmin/src/main/java/org/apache/felix/ipojo/handlers/event/subscriber/EventAdminSubscriberMetadata.java
index 376df3e..3d9f0a5 100644
--- a/ipojo/handler/eventadmin/src/main/java/org/apache/felix/ipojo/handlers/event/subscriber/EventAdminSubscriberMetadata.java
+++ b/ipojo/handler/eventadmin/src/main/java/org/apache/felix/ipojo/handlers/event/subscriber/EventAdminSubscriberMetadata.java
@@ -1,4 +1,4 @@
-/* 
+/*
  * 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
@@ -28,7 +28,7 @@
 
 /**
  * Represent an subscriber.
- * 
+ *
  * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
  */
 class EventAdminSubscriberMetadata {
@@ -109,7 +109,7 @@
 
     /**
      * Constructor.
-     * 
+     *
      * @param bundleContext the bundle context of the managed instance.
      * @param subscriber the subscriber metadata.
      * @throws ConfigurationException if the configuration of the component or
@@ -158,15 +158,25 @@
 
         // DATA_KEY_ATTRIBUTE
         m_dataKey = subscriber.getAttribute(DATA_KEY_ATTRIBUTE);
-        if (m_dataKey == null) { // Alternative configuration
+        if (m_dataKey == null) { // Alternative configurations (data_key and dataKey)
+        	// XML
             m_dataKey = subscriber.getAttribute("data_key");
+            if (m_dataKey == null) {
+            	// Annotation
+            	m_dataKey = subscriber.getAttribute("dataKey");
+            }
         }
-        
+
         String t = subscriber.getAttribute(DATA_TYPE_ATTRIBUTE);
-        if (t == null) { // Alternative configuration
+        if (t == null) { // Alternative configurations
+        	// XML
             t = subscriber.getAttribute("data_type");
+            if (t == null) {
+            	/// Annotation
+            	t = subscriber.getAttribute("dataType");
+            }
         }
-        
+
         if (t != null) {
             // Check that the data-key attribute is set.
             if (m_dataKey == null) {
@@ -194,7 +204,7 @@
 
     /**
      * Sets the topics attribute of the subscriber.
-     * 
+     *
      * @param topicsString the comma separated list of the topics to listen
      * @throws ConfigurationException if the specified topic list is malformed
      */
@@ -214,7 +224,7 @@
 
     /**
      * Sets the filter attribute of the subscriber.
-     * 
+     *
      * @param filterString the string representation of the event filter
      * @throws ConfigurationException if the LDAP filter is malformed
      */
@@ -228,7 +238,7 @@
 
     /**
      * Checks that the required instance configurable attributes are all set.
-     * 
+     *
      * @throws ConfigurationException if a required attribute is missing
      */
     public void check() throws ConfigurationException {
@@ -241,7 +251,7 @@
 
     /**
      * Gets the name attribute of the subscriber.
-     * 
+     *
      * @return the name
      */
     public String getName() {
@@ -250,7 +260,7 @@
 
     /**
      * Gets the topics attribute of the subscriber.
-     * 
+     *
      * @return the topics
      */
     public String[] getTopics() {
@@ -259,7 +269,7 @@
 
     /**
      * Gets the callback attribute of the subscriber.
-     * 
+     *
      * @return the callback
      */
     public String getCallback() {
@@ -268,7 +278,7 @@
 
     /**
      * Gets the data key attribute of the subscriber.
-     * 
+     *
      * @return the dataKey
      */
     public String getDataKey() {
@@ -277,7 +287,7 @@
 
     /**
      * Gets the data type attribute of the subscriber.
-     * 
+     *
      * @return the dataType
      */
     public Class getDataType() {
@@ -286,7 +296,7 @@
 
     /**
      * Gets the filter attribute of the subscriber.
-     * 
+     *
      * @return the filter
      */
     public Filter getFilter() {
diff --git a/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/EventAdmin.java b/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/EventAdmin.java
index bb93202..4262f94 100644
--- a/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/EventAdmin.java
+++ b/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/annotations/EventAdmin.java
@@ -6,21 +6,27 @@
 
 public class EventAdmin extends OSGiTestCase {
     String type = "org.apache.felix.ipojo.test.scenarios.component.event.PubSub";
+    String deprecated = "org.apache.felix.ipojo.test.scenarios.component.event.PubSubDeprecated";
+
     String namespace = "org.apache.felix.ipojo.handlers.event";
-    
+
     Element component;
+    Element componentDeprecated;
     private IPOJOHelper helper;
-    
+
     public void setUp() {
         helper = new IPOJOHelper(this);
         component = helper.getMetadata(type);
+        componentDeprecated = helper.getMetadata(deprecated);
         assertNotNull("Check component", component);
     }
-    
+
     public void tearDown() {
         component = null;
+        componentDeprecated = null;
+
     }
-    
+
     public void testP1() {
         //P1, synchronous
         Element elem = getElementByName("p1");
@@ -28,9 +34,19 @@
         assertNull("Check topics", elem.getAttribute("topics"));
         assertEquals("Check synchronous", "true", elem.getAttribute("synchronous"));
         assertEquals("Check field", "publisher1", elem.getAttribute("field"));
-        assertNull("Check data_key", elem.getAttribute("data_key"));  
+        assertNull("Check data_key", elem.getAttribute("dataKey"));
     }
-    
+
+    public void testP1Deprecated() {
+        //P1, synchronous
+        Element elem = getDeprecatedElementByName("p1");
+        checkPublisher(elem);
+        assertNull("Check topics", elem.getAttribute("topics"));
+        assertEquals("Check synchronous", "true", elem.getAttribute("synchronous"));
+        assertEquals("Check field", "publisher1", elem.getAttribute("field"));
+        assertNull("Check data_key", elem.getAttribute("data_key"));
+    }
+
     public void testP2() {
         //name="p2", synchronous=false, topics="foo,bar", data_key="data"
         Element elem = getElementByName("p2");
@@ -38,9 +54,19 @@
         assertEquals("Check topics (" + elem.getAttribute("topics")+")", "foo,bar", elem.getAttribute("topics"));
         assertEquals("Check synchronous", "false", elem.getAttribute("synchronous"));
         assertEquals("Check field", "publisher2", elem.getAttribute("field"));
-        assertEquals("Check data_key", "data" ,elem.getAttribute("data_key"));  
+        assertEquals("Check data_key", "data" ,elem.getAttribute("dataKey"));
     }
-    
+
+    public void testP2Deprecated() {
+        //name="p2", synchronous=false, topics="foo,bar", data_key="data"
+        Element elem = getDeprecatedElementByName("p2");
+        checkPublisher(elem);
+        assertEquals("Check topics (" + elem.getAttribute("topics")+")", "foo,bar", elem.getAttribute("topics"));
+        assertEquals("Check synchronous", "false", elem.getAttribute("synchronous"));
+        assertEquals("Check field", "publisher2", elem.getAttribute("field"));
+        assertEquals("Check data_key", "data" ,elem.getAttribute("data_key"));
+    }
+
     public void testP3() {
         //name="p3", synchronous=true, topics="bar"
         Element elem = getElementByName("p3");
@@ -48,44 +74,87 @@
         assertEquals("Check topics", "bar" ,elem.getAttribute("topics"));
         assertEquals("Check synchronous", "true", elem.getAttribute("synchronous"));
         assertEquals("Check field", "publisher3", elem.getAttribute("field"));
-        assertNull("Check data_key", elem.getAttribute("data_key"));  
+        assertNull("Check data_key", elem.getAttribute("dataKey"));
     }
-    
+
+    public void testP3Deprecated() {
+        //name="p3", synchronous=true, topics="bar"
+        Element elem = getDeprecatedElementByName("p3");
+        checkPublisher(elem);
+        assertEquals("Check topics", "bar" ,elem.getAttribute("topics"));
+        assertEquals("Check synchronous", "true", elem.getAttribute("synchronous"));
+        assertEquals("Check field", "publisher3", elem.getAttribute("field"));
+        assertNull("Check data_key", elem.getAttribute("data_key"));
+    }
+
     public void testS1() {
         //name="s1", data_key="data"
         Element elem = getElementByName("s1");
         checkSubscriber(elem);
         assertNull("Check topics",elem.getAttribute("topics"));
         assertEquals("Check method", "receive1", elem.getAttribute("method"));
-        assertEquals("Check data_key", "data" ,elem.getAttribute("data_key"));  
+        assertEquals("Check data_key", "data" ,elem.getAttribute("dataKey"));
+        assertNull("Check data_type", elem.getAttribute("dataType"));
+        assertNull("Check filter", elem.getAttribute("filter"));
+    }
+
+    public void testS1Deprecated() {
+        //name="s1", data_key="data"
+        Element elem = getDeprecatedElementByName("s1");
+        checkSubscriber(elem);
+        assertNull("Check topics",elem.getAttribute("topics"));
+        assertEquals("Check method", "receive1", elem.getAttribute("method"));
+        assertEquals("Check data_key", "data" ,elem.getAttribute("data_key"));
         assertNull("Check data_type", elem.getAttribute("data_type"));
         assertNull("Check filter", elem.getAttribute("filter"));
     }
-    
+
     public void testS2() {
         //name="s2", topics="foo,bar", filter="(foo=true)"
         Element elem = getElementByName("s2");
         checkSubscriber(elem);
         assertEquals("Check topics", "foo,bar", elem.getAttribute("topics"));
         assertEquals("Check method", "receive2", elem.getAttribute("method"));
-        assertNull("Check data_key" ,elem.getAttribute("data_key"));  
+        assertNull("Check data_key" ,elem.getAttribute("dataKey"));
+        assertNull("Check data_type", elem.getAttribute("dataType"));
+        assertEquals("Check filter","(foo=true)" , elem.getAttribute("filter"));
+    }
+
+    public void testS2Deprecated() {
+        //name="s2", topics="foo,bar", filter="(foo=true)"
+        Element elem = getDeprecatedElementByName("s2");
+        checkSubscriber(elem);
+        assertEquals("Check topics", "foo,bar", elem.getAttribute("topics"));
+        assertEquals("Check method", "receive2", elem.getAttribute("method"));
+        assertNull("Check data_key" ,elem.getAttribute("data_key"));
         assertNull("Check data_type", elem.getAttribute("data_type"));
         assertEquals("Check filter","(foo=true)" , elem.getAttribute("filter"));
     }
-    
+
     public void testS3() {
         //name="s3", topics="foo", data_key="data", data_type="java.lang.String"
         Element elem = getElementByName("s3");
         checkSubscriber(elem);
         assertEquals("Check topics", "foo", elem.getAttribute("topics"));
         assertEquals("Check method", "receive3", elem.getAttribute("method"));
-        assertEquals("Check data_key", "data" ,elem.getAttribute("data_key"));  
+        assertEquals("Check data_key", "data" ,elem.getAttribute("dataKey"));
+        assertEquals("Check data_type", "java.lang.String", elem.getAttribute("dataType"));
+        assertNull("Check filter", elem.getAttribute("filter"));
+    }
+
+    public void testS3Deprecated() {
+        //name="s3", topics="foo", data_key="data", data_type="java.lang.String"
+        Element elem = getDeprecatedElementByName("s3");
+        checkSubscriber(elem);
+        assertEquals("Check topics", "foo", elem.getAttribute("topics"));
+        assertEquals("Check method", "receive3", elem.getAttribute("method"));
+        assertEquals("Check data_key", "data" ,elem.getAttribute("data_key"));
         assertEquals("Check data_type", "java.lang.String", elem.getAttribute("data_type"));
         assertNull("Check filter", elem.getAttribute("filter"));
     }
-    
-   
-    
+
+
+
     public Element getElementByName(String name) {
         Element [] elems = component.getElements();
         for (int i = 0; i < elems.length; i++) {
@@ -95,7 +164,17 @@
         }
         return null;
     }
-    
+
+    public Element getDeprecatedElementByName(String name) {
+        Element [] elems = componentDeprecated.getElements();
+        for (int i = 0; i < elems.length; i++) {
+            if (elems[i].containsAttribute("name") && elems[i].getAttribute("name").equals(name)) {
+                return elems[i];
+            }
+        }
+        return null;
+    }
+
     public void checkSubscriber(Element elem) {
         assertNotNull("Can't check subscriber : null element",elem);
         String ns = elem.getNameSpace();
@@ -104,7 +183,7 @@
         assertEquals("Elem is not a subscriber : bad name", "subscriber", nm);
 
     }
-    
+
     public void checkPublisher(Element elem) {
         assertNotNull("Can't check publisher : null element",elem);
         String ns = elem.getNameSpace();
diff --git a/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/event/PubSub.java b/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/event/PubSub.java
index be15ac2..ac75616 100644
--- a/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/event/PubSub.java
+++ b/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/event/PubSub.java
@@ -9,29 +9,29 @@
 public class PubSub {
     @org.apache.felix.ipojo.handlers.event.Publisher(name="p1", synchronous=true)
     org.apache.felix.ipojo.handlers.event.publisher.Publisher publisher1;
-    
-    @org.apache.felix.ipojo.handlers.event.Publisher(name="p2", synchronous=false, topics="foo,bar", data_key="data")
+
+    @org.apache.felix.ipojo.handlers.event.Publisher(name="p2", synchronous=false, topics="foo,bar", dataKey="data")
     org.apache.felix.ipojo.handlers.event.publisher.Publisher publisher2;
-    
+
     @org.apache.felix.ipojo.handlers.event.Publisher(name="p3", synchronous=true, topics="bar")
     org.apache.felix.ipojo.handlers.event.publisher.Publisher publisher3;
-    
-    @Subscriber(name="s1", data_key="data")
+
+    @Subscriber(name="s1", dataKey="data")
     public void receive1(Object foo) {
         // Nothing
     }
-    
+
     @Subscriber(name="s2", topics="foo,bar", filter="(foo=true)")
     public void receive2(Event foo) {
         // Nothing
     }
-    
-    
-    @Subscriber(name="s3", topics="foo", data_key="data", data_type="java.lang.String")
+
+
+    @Subscriber(name="s3", topics="foo", dataKey="data", dataType="java.lang.String")
     public void receive3(String foo) {
         // Nothing
     }
-    
-    
-    
+
+
+
 }
diff --git a/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/event/PubSubDeprecated.java b/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/event/PubSubDeprecated.java
new file mode 100644
index 0000000..618f6ff
--- /dev/null
+++ b/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/event/PubSubDeprecated.java
@@ -0,0 +1,37 @@
+package org.apache.felix.ipojo.test.scenarios.component.event;
+
+import org.apache.felix.ipojo.annotations.Component;
+import org.apache.felix.ipojo.handlers.event.Subscriber;
+import org.osgi.service.event.Event;
+
+
+@Component
+public class PubSubDeprecated {
+    @org.apache.felix.ipojo.handlers.event.Publisher(name="p1", synchronous=true)
+    org.apache.felix.ipojo.handlers.event.publisher.Publisher publisher1;
+    
+    @org.apache.felix.ipojo.handlers.event.Publisher(name="p2", synchronous=false, topics="foo,bar", data_key="data")
+    org.apache.felix.ipojo.handlers.event.publisher.Publisher publisher2;
+    
+    @org.apache.felix.ipojo.handlers.event.Publisher(name="p3", synchronous=true, topics="bar")
+    org.apache.felix.ipojo.handlers.event.publisher.Publisher publisher3;
+    
+    @Subscriber(name="s1", data_key="data")
+    public void receive1(Object foo) {
+        // Nothing
+    }
+    
+    @Subscriber(name="s2", topics="foo,bar", filter="(foo=true)")
+    public void receive2(Event foo) {
+        // Nothing
+    }
+    
+    
+    @Subscriber(name="s3", topics="foo", data_key="data", data_type="java.lang.String")
+    public void receive3(String foo) {
+        // Nothing
+    }
+    
+    
+    
+}
