diff --git a/src/libs/utils/classnamevalidatinglineedit.cpp b/src/libs/utils/classnamevalidatinglineedit.cpp
index 49aeff34dedbd9c5521586c00fec3b5a7329a46a..5f130f4533a6245517f405452b1032b2bda6cabc 100644
--- a/src/libs/utils/classnamevalidatinglineedit.cpp
+++ b/src/libs/utils/classnamevalidatinglineedit.cpp
@@ -46,8 +46,8 @@ namespace Utils {
 struct ClassNameValidatingLineEditPrivate {
     ClassNameValidatingLineEditPrivate();
 
-    const QRegExp m_nameRegexp;
-    const QString m_namespaceDelimiter;
+    QRegExp m_nameRegexp;
+    QString m_namespaceDelimiter;
     bool m_namespacesEnabled;
     bool m_lowerCaseFileName;
     bool m_forceFirstCapitalLetter;
@@ -67,6 +67,7 @@ ClassNameValidatingLineEdit::ClassNameValidatingLineEdit(QWidget *parent) :
     Utils::BaseValidatingLineEdit(parent),
     d(new ClassNameValidatingLineEditPrivate)
 {
+    updateRegExp();
 }
 
 ClassNameValidatingLineEdit::~ClassNameValidatingLineEdit()
@@ -84,11 +85,28 @@ void ClassNameValidatingLineEdit::setNamespacesEnabled(bool b)
     d->m_namespacesEnabled = b;
 }
 
+/**
+ * @return Language-specific namespace delimiter, e.g. '::' or '.'
+ */
+QString ClassNameValidatingLineEdit::namespaceDelimiter()
+{
+    return d->m_namespaceDelimiter;
+}
+
+/**
+ * @brief Sets language-specific namespace delimiter, e.g. '::' or '.'
+ * Do not use identifier characters in delimiter
+ */
+void ClassNameValidatingLineEdit::setNamespaceDelimiter(const QString &delimiter)
+{
+    d->m_namespaceDelimiter = delimiter;
+}
+
 bool ClassNameValidatingLineEdit::validate(const QString &value, QString *errorMessage) const
 {
-    static QRegExp nameRegexp(QLatin1String("[a-zA-Z_][a-zA-Z0-9_]*(::[a-zA-Z_][a-zA-Z0-9_]*)*"));
-    QTC_ASSERT(nameRegexp.isValid(), return false);
-    if (!d->m_namespacesEnabled && value.contains(QLatin1Char(':'))) {
+    QTC_ASSERT(d->m_nameRegexp.isValid(), return false);
+
+    if (!d->m_namespacesEnabled && value.contains(d->m_namespaceDelimiter)) {
         if (errorMessage)
             *errorMessage = tr("The class name must not contain namespace delimiters.");
         return false;
@@ -96,7 +114,7 @@ bool ClassNameValidatingLineEdit::validate(const QString &value, QString *errorM
         if (errorMessage)
             *errorMessage = tr("Please enter a class name.");
         return false;
-    } else if (!nameRegexp.exactMatch(value)) {
+    } else if (!d->m_nameRegexp.exactMatch(value)) {
         if (errorMessage)
             *errorMessage = tr("The class name contains invalid characters.");
         return false;
@@ -131,6 +149,13 @@ QString ClassNameValidatingLineEdit::fixInputString(const QString &string)
     return fixedString;
 }
 
+void ClassNameValidatingLineEdit::updateRegExp() const
+{
+    QString identifierPatter(QLatin1String("[a-zA-Z_][a-zA-Z0-9_]*"));
+    QString pattern(QLatin1String("%1(%2%1)*"));
+    d->m_nameRegexp.setPattern(pattern.arg(identifierPatter).arg(d->m_namespaceDelimiter));
+}
+
 QString ClassNameValidatingLineEdit::createClassName(const QString &name)
 {
     // Remove spaces and convert the adjacent characters to uppercase
diff --git a/src/libs/utils/classnamevalidatinglineedit.h b/src/libs/utils/classnamevalidatinglineedit.h
index 05af35170fe2d4e2d1c3b9e628214dcf7e776bb1..abf1a52523d6b845d9fa7e46b871bcae641d1544 100644
--- a/src/libs/utils/classnamevalidatinglineedit.h
+++ b/src/libs/utils/classnamevalidatinglineedit.h
@@ -51,6 +51,9 @@ public:
     bool namespacesEnabled() const;
     void setNamespacesEnabled(bool b);
 
+    QString namespaceDelimiter();
+    void setNamespaceDelimiter(const QString &delimiter);
+
     bool lowerCaseFileName() const;
     void setLowerCaseFileName(bool v);
 
@@ -71,6 +74,8 @@ protected:
     virtual QString fixInputString(const QString &string);
 
 private:
+    void updateRegExp() const;
+
     ClassNameValidatingLineEditPrivate *d;
 };