diff --git a/src/libs/utils/codegeneration.cpp b/src/libs/utils/codegeneration.cpp
index aca19b91ccd868c37436671a8e5f2277c95a17d7..23e8df36b48054ce7d301f053cb990ed481b648d 100644
--- a/src/libs/utils/codegeneration.cpp
+++ b/src/libs/utils/codegeneration.cpp
@@ -58,10 +58,18 @@ QTCREATOR_UTILS_EXPORT QString fileNameToCppIdentifier(const QString &s)
 
 QTCREATOR_UTILS_EXPORT QString headerGuard(const QString &file)
 {
+    return headerGuard(file, QStringList());
+}
+
+QTCREATOR_UTILS_EXPORT QString headerGuard(const QString &file, const QStringList &namespaceList)
+{
+    const QChar underscore = QLatin1Char('_');
+    QString rc;
+    for (int i = 0; i < namespaceList.count(); i++)
+        rc += namespaceList.at(i).toUpper() + underscore;
+
     const QFileInfo fi(file);
-    QString rc = fileNameToCppIdentifier(fi.completeBaseName()).toUpper();
-    rc += QLatin1Char('_');
-    rc += fileNameToCppIdentifier(fi.suffix()).toUpper();
+    rc += fileNameToCppIdentifier(fi.fileName()).toUpper();
     return rc;
 }
 
diff --git a/src/libs/utils/codegeneration.h b/src/libs/utils/codegeneration.h
index 19ecd4af3140e89fc16f5638749cd6f8454d314a..8638d8b7bd91619e4e407b06408f75b4e0560637 100644
--- a/src/libs/utils/codegeneration.h
+++ b/src/libs/utils/codegeneration.h
@@ -49,6 +49,7 @@ namespace Utils {
 QTCREATOR_UTILS_EXPORT QString fileNameToCppIdentifier(const QString &s);
 
 QTCREATOR_UTILS_EXPORT QString headerGuard(const QString &file);
+QTCREATOR_UTILS_EXPORT QString headerGuard(const QString &file, const QStringList &namespaceList);
 
 QTCREATOR_UTILS_EXPORT
 void writeIncludeFileDirective(const QString &file,
diff --git a/src/plugins/cppeditor/cppclasswizard.cpp b/src/plugins/cppeditor/cppclasswizard.cpp
index b86a403fa18afcd48633627fb999461861ec3831..1b22a139563effc9c8946ca759862b9d2a05251b 100644
--- a/src/plugins/cppeditor/cppclasswizard.cpp
+++ b/src/plugins/cppeditor/cppclasswizard.cpp
@@ -225,7 +225,7 @@ bool CppClassWizard::generateHeaderAndSource(const CppClassWizardParameters &par
                                                              params.className);
 
     const QString unqualifiedClassName = namespaceList.takeLast();
-    const QString guard = Utils::headerGuard(params.headerFile);
+    const QString guard = Utils::headerGuard(params.headerFile, namespaceList);
 
     // == Header file ==
     QTextStream headerStr(header);
diff --git a/src/plugins/designer/qtdesignerformclasscodegenerator.cpp b/src/plugins/designer/qtdesignerformclasscodegenerator.cpp
index e2d1e3abced30c32d5f672122ae1e0bbdebf69c6..8571735ad6ad30a07127385bc661e05b4ee2abe2 100644
--- a/src/plugins/designer/qtdesignerformclasscodegenerator.cpp
+++ b/src/plugins/designer/qtdesignerformclasscodegenerator.cpp
@@ -149,7 +149,7 @@ bool QtDesignerFormClassCodeGenerator::generateCpp(const FormClassWizardParamete
     const QString sourceLicense =
             CppTools::AbstractEditorSupport::licenseTemplate(parameters.sourceFile, parameters.className);
     // Include guards
-    const QString guard = Utils::headerGuard(parameters.headerFile);
+    const QString guard = Utils::headerGuard(parameters.headerFile, namespaceList);
 
     QString uiInclude = QLatin1String("ui_");
     uiInclude += QFileInfo(parameters.uiFile).completeBaseName();
diff --git a/src/plugins/qt4projectmanager/wizards/libraryparameters.cpp b/src/plugins/qt4projectmanager/wizards/libraryparameters.cpp
index 496f2f5499646b5210ca23ab0358b261ce39c676..3cffced9a69454ac0cfb4ead7184df626ade2aff 100644
--- a/src/plugins/qt4projectmanager/wizards/libraryparameters.cpp
+++ b/src/plugins/qt4projectmanager/wizards/libraryparameters.cpp
@@ -74,8 +74,15 @@ void LibraryParameters::generateCode(QtProjectParameters:: Type t,
 
     const QString indent = QString(indentation, QLatin1Char(' '));
 
+    // Do we have namespaces?
+    QStringList namespaceList = className.split(QLatin1String("::"));
+    if (namespaceList.empty()) // Paranoia!
+        return;
+
+    const QString unqualifiedClassName = namespaceList.takeLast();
+
     // 1) Header
-    const QString guard = Utils::headerGuard(headerFileName);
+    const QString guard = Utils::headerGuard(headerFileName, namespaceList);
     headerStr << "#ifndef " << guard
         << "\n#define " <<  guard << '\n' << '\n';
 
@@ -94,14 +101,6 @@ void LibraryParameters::generateCode(QtProjectParameters:: Type t,
         headerStr  << '\n';
     }
 
-    // Do we have namespaces?
-    QStringList namespaceList = className.split(QLatin1String("::"));
-    if (namespaceList.empty()) // Paranoia!
-        return;
-
-    const QString unqualifiedClassName = namespaceList.back();
-    namespaceList.pop_back();
-
     const QString namespaceIndent = Utils::writeOpeningNameSpaces(namespaceList, indent, headerStr);
 
     // Class declaraction