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 c83c782..ac70672 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
@@ -18,6 +18,7 @@
 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.IMember;
 import org.eclipse.dltk.javascript.typeinfo.IModelBuilder.IMethod;
 import org.eclipse.dltk.javascript.typeinfo.IRFunctionType;
 import org.eclipse.dltk.javascript.typeinfo.IRMember;
@@ -32,7 +33,7 @@
 public class RMethodFunctionWrapper implements IRMethod {
 
 	private final IRFunctionType functionType;
-	private final Visibility visibility;
+	private final Object source;
 
 	public RMethodFunctionWrapper(IRFunctionType functionType,
 			IValueReference reference) {
@@ -40,26 +41,32 @@
 		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;
-		}
+			source = method;
+		else
+			source = reference.getAttribute(IReferenceAttributes.ELEMENT, true);
 	}
 
 	public boolean isDeprecated() {
+		if (source instanceof IRMember)
+			return ((IRMember) source).isDeprecated();
+		if (source instanceof IMember)
+			return ((IMember) source).isDeprecated();
 		return false;
 	}
 
 	public Visibility getVisibility() {
-		return visibility;
+		if (source instanceof IRMember)
+			return ((IRMember) source).getVisibility();
+		if (source instanceof IMember)
+			return ((IMember) source).getVisibility();
+		return Visibility.PUBLIC;
 	}
 
 	public String getName() {
+		if (source instanceof IRMember)
+			return ((IRMember) source).getName();
+		if (source instanceof IMember)
+			return ((IMember) source).getName();
 		return null;
 	}
 
@@ -68,10 +75,16 @@
 	}
 
 	public Set<IProblemCategory> getSuppressedWarnings() {
+		if (source instanceof IRMember)
+			return ((IRMember) source).getSuppressedWarnings();
+		if (source instanceof IMember)
+			return ((IMember) source).getSuppressedWarnings();
 		return null;
 	}
 
 	public boolean isSuppressed(IProblemIdentifier problemIdentifier) {
+		if (source instanceof IRMember)
+			return ((IRMember) source).isSuppressed(problemIdentifier);
 		return false;
 	}
 
@@ -101,22 +114,32 @@
 	}
 
 	public IRTypeDeclaration getDeclaringType() {
+		if (source instanceof IRMember)
+			return ((IRMember) source).getDeclaringType();
 		return null;
 	}
 
 	public boolean isStatic() {
+		if (source instanceof IRMember)
+			return ((IRMember) source).isStatic();
 		return false;
 	}
 
 	public boolean isAbstract() {
+		if (source instanceof IRMethod)
+			return ((IRMethod) source).isAbstract();
 		return false;
 	}
 
 	public boolean isVisible() {
+		if (source instanceof IRMember)
+			return ((IRMember) source).isVisible();
 		return true;
 	}
 
 	public boolean isGeneric() {
+		if (source instanceof IRMethod)
+			return ((IRMethod) source).isGeneric();
 		return false;
 	}
 
diff --git a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java
index cbc9e85..ae841e5 100644
--- a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java
+++ b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java
@@ -3823,4 +3823,38 @@
 		final List<IProblem> problems = validate(code.toString());
 		assertEquals(problems.toString(), 0, problems.size());
 	}
+	
+	
+	public void testDeprecatedProrotypeFunctions() {
+		final StringList code = new StringList();
+		code.add("function Sub(name, age) {");
+		code.add(" this.age = age");
+		code.add("}");
+		code.add("Sub.prototype = {");
+		code.add("		  /**");
+		code.add("		   * @deprecated");
+		code.add("		   */");
+		code.add("		  baseMethod: function() {");
+		code.add("		   return 'baseMethod called'");
+		code.add("		  }");
+		code.add("		 }");
+		code.add("	  /**");
+		code.add("	   * @deprecated");
+		code.add("	   */");
+		code.add("Sub.prototype.subMethod2 = function(a,b,c) {");
+		code.add("	return 'subMethod2 called'");
+		code.add("}");
+		code.add("function test2() {");
+		code.add("	var y = new Sub('test2',2);");
+		code.add("	y.subMethod2(1,2,3);");
+		code.add("	y.baseMethod();");
+		code.add("}");
+		final List<IProblem> problems = validate(code.toString());
+		assertEquals(problems.toString(), 3, problems.size());
+		assertEquals(JavaScriptProblems.DEPRECATED_FUNCTION, problems.get(0)
+				.getID());
+		assertEquals(JavaScriptProblems.DEPRECATED_FUNCTION, problems.get(1)
+				.getID());
+		assertEquals(JavaScriptProblems.DEPRECATED_FUNCTION, problems.get(2)
+				.getID());	}
 }
