diff --git a/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java b/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java
index fc409d2..c9e3722 100644
--- a/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java
+++ b/converter/converter/src/main/java/org/osgi/util/converter/ConvertingImpl.java
@@ -1126,11 +1126,15 @@
 		Set<Class< ? >> interfaces = getInterfaces0(cls);
 		outer: for (Iterator<Class< ? >> it = interfaces.iterator(); it.hasNext();) {
 			Class< ? > intf = it.next();
-			for (Method method : intf.getMethods()) {
+			Method[] methods=intf.getMethods();
+			for (Method method : methods) {
 				if(method.getDeclaringClass() == intf) {
 					continue outer;
 				}
 			}
+			if(intf==cls&&methods.length==0) {
+			    continue outer;
+			}
 			it.remove();
 		}
 
diff --git a/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java b/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java
index 9b4615e..ef00c13 100644
--- a/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java
+++ b/converter/converter/src/test/java/org/osgi/util/converter/ConverterTest.java
@@ -1451,11 +1451,40 @@
         assertEquals(Integer.valueOf(0), inter.value());
     }
 
+    @Test
+    public void testMapToEmptyInterface() throws Exception {
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("a", "b");
+        EmptyInterface i = Converters.standardConverter().convert(map).to(EmptyInterface.class);
+        assertNotNull(i);
+
+        EmptyInterface2 j = Converters.standardConverter().convert(map).to(EmptyInterface2.class);
+        assertNotNull(j);
+
+        EmptyInterface3 k = Converters.standardConverter().convert(map).to(EmptyInterface3.class);
+        assertNotNull(k);
+    }
+
     static interface MyIntf2 {
         String code();
         Integer value();
     }
 
+    static interface EmptyInterface
+    {
+    }
+
+    static interface EmptyInterface2 extends EmptyInterface
+    {
+    }
+    static interface NonEmptyInterface
+    {
+       int a();
+    }
+
+    static interface EmptyInterface3 extends NonEmptyInterface
+    {
+    }
     static class MyClass2 {
         private final String value;
         public MyClass2(String v) {
