diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/Checker.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/Checker.java
index a58de85..efd6208 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/Checker.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/Checker.java
@@ -18,6 +18,7 @@
 public abstract class Checker {
 
 	private static final Logger logger = Logger.getLogger(Checker.class);
+	public static String FAMILY = "checkers";
 
 //	private static String pluginID = "org.polarsys.chess.checkers";
 
@@ -122,6 +123,15 @@
 				// use this to open a Shell in the UI thread
 				return Status.OK_STATUS;
 			}
+			
+			@Override
+			public boolean belongsTo(Object family) {
+				if (Checker.FAMILY.equals(family)) {
+					return true;
+				} else {
+					return false;
+				}
+			}
 		};
 		job.schedule();
 		return job;
diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerManager.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerManager.java
index 51700bf..40aba6d 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerManager.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckerManager.java
@@ -4,10 +4,7 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Map.Entry;
 import java.util.Set;
-import java.util.concurrent.TimeUnit;
-
 import org.apache.log4j.Logger;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IMarker;
@@ -15,6 +12,7 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EValidator;
@@ -85,36 +83,29 @@
 	 * @param pkg
 	 * @return 
 	 */
-	public List<Exception> runSync(Set<String> selectedCheckersTags, Package pkg, IProgressMonitor monitor) {
+	public List<Exception> checkSync(Set<String> selectedCheckersTags, Package pkg, IProgressMonitor monitor) {
 		logger.debug("runSync");
 		final List<Exception> errors = new ArrayList<Exception>();
 		checkerStatus = new HashMap<String, Boolean>();
 		messages = new ArrayList<CheckerMessage>();
 		final List<Job> jobs = new ArrayList<Job>();
+		
+		// Start all the checks()
 		for (CheckersContainer checkersContainer : checkersContainers) {
 			logger.debug("run checkersContainer");
-			jobs.addAll(checkersContainer.runSync(selectedCheckersTags, pkg));
+			jobs.addAll(checkersContainer.checkSync(selectedCheckersTags, pkg));
 		}
-
-		boolean allEnded = false;
-		while(!allEnded) {
-			allEnded = true;
-			for (Entry<String, Boolean> entry : checkerStatus.entrySet()) {
-				allEnded &= entry.getValue();
+		
+		// Wait for the checks to finish
+		try {
+			Job.getJobManager().join(Checker.FAMILY, monitor);
+		} catch (OperationCanceledException | InterruptedException e1) {
+			logger.debug("Checker execution interrupted");
+			for (Job job : jobs) {
+				job.cancel();
 			}
-			if (allEnded) break;
-			if (monitor.isCanceled()) {
-				for (Job job : jobs) {
-					job.cancel();
-				}
-				errors.add(new Exception("Esecuzione checker interrotta"));
-				break;
-			}
-			try {
-				TimeUnit.SECONDS.sleep(5);
-			} catch (InterruptedException e) {
-				e.printStackTrace();
-			}
+			errors.add(new Exception("Esecuzione checker interrotta"));
+			e1.printStackTrace();
 		}
 		return errors;
 	}
diff --git a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckersContainer.java b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckersContainer.java
index 3b37d2d..05007a9 100644
--- a/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckersContainer.java
+++ b/plugins/org.polarsys.chess.checkers/src/org/polarsys/chess/checkers/core/checkerManager/CheckersContainer.java
@@ -56,7 +56,7 @@
 	 * @param checkersTags
 	 * @return the list of scheduled jobs 
 	 */
-	public List<Job> runSync(Set<String> checkersTags, Package pkg) {
+	public List<Job> checkSync(Set<String> checkersTags, Package pkg) {
 		final List<Job> jobs = new ArrayList<Job>();
 		for (Checker checker : checkers) {
 			checkerManager.updateCheckerStatus(checker.unifiedName, false);
