diff --git a/src/plugins/cpptools/insertionpointlocator.cpp b/src/plugins/cpptools/insertionpointlocator.cpp
index 587d983b9ea613550a6c076c0cccdb553b7fac45..0ff86a925feb2593d6fb4a2a726de68865615ea3 100644
--- a/src/plugins/cpptools/insertionpointlocator.cpp
+++ b/src/plugins/cpptools/insertionpointlocator.cpp
@@ -331,7 +331,7 @@ class HighestValue
     bool _set;
 public:
     HighestValue()
-        : _set(false)
+        : _key(), _set(false)
     {}
 
     HighestValue(const Key &initialKey, const Value &initialValue)
@@ -369,22 +369,22 @@ public:
 
     void operator()(Declaration *decl, unsigned *line, unsigned *column)
     {
-        *line = *column = 0;
-        if (translationUnit()->ast()->lastToken() < 2)
-            return;
-
-        QList<const Name *> names = LookupContext::fullyQualifiedName(decl);
-        foreach (const Name *name, names) {
-            const Identifier *id = name->asNameId();
-            if (!id)
-                break;
-            _namespaceNames += id;
-        }
-        _currentDepth = 0;
-
         // default to end of file
-        _bestToken.maybeSet(-1, translationUnit()->ast()->lastToken() - 1);
-        accept(translationUnit()->ast());
+        _bestToken.maybeSet(-1, translationUnit()->ast()->lastToken());
+
+        if (translationUnit()->ast()->lastToken() >= 2) {
+
+            QList<const Name *> names = LookupContext::fullyQualifiedName(decl);
+            foreach (const Name *name, names) {
+                const Identifier *id = name->asNameId();
+                if (!id)
+                    break;
+                _namespaceNames += id;
+            }
+            _currentDepth = 0;
+
+            accept(translationUnit()->ast());
+        }
         translationUnit()->getTokenEndPosition(_bestToken.get(), line, column);
     }
 
@@ -586,7 +586,8 @@ QList<InsertionLocation> InsertionPointLocator::methodDefinition(
             target = candidate;
     }
 
-    Document::Ptr doc = m_refactoringChanges.file(target)->cppDocument();
+    CppRefactoringFilePtr targetFile = m_refactoringChanges.file(target);
+    Document::Ptr doc = targetFile->cppDocument();
     if (doc.isNull())
         return result;
 
@@ -594,8 +595,24 @@ QList<InsertionLocation> InsertionPointLocator::methodDefinition(
     FindMethodDefinitionInsertPoint finder(doc->translationUnit());
     finder(declaration, &line, &column);
 
+    // Make sure we have a line before and after the new definition.
     const QLatin1String prefix("\n\n");
-    result.append(InsertionLocation(target, prefix, QString(), line, column));
+    QString suffix;
+    int firstNonSpace = targetFile->position(line, column);
+    QChar c = targetFile->charAt(firstNonSpace);
+    while (c == QLatin1Char(' ') || c == QLatin1Char('\t')) {
+        ++firstNonSpace;
+        c = targetFile->charAt(firstNonSpace);
+    }
+    if (targetFile->charAt(firstNonSpace) != QChar::ParagraphSeparator) {
+        suffix.append(QLatin1String("\n\n"));
+    } else {
+        ++firstNonSpace;
+        if (targetFile->charAt(firstNonSpace) != QChar::ParagraphSeparator)
+            suffix.append(QLatin1Char('\n'));
+    }
+
+    result += InsertionLocation(target, prefix, suffix, line, column);
 
     return result;
 }