diff --git a/scr/src/main/java/org/apache/felix/scr/impl/helper/Annotations.java b/scr/src/main/java/org/apache/felix/scr/impl/helper/Annotations.java
index d182974..78f7156 100644
--- a/scr/src/main/java/org/apache/felix/scr/impl/helper/Annotations.java
+++ b/scr/src/main/java/org/apache/felix/scr/impl/helper/Annotations.java
@@ -22,7 +22,6 @@
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
-import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -31,8 +30,6 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import javax.swing.text.Keymap;
-
 import org.osgi.framework.Bundle;
 
 public class Annotations
@@ -42,7 +39,7 @@
     {     
         Map<String, Object> m = new HashMap<String, Object>();
         
-        Method[] methods = clazz.getDeclaredMethods();
+        Method[] methods = clazz.getMethods();
         Map<String, Method> complexFields = new HashMap<String, Method>();
         for ( Method method: methods )
         {
diff --git a/scr/src/test/java/org/apache/felix/scr/impl/helper/AnnotationTest.java b/scr/src/test/java/org/apache/felix/scr/impl/helper/AnnotationTest.java
index dbc286c..c186bc1 100644
--- a/scr/src/test/java/org/apache/felix/scr/impl/helper/AnnotationTest.java
+++ b/scr/src/test/java/org/apache/felix/scr/impl/helper/AnnotationTest.java
@@ -389,12 +389,7 @@
 
     public void testC1() throws Exception
     {
-        Map<String, Object> b1Values = b1Values();
-        Map<String, Object> values = allValues();
-        nest(values, "b1", 0, b1Values);
-        nest(values, "b1array", 0, b1Values);
-        nest(values, "b1array", 1, b1Values);
-        nest(values, "b1array", 2, b1Values);
+        Map<String, Object> values = c1Values();
         
         Object o = Annotations.toObject( C1.class, values, mockBundle(), true);
         assertTrue("expected an B1 " + o, o instanceof C1);
@@ -407,5 +402,111 @@
         
     }
 
+    private Map<String, Object> c1Values()
+    {
+        Map<String, Object> b1Values = b1Values();
+        Map<String, Object> values = allValues();
+        nest(values, "b1", 0, b1Values);
+        nest(values, "b1array", 0, b1Values);
+        nest(values, "b1array", 1, b1Values);
+        nest(values, "b1array", 2, b1Values);
+        return values;
+    }
+
+    public interface I0 {
+        boolean bool();
+        byte byt();
+        Class<?> clas();
+        E1 e1();
+    }
+    public interface AI1 extends I0 {
+        double doubl();
+        float floa();
+        int integer();
+        long lon();
+        short shor();
+        String string();
+    }
+    
+    public interface BI1 extends I0 {
+        double doubl();
+        float floa();
+        int integer();
+        long lon();
+        short shor();
+        String string();
+        AI1 a1();
+        AI1[] a1array();
+    }
+
+    public interface CI1 extends I0 {
+        double doubl();
+        float floa();
+        int integer();
+        long lon();
+        short shor();
+        String string();
+        BI1 b1();
+        BI1[] b1array();
+    }
+
+    public void testAI1() throws Exception
+    {
+        Map<String, Object> values = allValues();
+        
+        Object o = Annotations.toObject( AI1.class, values, mockBundle(), true);
+        assertTrue("expected an AI1", o instanceof AI1);
+        
+        AI1 a = (AI1) o;
+        checkAI1(a);
+    }
+
+    private void checkAI1(AI1 a)
+    {
+        assertEquals(true, a.bool());
+        assertEquals((byte)12, a.byt());
+        assertEquals(String.class, a.clas());
+        assertEquals(E1.a, a.e1());
+        assertEquals(3.14d, a.doubl());
+        assertEquals(500f, a.floa());
+        assertEquals(3, a.integer());
+        assertEquals(12345678l,  a.lon());
+        assertEquals((short)3, a.shor());
+        assertEquals("3", a.string());
+    }
+
+    public void testBI1() throws Exception
+    {
+        Map<String, Object> values = b1Values();
+        
+        Object o = Annotations.toObject( BI1.class, values, mockBundle(), true);
+        assertTrue("expected an B1 " + o, o instanceof BI1);
+        BI1 b = (BI1) o;
+        checkBI1(b);        
+    }
+
+    private void checkBI1(BI1 b)
+    {
+        checkAI1(b.a1());
+        assertEquals(3, b.a1array().length);
+        checkAI1(b.a1array()[0]);
+        checkAI1(b.a1array()[1]);
+        checkAI1(b.a1array()[2]);
+    }
+
+    public void testCI1() throws Exception
+    {
+        Map<String, Object> values = c1Values();
+        
+        Object o = Annotations.toObject( CI1.class, values, mockBundle(), true);
+        assertTrue("expected an B1 " + o, o instanceof CI1);
+        CI1 c = (CI1) o;
+        checkBI1(c.b1());  
+        assertEquals(3, c.b1array().length);
+        checkBI1(c.b1array()[0]);
+        checkBI1(c.b1array()[1]);
+        checkBI1(c.b1array()[2]);
+        
+    }
 
 }
