diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp
index 7935452be576cdc01e2e69c0e43be90beaf71caf..bdc0749063390adeb30da85b2520729ea735ee89 100644
--- a/src/libs/qmljs/qmljsbind.cpp
+++ b/src/libs/qmljs/qmljsbind.cpp
@@ -30,6 +30,7 @@
 #include "parser/qmljsast_p.h"
 #include "qmljsbind.h"
 #include "qmljslink.h"
+#include "qmljscheck.h"
 #include "qmljsmetatypesystem.h"
 
 #include <QtCore/QDir>
@@ -126,7 +127,8 @@ class ProcessSourceElements: protected AST::Visitor
 
 public:
     ProcessSourceElements(Interpreter::Engine *interp)
-        : _interp(interp)
+        : _interp(interp),
+          typeOfExpression(interp)
     {
     }
 
@@ -149,11 +151,19 @@ protected:
 
     virtual bool visit(VariableDeclaration *ast)
     {
-        if (ast->name)
-            _interp->globalObject()->setProperty(ast->name->asString(), _interp->undefinedValue());
+        if (ast->name) {
+            const Value *value = _interp->undefinedValue();
+
+            if (ast->expression)
+                value = typeOfExpression(ast->expression, _interp->globalObject());
+
+            _interp->globalObject()->setProperty(ast->name->asString(), value);
+        }
 
         return false;
     }
+
+    Check typeOfExpression;
 };
 
 } // end of anonymous namespace
diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp
index 877959b967ae7e74e49c4b7d6e8739d858208559..1dbd12a9076562813b10ab8abb16bbffab472cbe 100644
--- a/src/libs/qmljs/qmljscheck.cpp
+++ b/src/libs/qmljs/qmljscheck.cpp
@@ -286,13 +286,19 @@ bool Check::visit(AST::FieldMemberExpression *ast)
     return false;
 }
 
-bool Check::visit(AST::NewMemberExpression *)
+bool Check::visit(AST::NewMemberExpression *ast)
 {
+    if (const FunctionValue *ctor = value_cast<const FunctionValue *>(check(ast->base))) {
+        _result = ctor->construct();
+    }
     return false;
 }
 
-bool Check::visit(AST::NewExpression *)
+bool Check::visit(AST::NewExpression *ast)
 {
+    if (const FunctionValue *ctor = value_cast<const FunctionValue *>(check(ast->expression))) {
+        _result = ctor->construct();
+    }
     return false;
 }