always make a copy reference of the prototype with Object.create
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 e70a726..69e98f2 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
@@ -594,12 +594,10 @@
 				}
 			} else if (method.getName().equals("create")
 					&& RTypes.OBJECT.getDeclaration().equals(
-							method.getDeclaringType())) {
-				if (arguments.length == 1)
-					return arguments[0];
-				else if (arguments.length == 2) {
-					AnonymousValue value = new AnonymousValue();
-					value.addValue(arguments[0], false);
+							method.getDeclaringType()) && arguments.length > 0) {
+				AnonymousValue value = new AnonymousValue();
+				value.addValue(arguments[0], false);
+				if (arguments.length == 2) {
 					JSTypeSet types = arguments[1].getTypes();
 					for (IRType type : types) {
 						if (type instanceof IRRecordType) {
@@ -622,7 +620,6 @@
 									.recordType(newMembers)), true);
 						}
 					}
-
 					return value;
 				}
 			}
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 1c43b4a..cbac402 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
@@ -3880,4 +3880,39 @@
 		assertEquals(JavaScriptProblems.DEPRECATED_FUNCTION, problems.get(2)
 				.getID());
 	}
+	
+	public void testObjectCreateWith2SubclassesUsingtheBase() {
+		final StringList code = new StringList();
+		code.add("function AbstractMessage(format, parameters, throwable) {");
+		code.add("	this.throwable = throwable");
+		code.add("}");
+		code.add("/**");
+		code.add(" * @return {Error}");
+		code.add(" */");
+		code.add(" AbstractMessage.prototype.getThrowable = function() {");
+		code.add("	 return null;");
+		code.add("}");
+		code.add("function ObjectMessage(object) {}");
+		code.add("ObjectMessage.prototype = Object.create(AbstractMessage.prototype)");
+		code.add("ObjectMessage.prototype.constructor = ObjectMessage");
+		code.add("ObjectMessage.prototype.getThrowable = function() {");
+		code.add("	return (this.format instanceof Error) ? this.format : null");
+		code.add("}");
+		code.add("function LogEvent(message) {");
+		code.add("	/**");
+		code.add("	 * @type {AbstractMessage}");
+		code.add("	 */");
+		code.add("	this.message = message");
+		code.add("}");
+		code.add("function OutputAppender() {}");
+		code.add("/**");
+		code.add(" * @param {LogEvent} logEvent");
+		code.add(" */");
+		code.add("OutputAppender.prototype.append = function(logEvent){");
+		code.add("	var ex2 = logEvent.message.getThrowable()");
+		code.add("	ex2.stack");
+		code.add("}");
+		final List<IProblem> problems = validate(code.toString());
+		assertEquals(problems.toString(), 0, problems.size());
+	}
 }