if using @extends then set the prototype of that class to the exteds,
copy over the functions as Function properties
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/TypeInferencerVisitor.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/TypeInferencerVisitor.java
index 119c1d9..14ee220 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/TypeInferencerVisitor.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/TypeInferencerVisitor.java
@@ -120,6 +120,7 @@
 import org.eclipse.dltk.javascript.typeinfo.IRClassType;
 import org.eclipse.dltk.javascript.typeinfo.IRConstructor;
 import org.eclipse.dltk.javascript.typeinfo.IRFunctionType;
+import org.eclipse.dltk.javascript.typeinfo.IRLocalType;
 import org.eclipse.dltk.javascript.typeinfo.IRMapType;
 import org.eclipse.dltk.javascript.typeinfo.IRMethod;
 import org.eclipse.dltk.javascript.typeinfo.IRRecordMember;
@@ -843,8 +844,22 @@
 			thisValue.setDeclaredType(this.context.contextualize(method
 					.getThisType()));
 		} else if (method.getExtendsType() != null) {
-			thisValue.setDeclaredType(this.context.contextualize(method
-					.getExtendsType()));
+			IRType thisType = this.context.contextualize(method
+					.getExtendsType());
+			thisValue.setDeclaredType(thisType);
+			if (thisType instanceof IRLocalType) {
+				IValueReference prototype = result.createChild("prototype");
+				prototype.setDeclaredType(context.getType(ITypeNames.OBJECT)
+						.toRType(context));
+				Set<String> directChildren = ((IRLocalType) thisType)
+						.getDirectChildren();
+				for (String child : directChildren) {
+					prototype.createChild(child).setDeclaredType(
+							context.getType(ITypeNames.FUNCTION).toRType(
+									context));
+				}
+			}
+
 		}
 		final IValueCollection function = new FunctionValueCollection(
 				peekContext(), method.getName(), thisValue,
diff --git a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/contentassist/CodeCompletion.java b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/contentassist/CodeCompletion.java
index 3cca152..29bfc1e 100644
--- a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/contentassist/CodeCompletion.java
+++ b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/contentassist/CodeCompletion.java
@@ -915,4 +915,38 @@
 		assertEquals(1, results.size());
 		assertEquals(CompletionProposal.FIELD_REF, results.get(0).getKind());
 	}
+
+	public void testPrototypeWithExtends() {
+		final StringList code = new StringList();
+		code.add("/**");
+		code.add(" * @constructor");
+		code.add(" */");
+		code.add("function MyConstructor() {");
+		code.add("	this.mypublicfunction = function() {");
+		code.add("	}");
+		code.add("}");
+		code.add("/**");
+		code.add(" * @constructor");
+		code.add(" * @extends {MyConstructor}");
+		code.add(" */");
+		code.add("function MySubConstructor() {");
+		code.add("	this.mypublicfunction = function() {");
+		code.add("		MySubConstructor.prototype.");
+		code.add("	}");
+		code.add("}");
+		final IModuleSource module = new TestModule(code.toString());
+		final List<CompletionProposal> results = new ArrayList<CompletionProposal>();
+		final ICompletionEngine completionEngine = createEngine(results,
+				JSCompletionEngine.OPTION_KEYWORDS);
+		completionEngine.complete(module, lastPositionInFile(".", module), 0);
+		assertEquals(8, results.size());
+		boolean found = false;
+		for (CompletionProposal completionProposal : results) {
+			if (completionProposal.getName().equals("mypublicfunction")) {
+				found = true;
+				break;
+			}
+		}
+		assertEquals(true, found);
+	}
 }