diff --git a/src/qdoc/cppcodeparser.cpp b/src/qdoc/cppcodeparser.cpp
index c1295c3a706910f0b8b5a36d90b38bfc9370b16d..61fb9b7d778c9c3191cdacf2c11ad3c1d862eeb4 100644
--- a/src/qdoc/cppcodeparser.cpp
+++ b/src/qdoc/cppcodeparser.cpp
@@ -54,6 +54,8 @@ static bool inMacroCommand_ = false;
 static bool parsingHeaderFile_ = false;
 QStringList CppCodeParser::exampleFiles;
 QStringList CppCodeParser::exampleDirs;
+QSet<QString> CppCodeParser::excludeDirs;
+QSet<QString> CppCodeParser::excludeFiles;
 CppCodeParser* CppCodeParser::cppParser_ = 0;
 
 /*!
@@ -78,7 +80,7 @@ CppCodeParser::~CppCodeParser()
 /*!
   The constructor initializes a map of special node types
   for identifying important nodes. And it initializes
-  some filters for identifying certain kinds of files.
+  some filters for identifying and excluding certain kinds of files.
  */
 void CppCodeParser::initializeParser(const Config &config)
 {
@@ -100,6 +102,10 @@ void CppCodeParser::initializeParser(const Config &config)
     QStringList exampleFilePatterns = config.getStringList(
                 CONFIG_EXAMPLES + Config::dot + CONFIG_FILEEXTENSIONS);
 
+    // Used for excluding dirs and files from the list of example files
+    excludeDirs = QSet<QString>::fromList(config.getCanonicalPathList(CONFIG_EXCLUDEDIRS));
+    excludeFiles = QSet<QString>::fromList(config.getCanonicalPathList(CONFIG_EXCLUDEFILES));
+
     if (!exampleFilePatterns.isEmpty())
         exampleNameFilter = exampleFilePatterns.join(' ');
     else
@@ -121,6 +127,8 @@ void CppCodeParser::initializeParser(const Config &config)
 void CppCodeParser::terminateParser()
 {
     nodeTypeMap.clear();
+    excludeDirs.clear();
+    excludeFiles.clear();
     CodeParser::terminateParser();
 }
 
@@ -2643,9 +2651,9 @@ void CppCodeParser::createExampleFileNodes(DocumentNode *dn)
         sizeOfBoringPartOfName = sizeOfBoringPartOfName - 2;
     fullPath.truncate(fullPath.lastIndexOf('/'));
 
-    QStringList exampleFiles = Config::getFilesHere(fullPath,exampleNameFilter);
+    QStringList exampleFiles = Config::getFilesHere(fullPath, exampleNameFilter, Location(), excludeDirs, excludeFiles);
     QString imagesPath = fullPath + "/images";
-    QStringList imageFiles = Config::getFilesHere(imagesPath,exampleImageFilter);
+    QStringList imageFiles = Config::getFilesHere(imagesPath, exampleImageFilter, Location(), excludeDirs, excludeFiles);
     if (!exampleFiles.isEmpty()) {
         // move main.cpp and to the end, if it exists
         QString mainCpp;
diff --git a/src/qdoc/cppcodeparser.h b/src/qdoc/cppcodeparser.h
index d3a5829e374df6035a9cbcb041dd394f7f568675..3910807abc3347463bd01311fa35ecb8adb7c155 100644
--- a/src/qdoc/cppcodeparser.h
+++ b/src/qdoc/cppcodeparser.h
@@ -179,6 +179,8 @@ protected:
 
     static QStringList exampleFiles;
     static QStringList exampleDirs;
+    static QSet<QString> excludeDirs;
+    static QSet<QString> excludeFiles;
     static CppCodeParser* cppParser_;
     QString exampleNameFilter;
     QString exampleImageFilter;
diff --git a/src/qdoc/main.cpp b/src/qdoc/main.cpp
index 500a085ccb22a466122efa4b8b2cd809fe9adcac..990207204460a1f294bcaf72d9fac4079a732776 100644
--- a/src/qdoc/main.cpp
+++ b/src/qdoc/main.cpp
@@ -365,31 +365,26 @@ static void processQdocconfFile(const QString &fileName)
                                                      + Config::dot
                                                      + CONFIG_LANDINGPAGE));
 
-    QSet<QString> excludedDirs;
-    QSet<QString> excludedFiles;
-    QStringList excludedDirsList;
-    QStringList excludedFilesList;
+    QSet<QString> excludedDirs = QSet<QString>::fromList(config.getCanonicalPathList(CONFIG_EXCLUDEDIRS));
+    QSet<QString> excludedFiles = QSet<QString>::fromList(config.getCanonicalPathList(CONFIG_EXCLUDEFILES));
+
+    Generator::debug("Adding doc/image dirs found in exampledirs to imagedirs");
+    QSet<QString> exampleImageDirs;
+    QStringList exampleImageList = config.getExampleImageFiles(excludedDirs, excludedFiles);
+    for (int i = 0; i < exampleImageList.size(); ++i) {
+        if (exampleImageList[i].contains("doc/images")) {
+            QString t = exampleImageList[i].left(exampleImageList[i].lastIndexOf("doc/images") + 10);
+            if (!exampleImageDirs.contains(t)) {
+                exampleImageDirs.insert(t);
+            }
+        }
+    }
+    Generator::augmentImageDirs(exampleImageDirs);
 
     if (!Generator::singleExec() || !Generator::generating()) {
         QStringList headerList;
         QStringList sourceList;
 
-        Generator::debug("Reading excludedirs");
-        excludedDirsList = config.getCanonicalPathList(CONFIG_EXCLUDEDIRS);
-        foreach (const QString &excludeDir, excludedDirsList) {
-            QString p = QDir::fromNativeSeparators(excludeDir);
-            QDir tmp(p);
-            if (tmp.exists())
-                excludedDirs.insert(p);
-        }
-
-        Generator::debug("Reading excludefiles");
-        excludedFilesList = config.getCanonicalPathList(CONFIG_EXCLUDEFILES);
-        foreach (const QString& excludeFile, excludedFilesList) {
-            QString p = QDir::fromNativeSeparators(excludeFile);
-            excludedFiles.insert(p);
-        }
-
         Generator::debug("Reading headerdirs");
         headerList = config.getAllFiles(CONFIG_HEADERS,CONFIG_HEADERDIRS,excludedDirs,excludedFiles);
         QMap<QString,QString> headers;
@@ -430,20 +425,6 @@ static void processQdocconfFile(const QString &fileName)
                 sourceFileNames.insert(t,t);
             }
         }
-
-        Generator::debug("Adding doc/image dirs found in exampledirs to imagedirs");
-        QSet<QString> exampleImageDirs;
-        QStringList exampleImageList = config.getExampleImageFiles(excludedDirs, excludedFiles);
-        for (int i=0; i<exampleImageList.size(); ++i) {
-            if (exampleImageList[i].contains("doc/images")) {
-                QString t = exampleImageList[i].left(exampleImageList[i].lastIndexOf("doc/images")+10);
-                if (!exampleImageDirs.contains(t)) {
-                    exampleImageDirs.insert(t);
-                }
-            }
-        }
-        Generator::augmentImageDirs(exampleImageDirs);
-
         /*
           Parse each header file in the set using the appropriate parser and add it
           to the big tree.
@@ -504,34 +485,6 @@ static void processQdocconfFile(const QString &fileName)
         qdb->resolveIssues();
     }
     else {
-        Generator::debug("Reading excludedirs");
-        excludedDirsList = config.getCanonicalPathList(CONFIG_EXCLUDEDIRS);
-        foreach (const QString &excludeDir, excludedDirsList) {
-            QString p = QDir::fromNativeSeparators(excludeDir);
-            QDir tmp(p);
-            if (tmp.exists())
-                excludedDirs.insert(p);
-        }
-
-        Generator::debug("Reading excludefiles");
-        excludedFilesList = config.getCanonicalPathList(CONFIG_EXCLUDEFILES);
-        foreach (const QString& excludeFile, excludedFilesList) {
-            QString p = QDir::fromNativeSeparators(excludeFile);
-            excludedFiles.insert(p);
-        }
-
-        Generator::debug("Adding doc/image dirs found in exampledirs to imagedirs");
-        QSet<QString> exampleImageDirs;
-        QStringList exampleImageList = config.getExampleImageFiles(excludedDirs, excludedFiles);
-        for (int i=0; i<exampleImageList.size(); ++i) {
-            if (exampleImageList[i].contains("doc/images")) {
-                QString t = exampleImageList[i].left(exampleImageList[i].lastIndexOf("doc/images")+10);
-                if (!exampleImageDirs.contains(t)) {
-                    exampleImageDirs.insert(t);
-                }
-            }
-        }
-        Generator::augmentImageDirs(exampleImageDirs);
         qdb->resolveStuff();
     }