diff --git a/boulder-dash/src/fr/enssat/BoulderDash/helpers/LevelLoadHelper.java b/boulder-dash/src/fr/enssat/BoulderDash/helpers/LevelLoadHelper.java
index ac24e653..31f07349 100644
--- a/boulder-dash/src/fr/enssat/BoulderDash/helpers/LevelLoadHelper.java
+++ b/boulder-dash/src/fr/enssat/BoulderDash/helpers/LevelLoadHelper.java
@@ -2,17 +2,8 @@ package fr.enssat.BoulderDash.helpers;
 
 import fr.enssat.BoulderDash.exceptions.UnknownModelException;
 
-import fr.enssat.BoulderDash.helpers.ModelConvertHelper;
-import fr.enssat.BoulderDash.models.ExpandingWallModel;
 import fr.enssat.BoulderDash.models.RockfordModel;
 import fr.enssat.BoulderDash.models.DisplayableElementModel;
-import fr.enssat.BoulderDash.models.EmptyModel;
-import fr.enssat.BoulderDash.models.BrickWallModel;
-import fr.enssat.BoulderDash.models.BoulderModel;
-import fr.enssat.BoulderDash.models.DiamondModel;
-import fr.enssat.BoulderDash.models.DirtModel;
-import fr.enssat.BoulderDash.models.MagicWallModel;
-import fr.enssat.BoulderDash.models.SteelWallModel;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -258,8 +249,8 @@ public class LevelLoadHelper {
      * @param  lineIndex   Position in line (vertical axis)
      */
 	private DisplayableElementModel constructGridElement(String spriteName, int rowIndex, int lineIndex, boolean convertible) throws UnknownModelException {
-        ModelConvertHelper modelConvert = new ModelConvertHelper();
-        DisplayableElementModel element = modelConvert.toModel(spriteName, convertible);
+		ModelConvertHelper modelConvert = ModelConvertHelper.getInstance();
+		DisplayableElementModel element = modelConvert.toModel(spriteName, convertible);
 
 		// Custom actions?
 		switch (spriteName) {
diff --git a/boulder-dash/src/fr/enssat/BoulderDash/helpers/ModelConvertHelper.java b/boulder-dash/src/fr/enssat/BoulderDash/helpers/ModelConvertHelper.java
index 2856a412..b8111599 100644
--- a/boulder-dash/src/fr/enssat/BoulderDash/helpers/ModelConvertHelper.java
+++ b/boulder-dash/src/fr/enssat/BoulderDash/helpers/ModelConvertHelper.java
@@ -16,13 +16,17 @@ import fr.enssat.BoulderDash.models.SteelWallModel;
 
 /**
  * ModelConvertHelper
- *
  * Provides model conversion services.
  *
  * @author      Valerian Saliou <valerian@valeriansaliou.name>
  * @since       2015-06-22
  */
 public class ModelConvertHelper {
+    /**
+     * Holds the single instance of the class.
+     */
+    private static ModelConvertHelper instance = null;
+
     /**
      * Class constructor
      */
@@ -30,6 +34,18 @@ public class ModelConvertHelper {
         // Nothing done.
     }
 
+    /**
+     * Gets the single instance of the ModelConvertHelper.
+     * Creates the instance if it doesn't exist.
+     *
+     * @return  The single instance of the ModelConvertHelper.
+     */
+    public static synchronized ModelConvertHelper getInstance() {
+        if (instance == null) {
+            instance = new ModelConvertHelper();
+        }
+        return instance;
+    }
     /**
      * Gets the model associated to the string
      *
@@ -37,60 +53,19 @@ public class ModelConvertHelper {
      * @return  Model associated to given sprite name
      */
     public DisplayableElementModel toModel(String spriteName, boolean isConvertible) throws UnknownModelException {
-        DisplayableElementModel element;
-
-        // Instanciates the sprite element matching the given sprite name
-        switch (spriteName) {
-            case "black":
-            case "Black":
-                element = new EmptyModel();
-                break;
-
-            case "boulder":
-            case "Boulder":
-                element = new BoulderModel(isConvertible);
-                break;
-
-            case "brickwall":
-            case "Brick Wall":
-                element = new BrickWallModel();
-                break;
-
-            case "diamond":
-            case "Diamond":
-                element = new DiamondModel();
-                break;
-
-            case "dirt":
-            case "Dirt":
-                element = new DirtModel();
-                break;
-
-            case "magicwall":
-            case "Magic Wall":
-                element = new MagicWallModel();
-                break;
-
-            case "rockford":
-            case "Rockford":
-                element = new RockfordModel();
-                break;
-
-            case "steelwall":
-            case "Steel Wall":
-                element = new SteelWallModel();
-                break;
-
-            case "expandingwall":
-            case "Expanding Wall":
-                element = new ExpandingWallModel();
-                break;
-
-            default:
-                throw new UnknownModelException("Unknown model element > " + spriteName);
-        }
-
-        return element;
+        // Instantiates the sprite element matching the given sprite name
+        return switch (spriteName) {
+            case "black", "Black" -> new EmptyModel();
+            case "boulder", "Boulder" -> new BoulderModel(isConvertible);
+            case "brickwall", "Brick Wall" -> new BrickWallModel();
+            case "diamond", "Diamond" -> new DiamondModel();
+            case "dirt", "Dirt" -> new DirtModel();
+            case "magicwall", "Magic Wall" -> new MagicWallModel();
+            case "rockford", "Rockford" -> new RockfordModel();
+            case "steelwall", "Steel Wall" -> new SteelWallModel();
+            case "expandingwall", "Expanding Wall" -> new ExpandingWallModel();
+            default -> throw new UnknownModelException("Unknown model element > " + spriteName);
+        };
     }
 
     /**
diff --git a/boulder-dash/src/fr/enssat/BoulderDash/models/LevelModel.java b/boulder-dash/src/fr/enssat/BoulderDash/models/LevelModel.java
index ddc5eedb..eb0cc12d 100644
--- a/boulder-dash/src/fr/enssat/BoulderDash/models/LevelModel.java
+++ b/boulder-dash/src/fr/enssat/BoulderDash/models/LevelModel.java
@@ -5,16 +5,6 @@ import fr.enssat.BoulderDash.exceptions.UnknownModelException;
 import fr.enssat.BoulderDash.helpers.LevelLoadHelper;
 import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
 import fr.enssat.BoulderDash.helpers.ModelConvertHelper;
-import fr.enssat.BoulderDash.models.DisplayableElementModel;
-import fr.enssat.BoulderDash.models.RockfordModel;
-import fr.enssat.BoulderDash.models.GameInformationModel;
-import fr.enssat.BoulderDash.models.SteelWallModel;
-import fr.enssat.BoulderDash.models.EmptyModel;
-import fr.enssat.BoulderDash.models.DiamondModel;
-import fr.enssat.BoulderDash.models.DoorModel;
-import fr.enssat.BoulderDash.models.DirtModel;
-import fr.enssat.BoulderDash.models.ExpandingWallModel;
-import fr.enssat.BoulderDash.models.CursorModel;
 
 import java.awt.image.BufferedImage;
 import java.util.Observable;
@@ -48,6 +38,11 @@ public class LevelModel extends Observable implements Runnable {
 	private boolean gamePaused;
 	// Are we in editor or game mode ?
 	private String mode;
+	/**
+	 * Gets the single instance of the ModelConvertHelper.
+	 */
+	private ModelConvertHelper modelConverter = ModelConvertHelper.getInstance();
+
 
 	/**
 	 * Sprite animation thread
@@ -287,18 +282,15 @@ public class LevelModel extends Observable implements Runnable {
             return;
         }
 
-		// Grab model value
-		ModelConvertHelper modelConverter = new ModelConvertHelper();
-		DisplayableElementModel targetModel;
 		int xPos, yPos;
 
 		xPos = this.getCursorXPosition();
 		yPos = this.getCursorYPosition();
 
 		try {
-			targetModel = modelConverter.toModel(blockValue, false);
+			DisplayableElementModel targetModel = modelConverter.toModel(blockValue, false);
 
-            // Apply new model in place of cursor
+			// Apply new model in place of cursor
             this.groundGrid[xPos + 1][yPos + 1] = targetModel;
 
             // Disable cursor (important)