diff --git a/org.eclipse.babel.editor/src/org/eclipse/babel/editor/MessagesEditorMarkers.java b/org.eclipse.babel.editor/src/org/eclipse/babel/editor/MessagesEditorMarkers.java
index fc60fea..e2d1109 100644
--- a/org.eclipse.babel.editor/src/org/eclipse/babel/editor/MessagesEditorMarkers.java
+++ b/org.eclipse.babel.editor/src/org/eclipse/babel/editor/MessagesEditorMarkers.java
@@ -22,6 +22,7 @@
 import org.eclipse.babel.core.message.MessagesBundle;
 import org.eclipse.babel.core.message.MessagesBundleGroup;
 import org.eclipse.babel.core.message.MessagesBundleGroupAdapter;
+import org.eclipse.babel.core.message.checks.IMessageCheck;
 import org.eclipse.babel.core.message.checks.MissingValueCheck;
 import org.eclipse.babel.editor.resource.validator.IValidationMarkerStrategy;
 import org.eclipse.babel.editor.resource.validator.MessagesBundleGroupValidator;
@@ -41,10 +42,10 @@
     
    // private Map<String,Set<ValidationFailureEvent>> markersIndex = new HashMap();
     /** index is the name of the key. value is the collection of markers on that key */
-    private Map markersIndex = new HashMap();
+    private Map<String, Collection<IMessageCheck>> markersIndex = new HashMap<String, Collection<IMessageCheck>>();
     /** index is the concat of the locale and the key.
      * value is the collection of markers for that key and that locale */
-    private Map localizedMarkersIndex = new HashMap();
+    private Map<String, Collection<IMessageCheck>> localizedMarkersIndex = new HashMap<String, Collection<IMessageCheck>>();
     
     /**
      * @param messagesBundleGroup
@@ -89,20 +90,20 @@
      * @see org.eclipse.babel.editor.resource.validator.IValidationMarkerStrategy#markFailed(org.eclipse.core.resources.IResource, org.eclipse.babel.core.bundle.checks.IBundleEntryCheck)
      */
     public void markFailed(ValidationFailureEvent event) {
-        Collection markersForKey = (Collection) markersIndex.get(event.getKey());
+        Collection<IMessageCheck> markersForKey = markersIndex.get(event.getKey());
         if (markersForKey == null) {
-        	markersForKey = new HashSet();
+        	markersForKey = new HashSet<IMessageCheck>();
         	markersIndex.put(event.getKey(), markersForKey);
         }
-        markersForKey.add(event);
+        markersForKey.add(event.getCheck());
         
         String localizedKey = hash(event.getLocale(), event.getKey());
-        markersForKey = (Collection) localizedMarkersIndex.get(localizedKey);
+        markersForKey = localizedMarkersIndex.get(localizedKey);
         if (markersForKey == null) {
-        	markersForKey = new HashSet();
+        	markersForKey = new HashSet<IMessageCheck>();
         	localizedMarkersIndex.put(localizedKey, markersForKey);
         }
-        markersForKey.add(event);
+        markersForKey.add(event.getCheck());
         
         //System.out.println("CREATE EDITOR MARKER");
         setChanged();
@@ -120,11 +121,11 @@
     	return markersIndex.containsKey(key);
     }
 
-    public Collection getFailedChecks(String key) {
-    	return (Collection)markersIndex.get(key);
+    public Collection<IMessageCheck> getFailedChecks(String key) {
+    	return markersIndex.get(key);
     }
-    public Collection getFailedChecks(final String key, final Locale locale) {
-    	return (Collection)localizedMarkersIndex.get(hash(locale, key));
+    public Collection<IMessageCheck> getFailedChecks(final String key, final Locale locale) {
+    	return localizedMarkersIndex.get(hash(locale, key));
     }
         
     private void validate() {
@@ -137,7 +138,7 @@
      * @return true when the key has a missing or unused issue
      */
     public boolean isMissingOrUnusedKey(String key) {
-    	Collection markers = getFailedChecks(key);
+    	Collection<IMessageCheck> markers = getFailedChecks(key);
     	return markers != null && markersContainMissing(markers);
     }
     
@@ -151,7 +152,7 @@
     	if (!isMissingOrUnused) {
     		return false;
     	}
-    	Collection markers = getFailedChecks(key, UIUtils.ROOT_LOCALE);
+    	Collection<IMessageCheck> markers = getFailedChecks(key, UIUtils.ROOT_LOCALE);
     	//if we get a missing on the root locale, it means the
     	//that some localized resources are referring to a key that is not in
     	//the default locale anymore: in other words, assuming the
@@ -160,9 +161,9 @@
     	return markers != null && markersContainMissing(markers);
     }
     
-    private boolean markersContainMissing(Collection markers) {
-    	for (Iterator it = markers.iterator(); it.hasNext(); ) {
-    		if (((ValidationFailureEvent) it.next()).getCheck() == MissingValueCheck.MISSING_KEY) {
+    private boolean markersContainMissing(Collection<IMessageCheck> markers) {
+    	for (IMessageCheck marker : markers) {
+    		if (marker == MissingValueCheck.MISSING_KEY) {
     			return true;
     		}
     	}
diff --git a/org.eclipse.babel.editor/src/org/eclipse/babel/editor/i18n/EntryRightBanner.java b/org.eclipse.babel.editor/src/org/eclipse/babel/editor/i18n/EntryRightBanner.java
index 6f0689b..f7699aa 100644
--- a/org.eclipse.babel.editor/src/org/eclipse/babel/editor/i18n/EntryRightBanner.java
+++ b/org.eclipse.babel.editor/src/org/eclipse/babel/editor/i18n/EntryRightBanner.java
@@ -109,11 +109,9 @@
                     toolBarMgr.removeAll();
                     actionByMarkerIds.clear();
                     String key = editor.getSelectedKey();
-                    Collection checks = editor.getMarkers().getFailedChecks(
+                    Collection<IMessageCheck> checks = editor.getMarkers().getFailedChecks(
                             key, locale);
-                    for (Iterator iter = checks.iterator(); iter.hasNext();) {
-                        IMessageCheck check =
-                                (IMessageCheck) iter.next();
+                    for (IMessageCheck check : checks) {
                         Action action = getCheckAction(key, check);
                         if (action != null) {
                             toolBarMgr.add(action);
diff --git a/org.eclipse.babel.editor/src/org/eclipse/babel/editor/resource/validator/ValidationFailureEvent.java b/org.eclipse.babel.editor/src/org/eclipse/babel/editor/resource/validator/ValidationFailureEvent.java
index 4a61e68..b8b6afe 100644
--- a/org.eclipse.babel.editor/src/org/eclipse/babel/editor/resource/validator/ValidationFailureEvent.java
+++ b/org.eclipse.babel.editor/src/org/eclipse/babel/editor/resource/validator/ValidationFailureEvent.java
@@ -32,7 +32,7 @@
      * @param locale
      * @param key
      * @param resource
-     * @param check
+     * @param check not null
      */
     /*default*/ ValidationFailureEvent(
             final MessagesBundleGroup messagesBundleGroup,
@@ -54,7 +54,7 @@
         return messagesBundleGroup;
     }
     /**
-     * @return the check
+     * @return the check, never null
      */
     public IMessageCheck getCheck() {
         return check;
diff --git a/org.eclipse.babel.editor/src/org/eclipse/babel/editor/tree/KeyTreeLabelProvider.java b/org.eclipse.babel.editor/src/org/eclipse/babel/editor/tree/KeyTreeLabelProvider.java
index 88f31c8..1bb6932 100644
--- a/org.eclipse.babel.editor/src/org/eclipse/babel/editor/tree/KeyTreeLabelProvider.java
+++ b/org.eclipse.babel.editor/src/org/eclipse/babel/editor/tree/KeyTreeLabelProvider.java
@@ -13,6 +13,7 @@
 import java.util.Collection;
 
 import org.eclipse.babel.core.message.MessagesBundleGroup;
+import org.eclipse.babel.core.message.checks.IMessageCheck;
 import org.eclipse.babel.core.message.tree.IKeyTreeModel;
 import org.eclipse.babel.core.message.tree.KeyTreeNode;
 import org.eclipse.babel.editor.MessagesEditor;
@@ -65,7 +66,7 @@
 	public Image getImage(Object element) {
 		if (element instanceof KeyTreeNode) {
 			KeyTreeNode node = (KeyTreeNode)element;
-			Collection c = editor.getMarkers().getFailedChecks(node.getMessageKey());
+			Collection<IMessageCheck> c = editor.getMarkers().getFailedChecks(node.getMessageKey());
 			if (c == null || c.isEmpty()) {
 				return UIUtils.getImage(UIUtils.IMAGE_KEY);
 			}
