diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp
old mode 100644
new mode 100755
index 07f0ce46260cc94124d9101241d32e6c661eae30..92b7f2a4cdb9b384f386193fc03fa98bec5e72b5
--- a/src/plugins/texteditor/basetextdocument.cpp
+++ b/src/plugins/texteditor/basetextdocument.cpp
@@ -47,6 +47,8 @@
 
 using namespace TextEditor;
 
+extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
+
 #if defined (Q_OS_WIN)
 # define NATIVE_LINE_TERMINATOR CRLFLineTerminator
 #else
@@ -140,8 +142,21 @@ bool BaseTextDocument::isReadOnly() const
         return true;
     if (m_fileName.isEmpty()) //have no corresponding file, so editing is ok
         return false;
+
     const QFileInfo fi(m_fileName);
-    return !fi.isWritable();
+
+#ifdef Q_OS_WIN32
+    // be careful when getting info from files on network drives
+    int old_ntfs_permission_lookup = qt_ntfs_permission_lookup;
+    qt_ntfs_permission_lookup = 1;
+#endif
+
+    const int ro = !fi.isWritable();
+
+#ifdef Q_OS_WIN32
+    qt_ntfs_permission_lookup = old_ntfs_permission_lookup;
+#endif
+    return ro;
 }
 
 bool BaseTextDocument::isModified() const
@@ -163,13 +178,9 @@ bool BaseTextDocument::open(const QString &fileName)
         if (!fi.isReadable())
             return false;
 
-        if (!fi.isWritable()) {
-            if (!file.open(QIODevice::ReadOnly))
-                return false;
-        } else {
-            if (!file.open(QIODevice::ReadWrite))
-                return false;
-        }
+        if (!file.open(QIODevice::ReadWrite) && !file.open(QIODevice::ReadOnly))
+            return false;
+
         title = fi.fileName();
 
         QByteArray buf = file.readAll();