diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
index 8161a74..322f563 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
@@ -16,7 +16,6 @@
 
 import org.apache.juneau.*;
 import org.apache.juneau.jena.annotation.*;
-import org.apache.juneau.reflect.*;
 import org.apache.juneau.xml.*;
 
 /**
@@ -37,15 +36,14 @@
 	 */
 	public RdfClassMeta(ClassMeta<?> cm, RdfMetaProvider mp) {
 		super(cm);
-		ClassInfo ci = cm.getInfo();
-		this.rdf = mp.getAnnotation(Rdf.class, cm.getInnerClass());
+		this.rdf = cm.getAnnotation(Rdf.class, mp);
 		if (rdf != null) {
 			collectionFormat = rdf.collectionFormat();
 		} else {
 			collectionFormat = RdfCollectionFormat.DEFAULT;
 		}
-		List<Rdf> rdfs = ci.getAnnotations(Rdf.class, mp);
-		List<RdfSchema> schemas = ci.getAnnotations(RdfSchema.class, mp);
+		List<Rdf> rdfs = cm.getAnnotations(Rdf.class, mp);
+		List<RdfSchema> schemas = cm.getAnnotations(RdfSchema.class, mp);
 		this.namespace = RdfUtils.findNamespace(rdfs, schemas);
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
index 3b83da0..0f01aab 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
@@ -173,14 +173,14 @@
 				List<Class<?>> bdClasses = new ArrayList<>();
 				if (beanFilter != null && beanFilter.getBeanDictionary() != null)
 					bdClasses.addAll(Arrays.asList(beanFilter.getBeanDictionary()));
-				Bean bean = classMeta.innerClass.getAnnotation(Bean.class);
+				Bean bean = classMeta.getAnnotation(Bean.class);
 				if (bean != null) {
 					if (! bean.typeName().isEmpty())
 						bdClasses.add(classMeta.innerClass);
 				}
 				this.beanRegistry = new BeanRegistry(ctx, null, bdClasses.toArray(new Class<?>[bdClasses.size()]));
 
-				for (Bean b : classMeta.getInfo().getAnnotationsParentFirst(Bean.class))
+				for (Bean b : classMeta.getAnnotationsParentFirst(Bean.class))
 					if (! b.typePropertyName().isEmpty())
 						typePropertyName = b.typePropertyName();
 				if (typePropertyName == null)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
index 37cb982..b643d3a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
@@ -89,7 +89,7 @@
 						addToMap(typeName, val);
 					}
 				} else {
-					Bean b = c.getAnnotation(Bean.class);
+					Bean b = ci.getAnnotation(Bean.class);
 					if (b == null || b.typeName().isEmpty())
 						throw new BeanRuntimeException("Class ''{0}'' was passed to BeanRegistry but it doesn't have a @Bean(typeName) annotation defined.", c.getName());
 					addToMap(b.typeName(), beanContext.getClassMeta(c));
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
index c78437b..8fcd087 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
@@ -2043,7 +2043,88 @@
 	 * @return The specified annotation, or <jk>null</jk> if the class does not have the specified annotation.
 	 */
 	public <A extends Annotation> A getAnnotation(Class<A> a) {
-		return this.innerClass.getAnnotation(a);
+		return info.getAnnotation(a);
+	}
+
+	/**
+	 * Returns the annotation defined on this class using the specified meta-provider for lookup.
+	 *
+	 * @param a The annotation to retrieve.
+	 * @param mp The meta-provider to use for lookup of annotations.
+	 * @return The specified annotation, or <jk>null</jk> if the class does not have the specified annotation.
+	 */
+	public <A extends Annotation> A getAnnotation(Class<A> a, MetaProvider mp) {
+		return info.getAnnotation(a, mp);
+	}
+
+	/**
+	 * Returns the declared annotation defined on this class.
+	 *
+	 * @param a The annotation to retrieve.
+	 * @return The specified annotation, or <jk>null</jk> if the class does not have the specified annotation.
+	 */
+	public <A extends Annotation> A getDeclaredAnnotation(Class<A> a) {
+		return info.getDeclaredAnnotation(a);
+	}
+
+	/**
+	 * Returns the declared annotation defined on this class using the specified meta-provider for lookup.
+	 *
+	 * @param a The annotation to retrieve.
+	 * @param mp The meta-provider to use for lookup of annotations.
+	 * @return The specified annotation, or <jk>null</jk> if the class does not have the specified annotation.
+	 */
+	public <A extends Annotation> A getDeclaredAnnotation(Class<A> a, MetaProvider mp) {
+		return info.getDeclaredAnnotation(a);
+	}
+
+	/**
+	 * Returns all annotations of the specified type defined on the specified class or parent classes/interfaces.
+	 *
+	 * @param a
+	 * 	The annotation to search for.
+	 * @return
+	 * 	A list of all matching annotations found in child-to-parent order, or an empty list if none found.
+	 */
+	public <A extends Annotation> List<A> getAnnotations(Class<A> a) {
+		return info.getAnnotations(a);
+	}
+
+	/**
+	 * Returns all annotations of the specified type defined on the specified class or parent classes/interfaces.
+	 *
+	 * @param a The annotation to search for.
+	 * @param mp The metadata provider for finding annotations.
+	 * @return
+	 * 	A list of all matching annotations found in child-to-parent order, or an empty list if none found.
+	 */
+	public <A extends Annotation> List<A> getAnnotations(Class<A> a, MetaProvider mp) {
+		return info.getAnnotations(a, mp);
+	}
+
+	/**
+	 * Identical to {@link #getAnnotations(Class)} but optionally returns the list in reverse (parent-to-child) order.
+	 *
+	 * @param a
+	 * 	The annotation to search for.
+	 * @return
+	 * 	A list of all matching annotations found or an empty list if none found.
+	 */
+	public <A extends Annotation> List<A> getAnnotationsParentFirst(Class<A> a) {
+		return info.getAnnotationsParentFirst(a);
+	}
+
+	/**
+	 * Identical to {@link #getAnnotations(Class,MetaProvider)} but optionally returns the list in reverse (parent-to-child) order.
+	 *
+	 * @param a
+	 * 	The annotation to search for.
+	 * @param mp The metadata provider for finding annotations.
+	 * @return
+	 * 	A list of all matching annotations found or an empty list if none found.
+	 */
+	public <A extends Annotation> List<A> getAnnotationsParentFirst(Class<A> a, MetaProvider mp) {
+		return info.getAnnotationsParentFirst(a, mp);
 	}
 
 	@Override /* Object */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
index afbd32e..42594e9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
@@ -606,31 +606,31 @@
 	@SuppressWarnings("unchecked")
 	@Override /* MetaProvider */
 	public <A extends Annotation> A getAnnotation(Class<A> a, Class<?> c) {
-		return (A)annotations.findFirst(c, a).orElse(c.getAnnotation(a));
+		return a == null || c == null ? null : (A)annotations.findFirst(c, a).orElse(c.getAnnotation(a));
 	}
 
 	@SuppressWarnings("unchecked")
 	@Override /* MetaProvider */
 	public <A extends Annotation> A getDeclaredAnnotation(Class<A> a, Class<?> c) {
-		return (A)annotations.findFirst(c, a).orElse(c.getAnnotation(a));
+		return a == null || c == null ? null : (A)annotations.findFirst(c, a).orElse(c.getAnnotation(a));
 	}
 
 	@SuppressWarnings("unchecked")
 	@Override /* MetaProvider */
 	public <A extends Annotation> A getAnnotation(Class<A> a, Method m) {
-		return (A)annotations.findFirst(m, a).orElse(m.getAnnotation(a));
+		return a == null || m == null ? null : (A)annotations.findFirst(m, a).orElse(m.getAnnotation(a));
 	}
 
 	@SuppressWarnings("unchecked")
 	@Override /* MetaProvider */
 	public <A extends Annotation> A getAnnotation(Class<A> a, Field f) {
-		return (A)annotations.findFirst(f, a).orElse(f.getAnnotation(a));
+		return a == null || f == null ? null : (A)annotations.findFirst(f, a).orElse(f.getAnnotation(a));
 	}
 
 	@SuppressWarnings("unchecked")
 	@Override /* MetaProvider */
 	public <A extends Annotation> A getAnnotation(Class<A> a, Constructor<?> c) {
-		return (A)annotations.findFirst(c, a).orElse(c.getAnnotation(a));
+		return a == null || c == null ? null : (A)annotations.findFirst(c, a).orElse(c.getAnnotation(a));
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MetaProvider.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MetaProvider.java
index 1791e63..8454b2a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MetaProvider.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/MetaProvider.java
@@ -27,27 +27,27 @@
 
 		@Override /* MetaProvider */
 		public <A extends Annotation> A getAnnotation(Class<A> a, Class<?> c) {
-			return c.getAnnotation(a);
+			return a == null || c == null ? null : c.getAnnotation(a);
 		}
 
 		@Override /* MetaProvider */
 		public <A extends Annotation> A getDeclaredAnnotation(Class<A> a, Class<?> c) {
-			return c.getDeclaredAnnotation(a);
+			return a == null || c == null ? null : c.getDeclaredAnnotation(a);
 		}
 
 		@Override /* MetaProvider */
 		public <A extends Annotation> A getAnnotation(Class<A> a, Method m) {
-			return m.getAnnotation(a);
+			return a == null || m == null ? null : m.getAnnotation(a);
 		}
 
 		@Override /* MetaProvider */
 		public <A extends Annotation> A getAnnotation(Class<A> a, Field f) {
-			return f.getAnnotation(a);
+			return a == null || f == null ? null : f.getAnnotation(a);
 		}
 
 		@Override /* MetaProvider */
 		public <A extends Annotation> A getAnnotation(Class<A> a, Constructor<?> c) {
-			return c.getAnnotation(a);
+			return a == null || c == null ? null : c.getAnnotation(a);
 		}
 	};
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvClassMeta.java
index 279a500..ac61566 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvClassMeta.java
@@ -31,7 +31,7 @@
 	 */
 	public CsvClassMeta(ClassMeta<?> cm, CsvMetaProvider mp) {
 		super(cm);
-		this.csv = mp.getAnnotation(Csv.class, cm.getInnerClass());
+		this.csv = cm.getAnnotation(Csv.class, mp);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlClassMeta.java
index 5f9ce95..e9586de 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlClassMeta.java
@@ -36,7 +36,7 @@
 	 */
 	public HtmlClassMeta(ClassMeta<?> cm, HtmlMetaProvider mp) {
 		super(cm);
-		this.html = mp.getAnnotation(Html.class, cm.getInnerClass());
+		this.html = cm.getAnnotation(Html.class, mp);
 		if (html != null) {
 			format = html.format();
 			noTables = html.noTables();
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoClassMeta.java
index 7227a2b..fafc76d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoClassMeta.java
@@ -31,7 +31,7 @@
 	 */
 	public JsoClassMeta(ClassMeta<?> cm, JsoMetaProvider mp) {
 		super(cm);
-		this.jso = mp.getAnnotation(Jso.class, cm.getInnerClass());
+		this.jso = cm.getAnnotation(Jso.class, mp);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonClassMeta.java
index 0179b62..55dbb35 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonClassMeta.java
@@ -34,7 +34,7 @@
 	 */
 	public JsonClassMeta(ClassMeta<?> cm, JsonMetaProvider mp) {
 		super(cm);
-		this.json = mp.getAnnotation(Json.class, cm.getInnerClass());
+		this.json = cm.getAnnotation(Json.class, mp);
 		if (json != null) {
 			wrapperAttr = nullIfEmpty(json.wrapperAttr());
 		} else {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaClassMeta.java
index 8caa931..2945099 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaClassMeta.java
@@ -33,7 +33,7 @@
 	public JsonSchemaClassMeta(ClassMeta<?> cm, JsonSchemaMetaProvider mp) {
 		super(cm);
 		try {
-			Schema s = mp.getAnnotation(Schema.class, cm.getInnerClass());
+			Schema s = cm.getAnnotation(Schema.class, mp);
 			schema = s == null ? ObjectMap.EMPTY_MAP : SchemaUtils.asMap(s);
 		} catch (ParseException e) {
 			throw new RuntimeException(e);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackClassMeta.java
index 88b0f86..10bca2d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackClassMeta.java
@@ -31,7 +31,7 @@
 	 */
 	public MsgPackClassMeta(ClassMeta<?> cm, MsgPackMetaProvider mp) {
 		super(cm);
-		this.msgPack = mp.getAnnotation(MsgPack.class, cm.getInnerClass());
+		this.msgPack = cm.getAnnotation(MsgPack.class, mp);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiClassMeta.java
index f786453..7b79561 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiClassMeta.java
@@ -31,7 +31,7 @@
 	 */
 	public OpenApiClassMeta(ClassMeta<?> cm, OpenApiMetaProvider mp) {
 		super(cm);
-		this.openApi = mp.getAnnotation(OpenApi.class, cm.getInnerClass());
+		this.openApi = cm.getAnnotation(OpenApi.class, mp);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextClassMeta.java
index 11234e3..489fff1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextClassMeta.java
@@ -31,7 +31,7 @@
 	 */
 	public PlainTextClassMeta(ClassMeta<?> cm, PlainTextMetaProvider mp) {
 		super(cm);
-		this.plainText = mp.getAnnotation(PlainText.class, cm.getInnerClass());
+		this.plainText = cm.getAnnotation(PlainText.class, mp);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
index b7e0963..1c9d706 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
@@ -64,7 +64,6 @@
 	private List<MethodInfo> publicMethods, declaredMethods, allMethods, allMethodsParentFirst;
 	private List<ConstructorInfo> publicConstructors, declaredConstructors;
 	private List<FieldInfo> publicFields, declaredFields, allFields, allFieldsParentFirst;
-	private Map<Class<?>,Optional<Annotation>> annotationMap, declaredAnnotationMap;
 	private int dim = -1;
 	private ClassInfo componentType;
 
@@ -934,16 +933,26 @@
 	 * @return
 	 * 	The annotation if found, or <jk>null</jk> if not.
 	 */
-	@SuppressWarnings("unchecked")
 	public <T extends Annotation> T getAnnotation(Class<T> a) {
-		if (a == null)
-			return null;
-		Optional<Annotation> o = annotationMap().get(a);
-		if (o == null) {
-			o = Optional.ofNullable(findAnnotation(a));
-			annotationMap().put(a, o);
-		}
-		return o.isPresent() ? (T)o.get() : null;
+		return getAnnotation(a, MetaProvider.DEFAULT);
+	}
+
+	/**
+	 * Finds the annotation of the specified type defined on this class or parent class/interface.
+	 *
+	 * <p>
+	 * If the annotation cannot be found on the immediate class, searches methods with the same
+	 * signature on the parent classes or interfaces.
+	 * <br>The search is performed in child-to-parent order.
+	 *
+	 * @param a
+	 * 	The annotation to search for.
+	 * @param mp The metadata provider for finding annotations on classes and methods.
+	 * @return
+	 * 	The annotation if found, or <jk>null</jk> if not.
+	 */
+	public <T extends Annotation> T getAnnotation(Class<T> a, MetaProvider mp) {
+		return findAnnotation(a, mp);
 	}
 
 	/**
@@ -969,16 +978,24 @@
 	 * @param a The annotation class.
 	 * @return The annotation, or <jk>null</jk> if not found.
 	 */
-	@SuppressWarnings("unchecked")
 	public <T extends Annotation> T getDeclaredAnnotation(Class<T> a) {
-		if (a == null)
-			return null;
-		Optional<Annotation> o = declaredAnnotationMap().get(a);
-		if (o == null) {
-			o = Optional.ofNullable(findDeclaredAnnotation(a));
-			declaredAnnotationMap().put(a, o);
-		}
-		return o.isPresent() ? (T)o.get() : null;
+		return a == null ? null : c.getDeclaredAnnotation(a);
+	}
+
+	/**
+	 * Returns the specified annotation only if it's been declared on this class.
+	 *
+	 * <p>
+	 * More efficient than calling {@link Class#getAnnotation(Class)} since it doesn't recursively look for the class
+	 * up the parent chain.
+	 *
+	 * @param <T> The annotation class type.
+	 * @param a The annotation class.
+	 * @param mp The metadata provider for finding annotations on classes and methods.
+	 * @return The annotation, or <jk>null</jk> if not found.
+	 */
+	public <T extends Annotation> T getDeclaredAnnotation(Class<T> a, MetaProvider mp) {
+		return mp.getDeclaredAnnotation(a, c);
 	}
 
 	/**
@@ -1053,6 +1070,19 @@
 	}
 
 	/**
+	 * Identical to {@link #getAnnotations(Class,MetaProvider)} but optionally returns the list in reverse (parent-to-child) order.
+	 *
+	 * @param a
+	 * 	The annotation to search for.
+	 * @param mp The metadata provider for finding annotations.
+	 * @return
+	 * 	A list of all matching annotations found or an empty list if none found.
+	 */
+	public <T extends Annotation> List<T> getAnnotationsParentFirst(Class<T> a, MetaProvider mp) {
+		return appendAnnotationsParentFirst(new ArrayList<>(), a, mp);
+	}
+
+	/**
 	 * Same as getAnnotations(Class) except returns the annotations with the accompanying class.
 	 *
 	 * <p>
@@ -1189,11 +1219,33 @@
 	 * @return The same list.
 	 */
 	public <T extends Annotation> List<T> appendAnnotationsParentFirst(List<T> l, Class<T> a) {
+		return appendAnnotationsParentFirst(l, a, MetaProvider.DEFAULT);
+	}
+
+	/**
+	 * Finds and appends the specified annotation on the specified class and superclasses/interfaces to the specified
+	 * list.
+	 *
+	 * <p>
+	 * Annotations are appended in the following orders:
+	 * <ol>
+	 * 	<li>On the package of this class.
+	 * 	<li>On interfaces ordered child-to-parent.
+	 * 	<li>On parent classes ordered child-to-parent.
+	 * 	<li>On this class.
+	 * </ol>
+	 *
+	 * @param l The list of annotations.
+	 * @param a The annotation to search for.
+	 * @param mp The metadata provider for finding annotations on classes and methods.
+	 * @return The same list.
+	 */
+	public <T extends Annotation> List<T> appendAnnotationsParentFirst(List<T> l, Class<T> a, MetaProvider mp) {
 		addIfNotNull(l, getPackageAnnotation(a));
 		for (ClassInfo ci : getInterfacesParentFirst())
-			addIfNotNull(l, ci.getDeclaredAnnotation(a));
+			addIfNotNull(l, mp.getDeclaredAnnotation(a, ci.inner()));
 		for (ClassInfo ci : getParentsParentFirst())
-			addIfNotNull(l, ci.getDeclaredAnnotation(a));
+			addIfNotNull(l, mp.getDeclaredAnnotation(a, ci.inner()));
 		return l;
 	}
 
@@ -1277,20 +1329,23 @@
 		return m;
 	}
 
-	<T extends Annotation> T findAnnotation(Class<T> a) {
-		T t2 = getDeclaredAnnotation(a);
+	<T extends Annotation> T findAnnotation(Class<T> a, MetaProvider mp) {
+		if (a == null)
+			return null;
+
+		T t2 = mp.getDeclaredAnnotation(a, c);
 		if (t2 != null)
 			return t2;
 
 		ClassInfo sci = getParent();
 		if (sci != null) {
-			t2 = sci.getAnnotation(a);
+			t2 = sci.getAnnotation(a, mp);
 			if (t2 != null)
 				return t2;
 		}
 
 		for (ClassInfo c2 : getInterfaces()) {
-			t2 = c2.getAnnotation(a);
+			t2 = c2.getAnnotation(a, mp);
 			if (t2 != null)
 				return t2;
 		}
@@ -1298,26 +1353,6 @@
 		return null;
 	}
 
-	@SuppressWarnings("unchecked")
-	private <T extends Annotation> T findDeclaredAnnotation(Class<T> a) {
-		for (Annotation a2 : c.getDeclaredAnnotations())
-			if (a2.annotationType() == a)
-				return (T)a2;
-		return null;
-	}
-
-	private synchronized Map<Class<?>,Optional<Annotation>> annotationMap() {
-		if (annotationMap == null)
-			annotationMap = new ConcurrentHashMap<>();
-		return annotationMap;
-	}
-
-	private synchronized Map<Class<?>,Optional<Annotation>> declaredAnnotationMap() {
-		if (declaredAnnotationMap == null)
-			declaredAnnotationMap = new ConcurrentHashMap<>();
-		return declaredAnnotationMap;
-	}
-
 	//-----------------------------------------------------------------------------------------------------------------
 	// Characteristics
 	//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlClassMeta.java
index 0d38b50..7d67287 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlClassMeta.java
@@ -31,7 +31,7 @@
 	 */
 	public SoapXmlClassMeta(ClassMeta<?> cm, SoapXmlMetaProvider mp) {
 		super(cm);
-		this.soapXml = mp.getAnnotation(SoapXml.class, cm.getInnerClass());
+		this.soapXml = cm.getAnnotation(SoapXml.class, mp);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonClassMeta.java
index 48267b6..482b9e9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonClassMeta.java
@@ -31,7 +31,7 @@
 	 */
 	public UonClassMeta(ClassMeta<?> cm, UonMetaProvider mp) {
 		super(cm);
-		this.uon = mp.getAnnotation(Uon.class, cm.getInnerClass());
+		this.uon = cm.getAnnotation(Uon.class, mp);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingClassMeta.java
index aeefe69..41e5ecf 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingClassMeta.java
@@ -31,7 +31,7 @@
 	 */
 	public UrlEncodingClassMeta(ClassMeta<?> cm, UrlEncodingMetaProvider mp) {
 		super(cm);
-		this.urlEncoding = mp.getAnnotation(UrlEncoding.class, cm.getInnerClass());
+		this.urlEncoding = cm.getAnnotation(UrlEncoding.class, mp);
 		if (urlEncoding != null) {
 			expandedParams = urlEncoding.expandedParams();
 		} else {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
index 9cf999d..160a9ef 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
@@ -17,7 +17,6 @@
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.reflect.*;
 import org.apache.juneau.xml.annotation.*;
 
 /**
@@ -40,7 +39,7 @@
 	public XmlClassMeta(ClassMeta<?> cm, XmlMetaProvider mp) {
 		super(cm);
 		this.namespace = findNamespace(cm, mp);
-		this.xml = mp.getAnnotation(Xml.class, cm.getInnerClass());
+		this.xml = cm.getAnnotation(Xml.class, mp);
 		if (xml != null) {
 			this.format = xml.format();
 			this.childName = nullIfEmpty(xml.childName());
@@ -102,9 +101,8 @@
 	private static Namespace findNamespace(ClassMeta<?> cm, MetaProvider mp) {
 		if (cm == null)
 			return null;
-		ClassInfo ci = cm.getInfo();
-		List<Xml> xmls = ci.getAnnotations(Xml.class, mp);
-		List<XmlSchema> schemas = ci.getAnnotations(XmlSchema.class, mp);
+		List<Xml> xmls = cm.getAnnotations(Xml.class, mp);
+		List<XmlSchema> schemas = cm.getAnnotations(XmlSchema.class, mp);
 		return XmlUtils.findNamespace(xmls, schemas);
 	}
 }
