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 949ffd6..4c2a4c2 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
@@ -467,6 +467,17 @@
 							}
 						}
 					}
+				} else {
+					// create a new object if prototype is directly set to record type value.
+					Object attribute = left
+							.getAttribute(IReferenceAttributes.ELEMENT);
+					if (attribute instanceof IRProperty
+							&& ((IRProperty) attribute).getName().equals(
+									IRLocalType.PROTOTYPE_PROPERTY)) {
+						left.getParent()
+								.createChild(IRLocalType.PROTOTYPE_PROPERTY)
+								.setValue(new AnonymousValue());
+					}
 				}
 			}
 			if (IValueReference.ARRAY_OP.equals(left.getName())
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/typeinfo/RLocalType.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/typeinfo/RLocalType.java
index c81c57e..c8dc5f1 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/typeinfo/RLocalType.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/typeinfo/RLocalType.java
@@ -11,6 +11,7 @@
  *******************************************************************************/
 package org.eclipse.dltk.javascript.typeinfo;
 
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -81,9 +82,9 @@
 			if (fromChild == null) {
 				IValueReference prototype = irType.functionValue
 						.getChild(PROTOTYPE_PROPERTY);
-				if (prototype.getDirectChildren().contains(name)) {
-					return prototype.getChild(name);
-				}
+				fromChild = prototype.getChild(name);
+				if (!fromChild.exists())
+					fromChild = null;
 			}
 			return fromChild;
 		}
@@ -106,6 +107,7 @@
 			IValueReference prototype = rLocalType.functionValue
 					.getChild(PROTOTYPE_PROPERTY);
 			children.addAll(prototype.getDirectChildren());
+			fillDeclaredLocalTypesChildren(children, prototype.getTypes(), set);
 			fillDeclaredLocalTypesChildren(children, value
 					.getDeclaredTypes(), set);
 		}
@@ -124,6 +126,12 @@
 						.getDirectChildren(IValue.NO_LOCAL_TYPES));
 				fillDeclaredLocalTypesChildren(children, ((RLocalType) irType)
 						.getValue().getDeclaredTypes(), set);
+			} else if (irType instanceof RRecordType && set.add(irType)) {
+				Collection<IRRecordMember> members = ((RRecordType) irType)
+						.getMembers();
+				for (IRRecordMember member : members) {
+					children.add(member.getName());
+				}
 			}
 		}
 	}
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 63030a4..296d5ff 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
@@ -987,4 +987,30 @@
 		}
 		assertEquals(3, found);
 	}
+	
+	public void testPrototypeWithRecordTypeConstruction() {
+		final StringList code = new StringList();
+		code.add("function D1() {}");
+		code.add("D1.prototype = {test: function(){}}");
+		code.add("D1.prototype.testDirectAssignment = function(){}");
+		code.add("var x = new D1()");
+		code.add("x.");
+		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);
+		int found = 0;
+		for (CompletionProposal completionProposal : results) {
+			if (completionProposal.getName().equals("test")) {
+				found++;
+			}
+			if (completionProposal.getName().equals("testDirectAssignment")) {
+				found++;
+			}
+		}
+		assertEquals(2, found);
+	}
+	
+
 }
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 329cd39..36babc0 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
@@ -3693,4 +3693,17 @@
 		final List<IProblem> problems = validate(code.toString());
 		assertEquals(problems.toString(), 0, problems.size());
 	}
+	
+	
+	public void testPrototypeWithRecordTypeConstruction() {
+		final StringList code = new StringList();
+		code.add("function D1() {}");
+		code.add("D1.prototype = {test: function(a){}}");
+		code.add("D1.prototype.testDirectAssignment = function(b){}");
+		code.add("var x = new D1()");
+		code.add("x.test(1)");
+		code.add("x.testDirectAssignment(2)");
+		final List<IProblem> problems = validate(code.toString());
+		assertEquals(problems.toString(), 0, problems.size());
+	}
 }
