diff --git a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/TaskMarkerHandler.java b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/TaskMarkerHandler.java
index caf4e84..ab6cefe 100644
--- a/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/TaskMarkerHandler.java
+++ b/ltk/org.eclipse.statet.ltk.core/src/org/eclipse/statet/ltk/issues/core/impl/TaskMarkerHandler.java
@@ -15,6 +15,7 @@
 package org.eclipse.statet.ltk.issues.core.impl;
 
 import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullLateInit;
 
 import java.util.HashMap;
 import java.util.List;
@@ -39,18 +40,18 @@
 public class TaskMarkerHandler {
 	
 	
-	private final String markerId;
+	private final String markerType;
 	
 	private @Nullable Pattern taskTagPattern;
 	private final Map<String, TaskPriority> taskTagMap= new HashMap<>();
 	
-	private SourceContent sourceContent;
-	private IResource resource;
+	private SourceContent sourceContent= nonNullLateInit();
+	private IResource resource= nonNullLateInit();
 	private @Nullable Matcher taskTagMatcher;
 	
 	
-	public TaskMarkerHandler(final String markerId) {
-		this.markerId= markerId;
+	public TaskMarkerHandler(final String markerType) {
+		this.markerType= markerType;
 	}
 	
 	
@@ -67,18 +68,18 @@
 		regex.append('(');
 		for (final TaskTag taskTag : taskTags) {
 			regex.append(Pattern.quote(taskTag.getKeyword()));
-			regex.append('|'); 
+			regex.append('|');
 			this.taskTagMap.put(taskTag.getKeyword(), taskTag.getPriority());
 		}
-		regex.setCharAt(regex.length()-1, ')');
+		regex.setCharAt(regex.length() - 1, ')');
 		regex.append("(?:\\z|").append(separatorRegex).append(")"); //$NON-NLS-1$ //$NON-NLS-2$
-		this.taskTagPattern= Pattern.compile(regex.toString());
+ 		this.taskTagPattern= Pattern.compile(regex.toString());
 	}
 	
 	
 	public void setup(final SourceContent sourceContent, final IResource resource) {
-		this.sourceContent= sourceContent;
-		this.resource= resource;
+		this.sourceContent= nonNullAssert(sourceContent);
+		this.resource= nonNullAssert(resource);
 		
 		final Pattern taskTagPattern= this.taskTagPattern;
 		this.taskTagMatcher= (taskTagPattern != null && sourceContent.getStartOffset() == 0) ?
@@ -86,8 +87,8 @@
 				null;
 	}
 	
-	public void addTaskMarker(final String message, final int offset, final int lineNumber, final String match) 
-			throws CoreException {
+	public void addTaskMarker(final String message, final int offset, final int lineNumber,
+			final String match) throws CoreException {
 		final TaskPriority prio= this.taskTagMap.get(match);
 		if (prio == null) {
 			return;
@@ -103,24 +104,34 @@
 		}
 		attributes.put(IMarker.USER_EDITABLE, false);
 		
-		this.resource.createMarker(this.markerId, attributes);
+		this.resource.createMarker(this.markerType, attributes);
 	}
 	
 	public void removeTaskMarkers() throws CoreException {
-		this.resource.deleteMarkers(this.markerId, false, IResource.DEPTH_INFINITE);
+		this.resource.deleteMarkers(this.markerType, false, IResource.DEPTH_INFINITE);
 	}
 	
-	public void checkForTasks(final int startOffset, final int endOffset)
+	public void checkForTasks(final int startOffset, int endOffset)
 			throws CoreException, BadLocationException {
 		final Matcher matcher= this.taskTagMatcher;
 		if (matcher == null) {
 			return;
 		}
 		if (matcher.region(startOffset, endOffset).find()) {
-			final int taskStartOffset= matcher.start(1);
-			final String text= this.sourceContent.getString(taskStartOffset, endOffset);
-			addTaskMarker(text, taskStartOffset,
-					this.sourceContent.getStringLines().getLineOfOffset(taskStartOffset) + 1,
+			final int tagStartOffset= matcher.start(1);
+			final int tagEndOffset= matcher.end(1);
+			while (endOffset > tagEndOffset) {
+				if (this.sourceContent.getChar(endOffset - 1) <= ' ') {
+					endOffset--;
+					continue;
+				}
+				else {
+					break;
+				}
+			}
+			final String text= this.sourceContent.getString(tagStartOffset, endOffset);
+			addTaskMarker(text, tagStartOffset,
+					this.sourceContent.getStringLines().getLineOfOffset(tagStartOffset) + 1,
 					nonNullAssert(matcher.group(1)) );
 		}
 	}
