make sure the visibiltiy is passed around
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/RMethodFunctionWrapper.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/RMethodFunctionWrapper.java
index bd5fff8..c83c782 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/RMethodFunctionWrapper.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/RMethodFunctionWrapper.java
@@ -16,7 +16,11 @@
 
 import org.eclipse.dltk.compiler.problem.IProblemCategory;
 import org.eclipse.dltk.compiler.problem.IProblemIdentifier;
+import org.eclipse.dltk.internal.javascript.ti.IReferenceAttributes;
+import org.eclipse.dltk.javascript.typeinference.IValueReference;
+import org.eclipse.dltk.javascript.typeinfo.IModelBuilder.IMethod;
 import org.eclipse.dltk.javascript.typeinfo.IRFunctionType;
+import org.eclipse.dltk.javascript.typeinfo.IRMember;
 import org.eclipse.dltk.javascript.typeinfo.IRMethod;
 import org.eclipse.dltk.javascript.typeinfo.IRParameter;
 import org.eclipse.dltk.javascript.typeinfo.IRType;
@@ -28,9 +32,23 @@
 public class RMethodFunctionWrapper implements IRMethod {
 
 	private final IRFunctionType functionType;
+	private final Visibility visibility;
 
-	public RMethodFunctionWrapper(IRFunctionType functionType) {
+	public RMethodFunctionWrapper(IRFunctionType functionType,
+			IValueReference reference) {
 		this.functionType = functionType;
+		IMethod method = (IMethod) reference.getAttribute(
+				IReferenceAttributes.METHOD, true);
+		if (method != null)
+			visibility = method.getVisibility();
+		else {
+			IRMember member = (IRMember) reference.getAttribute(
+					IReferenceAttributes.ELEMENT, true);
+			if (member != null)
+				visibility = member.getVisibility();
+			else
+				visibility = Visibility.PUBLIC;
+		}
 	}
 
 	public boolean isDeprecated() {
@@ -38,7 +56,7 @@
 	}
 
 	public Visibility getVisibility() {
-		return Visibility.PUBLIC;
+		return visibility;
 	}
 
 	public String getName() {
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/TypeInfoValidator.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/TypeInfoValidator.java
index 0d4a14f..95d6aff 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/TypeInfoValidator.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/TypeInfoValidator.java
@@ -1082,7 +1082,7 @@
 				if (expressionType instanceof IRFunctionType) {
 					validateCallExpressionRMethod(reference, arguments,
 							methodNode, new RMethodFunctionWrapper(
-									(IRFunctionType) expressionType));
+									(IRFunctionType) expressionType, reference));
 					return;
 				} else if (expressionType instanceof IRClassType) {
 					final IRTypeDeclaration target = ((IRClassType) expressionType)
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/internal/core/RRecordMember.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/internal/core/RRecordMember.java
index 9daa896..27dc9e6 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/internal/core/RRecordMember.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/internal/core/RRecordMember.java
@@ -69,6 +69,8 @@
 	}
 
 	public Visibility getVisibility() {
+		if (source instanceof IMember)
+			return ((IMember) source).getVisibility();
 		return Visibility.PUBLIC;
 	}