Use join to wait for job to finish
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);