diff --git a/src/plugins/cppeditor/cppquickfix.cpp b/src/plugins/cppeditor/cppquickfix.cpp
index def7d89d251f21b1ef000a9c56787c88937e1692..41b9321a91f3aea5db986ec83914324fdc12c626 100644
--- a/src/plugins/cppeditor/cppquickfix.cpp
+++ b/src/plugins/cppeditor/cppquickfix.cpp
@@ -910,165 +910,6 @@ private:
     PostfixExpressionAST *qlatin1Call;
 };
 
-/*
-  Replace
-    a + b
-  With
-    a % b
-  If a and b are of string type.
-*/
-class UseFastStringConcatenation: public QuickFixOperation
-{
-public:
-    UseFastStringConcatenation()
-    {}
-
-    virtual QString description() const
-    {
-        return QApplication::translate("CppTools::QuickFix", "Use Fast String Concatenation with %");
-    }
-
-    virtual int match(const QList<AST *> &path)
-    {
-        if (path.isEmpty())
-            return -1;
-
-        // need to search 'up' too
-        int index = path.size() - 1;
-        if (BinaryExpressionAST *binary = asPlusNode(path[index])) {
-            while (0 != (binary = asPlusNode(binary->left_expression)))
-                _binaryExpressions.prepend(binary);
-        }
-
-        // search 'down'
-        for (index = path.size() - 1; index != -1; --index) {
-            AST *node = path.at(index);
-            if (BinaryExpressionAST *binary = asPlusNode(node)) {
-                _binaryExpressions.append(binary);
-            } else if (! _binaryExpressions.isEmpty()) {
-                break;
-            }
-        }
-
-        if (_binaryExpressions.isEmpty())
-            return -1;
-
-        // verify types of arguments
-        BinaryExpressionAST *prevBinary = 0;
-        foreach (BinaryExpressionAST *binary, _binaryExpressions) {
-            if (binary->left_expression != prevBinary) {
-                if (!hasCorrectType(binary->left_expression))
-                    return -1;
-            }
-            if (binary->right_expression != prevBinary) {
-                if (!hasCorrectType(binary->right_expression))
-                    return -1;
-            }
-            prevBinary = binary;
-        }
-
-        return index + _binaryExpressions.size();
-    }
-
-    virtual void createChangeSet()
-    {
-        // replace + -> %
-        foreach (BinaryExpressionAST *binary, _binaryExpressions)
-            replace(binary->binary_op_token, "%");
-
-        // wrap literals in QLatin1Literal
-        foreach (StringLiteralAST *literal, _stringLiterals) {
-            insert(startOf(literal), "QLatin1Literal(");
-            insert(endOf(literal), ")");
-        }
-
-        // replace QLatin1String/QString/QByteArray(literal) -> QLatin1Literal(literal)
-        foreach (PostfixExpressionAST *postfix, _incorrectlyWrappedLiterals) {
-            replace(postfix->base_expression, "QLatin1Literal");
-        }
-    }
-
-    BinaryExpressionAST *asPlusNode(AST *ast)
-    {
-        BinaryExpressionAST *binary = ast->asBinaryExpression();
-        if (binary && tokenAt(binary->binary_op_token).kind() == T_PLUS)
-            return binary;
-        return 0;
-    }
-
-    bool hasCorrectType(ExpressionAST *ast)
-    {
-        if (StringLiteralAST *literal = ast->asStringLiteral()) {
-            _stringLiterals += literal;
-            return true;
-        }
-
-        if (PostfixExpressionAST *postfix = ast->asPostfixExpression()) {
-            if (postfix->base_expression && postfix->postfix_expression_list
-                && postfix->postfix_expression_list->value
-                && !postfix->postfix_expression_list->next)
-            {
-                NameAST *name = postfix->base_expression->asName();
-                CallAST *call = postfix->postfix_expression_list->value->asCall();
-                if (name && call) {
-                    QByteArray nameStr(name->name->identifier()->chars());
-                    if ((nameStr == "QLatin1String"
-                         || nameStr == "QString"
-                         || nameStr == "QByteArray")
-                        && call->expression_list
-                        && call->expression_list->value
-                        && call->expression_list->value->asStringLiteral()
-                        && !call->expression_list->next)
-                    {
-                        _incorrectlyWrappedLiterals += postfix;
-                        return true;
-                    }
-                }
-            }
-        }
-
-        const QList<LookupItem> &lookup = typeOf(ast);
-        if (lookup.isEmpty())
-            return false;
-        return isQtStringType(lookup[0].type());
-    }
-
-    bool isBuiltinStringType(FullySpecifiedType type)
-    {
-        // char*
-        if (PointerType *ptrTy = type->asPointerType())
-            if (IntegerType *intTy = ptrTy->elementType()->asIntegerType())
-                if (intTy->kind() == IntegerType::Char)
-                    return true;
-        return false;
-    }
-
-    bool isQtStringType(FullySpecifiedType type)
-    {
-        if (NamedType *nameTy = type->asNamedType()) {
-            if (!nameTy->name() || !nameTy->name()->identifier())
-                return false;
-
-            QByteArray name(nameTy->name()->identifier()->chars());
-            if (name == "QString"
-                || name == "QByteArray"
-                || name == "QLatin1String"
-                || name == "QLatin1Literal"
-                || name == "QStringRef"
-                || name == "QChar"
-                )
-                return true;
-        }
-
-        return false;
-    }
-
-private:
-    QList<BinaryExpressionAST *> _binaryExpressions;
-    QList<StringLiteralAST *> _stringLiterals;
-    QList<PostfixExpressionAST *> _incorrectlyWrappedLiterals;
-};
-
 } // end of anonymous namespace
 
 
@@ -1318,31 +1159,6 @@ void QuickFixOperation::apply()
     _textCursor.endEditBlock();
 }
 
-/**
- * Returns a list of possible fully specified types associated with the
- * given expression.
- *
- * NOTE: The fully specified types only stay valid until the next call to typeOf.
- */
-const QList<LookupItem> QuickFixOperation::typeOf(CPlusPlus::ExpressionAST *ast)
-{
-#ifdef __GNUC__
-#  warning port me
-#endif
-
-    qWarning() << Q_FUNC_INFO << __LINE__;
-    return QList<LookupItem>();
-
-#if 0
-    unsigned line, column;
-    document()->translationUnit()->getTokenStartPosition(ast->firstToken(), &line, &column);
-    Symbol *lastVisibleSymbol = document()->findSymbolAt(line, column);
-
-    ResolveExpression resolveExpression(lastVisibleSymbol, _lookupContext);
-    return resolveExpression(ast);
-#endif
-}
-
 CPPQuickFixCollector::CPPQuickFixCollector()
     : _modelManager(CppTools::CppModelManagerInterface::instance()), _editable(0), _editor(0)
 { }
@@ -1395,7 +1211,6 @@ int CPPQuickFixCollector::startCompletion(TextEditor::ITextEditable *editable)
         QSharedPointer<FlipBinaryOp> flipBinaryOp(new FlipBinaryOp());
         QSharedPointer<WrapStringLiteral> wrapStringLiteral(new WrapStringLiteral());
         QSharedPointer<CStringToNSString> wrapCString(new CStringToNSString());
-        QSharedPointer<UseFastStringConcatenation> useFastStringConcat(new UseFastStringConcatenation());
 
         QList<QuickFixOperationPtr> candidates;
         candidates.append(rewriteLogicalAndOp);
@@ -1409,7 +1224,6 @@ int CPPQuickFixCollector::startCompletion(TextEditor::ITextEditable *editable)
         candidates.append(wrapStringLiteral);
         if (_editor->mimeType() == CppTools::Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE)
             candidates.append(wrapCString);
-        candidates.append(useFastStringConcat);
 
         QMap<int, QList<QuickFixOperationPtr> > matchedOps;
 
diff --git a/src/plugins/cppeditor/cppquickfix.h b/src/plugins/cppeditor/cppquickfix.h
index 74fc89027360837ca76dbc0e910de9ab9b5b3e5d..10c5c80da05e6cd69c8cb0b7c63189e16d5b77d3 100644
--- a/src/plugins/cppeditor/cppquickfix.h
+++ b/src/plugins/cppeditor/cppquickfix.h
@@ -129,8 +129,6 @@ protected:
     Range createRange(CPlusPlus::AST *ast) const; // ### rename me
     void reindent(const Range &range);
 
-    const QList<CPlusPlus::LookupItem> typeOf(CPlusPlus::ExpressionAST *ast);
-
 private:
     CPlusPlus::Document::Ptr _document;
     CPlusPlus::Snapshot _snapshot;