diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp
index 5076ef912162b12194db7fcb7f8d935b1b0cc25f..0c7ab0e9e008ec675e1d60012ca148f085aafffb 100644
--- a/src/libs/qmljs/qmljsbind.cpp
+++ b/src/libs/qmljs/qmljsbind.cpp
@@ -31,6 +31,7 @@
 #include "qmljsbind.h"
 #include "qmljslink.h"
 #include "qmljscheck.h"
+#include "qmljsdocument.h"
 #include "qmljsmetatypesystem.h"
 
 #include <QtCore/QDir>
diff --git a/src/libs/qmljs/qmljsbind.h b/src/libs/qmljs/qmljsbind.h
index bb64a8685bc886634d15383800ed66eda1d6c5c5..9d8e67b5dfb1fc82b9dc20a337ec94b957676aae 100644
--- a/src/libs/qmljs/qmljsbind.h
+++ b/src/libs/qmljs/qmljsbind.h
@@ -32,7 +32,6 @@
 
 #include <qmljs/parser/qmljsastvisitor_p.h>
 #include <qmljs/qmljsinterpreter.h>
-#include <qmljs/qmljsdocument.h>
 
 #include <QtCore/QHash>
 #include <QtCore/QStringList>
@@ -42,9 +41,12 @@ namespace QmlJS {
 
 class LinkImports;
 class Link;
+class Document;
 
 class QMLJS_EXPORT Bind: protected AST::Visitor
 {
+    Q_DISABLE_COPY(Bind)
+
 public:
     Bind(Document *doc);
     virtual ~Bind();
@@ -96,7 +98,6 @@ private:
     friend class LinkImports;
     friend class Link;
 };
-typedef QSharedPointer<Bind> BindPtr;
 
 } // end of namespace Qml
 
diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp
index a215198fe98e5a8578d8674a99c5665325cb30c6..fc3fb9ec88343287c7f675e0303b4703733aa86f 100644
--- a/src/libs/qmljs/qmljsdocument.cpp
+++ b/src/libs/qmljs/qmljsdocument.cpp
@@ -36,7 +36,6 @@
 #include <qmljs/parser/qmljsastfwd_p.h>
 #include <QtCore/QDir>
 
-using namespace QmlJS;
 using namespace QmlJS;
 using namespace QmlJS::AST;
 
@@ -44,6 +43,7 @@ Document::Document(const QString &fileName)
     : _engine(0)
     , _pool(0)
     , _ast(0)
+    , _bind(0)
     , _documentRevision(0)
     , _parsedCorrectly(false)
     , _fileName(fileName)
@@ -65,6 +65,9 @@ Document::Document(const QString &fileName)
 
 Document::~Document()
 {
+    if (_bind)
+        delete _bind;
+
     if (_engine)
         delete _engine;
 
@@ -131,6 +134,7 @@ bool Document::parseQml()
     Q_ASSERT(! _engine);
     Q_ASSERT(! _pool);
     Q_ASSERT(! _ast);
+    Q_ASSERT(! _bind);
 
     _engine = new Engine();
     _pool = new NodePool(_fileName, _engine);
@@ -144,7 +148,7 @@ bool Document::parseQml()
     _ast = parser.ast();
     _diagnosticMessages = parser.diagnosticMessages();
 
-    _bind = BindPtr(new Bind(this));
+    _bind = new Bind(this);
 
     return _parsedCorrectly;
 }
@@ -154,6 +158,7 @@ bool Document::parseJavaScript()
     Q_ASSERT(! _engine);
     Q_ASSERT(! _pool);
     Q_ASSERT(! _ast);
+    Q_ASSERT(! _bind);
 
     _engine = new Engine();
     _pool = new NodePool(_fileName, _engine);
@@ -167,7 +172,7 @@ bool Document::parseJavaScript()
     _ast = cast<Program*>(parser.rootNode());
     _diagnosticMessages = parser.diagnosticMessages();
 
-    _bind = BindPtr(new Bind(this));
+    _bind = new Bind(this);
 
     return _parsedCorrectly;
 }
@@ -195,7 +200,7 @@ bool Document::parseExpression()
     return _parsedCorrectly;
 }
 
-BindPtr Document::bind() const
+Bind *Document::bind() const
 {
     return _bind;
 }
@@ -214,11 +219,11 @@ void Snapshot::insert(const Document::Ptr &document)
         _documents.insert(document->fileName(), document);
 }
 
-Document::PtrList Snapshot::importedDocuments(const Document::Ptr &doc, const QString &importPath) const
+QList<Document::Ptr> Snapshot::importedDocuments(const Document::Ptr &doc, const QString &importPath) const
 {
     // ### TODO: maybe we should add all imported documents in the parse Document::parse() method, regardless of whether they're in the path or not.
 
-    Document::PtrList result;
+    QList<Document::Ptr> result;
 
     QString docPath = doc->path();
     docPath += QLatin1Char('/');
diff --git a/src/libs/qmljs/qmljsdocument.h b/src/libs/qmljs/qmljsdocument.h
index bef0fd986e47b7be1726d947f49aa617b7533700..5cc07ccf6bbf9c7988b1f7093e79e39f4545e4e1 100644
--- a/src/libs/qmljs/qmljsdocument.h
+++ b/src/libs/qmljs/qmljsdocument.h
@@ -41,13 +41,11 @@
 namespace QmlJS {
 
 class Bind;
-typedef QSharedPointer<Bind> BindPtr;
 
 class QMLJS_EXPORT Document
 {
 public:
     typedef QSharedPointer<Document> Ptr;
-    typedef QList<Document::Ptr> PtrList;
 
 protected:
     Document(const QString &fileName);
@@ -57,12 +55,12 @@ public:
 
     static Document::Ptr create(const QString &fileName);
 
-    QmlJS::AST::UiProgram *qmlProgram() const;
-    QmlJS::AST::Program *jsProgram() const;
-    QmlJS::AST::ExpressionNode *expression() const;
-    QmlJS::AST::Node *ast() const;
+    AST::UiProgram *qmlProgram() const;
+    AST::Program *jsProgram() const;
+    AST::ExpressionNode *expression() const;
+    AST::Node *ast() const;
 
-    QList<QmlJS::DiagnosticMessage> diagnosticMessages() const;
+    QList<DiagnosticMessage> diagnosticMessages() const;
 
     QString source() const;
     void setSource(const QString &source);
@@ -74,7 +72,7 @@ public:
     bool isParsedCorrectly() const
     { return _parsedCorrectly; }
 
-    BindPtr bind() const;
+    Bind *bind() const;
 
     int documentRevision() const;
     void setDocumentRevision(int documentRevision);
@@ -85,8 +83,9 @@ public:
 
 private:
     QmlJS::Engine *_engine;
-    QmlJS::NodePool *_pool;
-    QmlJS::AST::Node *_ast;
+    NodePool *_pool;
+    AST::Node *_ast;
+    Bind *_bind;
     int _documentRevision;
     bool _parsedCorrectly;
     QList<QmlJS::DiagnosticMessage> _diagnosticMessages;
@@ -94,7 +93,6 @@ private:
     QString _path;
     QString _componentName;
     QString _source;
-    BindPtr _bind;
 };
 
 class QMLJS_EXPORT Snapshot
@@ -117,7 +115,7 @@ public:
     Document::Ptr document(const QString &fileName) const
     { return _documents.value(fileName); }
 
-    Document::PtrList importedDocuments(const Document::Ptr &doc, const QString &importPath) const;
+    QList<Document::Ptr> importedDocuments(const Document::Ptr &doc, const QString &importPath) const;
     QMap<QString, Document::Ptr> componentsDefinedByImportedDocuments(const Document::Ptr &doc, const QString &importPath) const;
 };
 
diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp
index 2b786b6d12d71d834a054618dcfbdb83bd36c607..666c8a56ca337564d4fd92c059b82a543b351c63 100644
--- a/src/libs/qmljs/qmljslink.cpp
+++ b/src/libs/qmljs/qmljslink.cpp
@@ -45,7 +45,7 @@ void Link::scopeChainAt(Document::Ptr doc, Node *currentObject)
     if (doc->qmlProgram() != 0)
         _context.setLookupMode(Context::QmlLookup);
 
-    BindPtr bind = doc->bind();
+    Bind *bind = doc->bind();
 
     // Build the scope chain.
 
diff --git a/src/libs/qmljs/qmljslink.h b/src/libs/qmljs/qmljslink.h
index c588c37b16b163cea3363928502705ccf092c0c2..0a481598c24382761b93acb8691bab872e2a7c26 100644
--- a/src/libs/qmljs/qmljslink.h
+++ b/src/libs/qmljs/qmljslink.h
@@ -40,7 +40,7 @@ private:
                     AST::UiImport *import, const QString &startPath);
     void importNonFile(Interpreter::ObjectValue *typeEnv, Document::Ptr doc,
                        AST::UiImport *import);
-    void importObject(BindPtr bind, const QString &name, Interpreter::ObjectValue *object, NameId* targetNamespace);    
+    void importObject(Bind *bind, const QString &name, Interpreter::ObjectValue *object, NameId *targetNamespace);
 
 private:
     Snapshot _snapshot;