diff --git a/src/libs/utils/qstringbuilder.h b/src/libs/utils/qstringbuilder.h
index cbe0d44353139cda10e61530f903632010dbd58a..d9a5d9132cfb7d79628fbe463cc7e8bea9a3fcaa 100644
--- a/src/libs/utils/qstringbuilder.h
+++ b/src/libs/utils/qstringbuilder.h
@@ -114,6 +114,22 @@ private:
     const QString *a;
 };
 
+
+template <>
+class QStringBuilder<char>
+{
+public:
+    QStringBuilder(char c_) : c(c_) {}
+
+    inline int size() const { return 1; }
+    inline void append(QChar *&out) const { *out++ = QLatin1Char(c); }
+
+private:
+    const char c;
+};
+
+
+
 template <class A, class B>
 class QStringBuilderPair
 {
@@ -134,6 +150,9 @@ operator%(const A &a, const B &b)
     return QStringBuilderPair<A, B> (a, b);
 }
 
+
+// QString related specializations
+
 template <class A>
 inline QStringBuilder< QStringBuilderPair<A, QStringBuilder<QString> > >
 operator%(const A &a, const QString &b)
@@ -148,10 +167,8 @@ operator%(const QString &a, const B &b)
     return QStringBuilderPair<QStringBuilder<QString>, B> (a, b);
 }
 
-
 inline QStringBuilder<
-    QStringBuilderPair<QStringBuilder<QString>,
-    QStringBuilder<QString> >
+    QStringBuilderPair<QStringBuilder<QString>, QStringBuilder<QString> >
 >
 operator%(const QString &a, const QString &b)
 {
@@ -159,4 +176,31 @@ operator%(const QString &a, const QString &b)
         QStringBuilder<QString> > (a, b);
 }
 
+// char related specializations
+
+template <class A>
+inline QStringBuilder< QStringBuilderPair<A, QStringBuilder<char> > >
+operator%(const A &a, char b)
+{
+    return QStringBuilderPair<A, QStringBuilder<char> > (a, b);
+}
+
+template <class B>
+inline QStringBuilder< QStringBuilderPair<QStringBuilder<char>, B> >
+operator%(char a, const B &b)
+{
+    return QStringBuilderPair<QStringBuilder<QString>, B> (a, b);
+}
+
+inline QStringBuilder<
+    QStringBuilderPair<QStringBuilder<QString>, QStringBuilder<char> >
+>
+operator%(const QString &a, char b)
+{
+    return QStringBuilderPair<
+               QStringBuilder<QString>, QStringBuilder<char>
+           > (a, b);
+}
+
+
 #endif // QSTRINGBUILDER_H
diff --git a/tests/benchmarks/qstringbuilder/main.cpp b/tests/benchmarks/qstringbuilder/main.cpp
index 9b2bc99a7cd0dd71ac1f3ed22f41293f5ca2f508..ba5cfe0a762e42aa674a9eaa3fe3decbffa980c8 100644
--- a/tests/benchmarks/qstringbuilder/main.cpp
+++ b/tests/benchmarks/qstringbuilder/main.cpp
@@ -16,69 +16,91 @@ public:
 
 private slots:
     // QStringBuilder based 
-    void builderbased_l1literal_l1literal();
-    void builderbased_l1literal_l1literal_l1literal();
-    void builderbased_l1literal_l1literal_l1literal_l1literal();
+    void b_separator() { qDebug() << "\n------- QStringBuilder based ----------"; }
+    void b_2_l1literal();
+    void b_3_l1literal();
+    void b_4_l1literal();
+    void b_string_4_char();
 
     // QString based for comparison
-    void stringbased_l1string_l1string();
-    void stringbased_l1string_l1string_l1string();
-    void stringbased_l1string_l1string_l1string_l1string();
+    void s_separator() { qDebug() << "\n-------- QString based ---------"; }
+    void s_2_l1string();
+    void s_3_l1string();
+    void s_4_l1string();
+    void s_string_4_char();
 
 private:
     const QLatin1Literal l1literal;
     const QLatin1String l1string;
+    const QString string;
+    const char achar;
 };
 
 
 tst_qstringbuilder::tst_qstringbuilder()
-    : l1literal("some literal"), l1string("some literal")
+  : l1literal("some literal"),
+    l1string("some literal"),
+    string(l1string),
+    achar('c')
 {}
 
-void tst_qstringbuilder::builderbased_l1literal_l1literal()
+void tst_qstringbuilder::b_2_l1literal()
 {
     QString result;
     QBENCHMARK { result = l1literal % l1literal; }
     QCOMPARE(result, l1string + l1string);
 }
 
-void tst_qstringbuilder::builderbased_l1literal_l1literal_l1literal()
+void tst_qstringbuilder::b_3_l1literal()
 {
     QString result;
     QBENCHMARK { result = l1literal % l1literal % l1literal; }
     QCOMPARE(result, l1string + l1string + l1string);
 }
 
-void tst_qstringbuilder::builderbased_l1literal_l1literal_l1literal_l1literal()
+void tst_qstringbuilder::b_4_l1literal()
 {
     QString result;
     QBENCHMARK { result = l1literal % l1literal % l1literal % l1literal; }
     QCOMPARE(result, l1string + l1string + l1string + l1string);
 }
 
+void tst_qstringbuilder::b_string_4_char()
+{
+    QString result;
+    QBENCHMARK { result = string + achar + achar + achar; }
+    QCOMPARE(result, QString(string % achar % achar % achar));
+}
 
 
-void tst_qstringbuilder::stringbased_l1string_l1string()
+void tst_qstringbuilder::s_2_l1string()
 {
     QString result;
     QBENCHMARK { result = l1string + l1string; }
     QCOMPARE(result, QString(l1literal % l1literal));
 }
 
-void tst_qstringbuilder::stringbased_l1string_l1string_l1string()
+void tst_qstringbuilder::s_3_l1string()
 {
     QString result;
     QBENCHMARK { result = l1string + l1string + l1string; }
     QCOMPARE(result, QString(l1literal % l1literal % l1literal));
 }
 
-void tst_qstringbuilder::stringbased_l1string_l1string_l1string_l1string()
+void tst_qstringbuilder::s_4_l1string()
 {
     QString result;
     QBENCHMARK { result = l1string + l1string + l1string + l1string; }
     QCOMPARE(result, QString(l1literal % l1literal % l1literal % l1literal));
 }
 
+void tst_qstringbuilder::s_string_4_char()
+{
+    QString result;
+    QBENCHMARK { result = string + achar + achar + achar; }
+    QCOMPARE(result, QString(string % achar % achar % achar));
+}
+
 QTEST_MAIN(tst_qstringbuilder)
 
 #include "main.moc"