diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanMeta.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanMeta.java
index 4c2b721..daeb25e 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanMeta.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanMeta.java
@@ -28,14 +28,14 @@
 	 * Constructor.
 	 *
 	 * @param beanMeta The metadata on the bean that this metadata applies to.
-	 * @param rdfMetaProvider RDF metadata provider (for finding information about other artifacts).
+	 * @param mp RDF metadata provider (for finding information about other artifacts).
 	 */
-	public RdfBeanMeta(BeanMeta<?> beanMeta, RdfMetaProvider rdfMetaProvider) {
+	public RdfBeanMeta(BeanMeta<?> beanMeta, RdfMetaProvider mp) {
 		super(beanMeta);
 
 		BeanPropertyMeta t_beanUriProperty = null;
 		for (BeanPropertyMeta p : beanMeta.getPropertyMetas()) {
-			RdfBeanPropertyMeta bpm = rdfMetaProvider.getRdfBeanPropertyMeta(p);
+			RdfBeanPropertyMeta bpm = mp.getRdfBeanPropertyMeta(p);
 			if (bpm.isBeanUri())
 				t_beanUriProperty = p;
 		}
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java
index ec1eaff..108b339 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java
@@ -38,13 +38,13 @@
 	 * Constructor.
 	 *
 	 * @param bpm The metadata of the bean property of this additional metadata.
-	 * @param rdfMetaProvider RDF metadata provider (for finding information about other artifacts).
+	 * @param mp RDF metadata provider (for finding information about other artifacts).
 	 */
-	public RdfBeanPropertyMeta(BeanPropertyMeta bpm, RdfMetaProvider rdfMetaProvider) {
+	public RdfBeanPropertyMeta(BeanPropertyMeta bpm, RdfMetaProvider mp) {
 		super(bpm);
 
-		List<Rdf> rdfs = bpm.findAnnotations(Rdf.class);
-		List<RdfSchema> schemas = bpm.findAnnotations(RdfSchema.class);
+		List<Rdf> rdfs = bpm.findAnnotations(Rdf.class, mp);
+		List<RdfSchema> schemas = bpm.findAnnotations(RdfSchema.class, mp);
 
 		for (Rdf rdf : rdfs) {
 			if (collectionFormat == RdfCollectionFormat.DEFAULT)
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 ac1fe64..8161a74 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
@@ -33,19 +33,19 @@
 	 * Constructor.
 	 *
 	 * @param cm The class that this annotation is defined on.
-	 * @param rdfMetaProvider RDF metadata provider (for finding information about other artifacts).
+	 * @param mp RDF metadata provider (for finding information about other artifacts).
 	 */
-	public RdfClassMeta(ClassMeta<?> cm, RdfMetaProvider rdfMetaProvider) {
+	public RdfClassMeta(ClassMeta<?> cm, RdfMetaProvider mp) {
 		super(cm);
 		ClassInfo ci = cm.getInfo();
-		this.rdf = ci.getAnnotation(Rdf.class);
+		this.rdf = mp.getAnnotation(Rdf.class, cm.getInnerClass());
 		if (rdf != null) {
 			collectionFormat = rdf.collectionFormat();
 		} else {
 			collectionFormat = RdfCollectionFormat.DEFAULT;
 		}
-		List<Rdf> rdfs = ci.getAnnotations(Rdf.class);
-		List<RdfSchema> schemas = ci.getAnnotations(RdfSchema.class);
+		List<Rdf> rdfs = ci.getAnnotations(Rdf.class, mp);
+		List<RdfSchema> schemas = ci.getAnnotations(RdfSchema.class, mp);
 		this.namespace = RdfUtils.findNamespace(rdfs, schemas);
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index ca2da56..f174f09 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -52,7 +52,6 @@
 	private final Field field;                                // The bean property field (if it has one).
 	private final Field innerField;                                // The bean property field (if it has one).
 	private final Method getter, setter, extraKeys;           // The bean property getter and setter.
-	private final MethodInfo getterInfo, setterInfo, extraKeysInfo;           // The bean property getter and setter.
 	private final boolean isUri;                              // True if this is a URL/URI or annotated with @URI.
 	private final boolean isDyna, isDynaGetterMap;            // This is a dyna property (i.e. name="*")
 
@@ -416,11 +415,8 @@
 		this.field = b.field;
 		this.innerField = b.innerField;
 		this.getter = b.getter;
-		this.getterInfo = MethodInfo.of(b.getter);
 		this.setter = b.setter;
-		this.setterInfo = MethodInfo.of(b.setter);
 		this.extraKeys = b.extraKeys;
-		this.extraKeysInfo = MethodInfo.of(b.extraKeys);
 		this.isUri = b.isUri;
 		this.beanMeta = b.beanMeta;
 		this.beanContext = b.beanContext;
@@ -1127,57 +1123,59 @@
 	 * Searches through the class hierarchy (e.g. superclasses, interfaces, packages) for all instances of the
 	 * specified annotation.
 	 *
+	 * @param <A> The class to find annotations for.
 	 * @param a The class to find annotations for.
+	 * @param mp The metadata provider for finding annotations.
 	 * @return A list of annotations ordered in child-to-parent order.  Never <jk>null</jk>.
 	 */
-	public <A extends Annotation> List<A> findAnnotations(Class<A> a) {
+	public <A extends Annotation> List<A> findAnnotations(Class<A> a, MetaProvider mp) {
 		List<A> l = new LinkedList<>();
 		if (field != null) {
-			addIfNotNull(l, field.getAnnotation(a));
-			ClassInfo.of(field.getType()).appendAnnotations(l, a);
+			addIfNotNull(l, mp.getAnnotation(a, field));
+			ClassInfo.of(field.getType()).appendAnnotations(l, a, mp);
 		}
 		if (getter != null) {
-			addIfNotNull(l, MethodInfo.of(getter).getAnnotation(a));
-			ClassInfo.of(getter.getReturnType()).appendAnnotations(l, a);
+			addIfNotNull(l, mp.getAnnotation(a, getter));
+			ClassInfo.of(getter.getReturnType()).appendAnnotations(l, a, mp);
 		}
 		if (setter != null) {
-			addIfNotNull(l, MethodInfo.of(setter).getAnnotation(a));
-			ClassInfo.of(setter.getReturnType()).appendAnnotations(l, a);
+			addIfNotNull(l, mp.getAnnotation(a, setter));
+			ClassInfo.of(setter.getReturnType()).appendAnnotations(l, a, mp);
 		}
 		if (extraKeys != null) {
-			addIfNotNull(l, MethodInfo.of(extraKeys).getAnnotation(a));
-			ClassInfo.of(extraKeys.getReturnType()).appendAnnotations(l, a);
+			addIfNotNull(l, mp.getAnnotation(a, extraKeys));
+			ClassInfo.of(extraKeys.getReturnType()).appendAnnotations(l, a, mp);
 		}
 
-		getBeanMeta().getClassMeta().getInfo().appendAnnotations(l, a);
+		getBeanMeta().getClassMeta().getInfo().appendAnnotations(l, a, mp);
 		return l;
 	}
 
-	/**
-	 * Returns the specified annotation on the field or methods that define this property.
-	 *
-	 * <p>
-	 * This method will search up the parent class/interface hierarchy chain to search for the annotation on
-	 * overridden getters and setters.
-	 *
-	 * @param a The annotation to search for.
-	 * @return The annotation, or <jk>null</jk> if it wasn't found.
-	 */
-	public <A extends Annotation> A findAnnotation(Class<A> a) {
-		A t = null;
-		if (field != null)
-			t = field.getAnnotation(a);
-		if (t == null && getter != null)
-			t = getterInfo.getAnnotation(a);
-		if (t == null && setter != null)
-			t = setterInfo.getAnnotation(a);
-		if (t == null && extraKeys != null)
-			t = extraKeysInfo.getAnnotation(a);
-		if (t == null)
-			t = typeMeta.getInfo().getAnnotation(a);
-		return t;
-	}
-
+//	/**
+//	 * Returns the specified annotation on the field or methods that define this property.
+//	 *
+//	 * <p>
+//	 * This method will search up the parent class/interface hierarchy chain to search for the annotation on
+//	 * overridden getters and setters.
+//	 *
+//	 * @param a The annotation to search for.
+//	 * @return The annotation, or <jk>null</jk> if it wasn't found.
+//	 */
+//	public <A extends Annotation> A findAnnotation(Class<A> a) {
+//		A t = null;
+//		if (field != null)
+//			t = field.getAnnotation(a);
+//		if (t == null && getter != null)
+//			t = getterInfo.getAnnotation(a);
+//		if (t == null && setter != null)
+//			t = setterInfo.getAnnotation(a);
+//		if (t == null && extraKeys != null)
+//			t = extraKeysInfo.getAnnotation(a);
+//		if (t == null)
+//			t = typeMeta.getInfo().getAnnotation(a);
+//		return t;
+//	}
+//
 	private Object transform(BeanSession session, Object o) throws SerializeException {
 		try {
 			// First use swap defined via @Beanp.
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 27c1176..afbd32e 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
@@ -13,11 +13,13 @@
 package org.apache.juneau;
 
 import java.lang.annotation.*;
+import java.lang.reflect.*;
 import java.util.*;
 
 import org.apache.juneau.annotation.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
+import org.apache.juneau.utils.*;
 
 /**
  * A reusable stateless thread-safe read-only configuration, typically used for creating one-time use {@link Session}
@@ -40,7 +42,7 @@
  *
  * @see PropertyStore
  */
-public abstract class Context {
+public abstract class Context implements MetaProvider {
 
 	static final String PREFIX = "Context";
 
@@ -66,7 +68,7 @@
 	 * Allows you to dynamically apply Juneau annotations typically applied directly to classes and methods.
 	 * Useful in cases where you want to use the functionality of the annotation on beans and bean properties but
 	 * do not have access to the code to do so.
-	 * 
+	 *
 	 * <p>
 	 * As a rule, any Juneau annotation with an <c>on()</c> method can be used with this property.
 	 *
@@ -95,6 +97,7 @@
 
 	private final PropertyStore propertyStore;
 	private final int identityCode;
+	private final ReflectionMap<Annotation> annotations;
 
 	/**
 	 * Constructor for this class.
@@ -108,6 +111,18 @@
 	public Context(PropertyStore ps, boolean allowReuse) {
 		this.propertyStore = ps == null ? PropertyStore.DEFAULT : ps;
 		this.identityCode = allowReuse ? new HashCode().add(getClass().getName()).add(ps).get() : System.identityHashCode(this);
+
+		ReflectionMap.Builder<Annotation> rmb = ReflectionMap.create(Annotation.class);
+		for (Annotation a : propertyStore.getListProperty(CONTEXT_annotations, Annotation.class)) {
+			try {
+				Method m = a.getClass().getMethod("on");
+				String on = (String)m.invoke(a);
+				rmb.append(on, a);
+			} catch (Exception e) {
+				throw new ConfigException("Invalid annotation @{0} used in CONTEXT_annotations property.  Annotation must define an on() method.", a.getClass().getSimpleName());
+			}
+		}
+		this.annotations = rmb.build();
 	}
 
 	/**
@@ -585,6 +600,40 @@
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
+	// MetaProvider methods
+	//-----------------------------------------------------------------------------------------------------------------
+
+	@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));
+	}
+
+	@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));
+	}
+
+	@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));
+	}
+
+	@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));
+	}
+
+	@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));
+	}
+
+	//-----------------------------------------------------------------------------------------------------------------
 	// Other methods
 	//-----------------------------------------------------------------------------------------------------------------
 
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 6bdd5e2..1791e63 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
@@ -12,7 +12,92 @@
 // ***************************************************************************************************************************
 package org.apache.juneau;
 
+import java.lang.annotation.*;
+import java.lang.reflect.*;
+
 /**
  * Parent interface for all class/method language-specific metadata providers.
  */
-public interface MetaProvider {}
+public interface MetaProvider {
+
+	/**
+	 * Default metadata provider.
+	 */
+	public static MetaProvider DEFAULT = new MetaProvider() {
+
+		@Override /* MetaProvider */
+		public <A extends Annotation> A getAnnotation(Class<A> a, Class<?> c) {
+			return c.getAnnotation(a);
+		}
+
+		@Override /* MetaProvider */
+		public <A extends Annotation> A getDeclaredAnnotation(Class<A> a, Class<?> c) {
+			return c.getDeclaredAnnotation(a);
+		}
+
+		@Override /* MetaProvider */
+		public <A extends Annotation> A getAnnotation(Class<A> a, Method m) {
+			return m.getAnnotation(a);
+		}
+
+		@Override /* MetaProvider */
+		public <A extends Annotation> A getAnnotation(Class<A> a, Field f) {
+			return f.getAnnotation(a);
+		}
+
+		@Override /* MetaProvider */
+		public <A extends Annotation> A getAnnotation(Class<A> a, Constructor<?> c) {
+			return c.getAnnotation(a);
+		}
+	};
+
+	/**
+	 * Finds the specified annotation on the specified class.
+	 *
+	 * @param <A> The annotation type to find.
+	 * @param a The annotation type to find.
+	 * @param c The class to search on.
+	 * @return The annotation, or <jk>null</jk> if not found.
+	 */
+	<A extends Annotation> A getAnnotation(Class<A> a, Class<?> c);
+
+	/**
+	 * Finds the specified declared annotation on the specified class.
+	 *
+	 * @param <A> The annotation type to find.
+	 * @param a The annotation type to find.
+	 * @param c The class to search on.
+	 * @return The annotation, or <jk>null</jk> if not found.
+	 */
+	<A extends Annotation> A getDeclaredAnnotation(Class<A> a, Class<?> c);
+
+	/**
+	 * Finds the specified annotation on the specified method.
+	 *
+	 * @param <A> The annotation type to find.
+	 * @param a The annotation type to find.
+	 * @param m The method to search on.
+	 * @return The annotation, or <jk>null</jk> if not found.
+	 */
+	<A extends Annotation> A getAnnotation(Class<A> a, Method m);
+
+	/**
+	 * Finds the specified annotation on the specified field.
+	 *
+	 * @param <A> The annotation type to find.
+	 * @param a The annotation type to find.
+	 * @param f The field to search on.
+	 * @return The annotation, or <jk>null</jk> if not found.
+	 */
+	<A extends Annotation> A getAnnotation(Class<A> a, Field f);
+
+	/**
+	 * Finds the specified annotation on the specified constructor.
+	 *
+	 * @param <A> The annotation type to find.
+	 * @param a The annotation type to find.
+	 * @param c The constructor to search on.
+	 * @return The annotation, or <jk>null</jk> if not found.
+	 */
+	<A extends Annotation> A getAnnotation(Class<A> a, Constructor<?> c);
+}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvBeanPropertyMeta.java
index 2dca01b..a640212 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/csv/CsvBeanPropertyMeta.java
@@ -30,9 +30,9 @@
 	 * Constructor.
 	 *
 	 * @param bpm The metadata of the bean property of this additional metadata.
-	 * @param csvMetaProvider CSV metadata provider (for finding information about other artifacts).
+	 * @param mp CSV metadata provider (for finding information about other artifacts).
 	 */
-	public CsvBeanPropertyMeta(BeanPropertyMeta bpm, CsvMetaProvider csvMetaProvider) {
+	public CsvBeanPropertyMeta(BeanPropertyMeta bpm, CsvMetaProvider mp) {
 		super(bpm);
 	}
 
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 ebbcdee..279a500 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
@@ -27,11 +27,11 @@
 	 * Constructor.
 	 *
 	 * @param cm The class that this annotation is defined on.
-	 * @param csvMetaProvider CSV metadata provider (for finding information about other artifacts).
+	 * @param mp CSV metadata provider (for finding information about other artifacts).
 	 */
-	public CsvClassMeta(ClassMeta<?> cm, CsvMetaProvider csvMetaProvider) {
+	public CsvClassMeta(ClassMeta<?> cm, CsvMetaProvider mp) {
 		super(cm);
-		this.csv = cm.getInfo().getAnnotation(Csv.class);
+		this.csv = mp.getAnnotation(Csv.class, cm.getInnerClass());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
index 5fea34b..b6f142c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
@@ -38,17 +38,18 @@
 	 * Constructor.
 	 *
 	 * @param bpm The metadata of the bean property of this additional metadata.
-	 * @param htmlMetaProvider HTML metadata provider (for finding information about other artifacts).
+	 * @param mp HTML metadata provider (for finding information about other artifacts).
 	 */
-	public HtmlBeanPropertyMeta(BeanPropertyMeta bpm, HtmlMetaProvider htmlMetaProvider) {
+	public HtmlBeanPropertyMeta(BeanPropertyMeta bpm, HtmlMetaProvider mp) {
 		super(bpm);
+
 		Builder b = new Builder();
 		if (bpm.getInnerField() != null)
-			b.findHtmlInfo(bpm.getInnerField().getAnnotation(Html.class));
+			b.findHtmlInfo(mp.getAnnotation(Html.class, bpm.getInnerField()));
 		if (bpm.getGetter() != null)
-			b.findHtmlInfo(bpm.getGetter().getAnnotation(Html.class));
+			b.findHtmlInfo(mp.getAnnotation(Html.class, bpm.getGetter()));
 		if (bpm.getSetter() != null)
-			b.findHtmlInfo(bpm.getSetter().getAnnotation(Html.class));
+			b.findHtmlInfo(mp.getAnnotation(Html.class, bpm.getSetter()));
 
 		this.format = b.format;
 		this.noTables = b.noTables;
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 86890b7..5f9ce95 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
@@ -32,11 +32,11 @@
 	 * Constructor.
 	 *
 	 * @param cm The class that this annotation is defined on.
-	 * @param htmlMetaProvider HTML metadata provider (for finding information about other artifacts).
+	 * @param mp HTML metadata provider (for finding information about other artifacts).
 	 */
-	public HtmlClassMeta(ClassMeta<?> cm, HtmlMetaProvider htmlMetaProvider) {
+	public HtmlClassMeta(ClassMeta<?> cm, HtmlMetaProvider mp) {
 		super(cm);
-		this.html = cm.getInfo().getAnnotation(Html.class);
+		this.html = mp.getAnnotation(Html.class, cm.getInnerClass());
 		if (html != null) {
 			format = html.format();
 			noTables = html.noTables();
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoBeanPropertyMeta.java
index 006338e..1324dcf 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jso/JsoBeanPropertyMeta.java
@@ -30,9 +30,9 @@
 	 * Constructor.
 	 *
 	 * @param bpm The metadata of the bean property of this additional metadata.
-	 * @param jsoMetaProvider JSO metadata provider (for finding information about other artifacts).
+	 * @param mp JSO metadata provider (for finding information about other artifacts).
 	 */
-	public JsoBeanPropertyMeta(BeanPropertyMeta bpm, JsoMetaProvider jsoMetaProvider) {
+	public JsoBeanPropertyMeta(BeanPropertyMeta bpm, JsoMetaProvider mp) {
 		super(bpm);
 	}
 
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 0d984d5..7227a2b 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
@@ -27,11 +27,11 @@
 	 * Constructor.
 	 *
 	 * @param cm The class that this annotation is defined on.
-	 * @param jsoMetaProvider JSO metadata provider (for finding information about other artifacts).
+	 * @param mp JSO metadata provider (for finding information about other artifacts).
 	 */
-	public JsoClassMeta(ClassMeta<?> cm, JsoMetaProvider jsoMetaProvider) {
+	public JsoClassMeta(ClassMeta<?> cm, JsoMetaProvider mp) {
 		super(cm);
-		this.jso = cm.getInfo().getAnnotation(Jso.class);
+		this.jso = mp.getAnnotation(Jso.class, cm.getInnerClass());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonBeanPropertyMeta.java
index 5237126..42e8d4c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonBeanPropertyMeta.java
@@ -30,9 +30,9 @@
 	 * Constructor.
 	 *
 	 * @param bpm The metadata of the bean property of this additional metadata.
-	 * @param jsonMetaProvider JSON metadata provider (for finding information about other artifacts).
+	 * @param mp JSON metadata provider (for finding information about other artifacts).
 	 */
-	public JsonBeanPropertyMeta(BeanPropertyMeta bpm, JsonMetaProvider jsonMetaProvider) {
+	public JsonBeanPropertyMeta(BeanPropertyMeta bpm, JsonMetaProvider mp) {
 		super(bpm);
 	}
 
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 11d6aa2..0179b62 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
@@ -30,11 +30,11 @@
 	 * Constructor.
 	 *
 	 * @param cm The class that this annotation is defined on.
-	 * @param jsonMetaProvider JSON metadata provider (for finding information about other artifacts).
+	 * @param mp JSON metadata provider (for finding information about other artifacts).
 	 */
-	public JsonClassMeta(ClassMeta<?> cm, JsonMetaProvider jsonMetaProvider) {
+	public JsonClassMeta(ClassMeta<?> cm, JsonMetaProvider mp) {
 		super(cm);
-		this.json = cm.getInfo().getAnnotation(Json.class);
+		this.json = mp.getAnnotation(Json.class, cm.getInnerClass());
 		if (json != null) {
 			wrapperAttr = nullIfEmpty(json.wrapperAttr());
 		} else {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaBeanPropertyMeta.java
index b3ebb91..6a2de0a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaBeanPropertyMeta.java
@@ -35,9 +35,9 @@
 	 * Constructor.
 	 *
 	 * @param bpm The metadata of the bean property of this additional metadata.
-	 * @param jsonSchemaMetaProvider JSON-schema metadata provider (for finding information about other artifacts).
+	 * @param mp JSON-schema metadata provider (for finding information about other artifacts).
 	 */
-	public JsonSchemaBeanPropertyMeta(BeanPropertyMeta bpm, JsonSchemaMetaProvider jsonSchemaMetaProvider) {
+	public JsonSchemaBeanPropertyMeta(BeanPropertyMeta bpm, JsonSchemaMetaProvider mp) {
 		super(bpm);
 
 		this.schema = new ObjectMap();
@@ -47,11 +47,11 @@
 
 		try {
 			if (field != null)
-				schema.appendAll(SchemaUtils.asMap(field.getAnnotation(Schema.class)));
+				schema.appendAll(SchemaUtils.asMap(mp.getAnnotation(Schema.class, field)));
 			if (getter != null)
-				schema.appendAll(SchemaUtils.asMap(getter.getAnnotation(Schema.class)));
+				schema.appendAll(SchemaUtils.asMap(mp.getAnnotation(Schema.class, getter)));
 			if (setter != null)
-				schema.appendAll(SchemaUtils.asMap(setter.getAnnotation(Schema.class)));
+				schema.appendAll(SchemaUtils.asMap(mp.getAnnotation(Schema.class, setter)));
 		} catch (ParseException e) {
 			throw new RuntimeException(e);
 		}
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 2f7b9c8..8caa931 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
@@ -28,12 +28,12 @@
 	 * Constructor.
 	 *
 	 * @param cm The class that this annotation is defined on.
-	 * @param jsonSchemaMetaProvider JSON-schema metadata provider (for finding information about other artifacts).
+	 * @param mp JSON-schema metadata provider (for finding information about other artifacts).
 	 */
-	public JsonSchemaClassMeta(ClassMeta<?> cm, JsonSchemaMetaProvider jsonSchemaMetaProvider) {
+	public JsonSchemaClassMeta(ClassMeta<?> cm, JsonSchemaMetaProvider mp) {
 		super(cm);
 		try {
-			Schema s = cm.getInfo().getAnnotation(Schema.class);
+			Schema s = mp.getAnnotation(Schema.class, cm.getInnerClass());
 			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/jsonschema/annotation/JsonSchema.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchema.java
deleted file mode 100644
index 37db694..0000000
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchema.java
+++ /dev/null
@@ -1,55 +0,0 @@
-// ***************************************************************************************************************************
-// * 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.juneau.jsonschema.annotation;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-import java.lang.annotation.*;
-
-import org.apache.juneau.jsonschema.*;
-
-/**
- * Annotation that can be applied to classes, fields, and methods to tweak how they are handled by {@link JsonSchemaGenerator}.
- *
- * <ul class='seealso'>
- * </ul>
- */
-@Documented
-@Target({TYPE,FIELD,METHOD})
-@Retention(RUNTIME)
-@Inherited
-public @interface JsonSchema {
-
-	/**
-	 * Defines which classes/methods this annotation applies to.
-	 *
-	 * <p>
-	 * Used in conjunction with the {@link JsonSchemaConfig#annotateJsonSchema()}.
-	 * It is ignored when the annotation is applied directly to classes and methods.
-	 *
-	 * The format can be any of the following:
-	 * <ul>
-	 * 	<li>Full class name (e.g. <js>"com.foo.MyClass"</js>).
-	 * 	<li>Simple class name (e.g. <js>"MyClass"</js>).
-	 * 	<li>Full method name (e.g. <js>"com.foo.MyClass.myMethod"</js>).
-	 * 	<li>Simple method name (e.g. <js>"MyClass.myMethod"</js>).
-	 * 	<li>A comma-delimited list of anything on this list.
-	 * </ul>
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='link'>{@doc juneau-marshall.ClassMethodAnnotations}
-	 * </ul>
-	 */
-	String on() default "";
-}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchemaConfig.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchemaConfig.java
index 4e10a24..6877c2d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchemaConfig.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchemaConfig.java
@@ -171,17 +171,17 @@
 	String allowNestedExamples() default "";
 
 	/**
-	 * Indirectly applies {@link JsonSchema @JsonSchema} annotations to classes/methods.
+	 * Indirectly applies {@link Schema @Schema} annotations to classes/methods.
 	 *
 	 * <p>
-	 * Provides an alternate approach for applying annotations to classes/methods annotations using the {@link JsonSchema#on() @JsonSchema.on}
+	 * Provides an alternate approach for applying annotations to classes/methods annotations using the {@link Schema#on() @Schema.on}
 	 * annotation to specify the class/method names to apply the annotation to.
 	 *
 	 * <ul class='seealso'>
 	 * 	<li class='link'>{@doc juneau-marshall.ClassMethodAnnotations}
 	 * </ul>
 	 */
-	JsonSchema[] annotateJsonSchema() default {};
+	Schema[] annotateSchema() default {};
 
 	/**
 	 * Configuration property:  Bean schema definition mapper.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchemaConfigApply.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchemaConfigApply.java
index 20db787..64949c4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchemaConfigApply.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/JsonSchemaConfigApply.java
@@ -55,7 +55,7 @@
 		if (! a.useBeanDefs().isEmpty())
 			psb.set(JSONSCHEMA_useBeanDefs, bool(a.useBeanDefs()));
 
-		if (a.annotateJsonSchema().length > 0)
-			psb.addTo(CONTEXT_annotations, a.annotateJsonSchema());
+		if (a.annotateSchema().length > 0)
+			psb.addTo(CONTEXT_annotations, a.annotateSchema());
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/Schema.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/Schema.java
index e5944f8..9afcbda 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/Schema.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/annotation/Schema.java
@@ -719,4 +719,26 @@
 	 * </ul>
 	 */
 	String[] value() default {};
+
+	/**
+	 * Defines which classes/methods this annotation applies to.
+	 *
+	 * <p>
+	 * Used in conjunction with the {@link JsonSchemaConfig#annotateSchema()}.
+	 * It is ignored when the annotation is applied directly to classes and methods.
+	 *
+	 * The format can be any of the following:
+	 * <ul>
+	 * 	<li>Full class name (e.g. <js>"com.foo.MyClass"</js>).
+	 * 	<li>Simple class name (e.g. <js>"MyClass"</js>).
+	 * 	<li>Full method name (e.g. <js>"com.foo.MyClass.myMethod"</js>).
+	 * 	<li>Simple method name (e.g. <js>"MyClass.myMethod"</js>).
+	 * 	<li>A comma-delimited list of anything on this list.
+	 * </ul>
+	 *
+	 * <ul class='seealso'>
+	 * 	<li class='link'>{@doc juneau-marshall.ClassMethodAnnotations}
+	 * </ul>
+	 */
+	String on() default "";
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackBeanPropertyMeta.java
index 84782af..eea4d56 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackBeanPropertyMeta.java
@@ -30,9 +30,9 @@
 	 * Constructor.
 	 *
 	 * @param bpm The metadata of the bean property of this additional metadata.
-	 * @param msgPackMetaProvider MessagePack metadata provider (for finding information about other artifacts).
+	 * @param mp MessagePack metadata provider (for finding information about other artifacts).
 	 */
-	public MsgPackBeanPropertyMeta(BeanPropertyMeta bpm, MsgPackMetaProvider msgPackMetaProvider) {
+	public MsgPackBeanPropertyMeta(BeanPropertyMeta bpm, MsgPackMetaProvider mp) {
 		super(bpm);
 	}
 
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 7298470..88b0f86 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
@@ -27,11 +27,11 @@
 	 * Constructor.
 	 *
 	 * @param cm The class that this annotation is defined on.
-	 * @param msgPackMetaProvider MessagePack metadata provider (for finding information about other artifacts).
+	 * @param mp MessagePack metadata provider (for finding information about other artifacts).
 	 */
-	public MsgPackClassMeta(ClassMeta<?> cm, MsgPackMetaProvider msgPackMetaProvider) {
+	public MsgPackClassMeta(ClassMeta<?> cm, MsgPackMetaProvider mp) {
 		super(cm);
-		this.msgPack = cm.getInfo().getAnnotation(MsgPack.class);
+		this.msgPack = mp.getAnnotation(MsgPack.class, cm.getInnerClass());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiBeanPropertyMeta.java
index 416e081..3c35430 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiBeanPropertyMeta.java
@@ -30,9 +30,9 @@
 	 * Constructor.
 	 *
 	 * @param bpm The metadata of the bean property of this additional metadata.
-	 * @param openApiMetaProvider OpenApi metadata provider (for finding information about other artifacts).
+	 * @param mp OpenApi metadata provider (for finding information about other artifacts).
 	 */
-	public OpenApiBeanPropertyMeta(BeanPropertyMeta bpm, OpenApiMetaProvider openApiMetaProvider) {
+	public OpenApiBeanPropertyMeta(BeanPropertyMeta bpm, OpenApiMetaProvider mp) {
 		super(bpm);
 	}
 
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 e65596b..f786453 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
@@ -27,11 +27,11 @@
 	 * Constructor.
 	 *
 	 * @param cm The class that this annotation is defined on.
-	 * @param openApiMetaProvider OpenApi metadata provider (for finding information about other artifacts).
+	 * @param mp OpenApi metadata provider (for finding information about other artifacts).
 	 */
-	public OpenApiClassMeta(ClassMeta<?> cm, OpenApiMetaProvider openApiMetaProvider) {
+	public OpenApiClassMeta(ClassMeta<?> cm, OpenApiMetaProvider mp) {
 		super(cm);
-		this.openApi = cm.getInfo().getAnnotation(OpenApi.class);
+		this.openApi = mp.getAnnotation(OpenApi.class, cm.getInnerClass());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextBeanPropertyMeta.java
index 812c67f..7267d8d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/plaintext/PlainTextBeanPropertyMeta.java
@@ -30,9 +30,9 @@
 	 * Constructor.
 	 *
 	 * @param bpm The metadata of the bean property of this additional metadata.
-	 * @param plainTextMetaProvider PlainText metadata provider (for finding information about other artifacts).
+	 * @param mp PlainText metadata provider (for finding information about other artifacts).
 	 */
-	public PlainTextBeanPropertyMeta(BeanPropertyMeta bpm, PlainTextMetaProvider plainTextMetaProvider) {
+	public PlainTextBeanPropertyMeta(BeanPropertyMeta bpm, PlainTextMetaProvider mp) {
 		super(bpm);
 	}
 
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 6c51b02..11234e3 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
@@ -27,11 +27,11 @@
 	 * Constructor.
 	 *
 	 * @param cm The class that this annotation is defined on.
-	 * @param plainTextMetaProvider PlainText metadata provider (for finding information about other artifacts).
+	 * @param mp PlainText metadata provider (for finding information about other artifacts).
 	 */
-	public PlainTextClassMeta(ClassMeta<?> cm, PlainTextMetaProvider plainTextMetaProvider) {
+	public PlainTextClassMeta(ClassMeta<?> cm, PlainTextMetaProvider mp) {
 		super(cm);
-		this.plainText = cm.getInfo().getAnnotation(PlainText.class);
+		this.plainText = mp.getAnnotation(PlainText.class, cm.getInnerClass());
 	}
 
 	/**
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 55c8a15..b7e0963 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
@@ -1028,6 +1028,19 @@
 	}
 
 	/**
+	 * Returns all annotations of the specified type defined on the specified class or parent classes/interfaces.
+	 *
+	 * @param <T> The annotation to search for.
+	 * @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 <T extends Annotation> List<T> getAnnotations(Class<T> a, MetaProvider mp) {
+		return appendAnnotations(new ArrayList<>(), a, mp);
+	}
+
+	/**
 	 * Identical to {@link #getAnnotations(Class)} but optionally returns the list in reverse (parent-to-child) order.
 	 *
 	 * @param a
@@ -1127,10 +1140,33 @@
 	 * @return The same list.
 	 */
 	public <T extends Annotation> List<T> appendAnnotations(List<T> l, Class<T> a) {
+		return appendAnnotations(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 this class.
+	 * 	<li>On parent classes ordered child-to-parent.
+	 * 	<li>On interfaces ordered child-to-parent.
+	 * 	<li>On the package of this class.
+	 * </ol>
+	 *
+	 * @param <T> The annotation to search for.
+	 * @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> appendAnnotations(List<T> l, Class<T> a, MetaProvider mp) {
 		for (ClassInfo ci : getParents())
-			addIfNotNull(l, ci.getDeclaredAnnotation(a));
+			addIfNotNull(l, mp.getDeclaredAnnotation(a, ci.inner()));
 		for (ClassInfo ci : getInterfaces())
-			addIfNotNull(l, ci.getDeclaredAnnotation(a));
+			addIfNotNull(l, mp.getDeclaredAnnotation(a, ci.inner()));
 		addIfNotNull(l, getPackageAnnotation(a));
 		return l;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlBeanPropertyMeta.java
index 776c7b9..61b478c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/soap/SoapXmlBeanPropertyMeta.java
@@ -30,9 +30,9 @@
 	 * Constructor.
 	 *
 	 * @param bpm The metadata of the bean property of this additional metadata.
-	 * @param soapXmlMetaProvider SOAP/XML metadata provider (for finding information about other artifacts).
+	 * @param mp SOAP/XML metadata provider (for finding information about other artifacts).
 	 */
-	public SoapXmlBeanPropertyMeta(BeanPropertyMeta bpm, SoapXmlMetaProvider soapXmlMetaProvider) {
+	public SoapXmlBeanPropertyMeta(BeanPropertyMeta bpm, SoapXmlMetaProvider mp) {
 		super(bpm);
 	}
 
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 3c47da9..0d38b50 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
@@ -27,11 +27,11 @@
 	 * Constructor.
 	 *
 	 * @param cm The class that this annotation is defined on.
-	 * @param soapXmlMetaProvider SOAP/XML metadata provider (for finding information about other artifacts).
+	 * @param mp SOAP/XML metadata provider (for finding information about other artifacts).
 	 */
-	public SoapXmlClassMeta(ClassMeta<?> cm, SoapXmlMetaProvider soapXmlMetaProvider) {
+	public SoapXmlClassMeta(ClassMeta<?> cm, SoapXmlMetaProvider mp) {
 		super(cm);
-		this.soapXml = cm.getInfo().getAnnotation(SoapXml.class);
+		this.soapXml = mp.getAnnotation(SoapXml.class, cm.getInnerClass());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonBeanPropertyMeta.java
index f07afb9..4693650 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonBeanPropertyMeta.java
@@ -30,9 +30,9 @@
 	 * Constructor.
 	 *
 	 * @param bpm The metadata of the bean property of this additional metadata.
-	 * @param uonMetaProvider UON metadata provider (for finding information about other artifacts).
+	 * @param mp UON metadata provider (for finding information about other artifacts).
 	 */
-	public UonBeanPropertyMeta(BeanPropertyMeta bpm, UonMetaProvider uonMetaProvider) {
+	public UonBeanPropertyMeta(BeanPropertyMeta bpm, UonMetaProvider mp) {
 		super(bpm);
 	}
 
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 9ee9da7..48267b6 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
@@ -27,11 +27,11 @@
 	 * Constructor.
 	 *
 	 * @param cm The class that this annotation is defined on.
-	 * @param uonMetaProvider Uon metadata provider (for finding information about other artifacts).
+	 * @param mp Uon metadata provider (for finding information about other artifacts).
 	 */
-	public UonClassMeta(ClassMeta<?> cm, UonMetaProvider uonMetaProvider) {
+	public UonClassMeta(ClassMeta<?> cm, UonMetaProvider mp) {
 		super(cm);
-		this.uon = cm.getInfo().getAnnotation(Uon.class);
+		this.uon = mp.getAnnotation(Uon.class, cm.getInnerClass());
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingBeanPropertyMeta.java
index 324dbd6..b5de5d4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/urlencoding/UrlEncodingBeanPropertyMeta.java
@@ -30,9 +30,9 @@
 	 * Constructor.
 	 *
 	 * @param bpm The metadata of the bean property of this additional metadata.
-	 * @param urlEncodingMetaProvider URL-Encoding metadata provider (for finding information about other artifacts).
+	 * @param mp URL-Encoding metadata provider (for finding information about other artifacts).
 	 */
-	public UrlEncodingBeanPropertyMeta(BeanPropertyMeta bpm, UrlEncodingMetaProvider urlEncodingMetaProvider) {
+	public UrlEncodingBeanPropertyMeta(BeanPropertyMeta bpm, UrlEncodingMetaProvider mp) {
 		super(bpm);
 	}
 
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 0b4de2d..aeefe69 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
@@ -27,11 +27,11 @@
 	 * Constructor.
 	 *
 	 * @param cm The class that this annotation is defined on.
-	 * @param urlEncodingMetaProvider URL-encoding metadata provider (for finding information about other artifacts).
+	 * @param mp URL-encoding metadata provider (for finding information about other artifacts).
 	 */
-	public UrlEncodingClassMeta(ClassMeta<?> cm, UrlEncodingMetaProvider urlEncodingMetaProvider) {
+	public UrlEncodingClassMeta(ClassMeta<?> cm, UrlEncodingMetaProvider mp) {
 		super(cm);
-		this.urlEncoding = cm.getInfo().getAnnotation(UrlEncoding.class);
+		this.urlEncoding = mp.getAnnotation(UrlEncoding.class, cm.getInnerClass());
 		if (urlEncoding != null) {
 			expandedParams = urlEncoding.expandedParams();
 		} else {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
index d6602d3..7031e12 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
@@ -26,7 +26,8 @@
 public class ReflectionMap<V> {
 
 	private final List<ClassEntry<V>> classEntries;
-	private final List<MethodEntry<V>> methodEntries;
+	private final List<MemberEntry<V>> memberEntries;
+	private final boolean noClassEntries, noMemberEntries;
 
 	/**
 	 * Constructor.
@@ -35,7 +36,9 @@
 	 */
 	ReflectionMap(Builder<V> b) {
 		this.classEntries = Collections.unmodifiableList(new ArrayList<>(b.classEntries));
-		this.methodEntries = Collections.unmodifiableList(new ArrayList<>(b.methodEntries));
+		this.memberEntries = Collections.unmodifiableList(new ArrayList<>(b.memberEntries));
+		this.noClassEntries = classEntries.isEmpty();
+		this.noMemberEntries = memberEntries.isEmpty();
 	}
 
 	/**
@@ -56,7 +59,7 @@
 	 */
 	public static class Builder<V> {
 		List<ClassEntry<V>> classEntries = new ArrayList<>();
-		List<MethodEntry<V>> methodEntries = new ArrayList<>();
+		List<MemberEntry<V>> memberEntries = new ArrayList<>();
 
 		/**
 		 * Adds a mapping to this builder.
@@ -88,7 +91,7 @@
 					if (Character.isUpperCase(s2.charAt(0))) {
 						classEntries.add(new ClassEntry<>(s, value));
 					} else {
-						methodEntries.add(new MethodEntry<>(s1, s2, value));
+						memberEntries.add(new MemberEntry<>(s1, s2, value));
 					}
 				}
 			}
@@ -113,7 +116,7 @@
 	 * @return All matching objects.  Never <jk>null</jk>.
 	 */
 	public List<V> find(Class<?> c) {
-		return classEntries.stream().filter(x -> x.matches(c)).map(x -> x.value).collect(Collectors.toList());
+		return noClassEntries ? Collections.emptyList() : classEntries.stream().filter(x -> x.matches(c)).map(x -> x.value).collect(Collectors.toList());
 	}
 
 	/**
@@ -123,7 +126,7 @@
 	 * @return The matching object.  Never <jk>null</jk>.
 	 */
 	public Optional<V> findFirst(Class<?> c) {
-		return classEntries.stream().filter(x -> x.matches(c)).map(x -> x.value).findFirst();
+		return noClassEntries ? Optional.empty() : classEntries.stream().filter(x -> x.matches(c)).map(x -> x.value).findFirst();
 	}
 
 	/**
@@ -134,7 +137,7 @@
 	 * @return All matching objects.  Never <jk>null</jk>.
 	 */
 	public List<V> find(Class<?> c, Class<? extends V> ofType) {
-		return classEntries.stream().filter(x -> x.matches(c)).map(x -> x.value).filter(x -> ofType.isInstance(x)).collect(Collectors.toList());
+		return noClassEntries ? Collections.emptyList() : classEntries.stream().filter(x -> x.matches(c)).map(x -> x.value).filter(x -> ofType.isInstance(x)).collect(Collectors.toList());
 	}
 
 	/**
@@ -145,7 +148,7 @@
 	 * @return The matching object.  Never <jk>null</jk>.
 	 */
 	public Optional<V> findFirst(Class<?> c, Class<? extends V> ofType) {
-		return classEntries.stream().filter(x -> x.matches(c)).map(x -> x.value).filter(x -> ofType.isInstance(x)).findFirst();
+		return noClassEntries ? Optional.empty() : classEntries.stream().filter(x -> x.matches(c)).map(x -> x.value).filter(x -> ofType.isInstance(x)).findFirst();
 	}
 
 	/**
@@ -154,8 +157,8 @@
 	 * @param m The method to test for.
 	 * @return All matching objects.  Never <jk>null</jk>.
 	 */
-	public List<V> find(Method m) {
-		return methodEntries.stream().filter(x -> x.matches(m)).map(x -> x.value).collect(Collectors.toList());
+	public List<V> find(Member m) {
+		return noMemberEntries ? Collections.emptyList() : memberEntries.stream().filter(x -> x.matches(m)).map(x -> x.value).collect(Collectors.toList());
 	}
 
 	/**
@@ -164,8 +167,8 @@
 	 * @param m The method to test for.
 	 * @return The matching object.  Never <jk>null</jk>.
 	 */
-	public Optional<V> findFirst(Method m) {
-		return methodEntries.stream().filter(x -> x.matches(m)).map(x -> x.value).findFirst();
+	public Optional<V> findFirst(Member m) {
+		return noMemberEntries ? Optional.empty() : memberEntries.stream().filter(x -> x.matches(m)).map(x -> x.value).findFirst();
 	}
 
 	/**
@@ -175,8 +178,8 @@
 	 * @param ofType Only return objects of the specified type.
 	 * @return All matching objects.  Never <jk>null</jk>.
 	 */
-	public List<V> find(Method m, Class<? extends V> ofType) {
-		return methodEntries.stream().filter(x -> x.matches(m)).map(x -> x.value).filter(x -> ofType.isInstance(x)).collect(Collectors.toList());
+	public List<V> find(Member m, Class<? extends V> ofType) {
+		return noMemberEntries ? Collections.emptyList() : memberEntries.stream().filter(x -> x.matches(m)).map(x -> x.value).filter(x -> ofType.isInstance(x)).collect(Collectors.toList());
 	}
 
 	/**
@@ -186,8 +189,8 @@
 	 * @param ofType Only return objects of the specified type.
 	 * @return The matching object.  Never <jk>null</jk>.
 	 */
-	public Optional<V> findFirst(Method m, Class<? extends V> ofType) {
-		return methodEntries.stream().filter(x -> x.matches(m)).map(x -> x.value).filter(x -> ofType.isInstance(x)).findFirst();
+	public Optional<V> findFirst(Member m, Class<? extends V> ofType) {
+		return noMemberEntries ? Optional.empty() : memberEntries.stream().filter(x -> x.matches(m)).map(x -> x.value).filter(x -> ofType.isInstance(x)).findFirst();
 	}
 
 	static class ClassEntry<V> {
@@ -204,17 +207,17 @@
 		}
 	}
 
-	static class MethodEntry<V> {
+	static class MemberEntry<V> {
 		String className, methodName;
 		V value;
 
-		MethodEntry(String className, String methodName, V value) {
+		MemberEntry(String className, String methodName, V value) {
 			this.className = className;
 			this.methodName = methodName;
 			this.value = value;
 		}
 
-		public boolean matches(Method m) {
+		public boolean matches(Member m) {
 			if (m == null)
 				return false;
 			Class<?> c = m.getDeclaringClass();
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
index 9924b2e..e92da24 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
@@ -38,13 +38,13 @@
 	 * Constructor.
 	 *
 	 * @param beanMeta The metadata on the bean that this metadata applies to.
-	 * @param xmlMetaProvider XML metadata provider (for finding information about other artifacts).
+	 * @param mp XML metadata provider (for finding information about other artifacts).
 	 */
-	public XmlBeanMeta(BeanMeta<?> beanMeta, XmlMetaProvider xmlMetaProvider) {
+	public XmlBeanMeta(BeanMeta<?> beanMeta, XmlMetaProvider mp) {
 		super(beanMeta);
 
 		Class<?> c = beanMeta.getClassMeta().getInnerClass();
-		XmlBeanMetaBuilder b = new XmlBeanMetaBuilder(beanMeta, xmlMetaProvider);
+		XmlBeanMetaBuilder b = new XmlBeanMetaBuilder(beanMeta, mp);
 
 		attrs = unmodifiableMap(b.attrs);
 		elements = unmodifiableMap(b.elements);
@@ -77,9 +77,9 @@
 			contentProperty;
 		XmlFormat contentFormat = DEFAULT;
 
-		XmlBeanMetaBuilder(BeanMeta<?> beanMeta, XmlMetaProvider xmlMetaProvider) {
+		XmlBeanMetaBuilder(BeanMeta<?> beanMeta, XmlMetaProvider mp) {
 			Class<?> c = beanMeta.getClassMeta().getInnerClass();
-			Xml xml = c.getAnnotation(Xml.class);
+			Xml xml = mp.getAnnotation(Xml.class, c);
 			XmlFormat defaultFormat = null;
 
 			if (xml != null) {
@@ -97,7 +97,7 @@
 			}
 
 			for (BeanPropertyMeta p : beanMeta.getPropertyMetas()) {
-				XmlFormat xf = xmlMetaProvider.getXmlBeanPropertyMeta(p).getXmlFormat();
+				XmlFormat xf = mp.getXmlBeanPropertyMeta(p).getXmlFormat();
 				ClassMeta<?> pcm = p.getClassMeta();
 				if (xf == ATTR) {
 					attrs.put(p.getName(), p);
@@ -128,7 +128,7 @@
 					contentFormat = xf;
 				}
 				// Look for any properties that are collections with @Xml.childName specified.
-				String n = xmlMetaProvider.getXmlBeanPropertyMeta(p).getChildName();
+				String n = mp.getXmlBeanPropertyMeta(p).getChildName();
 				if (n != null) {
 					if (collapsedProperties.containsKey(n) && collapsedProperties.get(n) != p)
 						throw new BeanRuntimeException(c, "Multiple properties found with the child name ''{0}''.", n);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java
index 1a979c4..87185bc 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java
@@ -37,21 +37,21 @@
 	 * Constructor.
 	 *
 	 * @param bpm The metadata of the bean property of this additional metadata.
-	 * @param xmlMetaProvider XML metadata provider (for finding information about other artifacts).
+	 * @param mp XML metadata provider (for finding information about other artifacts).
 	 */
-	public XmlBeanPropertyMeta(BeanPropertyMeta bpm, XmlMetaProvider xmlMetaProvider) {
+	public XmlBeanPropertyMeta(BeanPropertyMeta bpm, XmlMetaProvider mp) {
 		super(bpm);
-		this.xmlMetaProvider = xmlMetaProvider;
+		this.xmlMetaProvider = mp;
 
 		if (bpm.getInnerField() != null)
-			findXmlInfo(bpm.getInnerField().getAnnotation(Xml.class));
+			findXmlInfo(mp.getAnnotation(Xml.class, bpm.getInnerField()), mp);
 		if (bpm.getGetter() != null)
-			findXmlInfo(bpm.getGetter().getAnnotation(Xml.class));
+			findXmlInfo(mp.getAnnotation(Xml.class, bpm.getGetter()), mp);
 		if (bpm.getSetter() != null)
-			findXmlInfo(bpm.getSetter().getAnnotation(Xml.class));
+			findXmlInfo(mp.getAnnotation(Xml.class, bpm.getSetter()), mp);
 
 		if (namespace == null)
-			namespace = xmlMetaProvider.getXmlClassMeta(bpm.getBeanMeta().getClassMeta()).getNamespace();
+			namespace = mp.getXmlClassMeta(bpm.getBeanMeta().getClassMeta()).getNamespace();
 	}
 
 	private XmlBeanPropertyMeta() {
@@ -100,7 +100,7 @@
 		return childName;
 	}
 
-	private void findXmlInfo(Xml xml) {
+	private void findXmlInfo(Xml xml, MetaProvider mp) {
 		if (xml == null)
 			return;
 		BeanPropertyMeta bpm = getBeanPropertyMeta();
@@ -108,8 +108,8 @@
 		ClassMeta<?> cmBean = bpm.getBeanMeta().getClassMeta();
 		String name = bpm.getName();
 
-		List<Xml> xmls = bpm.findAnnotations(Xml.class);
-		List<XmlSchema> schemas = bpm.findAnnotations(XmlSchema.class);
+		List<Xml> xmls = bpm.findAnnotations(Xml.class, mp);
+		List<XmlSchema> schemas = bpm.findAnnotations(XmlSchema.class, mp);
 		namespace = XmlUtils.findNamespace(xmls, schemas);
 
 		if (xmlFormat == XmlFormat.DEFAULT)
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 3d111ee..9cf999d 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
@@ -35,12 +35,12 @@
 	 * Constructor.
 	 *
 	 * @param cm The class that this annotation is defined on.
-	 * @param xmlMetaProvider XML metadata provider (for finding information about other artifacts).
+	 * @param mp XML metadata provider (for finding information about other artifacts).
 	 */
-	public XmlClassMeta(ClassMeta<?> cm, XmlMetaProvider xmlMetaProvider) {
+	public XmlClassMeta(ClassMeta<?> cm, XmlMetaProvider mp) {
 		super(cm);
-		this.namespace = findNamespace(cm);
-		this.xml = cm.getInfo().getAnnotation(Xml.class);
+		this.namespace = findNamespace(cm, mp);
+		this.xml = mp.getAnnotation(Xml.class, cm.getInnerClass());
 		if (xml != null) {
 			this.format = xml.format();
 			this.childName = nullIfEmpty(xml.childName());
@@ -99,12 +99,12 @@
 		return namespace;
 	}
 
-	private static Namespace findNamespace(ClassMeta<?> cm) {
+	private static Namespace findNamespace(ClassMeta<?> cm, MetaProvider mp) {
 		if (cm == null)
 			return null;
 		ClassInfo ci = cm.getInfo();
-		List<Xml> xmls = ci.getAnnotations(Xml.class);
-		List<XmlSchema> schemas = ci.getAnnotations(XmlSchema.class);
+		List<Xml> xmls = ci.getAnnotations(Xml.class, mp);
+		List<XmlSchema> schemas = ci.getAnnotations(XmlSchema.class, mp);
 		return XmlUtils.findNamespace(xmls, schemas);
 	}
 }
