diff --git a/src/libs/utils/codegeneration.cpp b/src/libs/utils/codegeneration.cpp
index 411ee33280eb51dca55c61adfb95d8eea2ee2c64..14448ea4b750f41c0ddbf1d9967391eb9e1cc907 100644
--- a/src/libs/utils/codegeneration.cpp
+++ b/src/libs/utils/codegeneration.cpp
@@ -36,10 +36,26 @@
 namespace Core {
 namespace Utils {
 
+static QString toAlphaNum(const QString &s)
+{
+    QString rc;
+    const int len = s.size();
+    const QChar underscore =  QLatin1Char('_');
+
+    for (int i = 0; i < len; i++) {
+        const QChar c = s.at(i);
+        if (c == underscore || c.isLetterOrNumber())
+            rc += c;
+    }
+    return rc;
+}
+
 QWORKBENCH_UTILS_EXPORT QString headerGuard(const QString &file)
 {
-    QString rc = QFileInfo(file).baseName().toUpper();
-    rc += QLatin1String("_H");
+    const QFileInfo fi(file);
+    QString rc = toAlphaNum(fi.completeBaseName()).toUpper();
+    rc += QLatin1Char('_');
+    rc += toAlphaNum(fi.suffix()).toUpper();
     return rc;
 }
 
diff --git a/src/plugins/cppeditor/cppclasswizard.cpp b/src/plugins/cppeditor/cppclasswizard.cpp
index d57b9555dcb7ace52d16ca7a0b2b730ac6c9ad9e..a5f21f859bfdca35fab958f62114a18e8c490fe1 100644
--- a/src/plugins/cppeditor/cppclasswizard.cpp
+++ b/src/plugins/cppeditor/cppclasswizard.cpp
@@ -183,7 +183,7 @@ bool CppClassWizard::generateHeaderAndSource(const CppClassWizardParameters &par
         return false;
 
     const QString unqualifiedClassName = namespaceList.takeLast();
-    const QString guard = Core::Utils::headerGuard(unqualifiedClassName);
+    const QString guard = Core::Utils::headerGuard(params.headerFile);
 
     // == Header file ==
     QTextStream headerStr(header);
diff --git a/src/plugins/cppeditor/cppfilewizard.cpp b/src/plugins/cppeditor/cppfilewizard.cpp
index a7242739e340b9f521e6672f9dcb86bbddeee5ee..2683e2f6c23613c5a1f460284806fbe5eb1ccb6c 100644
--- a/src/plugins/cppeditor/cppfilewizard.cpp
+++ b/src/plugins/cppeditor/cppfilewizard.cpp
@@ -31,6 +31,8 @@
 #include "cppeditor.h"
 #include "cppeditorconstants.h"
 
+#include <utils/codegeneration.h>
+
 #include <QtCore/QTextStream>
 #include <QtCore/QFileInfo>
 #include <QtCore/QDebug>
@@ -48,20 +50,6 @@ CppFileWizard::CppFileWizard(const BaseFileWizardParameters &parameters,
 {
 }
 
-QString CppFileWizard::toAlphaNum(const QString &s)
-{
-    QString rc;
-    const int len = s.size();
-    const QChar underscore =  QLatin1Char('_');
-
-    for (int i = 0; i < len; i++) {
-        const QChar c = s.at(i);
-        if (c == underscore || c.isLetterOrNumber())
-            rc += c;
-    }
-    return rc;
-}
-
 Core::GeneratedFiles CppFileWizard::generateFilesFromPath(const QString &path,
                                                           const QString &name,
                                                           QString * /*errorMessage*/) const
@@ -69,11 +57,11 @@ Core::GeneratedFiles CppFileWizard::generateFilesFromPath(const QString &path,
 {
     const QString mimeType = m_type == Source ? QLatin1String(Constants::CPP_SOURCE_MIMETYPE) : QLatin1String(Constants::CPP_HEADER_MIMETYPE);
     const QString fileName = Core::BaseFileWizard::buildFileName(path, name, preferredSuffix(mimeType));
+
     Core::GeneratedFile file(fileName);
     file.setEditorKind(QLatin1String(Constants::C_CPPEDITOR));
-    const QString cleanName = toAlphaNum(QFileInfo(name).baseName());
-
     file.setContents(fileContents(m_type, fileName));
+
     return Core::GeneratedFiles() << file;
 }
 
@@ -84,8 +72,7 @@ QString CppFileWizard::fileContents(FileType type, const QString &fileName) cons
     QTextStream str(&contents);
     switch (type) {
     case Header: {
-            QString guard = toAlphaNum(baseName).toUpper();
-            guard += QLatin1String("_H");
+            const QString guard = Core::Utils::headerGuard(fileName);
             str << QLatin1String("#ifndef ") << guard
                 << QLatin1String("\n#define ") <<  guard <<  QLatin1String("\n\n#endif // ")
                 << guard << QLatin1String("\n");
diff --git a/src/plugins/cppeditor/cppfilewizard.h b/src/plugins/cppeditor/cppfilewizard.h
index 7ddf603919fd00716e1f70d1ac413d06637fbe1f..c338973a8d1d77fb8165acad4ecf121d3628170b 100644
--- a/src/plugins/cppeditor/cppfilewizard.h
+++ b/src/plugins/cppeditor/cppfilewizard.h
@@ -49,7 +49,6 @@ public:
                   QObject *parent = 0);
 
 protected:
-    static QString toAlphaNum(const QString &s);
     QString fileContents(FileType type, const QString &baseName) const;
 
 protected:
diff --git a/src/plugins/designer/cpp/formclasswizardparameters.cpp b/src/plugins/designer/cpp/formclasswizardparameters.cpp
index a67d4727fb95b02f8418336afcc8412fba3c5185..2c2cde09cf3ad4ced2bc5a3b75808fee2a1ec23c 100644
--- a/src/plugins/designer/cpp/formclasswizardparameters.cpp
+++ b/src/plugins/designer/cpp/formclasswizardparameters.cpp
@@ -73,7 +73,7 @@ bool FormClassWizardParameters::generateCpp(QString *header, QString *source, in
     const QString unqualifiedClassName = namespaceList.takeLast();
 
     // Include guards
-    const QString guard = Core::Utils::headerGuard(unqualifiedClassName);
+    const QString guard = Core::Utils::headerGuard(headerFile);
 
     QString uiInclude = QLatin1String("ui_");
     uiInclude += QFileInfo(uiFile).baseName();