diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/PropertyNameValidationVisitor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/PropertyNameValidationVisitor.java
index f58804d..ae6bf84 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/PropertyNameValidationVisitor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/PropertyNameValidationVisitor.java
@@ -10,11 +10,21 @@
  *******************************************************************************/
 package org.eclipse.jst.jsf.validation.internal.appconfig;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jst.jsf.common.util.JDTBeanIntrospector;
+import org.eclipse.jst.jsf.common.util.JDTBeanProperty;
+import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
 import org.eclipse.jst.jsf.facesconfig.emf.PropertyNameType;
 
 /**
@@ -25,6 +35,8 @@
 class PropertyNameValidationVisitor extends EObjectValidationVisitor
 {
     private final EStructuralFeature   _parentClassNameFeature;
+	private final Map<IType, Map<String, JDTBeanProperty>> _propertyCache;
+	private final Map<String, IType>		_typeCache;
     
     /**
      * @param feature 
@@ -36,6 +48,8 @@
     {
         super(feature, version);
         _parentClassNameFeature = parentClassNameFeature;
+        _propertyCache = new HashMap<IType, Map<String, JDTBeanProperty>>();
+        _typeCache = new HashMap<String, IType>();
     }
 
     protected EObjectValidationVisitor[] getChildNodeValidators() 
@@ -49,13 +63,13 @@
         
         if (parentClassType != null)
         {
-            String typeSig = 
-                PropertyValidationVisitor.validateProperty((PropertyNameType)object
+            final boolean isBeanProperty = 
+                validateProperty((PropertyNameType)object
                         , file.getProject(), parentClassType);
             final String propertyName = 
                 ((PropertyNameType)object).getTextContent();
             
-            if (typeSig == null)
+            if (!isBeanProperty)
             {
                 PropertyValidationVisitor.addMessageInfo(messages,
                         DiagnosticFactory
@@ -98,4 +112,58 @@
         
         return parentClassType;
     }
+    
+	private boolean validateProperty(PropertyNameType object, IProject project, String parentClassType)
+    {
+        boolean isBeanProperty = false;
+
+        final IType type = getType(parentClassType, project);
+
+        if (type != null)
+        {
+            final String propertyName = object.getTextContent(); 
+
+            Map<String, JDTBeanProperty>  cachedType = _propertyCache.get(type);
+            if (cachedType == null)
+            {
+            	cachedType = getProperties(type, project);
+            	_propertyCache.put(type, cachedType);
+            }
+
+            final JDTBeanProperty beanProperty = cachedType.get(propertyName);
+
+            if (beanProperty != null)
+            {
+            	isBeanProperty = true; 
+            }
+        }
+        return isBeanProperty;
+    }
+
+	private Map<String, JDTBeanProperty> getProperties(final IType type, final IProject project) 
+	{
+		final JDTBeanIntrospector introspector = new JDTBeanIntrospector(type);
+		return introspector.getProperties();
+	}
+	
+	private IType getType(final String typeName, final IProject project)
+	{
+		IType type = _typeCache.get(typeName);
+		if (type == null)
+		{
+	        IJavaProject javaProject = JavaCore.create(project);
+	        try 
+	        {
+				type = javaProject.findType(typeName);
+				_typeCache.put(typeName, type);
+			} 
+	        catch (JavaModelException e) 
+			{
+				JSFCorePlugin
+                .log(new Exception(e), 
+                     "Problem validating on parent: "+typeName);
+			}
+		}
+		return type;
+	}
 }
\ No newline at end of file
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/PropertyValidationVisitor.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/PropertyValidationVisitor.java
index be9f5ec..5ff1e81 100644
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/PropertyValidationVisitor.java
+++ b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/appconfig/PropertyValidationVisitor.java
@@ -11,21 +11,11 @@
 package org.eclipse.jst.jsf.validation.internal.appconfig;
 
 import java.util.List;
-import java.util.Map;
 
 import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaCore;
-import org.eclipse.jdt.core.JavaModelException;
-import org.eclipse.jst.jsf.common.util.JDTBeanIntrospector;
-import org.eclipse.jst.jsf.common.util.JDTBeanProperty;
-import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
 import org.eclipse.jst.jsf.facesconfig.emf.FacesConfigPackage;
-import org.eclipse.jst.jsf.facesconfig.emf.PropertyNameType;
 
 /**
  * Validates property's
@@ -73,38 +63,5 @@
         };
     }
 
-    static String validateProperty(PropertyNameType object, IProject project, String parentClassType)
-    {
-        String signatureBeanProperty = null;
-        try
-        {
-           IJavaProject javaProject = JavaCore.create(project);
-           IType type = javaProject.findType(parentClassType);
-           
-           if (type != null)
-           {
-               final JDTBeanIntrospector introspector =
-                   new JDTBeanIntrospector(type);
-               
-               final Map properties = introspector.getProperties();
 
-               final String propertyName = object.getTextContent(); 
-               if (properties.containsKey(propertyName))
-               {
-                   final JDTBeanProperty beanProperty = 
-                       (JDTBeanProperty) properties.get(propertyName);
-                   signatureBeanProperty = 
-                       beanProperty.getTypeSignature();
-               }
-           }
-        }
-        catch(JavaModelException jme)
-        {
-            JSFCorePlugin
-                .log(new Exception(jme), 
-                     "Problem validating on parent: "+parentClassType);
-        }
-
-        return signatureBeanProperty;
-    }
 }
