diff --git a/impl/src/main/java/org/apache/myfaces/cdi/util/CDIUtils.java b/impl/src/main/java/org/apache/myfaces/cdi/util/CDIUtils.java
index e22387b..934d068 100644
--- a/impl/src/main/java/org/apache/myfaces/cdi/util/CDIUtils.java
+++ b/impl/src/main/java/org/apache/myfaces/cdi/util/CDIUtils.java
@@ -99,6 +99,21 @@
         }
     }
 
+    public static <T> T get(BeanManager beanManager, Type type, boolean create, Annotation... qualifiers)
+    {
+        try
+        {
+            Set<Bean<?>> beans = beanManager.getBeans(type, qualifiers);
+            Bean<T> bean = (Bean<T>) beanManager.resolve(beans);
+
+            return (bean != null) ? get(beanManager, bean, type, create) : null;
+        }
+        catch (ContextNotActiveException e)
+        {
+            return null;
+        }
+    }
+
     public static <T> T get(BeanManager beanManager, Bean<T> bean, Type type, boolean create)
     {
         if (create)
diff --git a/impl/src/main/java/org/apache/myfaces/cdi/wrapper/FacesConverterCDIWrapper.java b/impl/src/main/java/org/apache/myfaces/cdi/wrapper/FacesConverterCDIWrapper.java
index 9a2fa23..2183080 100644
--- a/impl/src/main/java/org/apache/myfaces/cdi/wrapper/FacesConverterCDIWrapper.java
+++ b/impl/src/main/java/org/apache/myfaces/cdi/wrapper/FacesConverterCDIWrapper.java
@@ -19,6 +19,9 @@
 
 package org.apache.myfaces.cdi.wrapper;
 
+import java.lang.reflect.Type;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.TypeLiteral;
 import javax.faces.FacesWrapper;
 import javax.faces.component.PartialStateHolder;
 import javax.faces.component.UIComponent;
@@ -32,6 +35,10 @@
  */
 public class FacesConverterCDIWrapper implements PartialStateHolder, Converter, FacesWrapper<Converter>
 {
+    private static final Type CONVERTER_TYPE = new TypeLiteral<Converter<?>>() { 
+        private static final long serialVersionUID = 1L; 
+    }.getType(); 
+
     private transient Converter delegate;
 
     private Class<?> forClass;
@@ -65,17 +72,28 @@
     {
         if (delegate == null)
         {
+            BeanManager bm = CDIUtils.getBeanManager(FacesContext.getCurrentInstance().getExternalContext());
+
             if (converterId != null)
             {
-                delegate = (Converter) CDIUtils.get(CDIUtils.getBeanManager(
-                    FacesContext.getCurrentInstance().getExternalContext()), 
-                        Converter.class, true, new FacesConverterAnnotationLiteral(Object.class, converterId));
+                FacesConverterAnnotationLiteral literal =
+                        new FacesConverterAnnotationLiteral(Object.class, converterId);
+                delegate = (Converter) CDIUtils.get(bm, CONVERTER_TYPE, true, literal);
+
+                if (delegate == null)
+                {
+                    delegate = (Converter) CDIUtils.get(bm, Converter.class, true, literal);
+                }
             }
             else if (forClass != null)
             {
-                delegate = (Converter) CDIUtils.get(CDIUtils.getBeanManager(
-                    FacesContext.getCurrentInstance().getExternalContext()), 
-                        Converter.class, true, new FacesConverterAnnotationLiteral(forClass, ""));
+                FacesConverterAnnotationLiteral literal = new FacesConverterAnnotationLiteral(forClass, "");
+                delegate = (Converter) CDIUtils.get(bm, CONVERTER_TYPE, true, literal);
+
+                if (delegate == null)
+                {
+                    delegate = (Converter) CDIUtils.get(bm, Converter.class, true, literal);
+                }
             }
         }
         return delegate;
diff --git a/impl/src/main/java/org/apache/myfaces/cdi/wrapper/FacesValidatorCDIWrapper.java b/impl/src/main/java/org/apache/myfaces/cdi/wrapper/FacesValidatorCDIWrapper.java
index 9a959b3..5f9b653 100644
--- a/impl/src/main/java/org/apache/myfaces/cdi/wrapper/FacesValidatorCDIWrapper.java
+++ b/impl/src/main/java/org/apache/myfaces/cdi/wrapper/FacesValidatorCDIWrapper.java
@@ -19,6 +19,9 @@
 
 package org.apache.myfaces.cdi.wrapper;
 
+import java.lang.reflect.Type;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.util.TypeLiteral;
 import javax.faces.FacesWrapper;
 import javax.faces.component.PartialStateHolder;
 import javax.faces.component.UIComponent;
@@ -29,6 +32,11 @@
 
 public class FacesValidatorCDIWrapper implements PartialStateHolder, Validator, FacesWrapper<Validator>
 {
+    private static final Type VALIDATOR_TYPE = new TypeLiteral<Validator<?>>() 
+    { 
+        private static final long serialVersionUID = 1L; 
+    }.getType();
+
     private transient Validator delegate;
     
     private String validatorId;
@@ -55,9 +63,14 @@
     {
         if (delegate == null)
         {
-            delegate = (Validator) CDIUtils.get(CDIUtils.getBeanManager(
-                FacesContext.getCurrentInstance().getExternalContext()), 
-                    Validator.class, true, new FacesValidatorAnnotationLiteral(validatorId));
+            BeanManager bm = CDIUtils.getBeanManager(FacesContext.getCurrentInstance().getExternalContext());
+            FacesValidatorAnnotationLiteral literal = new FacesValidatorAnnotationLiteral(validatorId);
+            delegate = (Validator) CDIUtils.get(bm, VALIDATOR_TYPE, true, literal);
+            
+            if (delegate == null)
+            {
+                delegate = (Validator) CDIUtils.get(bm, Validator.class, true, literal);
+            }
         }
         return delegate;
     }
