diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java
index 936250b398c..822e2b38987 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java
@@ -375,6 +375,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
                   throwBacktrack(first.getOffset(), l.getEndOffset()
                         - first.getOffset());
                case IToken.tIDENTIFIER:
+	           case IToken.tCOMPLETION:
+	           case IToken.tEOC:
                   last = consume();
                   last = consumeTemplateArguments(last, argumentList);
                   if (last.getType() == IToken.tGT)
@@ -4533,6 +4535,12 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
     */
    protected IASTName createName(IToken token) {
       CPPASTName n = new CPPASTName(token.getCharImage());
+	  switch (token.getType()) {
+	  case IToken.tCOMPLETION:
+	  case IToken.tEOC:
+		  createCompletionNode(token).addName(n);
+		  break;
+	  }
       n.setOffsetAndLength(token.getOffset(), token.getLength());
       return n;
    }
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java
index c889ccbe761..525d8d0690c 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java
@@ -1517,6 +1517,8 @@ abstract class BaseScanner implements IScanner {
 
         if (finished) {
         	if (contentAssistMode) {
+				if (lastToken != null)
+					lastToken.setNext(nextToken);
         		lastToken = nextToken;
         		nextToken = eocToken;
        			return lastToken;
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/DOMCompletionContributor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/DOMCompletionContributor.java
index 1f4982fb216..8847ddbbe52 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/DOMCompletionContributor.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/DOMCompletionContributor.java
@@ -23,6 +23,8 @@ import org.eclipse.cdt.core.dom.ast.IType;
 import org.eclipse.cdt.core.dom.ast.ITypedef;
 import org.eclipse.cdt.core.dom.ast.IVariable;
 import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
+import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
 import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
 import org.eclipse.cdt.ui.CUIPlugin;
 import org.eclipse.cdt.ui.text.contentassist.ICompletionContributor;
@@ -146,6 +148,18 @@ public class DOMCompletionContributor implements ICompletionContributor {
 					imageDescriptor = CElementImageProvider.getUnionImageDescriptor();
 			} else if (binding instanceof IFunction) {
 				imageDescriptor = CElementImageProvider.getFunctionImageDescriptor();
+			} else if (binding instanceof ICPPField) {
+				switch (((ICPPField)binding).getVisibility()) {
+				case ICPPField.v_private:
+					imageDescriptor = CElementImageProvider.getFieldImageDescriptor(ASTAccessVisibility.PRIVATE);
+					break;
+				case ICPPField.v_protected:
+					imageDescriptor = CElementImageProvider.getFieldImageDescriptor(ASTAccessVisibility.PROTECTED);
+					break;
+				default:
+					imageDescriptor = CElementImageProvider.getFieldImageDescriptor(ASTAccessVisibility.PUBLIC);
+					break;
+				}
 			} else if (binding instanceof IVariable) {
 				imageDescriptor = CElementImageProvider.getVariableImageDescriptor();
 			}