Repository: graphhopper/graphhopper
Pull request #1546 (2019-02-19 13:24:53)

EncodingManager refactoring
The main advantage of a build pattern is that we can configure the EncodingManager first and then create it. At the moment all information needs to be injected via the constructor. We could use a "EMConfiguration" but the builder pattern is usually also less code.


Patch:
diff --git a/core/files/changelog.txt b/core/files/changelog.txt
index 84f231b36..3d349b213 100644
--- a/core/files/changelog.txt
+++ b/core/files/changelog.txt
@@ -1,4 +1,6 @@
 0.12
+    refactoring of EncodingManager to use builder pattern. Migration should be simple. Replace new EncodingManager with EncodingManager.create
+    EncodingManager.supports renames to hasEncoder
     big refactoring #1447: to increase 64bit limit of flags, make reverse direction handling easier, to allow shared EncodedValues,
         remove reverseFlags method, much simpler property access, simplify FlagEncoder (maybe even deprecate this interface at a later stage)
     moved shp-reader into separate repository: https://github.com/graphhopper/graphhopper-reader-shp    
diff --git a/core/src/main/java/com/graphhopper/GraphHopper.java b/core/src/main/java/com/graphhopper/GraphHopper.java
index a1754562a..01ffd5dbe 100644
--- a/core/src/main/java/com/graphhopper/GraphHopper.java
+++ b/core/src/main/java/com/graphhopper/GraphHopper.java
@@ -548,7 +548,7 @@ public class GraphHopper implements GraphHopperAPI {
         int bytesForFlags = args.getInt("graph.bytes_for_flags", 4);
         String flagEncodersStr = args.get("graph.flag_encoders", "");
         if (!flagEncodersStr.isEmpty())
-            setEncodingManager(new EncodingManager(flagEncoderFactory, flagEncodersStr, bytesForFlags));
+            setEncodingManager(EncodingManager.create(flagEncoderFactory, flagEncodersStr, bytesForFlags));
 
         if (args.get("graph.locktype", "native").equals("simple"))
             lockFactory = new SimpleFSLockFactory();
@@ -881,7 +881,7 @@ public class GraphHopper implements GraphHopperAPI {
     }
 
     private void interpolateBridgesAndOrTunnels() {
-        if (ghStorage.getEncodingManager().supports("generic")) {
+        if (ghStorage.getEncodingManager().hasEncoder("generic")) {
             final FlagEncoder genericFlagEncoder = ghStorage.getEncodingManager()
                     .getEncoder("generic");
             if (!(genericFlagEncoder instanceof DataFlagEncoder)) {
@@ -983,7 +983,7 @@ public class GraphHopper implements GraphHopperAPI {
         Lock readLock = readWriteLock.readLock();
         readLock.lock();
         try {
-            if (!encodingManager.supports(vehicle))
+            if (!encodingManager.hasEncoder(vehicle))
                 throw new IllegalArgumentException("Vehicle not supported: " + vehicle + ". Supported are: " + encodingManager.toString());
 
             HintsMap hints = request.getHints();
diff --git a/core/src/main/java/com/graphhopper/routing/profiles/EncodedValueLookup.java b/core/src/main/java/com/graphhopper/routing/profiles/EncodedValueLookup.java
index e206b5a25..15ebf2d2d 100644
--- a/core/src/main/java/com/graphhopper/routing/profiles/EncodedValueLookup.java
+++ b/core/src/main/java/com/graphhopper/routing/profiles/EncodedValueLookup.java
@@ -29,5 +29,5 @@ public interface EncodedValueLookup {
 
     ObjectEncodedValue getObjectEncodedValue(String key);
 
-    boolean supports(String key);
+    boolean hasEncoder(String key);
 }
diff --git a/core/src/main/java/com/graphhopper/routing/util/AbstractFlagEncoder.java b/core/src/main/java/com/graphhopper/routing/util/AbstractFlagEncoder.java
index e8223f527..1961f456d 100644
--- a/core/src/main/java/com/graphhopper/routing/util/AbstractFlagEncoder.java
+++ b/core/src/main/java/com/graphhopper/routing/util/AbstractFlagEncoder.java
@@ -310,7 +310,7 @@ public abstract class AbstractFlagEncoder implements FlagEncoder {
     /**
      * @return the speed in km/h
      */
-    protected double parseSpeed(String str) {
+    public static double parseSpeed(String str) {
         if (Helper.isEmpty(str))
             return -1;
 
@@ -537,13 +537,13 @@ public abstract class AbstractFlagEncoder implements FlagEncoder {
 
     public final DecimalEncodedValue getAverageSpeedEnc() {
         if (speedEncoder == null)
-            throw new NullPointerException("FlagEncoder not yet initialized");
+            throw new NullPointerException("FlagEncoder " + toString() + " not yet initialized");
         return speedEncoder;
     }
 
     public final BooleanEncodedValue getAccessEnc() {
         if (accessEnc == null)
-            throw new NullPointerException("FlagEncoder not yet initialized");
+            throw new NullPointerException("FlagEncoder " + toString() + " not yet initialized");
         return accessEnc;
     }
 
@@ -638,7 +638,7 @@ public abstract class AbstractFlagEncoder implements FlagEncoder {
     }
 
     @Override
-    public boolean supports(String key) {
-        return encodedValueLookup.supports(key);
+    public boolean hasEncoder(String key) {
+        return encodedValueLookup.hasEncoder(key);
     }
 }
diff --git a/core/src/main/java/com/graphhopper/routing/util/EncodingManager.java b/core/src/main/java/com/graphhopper/routing/util/EncodingManager.java
index 8ddfa6fc5..7abb7481c 100644
--- a/core/src/main/java/com/graphhopper/routing/util/EncodingManager.java
+++ b/core/src/main/java/com/graphhopper/routing/util/EncodingManager.java
@@ -35,8 +35,9 @@ import static com.graphhopper.util.Helper.toLowerCase;
 
 /**
  * Manager class to register encoder, assign their flag values and check objects with all encoders
- * during parsing.
+ * during parsing. Create one via:
  * <p>
+ * EncodingManager.start(4).add(new CarFlagEncoder()).build();
  *
  * @author Peter Karich
  * @author Nop
@@ -46,7 +47,7 @@ public class EncodingManager implements EncodedValueLookup {
     private static final String WAY_ERR = "Decrease the number of vehicles or increase the flags to take long via graph.bytes_for_flags: 8";
     private final List<AbstractFlagEncoder> edgeEncoders = new ArrayList<>();
     private final Map<String, EncodedValue> encodedValueMap = new LinkedHashMap<>();
-    private final Map<EncodedValue, OSMTagParser> sharedEncodedValueMap = new LinkedHashMap<>();
+    private final Map<EncodedValue, TagParser> sharedEncodedValueMap = new LinkedHashMap<>();
     private final int bitsForEdgeFlags;
     private final int bitsForTurnFlags = 8 * 4;
     private int nextNodeBit = 0;
@@ -63,16 +64,16 @@ public class EncodingManager implements EncodedValueLookup {
      *
      * @param flagEncodersStr comma delimited list of encoders. The order does not matter.
      */
-    public EncodingManager(String flagEncodersStr) {
-        this(flagEncodersStr, 4);
+    public static EncodingManager create(String flagEncodersStr) {
+        return create(flagEncodersStr, 4);
     }
 
-    public EncodingManager(String flagEncodersStr, int bytesForEdgeFlags) {
-        this(FlagEncoderFactory.DEFAULT, flagEncodersStr, bytesForEdgeFlags);
+    public static EncodingManager create(String flagEncodersStr, int bytesForEdgeFlags) {
+        return create(FlagEncoderFactory.DEFAULT, flagEncodersStr, bytesForEdgeFlags);
     }
 
-    public EncodingManager(FlagEncoderFactory factory, String flagEncodersStr, int bytesForEdgeFlags) {
-        this(parseEncoderString(factory, flagEncodersStr), bytesForEdgeFlags);
+    public static EncodingManager create(FlagEncoderFactory factory, String flagEncodersStr, int bytesForEdgeFlags) {
+        return create(parseEncoderString(factory, flagEncodersStr), bytesForEdgeFlags);
     }
 
     /**
@@ -80,8 +81,8 @@ public class EncodingManager implements EncodedValueLookup {
      *
      * @param flagEncoders comma delimited list of encoders. The order does not matter.
      */
-    public EncodingManager(FlagEncoder... flagEncoders) {
-        this(Arrays.asList(flagEncoders));
+    public static EncodingManager create(FlagEncoder... flagEncoders) {
+        return create(Arrays.asList(flagEncoders));
     }
 
     /**
@@ -89,35 +90,113 @@ public class EncodingManager implements EncodedValueLookup {
      *
      * @param flagEncoders comma delimited list of encoders. The order does not matter.
      */
-    public EncodingManager(List<? extends FlagEncoder> flagEncoders) {
-        this(flagEncoders, 4);
+    public static EncodingManager create(List<? extends FlagEncoder> flagEncoders) {
+        return create(flagEncoders, 4);
     }
 
-    public EncodingManager(List<? extends FlagEncoder> flagEncoders, int bytesForEdgeFlags) {
-        if (bytesForEdgeFlags <= 0 || (bytesForEdgeFlags / 4) * 4 != bytesForEdgeFlags)
-            throw new IllegalStateException("For 'edge flags' only a multiple of 4 is supported");
+    public static EncodingManager create(List<? extends FlagEncoder> flagEncoders, int bytesForEdgeFlags) {
+        Builder builder = new Builder(bytesForEdgeFlags);
+        for (FlagEncoder flagEncoder : flagEncoders) {
+            builder.add(flagEncoder);
+        }
+        return builder.build();
+    }
 
-        this.bitsForEdgeFlags = bytesForEdgeFlags * 8;
+    /**
+     * Create the EncodingManager from the provided GraphHopper location. Throws an
+     * IllegalStateException if it fails. Used if no EncodingManager specified on load.
+     */
+    public static EncodingManager create(FlagEncoderFactory factory, String ghLoc) {
+        Directory dir = new RAMDirectory(ghLoc, true);
+        StorableProperties properties = new StorableProperties(dir);
+        if (!properties.loadExisting())
+            throw new IllegalStateException("Cannot load properties to fetch EncodingManager configuration at: "
+                    + dir.getLocation());
+
+        // check encoding for compatibility
+        properties.checkVersions(false);
+        String acceptStr = properties.get("graph.flag_encoders");
+
+        if (acceptStr.isEmpty())
+            throw new IllegalStateException("EncodingManager was not configured. And no one was found in the graph: "
+                    + dir.getLocation());
+
+        int bytesForFlags = 4;
+        try {
+            bytesForFlags = Integer.parseInt(properties.get("graph.bytes_for_flags"));
+        } catch (NumberFormatException ex) {
+        }
+        return create(factory, acceptStr, bytesForFlags);
+    }
+
+    /**
+     * Starts the build process of an EncodingManager
+     */
+    public static Builder start() {
+        return new Builder(4);
+    }
+
+    private EncodingManager(int bytes) {
+        if (bytes <= 0 || (bytes / 4) * 4 != bytes)
+            throw new IllegalStateException("bytesForEdgeFlags can be only a multiple of 4");
+
+        this.bitsForEdgeFlags = bytes * 8;
         this.config = new EncodedValue.InitializerConfig();
-        final BooleanEncodedValue roundaboutEnc = new SimpleBooleanEncodedValue("roundabout", false);
-        sharedEncodedValueMap.put(roundaboutEnc, new OSMTagParser() {
-            @Override
-            public IntsRef handleWayTags(IntsRef edgeFlags, ReaderWay way, long allowed, long relationFlags) {
-                boolean isRoundabout = way.hasTag("junction", "roundabout") || way.hasTag("junction", "circular");
-                if (isRoundabout)
-                    roundaboutEnc.setBool(false, edgeFlags, true);
-                return edgeFlags;
+    }
+
+    public static class Builder {
+        private final EncodingManager em;
+        private boolean buildCalled = false;
+
+        public Builder(int bytes) {
+            em = new EncodingManager(bytes);
+            final BooleanEncodedValue roundaboutEnc = new SimpleBooleanEncodedValue("roundabout", false);
+            put(roundaboutEnc, new TagParser() {
+                @Override
+                public IntsRef handleWayTags(IntsRef edgeFlags, ReaderWay way, long allowed, long relationFlags) {
+                    boolean isRoundabout = way.hasTag("junction", "roundabout") || way.hasTag("junction", "circular");
+                    if (isRoundabout)
+                        roundaboutEnc.setBool(false, edgeFlags, true);
+                    return edgeFlags;
+                }
+            });
+        }
+
+        /**
+         * For backward compatibility provide a way to add multiple FlagEncoders
+         */
+        public Builder addAll(FlagEncoderFactory factory, String flagEncodersStr) {
+            for (FlagEncoder fe : parseEncoderString(factory, flagEncodersStr)) {
+                add(fe);
             }
-        });
-        for (EncodedValue ev : sharedEncodedValueMap.keySet()) {
-            addEncodedValue(ev);
+            return this;
         }
-        for (FlagEncoder flagEncoder : flagEncoders) {
-            registerEncoder((AbstractFlagEncoder) flagEncoder);
+
+        public Builder add(FlagEncoder encoder) {
+            em.addEncoder((AbstractFlagEncoder) encoder);
+            return this;
         }
 
-        if (edgeEncoders.isEmpty())
-            throw new IllegalStateException("No vehicles found");
+        public Builder add(EncodedValue encodedValue) {
+            em.addEncodedValue(encodedValue);
+            return this;
+        }
+
+        public Builder put(EncodedValue encodedValue, TagParser tagParser) {
+            add(encodedValue);
+            em.sharedEncodedValueMap.put(encodedValue, tagParser);
+            return this;
+        }
+
+        public EncodingManager build() {
+            if (buildCalled)
+                throw new IllegalStateException("Cannot call Builder.build() twice");
+            if (em.encodedValueMap.isEmpty())
+                throw new IllegalStateException("No EncodedValues found");
+
+            buildCalled = true;
+            return em;
+        }
     }
 
     static List<FlagEncoder> parseEncoderString(FlagEncoderFactory factory, String encoderList) {
@@ -159,38 +238,11 @@ public class EncodingManager implements EncodedValueLookup {
         return str.replaceAll(";[ ]*", ", ");
     }
 
-    /**
-     * Create the EncodingManager from the provided GraphHopper location. Throws an
-     * IllegalStateException if it fails. Used if no EncodingManager specified on load.
-     */
-    public static EncodingManager create(FlagEncoderFactory factory, String ghLoc) {
-        Directory dir = new RAMDirectory(ghLoc, true);
-        StorableProperties properties = new StorableProperties(dir);
-        if (!properties.loadExisting())
-            throw new IllegalStateException("Cannot load properties to fetch EncodingManager configuration at: "
-                    + dir.getLocation());
-
-        // check encoding for compatibility
-        properties.checkVersions(false);
-        String acceptStr = properties.get("graph.flag_encoders");
-
-        if (acceptStr.isEmpty())
-            throw new IllegalStateException("EncodingManager was not configured. And no one was found in the graph: "
-                    + dir.getLocation());
-
-        int bytesForFlags = 4;
-        try {
-            bytesForFlags = Integer.parseInt(properties.get("graph.bytes_for_flags"));
-        } catch (NumberFormatException ex) {
-        }
-        return new EncodingManager(factory, acceptStr, bytesForFlags);
-    }
-
     public int getBytesForFlags() {
         return bitsForEdgeFlags / 8;
     }
 
-    private void registerEncoder(AbstractFlagEncoder encoder) {
+    private void addEncoder(AbstractFlagEncoder encoder) {
         if (encoder.isRegistered())
             throw new IllegalStateException("You must not register a FlagEncoder (" + encoder.toString() + ") twice!");
 
@@ -243,7 +295,7 @@ public class EncodingManager implements EncodedValueLookup {
     /**
      * @return true if the specified encoder is found
      */
-    public boolean supports(String encoder) {
+    public boolean hasEncoder(String encoder) {
         return getEncoder(encoder, false) != null;
     }
 
@@ -290,7 +342,7 @@ public class EncodingManager implements EncodedValueLookup {
      */
     public IntsRef handleWayTags(ReaderWay way, long includeWay, long relationFlags) {
         IntsRef edgeFlags = createEdgeFlags();
-        for (OSMTagParser parser : sharedEncodedValueMap.values()) {
+        for (TagParser parser : sharedEncodedValueMap.values()) {
             parser.handleWayTags(edgeFlags, way, includeWay, relationFlags);
         }
         for (AbstractFlagEncoder encoder : edgeEncoders) {
@@ -466,7 +518,7 @@ public class EncodingManager implements EncodedValueLookup {
     public <T extends EncodedValue> T getEncodedValue(String key, Class<T> encodedValueType) {
         EncodedValue ev = encodedValueMap.get(key);
         if (ev == null)
-            throw new IllegalArgumentException("Cannot find encoded value " + key + " in collection: " + ev);
+            throw new IllegalArgumentException("Cannot find EncodedValue " + key + " in collection: " + ev);
         return (T) ev;
     }
 
@@ -479,8 +531,7 @@ public class EncodingManager implements EncodedValueLookup {
         return encoder.toString() + "." + str;
     }
 
-    // for now keep private as public IntsRef is too ugly and relationFlags is unclear
-    interface OSMTagParser {
+    public interface TagParser {
         IntsRef handleWayTags(IntsRef edgeFlags, ReaderWay way, long allowed, long relationFlags);
     }
 }
diff --git a/core/src/main/java/com/graphhopper/storage/CHGraph.java b/core/src/main/java/com/graphhopper/storage/CHGraph.java
index 4f7000704..d01ace9e8 100644
--- a/core/src/main/java/com/graphhopper/storage/CHGraph.java
+++ b/core/src/main/java/com/graphhopper/storage/CHGraph.java
@@ -29,7 +29,6 @@ import com.graphhopper.util.EdgeIteratorState;
  * Extended graph interface which supports Contraction Hierarchies. Ie. storing and retrieving the
  * levels for a node and creating shortcuts, which are additional 'artificial' edges to speedup
  * traversal in certain cases.
- * <p>
  *
  * @author Peter Karich
  */
diff --git a/core/src/main/java/com/graphhopper/storage/GraphHopperStorage.java b/core/src/main/java/com/graphhopper/storage/GraphHopperStorage.java
index f9832ae9f..b3f5a5082 100644
--- a/core/src/main/java/com/graphhopper/storage/GraphHopperStorage.java
+++ b/core/src/main/java/com/graphhopper/storage/GraphHopperStorage.java
@@ -65,7 +65,7 @@ public final class GraphHopperStorage implements GraphStorage, Graph {
             throw new IllegalArgumentException("GraphExtension cannot be null, use NoOpExtension");
 
         if (encodingManager == null)
-            throw new IllegalArgumentException("EncodingManager needs to be non-null since 0.7. Create one using new EncodingManager or EncodingManager.create(flagEncoderFactory, ghLocation)");
+            throw new IllegalArgumentException("EncodingManager needs to be non-null since 0.7. Create one using EncodingManager.create or EncodingManager.create(flagEncoderFactory, ghLocation)");
 
         this.encodingManager = encodingManager;
         this.dir = dir;
diff --git a/core/tmp.tsv b/core/tmp.tsv
deleted file mode 100644
index 811dcd743..000000000
--- a/core/tmp.tsv
+++ /dev/null
@@ -1,81 +0,0 @@
-https://github.com/graphhopper/graphhopper/blob/master/docs/core/translations.md			ADD YOUR LANGUAGE HERE <- Please read the docs								 																																	
-41				Ahmed Hamdy	Xuacu Saturio	Andy Stoycheff	Albert Rovira Joan Montané	Lukas Aron 	Michael Krog	Peter / Manfred Boldtrn 	Emux	Verdulo	Ricardo Champa Carlos Alonso  Franco Benedetti	Anahita Sanandaji Mohsen Mahdieh	Mark Cupitt	Aleksi Kinnunen	Nicolas Gillet	François Bonzon	Carlos Alonso Susana Salvador	Yosef Or Boczko	Ivan Krešić	Christina	László Egerszegi, Gábor Babos	Diego Guidi	Kazuki Nishiura	Minpa Lee	Rimvydas Zubkus	Nirab Pudasaini	Frans-Joseph	Agata Grzybek, Verdulo	Marcelo Soares Souza Felipe L. Nelson A. de Oliveira André Reis	Luis Costa Bruno Marques Marcos Oliveira	Madalina Ionescu Denis Popete	Andrey Ivanov Maxim Dubinin d1g	Dušan Kazik                                     Pavol Kostolný	Natasa Cah Peter Klofutar	Filip Živanović	Mattias Bengtsson	Necdet Bünyamin	Serhij Dubyk	Nguyễn Ngọc Hoá Đỗ Văn Hoan	Zhiqiang Zhao	John Lam	
-				dimo.hamdy@gmail.com	xuacusk8@gmail.com	andy@adamsmith.bg	krandalf75@gmail.com jmontane@gmail.com	lukas.aron@gmail.com 	mic@apaq.dk	ma.reiter@gmail.com boldtrn@gmail.com	devemux86@gmail.com		ricardochampa@gmail.com calonrey@gmail.com http://osm.org/user/mweper	anahita_sanandaji@hotmail.com moh.mahdieh@gmail.com	markcupitt@gmail.com	aleksi.kinnunen@outlook.com	nicolas.gillet@market-ip.com yvan.masson@openmailbox.org	francois.bonzon@gmail.com	calonrey@gmail.com ssdiaz28@gmail.com 	yoseforb@gmail.com	ivan.kresic9091@gmail.com	schtiftl@gmx.de	egerszegi.laszlo@eglas.hu, gabor.babos@gmail.com	diegoguidi@gmail.com	dsbnatut@gmail.com	mapplus@gmail.com	rimvydas@zubkus.lt	developer.nirab@gmail.com	fjsimons72@gmail.com milo@dogodigi.net	agatagrzybek@gmail.com	marcelo@juntadados.org felipe.idj@hotmail.com naoliv@gmail.com julisonbr@gmail.com fermuch@cryptolab.net andremfc@gmail.com	costa372@gmail.com baamarques@gmail.com marcosoliveira.2405@gmail.com	madalinaionescu79@gmail.com popetedenis@gmail.com	dron0013@mail.ru sim@gis-lab.info	prescott66@gmail.com 97palo@gmail.com	tasaca@gmail.com peter_klofutar@telemach.net	phykas29@gmail.com	mattias.jc.bengtsson@gmail.com	necdetvaroglu@gmail.com bunyaminteacher@gmail.com 	serhijdubyk@gmail.com	vanhoan90it6@gmail.com	johnthu@gmail.com	hw_lam@yahoo.com.hk	
-	English: en_US	Result/Example or Explanation		Arabic: ar	Asturian: ast	Bulgarian: bg	Catalan: ca	Czech: cs_CZ	Danish: da_DK	German: de_DE	Greek: el	Esperanto: eo	Spanish: es	Farsi: fa	Filipino: fil	Finnish: fi	French: fr_FR	French (Switzerland): fr_CH	Galego: gl	Hebrew: he	Croatian: hr_HR	Upper Sorbian: hsb	Hungarian: hu_HU	Italian: it	Japanese: ja	Korean: ko	Lithuanian: lt_LT	Nepali: ne	Nederlands: nl	Polish: pl	Portuguese (Brazil): pt_BR	Portuguese: pt_PT	Romanian: ro	Russian: ru	Slovakian: sk	Slovenian: sl_SI	Serbian: sr_RS	Swedish: sv_SE	Turkish: tr	Ukrainian: uk	Vietnamese: vi_VI	simpl. Chinese: zh_CN	trad. Chinese: zh_HK	-
-continue	continue			استمر	sigue	продължи	continua	pokračujte	fortsæt	dem Straßenverlauf folgen	συνεχίστε	pluu	continúa	 ادامه دهید	tuwirín ang daán	jatka	continuez	continuez	continúe	להמשיך	nastavite	runjewon	haladjon tovább	continua	進む	계속	tęskite	गहिरख्नुहोस	Ga rechtdoor	kontynuuj	continuar	continuar	continuă	Продолжите движение	pokračujte	nadaljujte	nastavite	fortsätt	devam	продовжуйте	tiếp tục	继续	繼續	
-continue_onto	continue onto %1$s	continue onto road xy		استمر في %1$s 	sigue per %1$s	продължи по %1$s	continua per %1$s	pokračujte na %1$s	fortsæt på %1$s	dem Straßenverlauf von %1$s folgen	συνεχίστε στην %1$s	pluu laŭlonge de %1$s	continúa por %1$s	تا %1$s ادامه دهید	magpatuloy papunta sa %1$s	jatka tielle %1$S	continuez sur %1$s	continuez sur %1$s	continúe por %1$s	להמשיך לתוך %1$s	nastavite na %1$s	runjewon na %1$s	haladjon tovább erre: %1$s	continua su %1$s	%1$sまで進む	%1$s 계속 이동	tęskite toliau %1$s	%1$s गहिरख्नुहोस	blijf op %1$s	kontynuuj na %1$s	continue na %1$s	continue na %1$s	continuă pe %1$s	Продолжите движение по %1$s	pokračujte na %1$s	nadaljujte po %1$s	nastavite na %1$s	fortsätt in på %1$s	-e devam %1$s	продовжуйте по „%1$s“	tiếp tục theo %1$s	继续行驶到 %1$s	繼續行駛到 %1$s	
-turn_left	turn left			اتجه يساراً	xira a la izquierda	завий наляво	gira a l'esquerra	odbočte vlevo	drej til venstre	links abbiegen	στρίψτε αριστερά	turniĝu maldekstren	gira a la izquierda	به چپ بپیچید	pagliko kaliwa	käänny vasemmalle	tournez à gauche	tournez à gauche	vire por esquerda	שמאלה	skrenite lijevo	nalěwo wotbočić	forduljon balra	gira a sinistra	左に曲がる	좌회전	sukite į kairę	बाया मोड्नुहोस 	linksaf	skręć w lewo	vire à esquerda	vire à esquerda	schimbați direcția la stânga	Поверните налево	odbočte doľava	zavijte levo	skrenite levo	sväng vänster	dön sol 	Поверніть ліворуч	rẽ trái	左转	左轉	
-turn_right	turn right			اتجه يميناً	xira a la drecha	завий надясно	gira a la dreta	odbočte vpravo	drej til højre	rechts abbiegen	στρίψτε δεξιά	turniĝu dekstren	gira a la derecha	به راست بپیچید	pagliko karapatan	käänny oikealle	tournez à droite	tournez à droite	vire por dereita	ימינה	skrenite desno	naprawo wotbočić	forduljon jobbra	gira a destra	右に曲がる	우회전	sukite į dešinę	दाया मोड्नुहोस 	rechtsaf	skręć w prawo	vire à direita	vire à direita	schimbați direcția la dreapta	Поверните направо	odbočte doprava	zavijte desno	skrenite desno	sväng höger	dön sağ 	Поверніть праворуч	rẽ phải	右转	右轉	
-turn_slight_left	turn slight left			إستدر لليسار قليلا	xira llixeramente a la izquierda	завий леко наляво	gira lleugerament a l'esquerra	odbočte mírně vpravo	drej lidt til venstre	leicht links abbiegen	στρίψτε λοξά αριστερά	turniĝetu maldekstren	gira leve a la izquierda	کمی به چپ بپیچید	pagliko bahagyang kaliwa	käänny loivasti vasemmalle	tournez légèrement à gauche	tournez légèrement à gauche	vire á esquerda	מעט שמאלה	skrenite blago lijevo	zlochka nalěwo wotbočić	forduljon enyhén balra	gira leggermente a sinistra	左に曲がる	왼쪽 방향	laikykite kairiau	थोरै बाया मोड्नुहोस 	houd links aan	skręć delikatnie w lewo	curva suave à esquerda	vire à curva ligeira à esquerda	schimbați direcția la ușor la stânga	Плавно поверните налево	odbočte mierne doľava	zavijte rahlo levo	skrenite blago levo	sväng svagt vänster	dön hafif sola	Поверніть трохи лівіше	rẽ trái nhẹ	偏左转	左轉	
-turn_slight_right	turn slight right			إستدر لليمين قليلا	xira llixeramente a la drecha	завий леко надясно	gira lleugerament a la dreta	odbočte mírně vpravo	drej lidt til højre	leicht rechts abbiegen	στρίψτε λοξά δεξιά	turniĝetu dekstren	gira leve a la derecha	کمی به راست بپیچید	pagliko bahagyang kanan	käänny loivasti oikealle	tournez légèrement à droite	tournez légèrement à droite	vire á dereita	מעט ימינה	skrenite blago desno	zlochka naprawo wotbočić	forduljon enyhén jobbra	gira leggermente a destra	右に曲がる	오른쪽 방향	laikykite dešiniau	थोरै दाया मोड्नुहोस 	houd rechts aan	skręć delikatnie w prawo	curva suave à direita	vire à curva ligeira à direita	schimbați direcția la ușor la dreapta	Плавно поверните направо	odbočte mierne doprava	zavijte rahlo desno	skrenite blago desno	sväng svagt höger	dön hafif sağa	Поверніть трохи правіше	rẽ phải nhẹ	偏右转	右轉	
-turn_sharp_left	turn sharp left			اتجه قليلاً لليسار	xira fuerte a la izquierda	завий рязко наляво	gira just a l'esquerra	odbočte ostře doleva	drej skarpt til venstre	scharf links abbiegen	στρίψτε κλειστά αριστερά	turniĝegu maldekstren	gira fuerte a la izquierda	کاملا به چپ بپیچید	pagliko matalim kaliwa	käänny jyrkästi vasemmalle	tournez fort à gauche	tournez fort à gauche	vire por xusto á esquerda	שמאלה בחדות	skrenite oštro lijevo	wótrje nalěwo wotbočić	forduljon élesen balra	gira nettamente a sinistra	左に曲がる	왼쪽 방향	staigiai sukite kairėn	धेरै बाया मोड्नुहोस 	ga linksaf	skręć ostro w lewo	curva acentuada à esquerda	vire à curva apertada à esquerda	schimbați direcția la brusc la stânga	Резко поверните налево	odbočte ostro doľava	zavijte ostro levo	skrenite oštro levo	sväng kraftigt vänster	dön sola keskin dönüş	Різко поверніть ліворуч	rẽ trái ngay	左急转	左急轉	
-turn_sharp_right	turn sharp right			اتجه قليلاً لليمين	xira fuerte a la drecha	завий рязко надясно	gira just a la dreta	odbočte ostře doprava	drej skarpt til højre	scharf rechts abbiegen	στρίψτε κλειστά δεξιά	turniĝegu dekstren	gira fuerte a la derecha	کاملا به راست بپیچید	pagliko matalim karapatan	käänny jyrkästi oikealle	tournez fort à droite	tournez fort à droite	vire por xusto á dereita	ימינה בחדות	skrenite oštro desno	wótrje naprawo wotbočić	forduljon élesen jobbra	gira nettamente a destra	右に曲がる	오른쪽 방향	staigiai sukite dešinėn	धेरै दाया मोड्नुहोस 	ga rechtsaf	skręć ostro w prawo	curva acentuada à direita	vire à curva apertada à direita	schimbați direcția la brusc la dreapta	Резко поверните направо	odbočte ostro doprava	zavijte ostro desno	skrenite oštro desno	sväng kraftigt höger	dön sağa keskin dönüş	Різко поверніть праворуч	rẽ phải ngay	右急转	右急轉	
-keep_left	keep left			احفظ الشمال	sigui pela izquierda		estigues a l'esquerra		Hold til venstre	links halten	μείνετε αριστερά	veturu ĉe maldekstra flanko	mantente a la izquierda	از سمت چپ حرکت کنید			restez sur la gauche	restez sur la gauche		להיצמד לשמאל			tartson balra	tieni la sinistra					houd links aan	trzymaj się lewej strony	mantenha-se à esquerda			Держитесь левее	držte sa vľavo	držite se levo		håll till vänster		Тримайтеся ліворуч				
-keep_right	keep right			احفظ اليمين	sigui pela derecha		estigues a la dreta		Hold til højre	rechts halten	μείνετε δεξιά	veturu ĉe dekstra fllanko	mantente a la derecha	از سمت راست حرکت کنید			restez sur la droite	restez sur la droite		להיצמד לימין			tartson jobbra	tieni la destra					houd rechts aan	trzymaj się prawej strony	mantenha-se à direita			Держитесь правее	držte sa vpravo	držite se desno		håll till höger		Тримайтеся праворуч				
-turn_onto	%1$s onto %2$s	turn left onto B268		%1$s خلال %2$s	%1$s per %2$s	%1$s по %2$s	%1$s per %2$s	%1$s na %2$s	%1$s ind på %2$s	%1$s auf %2$s	%1$s στην %2$s	%1$s al %2$s	%1$s por %2$s	 از %1$s به %2$s وارد شوید	%1$s papunta sa %2$s	%1$S tielle %2$S	%1$s sur %2$s	%1$s sur %2$s	%1$s por %2$s	יש לפנות %1$s לתוך %2$s	%1$s na %2$s	%1$s na %2$s	%1$s erre: %2$s	%1$s su %2$s	%1$sに曲がって%2$sに入る	%2$s로 %1$s	%1$s į %2$s	%2$s मा %1$s मोड्नुहोस 	%1$s naar %2$s	%1$s na %2$s	%1$s na %2$s	%1$s para %2$s	%1$s pe %2$s	%1$s на %2$s	%1$s na %2$s	%1$s na %2$s	%1$s na %2$s	%1$s in på %2$s	%1$s %2$s	%1$s на „%2$s“	%1$s theo %1$s	%1$s 到  %2$s	%1$s 到 %2$s	
-u_turn	make a U-turn			الدوران للإتجاه المعاكس	da vuelta atrás		fes la volta		Lav en U-vending	wenden	κάνετε αναστροφή	turniĝu malantaŭen	da la vuelta	وارد دور بردگردان شوید			faites demi-tour	faites demi-tour		לבצע פניית פרסה			forduljon meg	fai una inversione a U					keer om	zawróć	faça um retorno			Развернитесь	otočte sa o 180°	zavijte za 180°		gör en u-sväng		Розверніться				
-unknown	unknown instruction sign '%1$s'	for future compatibility we sometimes need to display an unknown instruction on the client, here it would be: unknown instruction sign '123'		علامة غير معرفة  '%1$s' 	signu indicador desconocíu '%1$s'		instrucció desconeguda «%1$s»			unbekanntes Richtungszeichen  '%1$s'	άγνωστη οδηγία '%1$s'	nekonata instrukcio “%1$s”	señal de instrucción «%1$s» desconocida	علامت راهنمایی ناشناخته '%1$s'			indication inconnue '%1$s'	indication inconnue '%1$s'		שלט הנחייה לא מוכר '%1$s'			ismeretlen jelzőtábla: %1$s	sconosciuto %1$s					onbekende richtingaanwijzer '%1$s'	nieznana instrukcja '%1$s'	sinalização desconhecida '%1$s'			Неизвестная инструкция '%1$s'		neznano navodilo '%1$s'				Невідома інструкція „%1$s“				
-web.search_button	Search			ابحث	Buscar	Търсене	Cerca	Vyhledat	Søg	Suche	Αναζήτηση	Serĉi	Buscar	جستجو	Paghahanap	Etsi	Rechercher	Rechercher	buscar	חיפוש	Pretraži	pytaj	Keresés	Ricerca	検索	탐색	Ieškoti	खोज 	zoek	Szukaj	Pesquisar	Pesquisar	Caută	Поиск	Vyhľadať	Išči	Pretraži	Sök	ara	Пошук	Tìm	搜索	搜尋	
-web.from_hint	From	Initial placeholder in search box 		من	Dende	От	Des de	Z	Fra 	Von	Αφετηρία	El	Desde	از	mula sa 	Lähtöpaikka	De	De	dende	מוצא	Od	wot	Innen	Da	出発地点	출발	Nuo	सुरु 	van	Z	De	De	De la	От	Odkiaľ	Od 	Od	Från	-den 	Від	Từ	起点	起點	
-web.via_hint	Via	Initial placeholder in search box 		خلال	Pasando per	през	Passant per	Přes 	Via	Über	Μέσω	Tra	Pasando por	از طریق		Reittipiste	Via	Via	Vía	דרך	Preko	přez	Ezen keresztül	attraverso	経由	경유	Per	बाट	via	Przez	Via	Por	Prin	Через	Cez	Preko	Preko	Via	araciligi ile	через	Qua	途经点	途經	
-web.to_hint	To	Initial placeholder in search box 		إلي	Fasta	До	Cap a	Do	Til	Nach	Προορισμός	Al	Hasta	به	upang sa	Määränpää	À	À	ata	יעד	Do	do	Ide	A	目的地点	도착	Iki	अन्त्य	naar	Do	Para	Para	La	До	Kam	Do	Do	Till	yönüne	До	Đến	终点	目的地	
-web.more_button	more			المزيد	más	още	més	více	Mere	mehr	περισσότερα	pli	más	بیشتر	mas	lisää	plus	plus	máis	עוד	više	wjac	tovább	altro	詳細	더보기	dar	अझै	meer	więcej	mais	mais	mai mult	еще	viac	več	više	fler	daha fazlası	ще	thêm	更多	更多	
-web.gpx_export_button	GPX export			GPX التصدير	Esportar GPX	GPX експорт	Exporta a GPX	Export do GPX	Eksportér GPX-fil	GPX export	Εξαγωγή GPX	Elporti GPX	Exportar GPX	دریافت به صورت GPX	GPX Export	GPX-tuonti	Export GPX	Export GPX	GPX Exportación	ייצוא GPX	Izvezi kao GPX	eksport do GPX	GPX export	Esporta GPX	GPX形式でエクスポート	GPX 내보내기	GPX eksportas	GPX मा परिबर्तन गर्नुहोस	GPX export	Eksportuj GPX	Exportar GPX	Exportar GPX	Exportă GPX	Экспорт GPX	Export do GPX	Izvozi GPX	Izvezi kao GPX	exportera GPX-fil	GPX ihracat	Експорт в GPX	Xuất GPX	GPX导出	GPX格式輸出	
-web.route_info	%1$s will take %2$s	34km will take 50min		%1$s ستاخذ %2$s	%1$s tardaràs %2$s	%1$s ще отнемат %2$s	%1$s trigaràs %2$s	%1$s bude trvat %2$s	%1$s med køretid %2$s	%1$s werden %2$s brauchen	%1$s σε %2$s	%1$s daŭros %2$s	%1$s tardará %2$s 	مسافت %1$s به مدت %2$s طول خواهد کشید	%1$s ay magdadala sa %2$s	%1$s kestää %2$s	%1$s durera %2$s 	%1$s durera %2$s 	%1$s tardará %2$s	%1$s ייקחו %2$s	%1$s trajat će %2$s	za %1$s so trjeba %2$s	%1$s ennyi ideig tart: %2$s	%1$s in %2$s	%1$s 所要時間 %2$s	%1$s %2$s 소요	%1$s užtruksite %2$s	%1$s को लागि %2$s लाग्नेछ	%1$s duurt %2$s	%1$s zajmie %2$s	%1$s levará %2$s	%1$s irá demorar %2$s	%1$s durează %2$s	%1$s займет %2$s	%1$s zaberie %2$s	%1$s bo trajalo %2$s	%1$s trajaće %2$s	%1$s med körtid %2$s	%1$s alacak %2$s	%1$s займе %2$s	%1$s mất %2$s	%1$s 的路线，需要 %2$s 时间	%1$s 需時 %2$s	
-web.pt_route_info	arrives at %1$s with %2$s transfers (%3$s)	Arrives at 7:45 PM with 2 transfers (27.47km)		وصول سعت %1$s مع %2$s انتقال (%3$s)	llegada a les %1$s con %2$s tresbordos (%3$s)		arriba a les %1$s amb %2$s transbordaments (%3$s)			Ankunft %1$s mit %2$s Umstiegen (%3$s)	φτάνει στις %1$s με %2$s μεταβιβάσεις (%3$s)	alveno je %1$s kun %2$s transveturiliĝoj (%3$s)	llega a las %1$s con %2$s transferencias (%3$s)	%2$s سفر در زمان %1$s پایان می‌پذیرد (%3$s)			arrivée à %1$s avec %2$s changements (%3$s)	arrivée à %1$s avec %2$s changements (%3$s)		מגיע ב־%1$s עם %2$s החלפות (%3$s)			érkezés %1$s órakor, %2$s átszállással (%3$s)	arrivato alle %1$s con %2$s trasferimenti (%3$s)					aankomst om %1$s met %2$s overstappen (%3$s)	przybycie o %1$s z %2$s przesiadkami (%3$s)	chega às %1$s com %2$s trocas (%3$s)			Прибытие в %1$s с %2$s пересадками (%3$s)		prispe ob %1$s s/z %2$s-imi prestopi (%3$s)				Прибуття до %1$s з %2$s пересадками (%3$s)				
-web.pt_route_info_walking	arrives at %1$s with just walking (%2$s)	In case of 0 transfers we use this text: Arrives at 7:45 PM with just walking (27.47km)		الوصول عند %1$s مشياً (%2$s)	llegada a les %1$s sólo caminando (%2$s)		arriba caminant a les %1$s (%2$s)			Ankunft zu Fuß %1$s (%2$s)	φτάνει στις %1$s απλά περπατώντας (%2$s)	alveno je %1$s nur perpiede (%2$s)	llega sólo caminando a las %1$s (%2$s)	سفر به صورت پیاده روی در زمان %1$s پایان می‌پذیرد (%3$s)			arrivée à pied à %1$s (%2$s)	arrivée à pied à %1$s (%2$s)		מגיע ב־%1$s עם הליכה (%3$s)			érkezés %1$s órakor, csak gyalog (%2$s)	arrivato alle %1$s solocamminando (%2$s)					aankomst om %1$s te voet (%2$s)	przybycie o %1$s pieszo (%2$s)	chega às %1$s caminhando (%2$s)			Прибытие в %1$s пешком (%2$s) 	príchod o %1$s iba chôdzou (%2$s)	prispe ob %1$s s samo hojo (%3$s)				Прибуття до %1$s пішки (%2$s) 				
-web.locations_not_found	Routing not possible. Location(s) not found in the area.			لا يوجد طريق من هذه المنطقة	Nun se puede trazar una ruta. Dalgún llugar nun s'alcuentra nel área	Не са изтеглени упътвания. Търсеното местоположение не е открито.	No hi ha cap ruta. El destí no es troba dins l'àrea.	Navigování není dostupné. Pozice nenalezena v této oblasti.	Kan ikke beregne ruten. Lokation(erne) kan ikke findes i området.	Routing war nicht möglich. Ort(e) nicht gefunden in diesem Gebiet.	Η δρομολόγηση δεν είναι δυνατή. Οι τοποθεσίες δεν βρέθηκαν στην περιοχή.	Vojdifinado ne eblas. Ne trovis loko(j)n en la ĉirkaŭaĵo.	No se ha encontrado la ruta. El destino no se encuentra en el área.	مسیریابی ممکن نیست. محل مورد نظردرناحیه پیدا نشد.	Routing hindi maaari, hindi nahanap Lokasyon sa lugar.	Reittiohjeiden luonti epäonnistui. Paikkaa ei löydy tältä alueelta.	Calcul d'itinéraire impossible. Position(s) non trouvée(s) dans la zone.	Calcul d'itinéraire impossible. Position(s) non trouvée(s) dans la zone.	Non se atopou a ruta. O destino non se atopa na área	אין נתיב ישיר אל היעד. המיקום לא נמצא באזור.	Rutiranje nije moguće. Lokacije nisu pronađene na ovome području.	Čara njeje móžna. Městno so w tutej kónčinje njenamaka.	Útvonaltervezés nem lehetséges. A megadott hely(ek) nem található(k) meg a területen.	Percorso non calcolabile. Località non trovata(e) nell'area.	経路を検索できませんでした．指定の地点が存在しません．	경로를 탐색할 수 없습니다. 이 지역에서 위치를 찾을 수 없습니다.	Neįmanoma sukurti maršruto. Nurodyti taškai nerasti šioje zonoje.	ठाउँ नभेटीनाले बाटो पत्ता लगाउन सकिएन	Route niet mogelijk. Locatie(s) niet gevonden.	Nie można wyznaczyć trasy. Lokalizacja(e) nie została(y) znalezione. 	Rota inviável. Localização(ões) não encontrada(s) na área.	Roteamento impossível. Localização(ões) não encontrada(s) na área.	Traseul nu este posibil. Locul(locurile) nu pot fi găsite în zonă.	Построить маршрут невозможно. Не определено местоположение.	Navigovanie nie je možné. Umiestnenie nebolo nájdené v oblasti.	Usmerjanje ni mogoče. Lokacije ni bilo mogoče najti na tem območju.	Rutiranje nije moguće. Lokacije nisu pronađene na ovome području.	Kan inte beräkna rutt. Platsen eller platserna kan inte hittas i området.	Rota planlanamadı. Bölgede yer bulunamadı.	Побудова маршруту неможлива. Місцезнаходження не визначено.	Không tìm thấy lộ trình! Các điểm đã chọn không tìm thấy trong vùng này.	地点未找到	找不到起點/目的地	
-web.bike	Bike			دراجة	Bicicleta	Велосипед	Bicicleta	Kolo	Cykel	Fahrrad	Ποδήλατο	Biciklo	Bicicleta	دوچرخه	Bike	Pyörällä	Vélo	Vélo	Bicicleta	אופניים	Bicikl	koleso	Kerékpár	Bicicletta	自転車	자전거	Dviratis	बाईक 	fiets	Rower	Bicicleta	Bicicleta	bicicletă	Велосипед	Bicykel	Kolo	Bicikl	Cykel	Bisiklet	Велосипед	Xe đạp	自行车	單車	
-web.racingbike	Racing Bike			دراجة سباق	Bici de carreres	Състезателно колело	Bicicleta de curses	Závodní kolo	Racercykel	Rennrad	Αγωνιστικό ποδήλατο	Sporta biciklo	Bicicleta de carrera	دوچرخه کورسی	Racing Bike	Kilpapyörällä	Vélo de course	Vélo de course	Bicleta de carreiras	מסלולי אופניים	Trkaći motocikl	wubědźowanske koleso	Versenykerékpár	Bici da corsa	レースバイク	경주용 자전거	Plentinis dviratis	छिटो गतिका बाईक	racefiets	Rower wyścigowy	Bicicleta de corrida	Bicicleta de corrida	bicicletă de curse	Гоночный велосипед	Cestný bicykel	Cestno kolo	Trkački motocikl	Tävlingscykel	yaris bisikleti	Шосейний велосипед	Xe đua	竞技自行车	競技單車	
-web.mtb	MTB	Mountain Bike		دراجة جبلية	Bici de montaña	Планинско колело	Bicicleta de muntanya	Horské kolo	Mountain bike	Mountainbike	Ποδήλατο βουνού	Montara biciklo	Bicicleta de montaña	دوچرخه کوهستان	Mountain Bike	Maastopyörällä	VTT	VTT	Bicicleta de montaña	אופני הרים	Brdski bicikl	mountainbike	Hegyi kerékpár	Mountainbike	マウンテンバイク	산악자전거	MTB dviratis	माउन्टेन बाईक	mountainbike	Rower górski	Mountainbike	Bicicleta de montanha	Mountainbike	Горный велосипед	Horský bicykel	Gorsko kolo	Brdski bicikl	Mountain bike	dag bisikleti	Гірський велосипед	Xe leo núi	山地自行车	越野單車	
-web.car	Car			سيارة	Coche	Автомобил	Cotxe	Automobil	Bil	Auto	Αυτοκίνητο	Aŭto	Automóvil	ماشین	kotse	Autolla	Voiture	Voiture	automóbil	מכונית	Automobil	awto	Autó	Auto	車	자동차	Automobilis	गाडी	auto	Samochod	Carro	Carro	mașină	Автомобиль	Automobil	Avto	Automobil	Bil	Otomobil	Автомобіль	Ô tô	驾车	汽車	
-web.foot	Foot			مشياً	A pie	Пеш	A peu	Pěšky	Gang	Zu Fuß	Πεζός	Piede	A pie	پیاده	lumakad	Kävellen	À pied	À pied	A pé	רגל	Pješak	pěši	Gyalogos	A piedi	徒歩	도보	Pėsčiomis	पैदल	te voet	Pieszo	A pé	A pé	pe jos	Пешком	Pešo	Hoja	Pešak	Gång	Yürüyerek	Пішки	Đi bộ	步行	步行	
-web.hike	Hike	https://en.wikipedia.org/wiki/Hiking		نزهة	Senderismu		Senderisme			Wandern	Πεζοπορία	Marŝade	Senderismo	پیاده‌روی			Randonnée pédestre	Randonnée pédestre		טיול רגלי			Túrázás	Scarpinata		하이킹			wandelen	Szlakiem turystycznym	Caminhada		Drumeție	Пеший туризм	Túra	Pohodništvo		Vandra		Пішохідний туризм				
-web.small_truck	Small Truck			شاحنة صغيرة	Camioneta		Camioneta	Dodávka		Kleintransporter	Μικρό φορτηγό	Eta kamiono	Camioneta	وانت			Camionnette	Camionnette		משאית קטנה	Mali kamion		Kisteherautó	Furgone		소형 트럭			kleine vrachtwagen	Mała ciężarówka	Caminhão pequeno		Camionetă	Лёгкий грузовик	Dodávka	Majhen tovornjak	Mali kamion			Мала вантажівка	Xe tải nhỏ		小型貨車	
-web.bus	Bus			باص	Autobús		Autobús	Autobus		Bus	Λεωφορείο	Aŭtobuso	Autobús	اتوبوس			Bus	Bus		אוטובוס	Autobus		Busz	Tram		버스			bus	Autobus	Ônibus		Autobuz	Автобус	Autobus	Avtobus	Autobus	Buss		Автобус		公交车	巴士	
-web.truck	Truck			شاحنة	Camión		Camió	Nákladní automobil		LKW	Φορτηγό	Kamiono	Camión	کامیون			Camion	Camion		משאית	Kamion		Teherautó	Camion		트럭			vrachtwagen	Ciężarówka	Caminhão		Camion	Грузовой автомобиль	Jazdná súprava	Tovornjak	Kamion	Lastbil		Велика вантажівка			貨車	
-web.staticlink	static link			رابط ثابت	enllaz estáticu	статична връзка	Enllaç	neměnný odkaz	Direkte link	Link	στατική διεύθυνση	konstanta ligilo	enlace estático	مسیر ثابت	static link		Lien	Lien	Enlace	קישור קבוע	statička poveznica	link	Statikus hivatkozás	permalink	パーマリンク	정적 링크	statinė nuoroda	ईस्ट्यातिक लिंक	statische link	link	Link estático	Ligação permanente	link	Постоянная ссылка	nemenný odkaz	Povezava	statička veza	direktlänk	duragan baglanti	статичне посилання	liên kết tĩnh	静态链接	鏈接	
-web.motorcycle	Motorcycle			دراجة نارية	Motocicleta	Мотоциклет	Motocicleta	Motocykl	Motorcykel	Motorrad	Μοτοσυκλέτα	Motorciklo	Motocicleta	موتورسیکلت	motorsiklo	Moottoripyörällä	Moto	Moto	Motocicleta	אופנוע	Motocikl	motorske	Motorkerékpár	Moto	オートバイ	모터사이클	Motociklas	मोटरसाइकल 	motorfiets	Motocykl	Motocicleta	Motocicleta	Motocicletă	Мотоцикл	Motocykel	Motorno kolo	Motocikl	Motorcykel	motorsiklet	Мотоцикл	Mô tô	摩托车	電單車	
-via	via			من خلال	pasando per	през	passant per	přes 	via	über	μέσω	tra	pasando por	از طریق	sa pamamagitan ng	kautta	via	via	vía	דרך	preko	via	ezen át:	attraverso	経由	경유	per	बाट	via	przez	via	por	prin	через	cez	preko	preko	via	araciligi ile	через	qua	途经	途經	
-finish	arrive at destination	Title of the finish point marker		النهاية	¡Aportasti!	Крайна цел!	Has arribat!	Cíl!	Fremme!	Ziel erreicht	άφιξη στον προορισμό	Celo!	¡Fin del recorrido!	پایان!	Tapusin!	Olet perillä!	Arrivée	Arrivée	Obxectivo acadado	הגעת ליעד	Cilj!	dojěł	érkezés a célponthoz	Arrivo!	目標達成	도착!	Tikslas pasiektas!	सकियो	Bestemming bereikt	Jesteś u celu!	Destino alcançado!	Chegou ao seu destino!	obiectiv atins	Цель достигнута!	Cieľ!	Konec!	Cilj!	Framme!	Bitti!	Ви прибули до пункту призначення!	Kết thúc!	终点到达	到達目的地	
-hour_abbr	h	hour		ساعة	h	ч	h	h	tim	h	h	h	h	ساعت	h	h	h	h	h	שע׳	h	hodź.	óra	hh	時間	시간	h	घण्टा	u	g	h	h	h	ч	h	ur	h	 tim	s	 год	g	小时	小時	
-day_abbr	d	day		يوم	d	д	d	d	 d	d	d	tago(j)	d	روز	d	pv	j	j	d	דק׳	d	dny	nap	gg	日	일	d	दिन	d	d	d	d	z	д	d	dni	d	 d	g	 д	n	天	天	
-min_abbr	min	minute		دقيقة	min	мин	min	min	 min	min	min	min	min	دقیقه	min	min	min	min	min	דקות	min	mjeń	perc	mm	分	분	min	मिनेट	min	min	min	min	min	мин	min	min	min	 min	dak	 хв	p	分钟	分鐘	
-km_abbr	km	kilometer		كيلومتر	km	км	km	km	 km	km	km	km	km	کیلومتر	km	km	km	km	km	ק״מ	km	km	km	km	km	km	km	किलोमीटर 	km	km	km	km	km	км	km	km	km	 km	km	 км	km	公里	公里	
-m_abbr	m	meter		متر	m	m	m	m	 m	m	m	m	m	متر	m	m	m	m	mts	מ׳	m	m	m	mt	m	m	m	मीटर	m	m	m	m	m	м	m	m	m	 m	m	 м	m	米	米	
-mi_abbr	mi	miles		ميل	mi	mi	mi	mi	 mi	mi	mi	mi	mi	مایل	mi	mi	mi	mi	mi	מייל	min	mile	mérföld	mi	mi	마일	mi	माइल्स	mi	mi	mi	mi	mi	ми	mi	milj	min	 mi	mi	 милі	dặm	英里	英里	
-ft_abbr	ft	foot		قدم	pies	ft	pe	ft	fod	ft	ft	ft	ft	فوت	ft	ft	ft	ft	ft	רגל	ft	ft	láb	ft	ft	도보	ft	फुट	ft	ft	pés	ft	picioare	фт	ft	čevljev	ft	 ft	ft	 фути	ft	英尺	英尺	
-road	road			طريق	carretera	улица	carretera	silnice	gade	Straße	δρόμος	vojo	carretera	جاده	kalsada 	tie	route	route	estrada	כביש	cesta	dróha	út	strada	路	피트	kelias	सडक	weg	droga	estrada	estrada	stradă	дорога	cesta	cesta	put	gata	yol	дорога	đường	道路	道路	
-off_bike	get off the bike			انزل الدراجة	desmonta de la bici	в този участък трябва да слезеш от колелото!	Tros a peu	sesedněte z kola	hop af cyklen	Schiebestrecke	κατεβείτε από το ποδήλατο	debicikliĝu	bájate de la bicicleta	از دوچرخه پیاده شوید	seksyon pagtulak 	taluta pyörää	Descendez du vélo	Descendez du vélo	sector a pé	לרדת מהאופניים	siđite sa bicikla	ćišćeć	szálljon le a kerékpárról	sezione a piedi	自転車を押して歩く	자전거에서 하차	nulipkite nuo dviračio	बाईक बाट ओर्लनुहोस	voetpad	zejdź z roweru	descer da bicicleta	saia da bicicleta	zonă pentru împins	Спуститесь с велосипеда	zosadnite z bicykla	stopite s kolesa	siđite sa bicikla	hoppa av cykeln	bisikletten inmek	злізьте з велосипеда	xuống khỏi xe đạp	下自行车		
-cycleway	cycleway			طريق دائري	carril bici	велоалея	via ciclista	cyklotrasa	cykelvej	Radweg	ποδηλατόδρομος	bicikla vojo	ciclovía 	مسیر دوچرخه	cycleway	pyörätie	piste cyclable	piste cyclable	vía ciclista	דרך לאופניים	biciklistička staza	kolesowarski puć	kerékpárút	pista ciclabile	自転車用道路	자전거도로	dviračių takas	साइकल हिड्ने बाटो	fietspad	trasa rowerowa	ciclovia	ciclovia	pistă pentru biciclete	велодорожка	cyklotrasa	kolesarska steza	biciklistička staza	cykelväg	bisiklet yolu	велосипедна доріжка	đường xe đạp	自行车道	單車徑	
-way	way			طريق	vía	път	camí	cesta	vej	Weg	δρόμος	vojo	camino	مسیر	landas	tie	chemin	chemin	vía 	דרך	put	puć	út	via	道	도로	kelias	बाटो	weg	trasa	caminho	caminho	cale	путь	cesta	pot	put	väg	yol	шлях	đường	路	道路	
-small_way	small way	something accessible only for foot or where one has to got off the bike. 		طريق صغير	caminucu		corriol			kleiner Weg	μικρός δρόμος	vojeto	camino chico	مسیر باریک			sentier	sentier		דרך צרה			gyalogút	sentiero		소로			voetpad	ścieżka	caminho curto		potecă	узкий путь	úzka cesta	ozka pot				вузький шлях		小路	小路	
-paved	paved			مرصوف	pavimentao	асфалтиран	pavimentat	zpevněná	brolagt	befestigt	ασφαλτοστρωμένος	pavima	pavimentado	خط کشی شده	aspaltado 	päällystetty	revêtu	revêtu	asfaltada	סלולה	asfaltiran	přitwjerdźeny	burkolt út	pavimentata	舗装された道	포장	grįstas	पक्कि	verhard	utwierdzona	pavimentada	pavimentado	pavat	с покрытием	spevnená	tlakovana	asfaltiran	belagd	kaldırım	з покриттям	đường lát	路面铺就		
-unpaved	unpaved			غير مرصوف	sin pavimentar	черен	sense pavimentar	nezpevněná	grusvej	unbefestigt	χωματόδρομος	nepavima	no pavimentado	خط کشی نشده	hindi aspaltado	päällystämätön	non revêtu	non revêtu	non pavimentada	לא סלולה	neasfaltiran	njepřitwjerdźeny	burkolatlan út	non pavimentata	未舗装の道	비포장	negrįstas	कच्ची	onverhard	nieutwardzona	não pavimentada	não pavimentada	nepavat	без покрытия	nespevnená	netlakovana	neasfaltiran	obelagd	kaldırımsız yol	без покриття	đường không lát	路面未铺就		
-stopover	waypoint %1$s	waypoint 1		توقف %1$s	pasando per %1$s	прехвърляне %1$s	passant per %1$s	zastávka %1$s	delmål %1$s	Wegpunkt %1$s	σημείο διαδρομής %1$s	%1$s-a haltejo	pasando por %1$s	توقفگاه  %1$s	pamahingahan %1$s	%1$s. pysähdys	escale %1$s	escale %1$s	escala%1$s	נקודת עצירה מס׳ %1$s	zaustavite se za %1$s	mjezycil %1$s	%1$s. útpont	sosta %1$s	%1$sで降りる	경유지 %1$s	sustojimas %1$s	%1$s रोकिने ठाउँ 	marker %1$s	przystanek %1$s	parada %1$s	paragem %1$s	escala %1$s	остановка %1$s	zastávka %1$s	postanek %1$s	zaustavite se za %1$s	delmål %1$s	mola yeri %1$s	зупинка %1$s	chặng dừng chân %1$s	途中休息 %1$s	中途站 %1$s	
-roundabout_enter	Enter roundabout			أدخل الدوران	Entra na rotonda	Влез в кръговото кръстовище	Entra a la rotonda	Vjeďte na kruhový objezd	Kør ind i rundskørslen	In den Kreisverkehr einfahren	Μπείτε στον κυκλικό κόμβο	Enveturu trafikcirklon	Entra en la rotonda	وارد میدان شوید	Lpasok Rotonda	Aja liikenneympyrään	Empruntez le rond-point	Empruntez le giratoire	Entre na rotonda	יש להיכנס לכיכר	Uđite na kružni tok	do kružneho wobchada zajěć	Hajtson be a körforgalomba	Entrare nella rotatoria	円形交差点に入る	로터리 진입	Įvažiuokite į žiedą	घुम्ती मा छिर्नुहोस	ga de rotonde op	Wjedź na rondo	Entre na rotatória	Entre na rotunda	Intrați în sensul giratoriu 	Поверните на кольцо	Vojdite na kruhový objazd	Zapeljite v krožišče	Uđite na kružni tok	Kör in i rondellen	kavşağa gir	В’їжджайте на кільце	Đi vào vòng xoay	进入环岛	進入迴旋處	
-roundabout_exit	At roundabout, take exit %1$s			في الدوران ، أتخذ مخرج   %1$s	Na rotonda, toma la salida %1$s	На кръговото кръстовище използвай изход %1$s	A la rotonda, agafa la %1$sa sortida	Na kruhovém objezdu použijte %1$s. výjezd	I rundkørslen, tag udkørsel %1$s	Im Kreisverkehr Ausfahrt %1$s nehmen	Στον κυκλικό κόμβο βγείτε στην έξοδο %1$s	Ĉe trafikcirklo, elveturu al %1$s	En la rotonda, toma la %1$sª salida	در میدان خروجی %1$s را انتخاب کنید	Sa rotonda, lumabas sa exit %1$s	Liikenneympyrästä poistu %1$s. liittymästä	Au rond-point, prenez la %1$s sortie	Au giratoire, prenez la %1$s sortie	Na rotonda tome a saída %1$s	בכיכר, יש לצאת ביציאה %1$s	Sa kružnog toka izađite na izlaz %1$s	we kružnym wobchadźe %1$s. wujězd wzać	Hajtson ki a körforgalomból itt: %1$s. kijárat	Nella rotatoria, prendere l'uscita %1$s	円形交差点の出口%1$sへ	로터리에서 %1$s 진출	Žiede išvažiuokite %1$s išvažiavime	घुम्तीमा %1$s नम्बर को मोडबाट निस्कनुहोस 	neem afslag %1$s op de rotonde 	Zjedź z ronda %1$s zjazdem	Na rotatória, saia na %1$s saída	Na rotunda, saia na %1$s saída	În sensul giratoriu folosiți ieșirea %1$s	Сверните на %1$s-й съезд	Na kruhovom objazde, ho opustite cez %1$s. výjazd	V krožišču uporabite %1$s. izhod	Sa kružnog toka izađite na izlaz %1$s	I rondellen, ta avfart %1$s	kavşaktan %1$s cıkışa gir	На кільці використовуйте з’їзд %1$s	Tại vòng xoay, rẽ lối rẽ %1$s	在环岛内，使用%1$s出口出环岛	使用 %1$s 出口離開迴旋處	
-roundabout_exit_onto	At roundabout, take exit %1$s onto %2$s	At roundabout, take exit 1 onto "Warrington street"		في الدوران ، أتخذ مخرج   %1$s من خلال %2$s	Na rotonda, toma la salida %1$s haza %2$s	На кръговото кръстовище използвай изход %1$s по %2$s	A la rotonda, agafa la %1$sa sortida cap a %2$s	Na kruhovém objezdu použijte %1$s. výjezd, směrem na %2$s	I rundskørslen, ta udkørsel %1$s ind på %2$s	Im Kreisverkehr Ausfahrt %1$s auf %2$s nehmen	Στον κυκλικό κόμβο βγείτε στην έξοδο %1$s στην %2$s	Ĉe trafikcirklo, elveturu al %1$s-a vojo al %2$s	En la rotonda, toma la %1$sª salida hacia %2$s	در میدان از خروجی %1$s به "%2$s" وارد شوید	Sa rotonda, lumabas sa exit papunta %1$s %2$s	Liikenneympyrästä poistu %1$s. liittymästä suuntaan %2$s	Au rond-point, prenez la %1$s sortie vers %2$s	Au giratoire, prenez la %1$s sortie vers %2$s	Na rotonda, tome a saída %1$s cara %2$s	בכיכר, יש לצאת ביציאה %1$s לתוך %2$s	Sa kružnog toka izađite na izlaz %1$s na %2$s	we kružnym wobchadźe %1$s. wujězd na %2$s wzać	Hajtson ki a körforgalomból itt: %1$s. kijárat, majd hajtson rá erre: %2$s	Nella rotatoria, prendere l'uscita %1$s su %2$s	円形交差点の出口%1$sから%2$sへ	로터리에서 %1$s 진출 후 %2$s 이동	Žiede išvažiuokite %1$s išvažiavime į  %2$s	घुम्तीमा %1$s नम्बर को मोडबाट निस्केर %2$s मा जानुहोस	neem afslag %1$s naar %2$s op de rotonde 	Zjedź z ronda %1$s zjazdem na %2$s	Na rotatória, saia na %1$s saida em direção a %2$s	Na rotunda, saia na %1$s saida em direção a %2$s	În sensul giratoriu folosiți ieșirea %1$s către %2$s	Сверните на %1$s-й съезд на %2$s	Na kruhovom objazde, ho opustite cez %1$s. výjazd na %2$s	V krožišču uporabite %1$s. izhod, da zavijete na %2$s	Sa kružnog toka izađite na izlaz %1$s na %2$s	I rondellen, ta avfart %1$s in på %2$s	kavşaktan %1$s cıkıştan %2$s sokağa gir	На кільці використовуйте з’їзд %1$s на %2$s	Tại vòng xoay, rẽ lối rẽ %1$s vào đường %2$s	在环岛内，使用%1$s出口出环岛，进入%2$s	使用 %1$s 出口離開迴旋處到 %2$s	
-total_ascend	%1$s total ascend	10m total ascend		%1$s اجمالى صعود	%1$s d'ascensu total		%1$s de pujada total	Celkové stoupání %1$s		%1$s Gesamtaufstieg	%1$s συνολική ανάβαση	%1$s supreniro tute	Ascender %1$s en total	مجموع صعود %1$s			%1$s de dénivelé positif	%1$s de dénivelé positif		עלייה כוללת של %1$s	%1$s ukupni uspon		Összes szintemelkedés: %1$s	%1$s di dislivello positivo		%1$s 오르막길			%1$s totale klim	%1$s podejść ogółem	subida de %1$s		urcare %1$s	подъём на %1$s	%1$s celkové stúpanie	Skupni vzpon: %1$s	%1$s ukupni uspon			%1$s загалом підйому	Đi tiếp %1$s nữa		總共上昇 %1$s	
-total_descend	%1$s total descend	5m total descend		%1$s اجمالى نزول	%1$s de descensu total		%1$s de baixada total	Celkové klesání %1$s		%1$s Gesamtabstieg	%1$s συνολική κατάβαση	%1$s malsupreniro tute	Descender %1$s en total	مجموع نزول %1$s			%1$s de dénivelé négatif	%1$s de dénivelé négatif		ירידה כוללת של %1$s			Összes szintcsökkenés: %1$s	%1$s di dislivello negativo		%1$s 내리막길			%1$s totale daling	%1$s zejść ogółem	descida de %1$s		coborâre %1$s	спуск на %1$s	%1$s celkové klesanie	Skupni spust: %1$s				%1$s загалом спуску			總共下降 %1$s	
-way_contains_ford	there is ford along the way			هناك مخاضة على طول الطريق	hai un vau nel camín		hi ha un gual en el camí			es liegt eine Furt auf dem Weg	υπάρχει πέρασμα στο δρόμο	travadejo sur la kurso	hay un vado en el camino	مسیر از رودخانه می‌گذرد			cet itinéraire comprend un passage à gué	cet itinéraire comprend un passage à gué		יש מעבר מים לאורך הדרך			gázló van az útvonalon	c'é un guado sulla strada					Er is een doorwaadbare plaats	bród na trasie				На пути есть брод	popri ceste sa nachádza brod	Na poti je pregaz				На шляху є брід				
-pt_start_trip	enter %1$s	enter a certain public transport line		ادخل %1$s	xubi a  %1$s		entra a %1$s			einsteigen in %1$s	μπείτε στο %1$s	eniru al %1$s	entra en %1$s	وارد %1$s شوید			montez dans %1$s	montez dans %1$s		יש להיכנס אל %1$s			szálljon fel erre: %1$s	prendi %1$s					Neem de %1$s	wsiądź w %1$s	embarque %1$s			Сядьте на %1$s	nastúpte na linku %1$s	Vstopite v/na %1$s				Сядьте на %1$s				
-pt_end_trip	leave %1$s	leave a certain public transport line		مغادرة %1$s	baxa de  %1$s		surt de %1$s			aus %1$s aussteigen	αφήστε το %1$s	eliru el %1$s	sal de %1$s	از %1$s خارج شوید			descendez de %1$s	descendez de %1$s		יש לצאת מ%1$s			szálljon le erről: %1$s	lascia %1$s					Stap uit de %1$s uit	wysiądź z %1$s	desembarque %1$s			Выйдите из %1$s	vystúpte z linky %1$s	Zapustite %1$s				Вийдіть з %1$s				
-pt_transfer_to	change to %1$s	transfer to a different public transport line		انتقل الى %1$s	cambia a  %1$s		canvia a %1$s			umsteigen auf %1$s	αλλάξτε στο %1$s	transveturiĝu al %1$s	cambia a %1$s	مسیر را به %1$s تغییر دهید			changez vers %1$s	changez vers %1$s		להחליף ל%1$s			szálljon át erre: %1$s	cambia con %1$s					Stap over op de %1$s	przesiądź się na %1$s	mude para %1$s			Пересядьте на %1$s	prestúpte na linku %1$s	Prestopite na %1$s				Пересядьте на %1$s				
-web.start_label	Start	Label displayed when clicking on green start marker on map		البداية	Principiu		Punt d'inici	Start		Start	Αφετηρία	Komenco	Punto de partida	شروع			Départ	Départ		התחלה	Početak		Indulás	Partenza		출발			Start	Początek	Início		Pornire	Начало	Začiatok	Začetna točka	Početak			Початок		起点	起點	
-web.intermediate_label	Intermediate	Label displayed when clicking on a intermediate blue marker on map		نقطة عبور	Intermediu		Punt intermig	Zastávka		Zwischenziel	Ενδιάμεσο σημείο	Intercelo	Punto intermedio	نقطه‌ی میانی			Point intermédiaire	Point intermédiaire		אמצע	Posrednik		Köztes célpont	Punto intermedio		경유			Tussenstop	Punkt pośredni	Intermediário		Intermediar	Промежуточная точка	Bod trasy	Vmesna točka	Prelazni			Проміжна точка			途經點	
-web.end_label	End	Label displayed when clicking on red end marker on map		النهاية	Final		Punt final	Cíl		Ziel	Προορισμός	Celo!	Punto de finalización	پایان			Arrivée	Arrivée		סוף	Kraj		Célpont	Arrivo		도착			Einde	Cel	Fim		Sfârșit	Конец	Koniec	Končna točka	Kraj			Кінець			目的地	
-web.set_start	Set as start	Action item in popup menu when right-clicking on map, to set directions start point		ادخل نقطة بدء	Poner como principiu		Defineix com a punt d'inici	Nastavit jako start		Setze als Start	Ορισμός αφετηρίας	Agordi kiel komencon	Fijar como partida	انتخاب به عنوان شروع			Départ de l'itinéraire ici	Départ de l'itinéraire ici		הגדרה כהתחלה	Postavi kao početak		Beállítás kiindulási pontnak	Imposta partenza		출발지로 설정			Stel in als startpunt	Ustaw jako początek	Definir como início		Selectează ca punct de pornire	Установить начало здесь	Nastaviť ako začiatok	Nastavi kot začetno točko	Postavi kao početak			Встановити початок			設置為起點	
-web.set_intermediate	Set intermediate	Action item in popup menu when right-clicking on map, to set a "via" point		ادخل نقطة عبور	Poner como intermediu		Defineix com a punt intermig	Nastavit jako zastávku		Setze als Zwischenziel	Ορισμός ενδιάμεσου σημείου	Agordi kiel intercelon	Fijar como punto intermedio	انتخاب به عنوان نقطه‌ی میانی			Ajouter un point intermédiaire	Ajouter un point intermédiaire		הגדרה כאמצע	Postavi kao posrednik		Beállítás köztes célpontnak	Imposta punto intermedio		경유지로 설정			Stel in als tussenstop	Ustaw jako punkt pośredni	Definir como intermediário		Selectează ca punct intermediar	Установить промежуточной точкой	Nastaviť ako bod trasy	Nastavi kot vmesno točko	Postavi kao prelazni			Додати проміжну точку			設置為途經點	
-web.set_end	Set as end	Action item in popup menu when right-clicking on map, to set directions finish point		ادخل نقطة وصول	Poner como final		Defineix com a punt final	Nastavit jako cíl		Setze als Ziel	Ορισμός προορισμού	Agordi kiel celon	Fijar como finalización	انتخاب به عنوان پایان			Arrivée de l'itinéraire ici	Arrivée de l'itinéraire ici		הגדרה כסוף	Postavi kao kraj		Beállítás célpontnak	Imposta arrivo		도착지로 설정			Stel in als einde	Ustaw jako cel	Definir como fim		Selectează ca punct de sosire	Установить конец здесь	Nastaviť ako koniec	Nastavi kot končno točko	Postavi kao kraj			Встановити кінець			設置為目的地	
-web.center_map	Center map here	Action item in popup menu when right-clicking on map, to set center point at click location		اجعل وسط الخريطة هنا	Centrar el mapa equí		Centra el mapa	Vycentrovat sem mapu		Zentriere Karte hier	Κεντράρισμα χάρτη εδώ	Centrigi mapon ĉi tien	Centrar mapa aquí	تنظیم مرکز صفحه به این نقطه			Centrer la carte ici	Centrer la carte ici		למרכז את המפה לכאן	Postavi kao centar karte		Beállítás a térkép középpontjának	Centra la mappa qui		여기를 지도의 중심으로 설정			Centreer de kaart hier	Centruj mapę tutaj	Centralizar o mapa aqui		Centrează harta aici	Сдвинуть карту сюда 	Vycentrovať mapu sem	Premakni na sredino	Postavi kao centar karte			Відцентрувати мапу тут				
-web.show_coords	Show coordinates	Action item in popup menu when right-clicking on map, to display alert with lat,lng text		اظهر الاحداثيات	Ver coordenaes		Mostra les coordenades	Zobrazit souřadnice		Zeige Koordinaten	Εμφάνιση συντεταγμένων	Montri koordinatojn	Mostrar coordenadas	نمایش مختصات			Afficher les coordonnées	Afficher les coordonnées		הצגת נקודות ציון	Prikaži koordinate		Pozíció megjelenítése	Mostra coordinate	座標を表示	좌표 보기			Laat coordinaten zien	Pokaż współrzędne	Mostrar coordenadas		Arată coordonatele	Показать координаты 	Zobraziť súradnice	Prikaži koordinate	Prikaži koordinate			Показати координати			顯示坐標	
-web.route	Route	meaning "directions" or "itinerary", not "road"		المسار	Ruta		Ruta	Trasa		Route	Διαδρομή	Kurso	Ruta	مسیر			Itinéraire	Itinéraire		דרך	Ruta		Útvonal	Itinerario	経路	경로			Route	Trasa	Rota		Intinerariu	Маршрут	Trasa	Pot	Ruta			Маршрут		路线	路線	
-web.delete_from_route	Delete from Route	Action item in popup menu when right-clicking on a marker, to remove it from directions		احذف من المسار	Quitar de la ruta		Suprimeix el punt de la ruta	Odstranit z trasy		Lösche aus Route	Αφαίρεση από διαδρομή	Forigi el la kurso	Borrar punto de ruta	حذف از مسیر			Supprimer ce point de l'itinéraire	Supprimer ce point de l'itinéraire		מחיקה מהדרך	Izbriši iz rute		Eltávolítás az útvonalról	Elimina dall'itinerario	経路から取り除く	경로에서 삭제			Van route verwijderen	Usuń z trasy	Remover da rota		Șterge din intinerariu	Удалить из маршрута	Odstrániť z trasy	Izbriši iz poti	Izbriši iz rute			Вилучити з маршруту			從路線移除	
-web.marker	Marker	Title for markers on map, also known as "pin".		رمز او علامة	Marcador		Marcador	Značka		Marker	Σημάδι	Marko	Marcador	مارکر			Marqueur	Marqueur		הדגשה	Oznaka		Jelölő	Marker	ピン	마커			Pin	Znacznik	Marca		Punct de interes	Значок	Značka	Oznaka	Oznaka			Значок		标记	標記	
-web.gh_offline_info	GraphHopper API offline?	Error message displayed in red, when API server can't be reached		 واجهة برمجة التطبيقات (API) بلا اتصال؟	¿Cayó la API de GraphHopper?		L'API GraphHopper no té connexió ?	API GraphHopper je offline?		Ist die GraphHopper API offline?	GraphHopper API offline?	Eble GraphHopper-API malfunkcias?	¿API de GraphHopper sin conexión?	گراف‌هاپر در دسترس نیست؟			GraphHopper API hors connexion?	GraphHopper API hors connexion?		‏ GraphHopper API לא מקוון?	GraphHopper API nedostupan		Lehet, hogy a GraphHopper API nem érhető el?	Servizio GraphHopper non disponibile?	サーバに接続できませんでした	GraphHopper API 상태가 오프라인입니까?			GrabHopper API offline?	GraphHopper API nie działa?	API do GraphHopper offline?		Serverul GraphHopper API este disponibil?	GraphHopper API недоступен?	GraphHopper API bez pripojenia?	Je API GraphHopper morda izklopljen?	GraphHopper API nedostupan			GraphHopper API в офлайн режимі?			無法連接 GraphHopper API	
-web.refresh_button	Refresh page	Action item, to refresh page		اعادة تنشيط	Refrescar la páxina		Actualitza la pàgina	Obnovit stránku		Lade Seite neu	Ανανέωση σελίδας	Aktualigi paĝon	Actualizar página	بارگذاری مجدد			Rafraîchir	Rafraîchir		רענון הדף	Osvježi stranicu		Oldal frissítése	Ricarica pagina	更新	새로고침			Ververs pagina	Odśwież stronę	Recarregar página		Reîmprospătează pagina	Обновить страницу	Obnoviť stránku	Osveži stran	Osveži stranicu			Оновити сторінку			刷新網頁	
-web.server_status	Status	Title for server status statistics		الحالة	Estáu		Estat	Stav		Status	Κατάσταση	Stato	Estado	وضعیت			Statut	Statut		מצב	Status		Állapot	Stato	ステータス	상태			Status	Stan	Status		Disponibilitate	Статус сервера	Stav	Stanje	Status			Стан		状态	狀況	
-web.zoom_in	Zoom in	Hint for "+" button on map		تكبير	Averar		Apropa	Přiblížit		Vergrössern	Μεγέθυνση	Pligrandigi	Acercar	بزرگنمایی			Zoom avant	Zoom avant		התקרבות			Nagyítás	Zoom avanti	拡大	확대			Zoom in	Przybliż	Ampliar		Mărește	Приблизить 	Priblížiť	Povečaj		Zooma in		Наблизити		放大	放大	
-web.zoom_out	Zoom out	Hint for "-" button on map		تصغير	Alloñar		Allunya	Oddálit		Verkleinern	Σμίκρυνση	Malgrandigi	Alejar	کوچک‌نمایی			Zoom arrière	Zoom arrière		התרחקות			Kicsinyítés	Zoom indietro	縮小	축소			Zoom uit	Oddal	Reduzir zoom		Micșorează	Отдалить	Oddialiť	Pomanjšaj		Zooma ut		Віддалити		缩小	縮小	
-web.drag_to_reorder	Drag to reorder	Hint when mousing over location points in input header, to change their order		اسحب لاعادة الترتيب	Abasnar pa cambiar l'orde		Arrossega per canviar l'ordre			Zum Ändern der Reihenfolge ziehen	Σύρετε για αναδιάταξη	Trenu por reordigi	Arrastra para cambiar el orden	برای جابجایی نگه‌دارید			Faire glisser pour réorganiser	Faire glisser pour réorganiser		יש לגרור כדי לסדר מחדש			Húzza el az átrendezéshez	Trascina per riordinare					Slepen om opnieuw te organiseren	Przeciągnij, aby przestawić	Arraste para reordenar			Переместите путевую точку	Ťahaj pre zmenu poradia	Povlecite za spremembo vrstnega reda				Перемістіть шляхову точку		拖动可重新排序		
\ No newline at end of file
diff --git a/reader-osm/src/main/java/com/graphhopper/reader/osm/OSMReader.java b/reader-osm/src/main/java/com/graphhopper/reader/osm/OSMReader.java
index 96b68dd42..81b46c0d4 100644
--- a/reader-osm/src/main/java/com/graphhopper/reader/osm/OSMReader.java
+++ b/reader-osm/src/main/java/com/graphhopper/reader/osm/OSMReader.java
@@ -342,7 +342,7 @@ public class OSMReader implements DataReader {
 
         if (way.getTag("duration") != null) {
             try {
-                long dur = OSMTagParser.parseDuration(way.getTag("duration"));
+                long dur = OSMReaderUtility.parseDuration(way.getTag("duration"));
                 // Provide the duration value in seconds in an artificial graphhopper specific tag:
                 way.setTag("duration:seconds", Long.toString(dur));
             } catch (Exception ex) {
diff --git a/reader-osm/src/main/java/com/graphhopper/reader/osm/OSMTagParser.java b/reader-osm/src/main/java/com/graphhopper/reader/osm/OSMReaderUtility.java
similarity index 99%
rename from reader-osm/src/main/java/com/graphhopper/reader/osm/OSMTagParser.java
rename to reader-osm/src/main/java/com/graphhopper/reader/osm/OSMReaderUtility.java
index 6a4d8236c..cb9757abb 100644
--- a/reader-osm/src/main/java/com/graphhopper/reader/osm/OSMTagParser.java
+++ b/reader-osm/src/main/java/com/graphhopper/reader/osm/OSMReaderUtility.java
@@ -26,7 +26,7 @@ import java.util.Date;
  *
  * @author ratrun
  */
-public class OSMTagParser {
+public class OSMReaderUtility {
     // use a day somewhere within July 1970 which then makes two identical long months ala 31 days, see #588
     private final static Date STATIC_DATE = new Date((31 * 6) * 24 * 3600 * 1000);
 
diff --git a/web-bundle/src/main/java/com/graphhopper/http/GraphHopperBundle.java b/web-bundle/src/main/java/com/graphhopper/http/GraphHopperBundle.java
index 8e8c08ec5..adaae9092 100644
--- a/web-bundle/src/main/java/com/graphhopper/http/GraphHopperBundle.java
+++ b/web-bundle/src/main/java/com/graphhopper/http/GraphHopperBundle.java
@@ -209,7 +209,7 @@ public class GraphHopperBundle implements ConfiguredBundle<GraphHopperBundleConf
         final PtFlagEncoder ptFlagEncoder = new PtFlagEncoder();
         final GHDirectory ghDirectory = GraphHopperGtfs.createGHDirectory(configuration.get("graph.location", "target/tmp"));
         final GtfsStorage gtfsStorage = GraphHopperGtfs.createGtfsStorage();
-        final EncodingManager encodingManager = new EncodingManager(Arrays.asList(ptFlagEncoder, new FootFlagEncoder(), new CarFlagEncoder()), 8);
+        final EncodingManager encodingManager = new EncodingManager.Builder(8).add(ptFlagEncoder).add(new FootFlagEncoder()).add(new CarFlagEncoder()).build();
         final GraphHopperStorage graphHopperStorage = GraphHopperGtfs.createOrLoad(ghDirectory, encodingManager, ptFlagEncoder, gtfsStorage,
                 configuration.has("gtfs.file") ? Arrays.asList(configuration.get("gtfs.file", "").split(",")) : Collections.emptyList(),
                 configuration.has("datareader.file") ? Arrays.asList(configuration.get("datareader.file", "").split(",")) : Collections.emptyList());
diff --git a/web-bundle/src/main/java/com/graphhopper/resources/IsochroneResource.java b/web-bundle/src/main/java/com/graphhopper/resources/IsochroneResource.java
index 4bf2790cf..4496fa7f4 100644
--- a/web-bundle/src/main/java/com/graphhopper/resources/IsochroneResource.java
+++ b/web-bundle/src/main/java/com/graphhopper/resources/IsochroneResource.java
@@ -66,7 +66,7 @@ public class IsochroneResource {
 
         StopWatch sw = new StopWatch().start();
 
-        if (!encodingManager.supports(vehicle))
+        if (!encodingManager.hasEncoder(vehicle))
             throw new IllegalArgumentException("vehicle not supported:" + vehicle);
 
         FlagEncoder encoder = encodingManager.getEncoder(vehicle);


Test patch:
diff --git a/core/src/test/java/com/graphhopper/GraphHopperAPITest.java b/core/src/test/java/com/graphhopper/GraphHopperAPITest.java
index 0c1494e97..476940ffd 100644
--- a/core/src/test/java/com/graphhopper/GraphHopperAPITest.java
+++ b/core/src/test/java/com/graphhopper/GraphHopperAPITest.java
@@ -42,7 +42,7 @@ import static org.junit.Assert.*;
  * @author Peter Karich
  */
 public class GraphHopperAPITest {
-    final EncodingManager encodingManager = new EncodingManager("car");
+    final EncodingManager encodingManager = EncodingManager.create("car");
 
     void initGraph(GraphHopperStorage graph) {
         NodeAccess na = graph.getNodeAccess();
diff --git a/core/src/test/java/com/graphhopper/reader/PrincetonReaderTest.java b/core/src/test/java/com/graphhopper/reader/PrincetonReaderTest.java
index 58c71daad..ac0dfc304 100644
--- a/core/src/test/java/com/graphhopper/reader/PrincetonReaderTest.java
+++ b/core/src/test/java/com/graphhopper/reader/PrincetonReaderTest.java
@@ -37,7 +37,7 @@ import static org.junit.Assert.assertEquals;
  * @author Peter Karich
  */
 public class PrincetonReaderTest {
-    private EncodingManager encodingManager = new EncodingManager("car");
+    private EncodingManager encodingManager = EncodingManager.create("car");
     private EdgeFilter carOutEdges = DefaultEdgeFilter.outEdges(encodingManager.getEncoder("car"));
 
     @Test
diff --git a/core/src/test/java/com/graphhopper/reader/dem/AbstractEdgeElevationInterpolatorTest.java b/core/src/test/java/com/graphhopper/reader/dem/AbstractEdgeElevationInterpolatorTest.java
index 02991c15d..21f9ccb17 100644
--- a/core/src/test/java/com/graphhopper/reader/dem/AbstractEdgeElevationInterpolatorTest.java
+++ b/core/src/test/java/com/graphhopper/reader/dem/AbstractEdgeElevationInterpolatorTest.java
@@ -52,7 +52,7 @@ public abstract class AbstractEdgeElevationInterpolatorTest {
     public void setUp() {
         dataFlagEncoder = new DataFlagEncoder();
         graph = new GraphHopperStorage(new RAMDirectory(),
-                new EncodingManager(Arrays.asList(dataFlagEncoder, new FootFlagEncoder()),
+                EncodingManager.create(Arrays.asList(dataFlagEncoder, new FootFlagEncoder()),
                         8),
                 true, new GraphExtension.NoOpExtension()).create(100);
 
diff --git a/core/src/test/java/com/graphhopper/routing/AbstractRoutingAlgorithmTester.java b/core/src/test/java/com/graphhopper/routing/AbstractRoutingAlgorithmTester.java
index 72171a49b..f786e9ce7 100644
--- a/core/src/test/java/com/graphhopper/routing/AbstractRoutingAlgorithmTester.java
+++ b/core/src/test/java/com/graphhopper/routing/AbstractRoutingAlgorithmTester.java
@@ -44,7 +44,7 @@ import static org.junit.Assert.*;
  * @author Peter Karich
  */
 public abstract class AbstractRoutingAlgorithmTester {
-    protected static final EncodingManager encodingManager = new EncodingManager("car,foot");
+    protected static final EncodingManager encodingManager = EncodingManager.create("car,foot");
     private static final DistanceCalc distCalc = new DistanceCalcEarth();
     protected FlagEncoder carEncoder;
     protected DecimalEncodedValue carAvSpeedEnc;
@@ -782,7 +782,7 @@ public abstract class AbstractRoutingAlgorithmTester {
     @Test
     public void testTwoWeightsPerEdge() {
         FlagEncoder encoder = new Bike2WeightFlagEncoder();
-        EncodingManager em = new EncodingManager(encoder);
+        EncodingManager em = EncodingManager.create(encoder);
         AlgorithmOptions opts = AlgorithmOptions.start().
                 weighting(new FastestWeighting(encoder)).build();
         GraphHopperStorage graph = createGHStorage(em, Arrays.asList(opts.getWeighting()), true);
diff --git a/core/src/test/java/com/graphhopper/routing/AlternativeRouteTest.java b/core/src/test/java/com/graphhopper/routing/AlternativeRouteTest.java
index a7c15fee0..7a55efa87 100644
--- a/core/src/test/java/com/graphhopper/routing/AlternativeRouteTest.java
+++ b/core/src/test/java/com/graphhopper/routing/AlternativeRouteTest.java
@@ -43,7 +43,7 @@ import static org.junit.Assert.*;
 @RunWith(Parameterized.class)
 public class AlternativeRouteTest {
     private final FlagEncoder carFE = new CarFlagEncoder();
-    private final EncodingManager em = new EncodingManager(carFE);
+    private final EncodingManager em = EncodingManager.create(carFE);
     private final TraversalMode traversalMode;
 
     public AlternativeRouteTest(TraversalMode tMode) {
diff --git a/core/src/test/java/com/graphhopper/routing/CHQueryWithTurnCostsTest.java b/core/src/test/java/com/graphhopper/routing/CHQueryWithTurnCostsTest.java
index cde1d3cd5..289ae68b1 100644
--- a/core/src/test/java/com/graphhopper/routing/CHQueryWithTurnCostsTest.java
+++ b/core/src/test/java/com/graphhopper/routing/CHQueryWithTurnCostsTest.java
@@ -27,7 +27,10 @@ import com.graphhopper.routing.util.LevelEdgeFilter;
 import com.graphhopper.routing.weighting.ShortestWeighting;
 import com.graphhopper.routing.weighting.TurnWeighting;
 import com.graphhopper.routing.weighting.Weighting;
-import com.graphhopper.storage.*;
+import com.graphhopper.storage.CHGraph;
+import com.graphhopper.storage.GraphBuilder;
+import com.graphhopper.storage.GraphHopperStorage;
+import com.graphhopper.storage.TurnCostExtension;
 import com.graphhopper.util.CHEdgeIteratorState;
 import com.graphhopper.util.EdgeIteratorState;
 import com.graphhopper.util.GHUtility;
@@ -51,7 +54,7 @@ import static org.junit.Assert.assertFalse;
 public class CHQueryWithTurnCostsTest {
     private final int maxCost = 10;
     private final CarFlagEncoder encoder = new CarFlagEncoder(5, 5, maxCost);
-    private final EncodingManager encodingManager = new EncodingManager(encoder);
+    private final EncodingManager encodingManager = EncodingManager.create(encoder);
     private final Weighting weighting = new ShortestWeighting(encoder);
     private final GraphHopperStorage graph = new GraphBuilder(encodingManager).setCHGraph(weighting).setEdgeBasedCH(true).create();
     private final TurnCostExtension turnCostExtension = (TurnCostExtension) graph.getExtension();
@@ -427,7 +430,7 @@ public class CHQueryWithTurnCostsTest {
         // no path between 3 and 1 will be found even though there is one.
         testPathCalculation(3, 1, 5, IntArrayList.from(3, 4, 2, 0, 2, 1));
     }
-    
+
     @Test
     public void testFindPathWithTurnRestriction_single_loop() {
         //     0
diff --git a/core/src/test/java/com/graphhopper/routing/DijkstraBidirectionCHTest.java b/core/src/test/java/com/graphhopper/routing/DijkstraBidirectionCHTest.java
index 733dfbcb0..0475eed71 100644
--- a/core/src/test/java/com/graphhopper/routing/DijkstraBidirectionCHTest.java
+++ b/core/src/test/java/com/graphhopper/routing/DijkstraBidirectionCHTest.java
@@ -71,7 +71,7 @@ public class DijkstraBidirectionCHTest extends AbstractRoutingAlgorithmTester {
     public void testPathRecursiveUnpacking() {
         // use an encoder where it is possible to store 2 weights per edge        
         FlagEncoder encoder = new Bike2WeightFlagEncoder();
-        EncodingManager em = new EncodingManager(encoder);
+        EncodingManager em = EncodingManager.create(encoder);
         ShortestWeighting weighting = new ShortestWeighting(encoder);
         GraphHopperStorage ghStorage = createGHStorage(em, Arrays.asList(weighting), false);
         CHGraphImpl g2 = (CHGraphImpl) ghStorage.getGraph(CHGraph.class, weighting);
@@ -122,7 +122,7 @@ public class DijkstraBidirectionCHTest extends AbstractRoutingAlgorithmTester {
     @Test
     public void testBaseGraph() {
         CarFlagEncoder carFE = new CarFlagEncoder();
-        EncodingManager em = new EncodingManager(carFE);
+        EncodingManager em = EncodingManager.create(carFE);
         AlgorithmOptions opts = AlgorithmOptions.start().
                 weighting(new ShortestWeighting(carFE)).build();
         GraphHopperStorage ghStorage = createGHStorage(em,
@@ -241,7 +241,7 @@ public class DijkstraBidirectionCHTest extends AbstractRoutingAlgorithmTester {
     }
 
     private void runTestWithDirectionDependentEdgeSpeed(double speed, double revSpeed, int from, int to, IntArrayList expectedPath, FlagEncoder encoder) {
-        EncodingManager encodingManager = new EncodingManager(encoder);
+        EncodingManager encodingManager = EncodingManager.create(encoder);
         FastestWeighting weighting = new FastestWeighting(encoder);
         AlgorithmOptions algoOpts = AlgorithmOptions.start().weighting(weighting).build();
         GraphHopperStorage graph = createGHStorage(encodingManager, Arrays.asList(weighting), false);
diff --git a/core/src/test/java/com/graphhopper/routing/EdgeBasedRoutingAlgorithmTest.java b/core/src/test/java/com/graphhopper/routing/EdgeBasedRoutingAlgorithmTest.java
index e934b652d..67b0751eb 100644
--- a/core/src/test/java/com/graphhopper/routing/EdgeBasedRoutingAlgorithmTest.java
+++ b/core/src/test/java/com/graphhopper/routing/EdgeBasedRoutingAlgorithmTest.java
@@ -87,7 +87,7 @@ public class EdgeBasedRoutingAlgorithmTest {
         else
             // allow for basic costs too
             carEncoder = new CarFlagEncoder(5, 5, 3);
-        return new EncodingManager(carEncoder);
+        return EncodingManager.create(carEncoder);
     }
 
     public RoutingAlgorithm createAlgo(Graph g, AlgorithmOptions opts) {
diff --git a/core/src/test/java/com/graphhopper/routing/PathBidirRefTest.java b/core/src/test/java/com/graphhopper/routing/PathBidirRefTest.java
index 53350d752..54b1d9f1e 100644
--- a/core/src/test/java/com/graphhopper/routing/PathBidirRefTest.java
+++ b/core/src/test/java/com/graphhopper/routing/PathBidirRefTest.java
@@ -36,7 +36,7 @@ import static org.junit.Assert.assertEquals;
  * @author Peter Karich
  */
 public class PathBidirRefTest {
-    private final EncodingManager encodingManager = new EncodingManager("car");
+    private final EncodingManager encodingManager = EncodingManager.create("car");
     private FlagEncoder carEncoder = encodingManager.getEncoder("car");
     private EdgeFilter carOutEdges = DefaultEdgeFilter.outEdges(carEncoder);
 
diff --git a/core/src/test/java/com/graphhopper/routing/PathTest.java b/core/src/test/java/com/graphhopper/routing/PathTest.java
index ccabfb6e5..1843428e9 100644
--- a/core/src/test/java/com/graphhopper/routing/PathTest.java
+++ b/core/src/test/java/com/graphhopper/routing/PathTest.java
@@ -42,12 +42,12 @@ import static org.junit.Assert.*;
 public class PathTest {
     private final FlagEncoder encoder = new CarFlagEncoder();
     private final DataFlagEncoder dataFlagEncoder = new DataFlagEncoder();
-    private final EncodingManager carManager = new EncodingManager(encoder);
+    private final EncodingManager carManager = EncodingManager.create(encoder);
     private final BooleanEncodedValue carManagerRoundabout = carManager.getBooleanEncodedValue(EncodingManager.ROUNDABOUT);
     private final BooleanEncodedValue carAccessEnc = encoder.getAccessEnc();
     private final DecimalEncodedValue carAvSpeedEnv = encoder.getAverageSpeedEnc();
-    private final EncodingManager dataFlagManager = new EncodingManager(dataFlagEncoder);
-    private final EncodingManager mixedEncoders = new EncodingManager(new CarFlagEncoder(), new FootFlagEncoder());
+    private final EncodingManager dataFlagManager = EncodingManager.create(dataFlagEncoder);
+    private final EncodingManager mixedEncoders = EncodingManager.create(new CarFlagEncoder(), new FootFlagEncoder());
     private final BooleanEncodedValue mixedManagerRoundabout = mixedEncoders.getBooleanEncodedValue(EncodingManager.ROUNDABOUT);
     private final TranslationMap trMap = TranslationMapTest.SINGLETON;
     private final Translation tr = trMap.getWithFallBack(Locale.US);
diff --git a/core/src/test/java/com/graphhopper/routing/QueryGraphTest.java b/core/src/test/java/com/graphhopper/routing/QueryGraphTest.java
index 2a66cc77a..16c7bec6a 100644
--- a/core/src/test/java/com/graphhopper/routing/QueryGraphTest.java
+++ b/core/src/test/java/com/graphhopper/routing/QueryGraphTest.java
@@ -48,7 +48,7 @@ public class QueryGraphTest {
     @Before
     public void setUp() {
         carEncoder = new CarFlagEncoder();
-        encodingManager = new EncodingManager(carEncoder);
+        encodingManager = EncodingManager.create(carEncoder);
         g = new GraphHopperStorage(new RAMDirectory(), encodingManager, false, new GraphExtension.NoOpExtension()).create(100);
     }
 
@@ -495,7 +495,7 @@ public class QueryGraphTest {
         FlagEncoder encoder = new CarFlagEncoder(5, 5, 15);
 
         GraphHopperStorage graphWithTurnCosts = new GraphHopperStorage(new RAMDirectory(),
-                new EncodingManager(encoder), false, turnExt).
+                EncodingManager.create(encoder), false, turnExt).
                 create(100);
         NodeAccess na = graphWithTurnCosts.getNodeAccess();
         na.setNode(0, .00, .00);
diff --git a/core/src/test/java/com/graphhopper/routing/RoutingAlgorithmIT.java b/core/src/test/java/com/graphhopper/routing/RoutingAlgorithmIT.java
index 61eeb9b05..55a96877b 100644
--- a/core/src/test/java/com/graphhopper/routing/RoutingAlgorithmIT.java
+++ b/core/src/test/java/com/graphhopper/routing/RoutingAlgorithmIT.java
@@ -136,7 +136,7 @@ public class RoutingAlgorithmIT {
         int noJvmWarming = N / 4;
 
         Random rand = new Random(0);
-        final EncodingManager eManager = new EncodingManager("car");
+        final EncodingManager eManager = EncodingManager.create("car");
         final GraphHopperStorage graph = new GraphBuilder(eManager).create();
 
         String bigFile = "10000EWD.txt.gz";
diff --git a/core/src/test/java/com/graphhopper/routing/ch/CHAlgoFactoryDecoratorTest.java b/core/src/test/java/com/graphhopper/routing/ch/CHAlgoFactoryDecoratorTest.java
index f09654bac..38360de6c 100644
--- a/core/src/test/java/com/graphhopper/routing/ch/CHAlgoFactoryDecoratorTest.java
+++ b/core/src/test/java/com/graphhopper/routing/ch/CHAlgoFactoryDecoratorTest.java
@@ -17,12 +17,18 @@
  */
 package com.graphhopper.routing.ch;
 
-import com.graphhopper.routing.util.*;
+import com.graphhopper.routing.util.CarFlagEncoder;
+import com.graphhopper.routing.util.EncodingManager;
+import com.graphhopper.routing.util.FlagEncoder;
+import com.graphhopper.routing.util.TraversalMode;
 import com.graphhopper.routing.weighting.FastestWeighting;
 import com.graphhopper.routing.weighting.ShortFastestWeighting;
 import com.graphhopper.routing.weighting.ShortestWeighting;
 import com.graphhopper.routing.weighting.Weighting;
-import com.graphhopper.storage.*;
+import com.graphhopper.storage.Directory;
+import com.graphhopper.storage.GraphExtension;
+import com.graphhopper.storage.GraphHopperStorage;
+import com.graphhopper.storage.RAMDirectory;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -31,9 +37,7 @@ import java.util.List;
 
 import static com.graphhopper.routing.util.TraversalMode.EDGE_BASED_2DIR;
 import static com.graphhopper.routing.util.TraversalMode.NODE_BASED;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 /**
  * @author Peter Karich
@@ -50,7 +54,7 @@ public class CHAlgoFactoryDecoratorTest {
         instance = new CHAlgoFactoryDecorator();
         Directory dir = new RAMDirectory();
         FlagEncoder encoder = new CarFlagEncoder();
-        EncodingManager encodingManager = new EncodingManager(encoder);
+        EncodingManager encodingManager = EncodingManager.create(encoder);
         weighting1 = new FastestWeighting(encoder);
         weighting2 = new ShortestWeighting(encoder);
         weighting3 = new ShortFastestWeighting(encoder, 0.1);
diff --git a/core/src/test/java/com/graphhopper/routing/ch/CHTurnCostTest.java b/core/src/test/java/com/graphhopper/routing/ch/CHTurnCostTest.java
index bb83ca881..92b246357 100644
--- a/core/src/test/java/com/graphhopper/routing/ch/CHTurnCostTest.java
+++ b/core/src/test/java/com/graphhopper/routing/ch/CHTurnCostTest.java
@@ -21,11 +21,17 @@ import com.carrotsearch.hppc.IntArrayList;
 import com.graphhopper.Repeat;
 import com.graphhopper.RepeatRule;
 import com.graphhopper.routing.*;
-import com.graphhopper.routing.util.*;
+import com.graphhopper.routing.util.CarFlagEncoder;
+import com.graphhopper.routing.util.DefaultEdgeFilter;
+import com.graphhopper.routing.util.EncodingManager;
+import com.graphhopper.routing.util.TraversalMode;
 import com.graphhopper.routing.weighting.ShortestWeighting;
 import com.graphhopper.routing.weighting.TurnWeighting;
 import com.graphhopper.routing.weighting.Weighting;
-import com.graphhopper.storage.*;
+import com.graphhopper.storage.CHGraph;
+import com.graphhopper.storage.GraphBuilder;
+import com.graphhopper.storage.GraphHopperStorage;
+import com.graphhopper.storage.TurnCostExtension;
 import com.graphhopper.util.*;
 import org.junit.Before;
 import org.junit.Rule;
@@ -67,7 +73,7 @@ public class CHTurnCostTest {
         // its important to use @Before when using Repeat Rule!
         maxCost = 10;
         encoder = new CarFlagEncoder(5, 5, maxCost);
-        EncodingManager encodingManager = new EncodingManager(encoder);
+        EncodingManager encodingManager = EncodingManager.create(encoder);
         weighting = new ShortestWeighting(encoder);
         graph = new GraphBuilder(encodingManager).setCHGraph(weighting).setEdgeBasedCH(true).create();
         turnCostExtension = (TurnCostExtension) graph.getExtension();
diff --git a/core/src/test/java/com/graphhopper/routing/ch/EdgeBasedNodeContractorTest.java b/core/src/test/java/com/graphhopper/routing/ch/EdgeBasedNodeContractorTest.java
index 1453665a6..d05d7d60a 100644
--- a/core/src/test/java/com/graphhopper/routing/ch/EdgeBasedNodeContractorTest.java
+++ b/core/src/test/java/com/graphhopper/routing/ch/EdgeBasedNodeContractorTest.java
@@ -27,7 +27,10 @@ import com.graphhopper.routing.util.EncodingManager;
 import com.graphhopper.routing.weighting.ShortestWeighting;
 import com.graphhopper.routing.weighting.TurnWeighting;
 import com.graphhopper.routing.weighting.Weighting;
-import com.graphhopper.storage.*;
+import com.graphhopper.storage.CHGraph;
+import com.graphhopper.storage.GraphBuilder;
+import com.graphhopper.storage.GraphHopperStorage;
+import com.graphhopper.storage.TurnCostExtension;
 import com.graphhopper.util.EdgeIterator;
 import com.graphhopper.util.EdgeIteratorState;
 import com.graphhopper.util.GHUtility;
@@ -37,7 +40,10 @@ import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 
-import java.util.*;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
 
 import static org.junit.Assert.*;
 
@@ -67,7 +73,7 @@ public class EdgeBasedNodeContractorTest {
 
     private void initialize() {
         encoder = new CarFlagEncoder(5, 5, maxCost);
-        EncodingManager encodingManager = new EncodingManager(encoder);
+        EncodingManager encodingManager = EncodingManager.create(encoder);
         Weighting weighting = new ShortestWeighting(encoder);
         PreparationWeighting preparationWeighting = new PreparationWeighting(weighting);
         graph = new GraphBuilder(encodingManager).setCHGraph(weighting).setEdgeBasedCH(true).create();
@@ -1314,7 +1320,7 @@ public class EdgeBasedNodeContractorTest {
         contractNodes(2);
         checkNumShortcuts(1);
     }
-    
+
     @Test
     public void testNodeContraction_numPolledEdges() {
         graph.edge(3, 2, 71.203000, false);
diff --git a/core/src/test/java/com/graphhopper/routing/ch/NodeBasedNodeContractorTest.java b/core/src/test/java/com/graphhopper/routing/ch/NodeBasedNodeContractorTest.java
index 801a8ff32..1a15ca9fe 100644
--- a/core/src/test/java/com/graphhopper/routing/ch/NodeBasedNodeContractorTest.java
+++ b/core/src/test/java/com/graphhopper/routing/ch/NodeBasedNodeContractorTest.java
@@ -50,7 +50,7 @@ public class NodeBasedNodeContractorTest {
     }
 
     private final CarFlagEncoder encoder = new CarFlagEncoder();
-    private final EncodingManager encodingManager = new EncodingManager(encoder);
+    private final EncodingManager encodingManager = EncodingManager.create(encoder);
     private final Weighting weighting = new ShortestWeighting(encoder);
     private final GraphHopperStorage graph = new GraphBuilder(encodingManager).setCHGraph(weighting).create();
     private final CHGraph lg = graph.getGraph(CHGraph.class);
diff --git a/core/src/test/java/com/graphhopper/routing/ch/PrepareContractionHierarchiesTest.java b/core/src/test/java/com/graphhopper/routing/ch/PrepareContractionHierarchiesTest.java
index d29402fb8..39d988964 100644
--- a/core/src/test/java/com/graphhopper/routing/ch/PrepareContractionHierarchiesTest.java
+++ b/core/src/test/java/com/graphhopper/routing/ch/PrepareContractionHierarchiesTest.java
@@ -42,7 +42,7 @@ import static org.junit.Assert.*;
  */
 public class PrepareContractionHierarchiesTest {
     private final CarFlagEncoder carEncoder = new CarFlagEncoder();
-    private final EncodingManager encodingManager = new EncodingManager(carEncoder);
+    private final EncodingManager encodingManager = EncodingManager.create(carEncoder);
     private final Weighting weighting = new ShortestWeighting(carEncoder);
     private final TraversalMode tMode = TraversalMode.NODE_BASED;
     private Directory dir;
@@ -503,7 +503,7 @@ public class PrepareContractionHierarchiesTest {
     public void testMultiplePreparationsIdenticalView() {
         CarFlagEncoder tmpCarEncoder = new CarFlagEncoder();
         BikeFlagEncoder tmpBikeEncoder = new BikeFlagEncoder();
-        EncodingManager tmpEncodingManager = new EncodingManager(tmpCarEncoder, tmpBikeEncoder);
+        EncodingManager tmpEncodingManager = EncodingManager.create(tmpCarEncoder, tmpBikeEncoder);
 
         // FastestWeighting would lead to different shortcuts due to different default speeds for bike and car
         Weighting carWeighting = new ShortestWeighting(tmpCarEncoder);
@@ -524,7 +524,7 @@ public class PrepareContractionHierarchiesTest {
     public void testMultiplePreparationsDifferentView() {
         CarFlagEncoder tmpCarEncoder = new CarFlagEncoder();
         BikeFlagEncoder tmpBikeEncoder = new BikeFlagEncoder();
-        EncodingManager tmpEncodingManager = new EncodingManager(tmpCarEncoder, tmpBikeEncoder);
+        EncodingManager tmpEncodingManager = EncodingManager.create(tmpCarEncoder, tmpBikeEncoder);
 
         Weighting carWeighting = new FastestWeighting(tmpCarEncoder);
         Weighting bikeWeighting = new FastestWeighting(tmpBikeEncoder);
@@ -546,7 +546,7 @@ public class PrepareContractionHierarchiesTest {
     public void testReusingNodeOrdering() {
         CarFlagEncoder carFlagEncoder = new CarFlagEncoder();
         MotorcycleFlagEncoder motorCycleEncoder = new MotorcycleFlagEncoder();
-        EncodingManager em = new EncodingManager(carFlagEncoder, motorCycleEncoder);
+        EncodingManager em = EncodingManager.create(carFlagEncoder, motorCycleEncoder);
         Weighting carWeighting = new FastestWeighting(carFlagEncoder);
         Weighting motorCycleWeighting = new FastestWeighting(motorCycleEncoder);
         Directory dir = new RAMDirectory();
diff --git a/core/src/test/java/com/graphhopper/routing/ch/WitnessPathSearcherTest.java b/core/src/test/java/com/graphhopper/routing/ch/WitnessPathSearcherTest.java
index a3a5fbbb7..245c17cc1 100644
--- a/core/src/test/java/com/graphhopper/routing/ch/WitnessPathSearcherTest.java
+++ b/core/src/test/java/com/graphhopper/routing/ch/WitnessPathSearcherTest.java
@@ -32,7 +32,8 @@ import com.graphhopper.util.PMap;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 
 public class WitnessPathSearcherTest {
 
@@ -43,7 +44,7 @@ public class WitnessPathSearcherTest {
     @Before
     public void setup() {
         CarFlagEncoder encoder = new CarFlagEncoder(5, 5, 10);
-        EncodingManager encodingManager = new EncodingManager(encoder);
+        EncodingManager encodingManager = EncodingManager.create(encoder);
         Weighting weighting = new ShortestWeighting(encoder);
         PreparationWeighting preparationWeighting = new PreparationWeighting(weighting);
         graph = new GraphBuilder(encodingManager).setCHGraph(weighting).setEdgeBasedCH(true).create();
diff --git a/core/src/test/java/com/graphhopper/routing/lm/LMAlgoFactoryDecoratorTest.java b/core/src/test/java/com/graphhopper/routing/lm/LMAlgoFactoryDecoratorTest.java
index c3f28b9c1..35116bc62 100644
--- a/core/src/test/java/com/graphhopper/routing/lm/LMAlgoFactoryDecoratorTest.java
+++ b/core/src/test/java/com/graphhopper/routing/lm/LMAlgoFactoryDecoratorTest.java
@@ -35,7 +35,7 @@ public class LMAlgoFactoryDecoratorTest {
         assertEquals(Arrays.asList("fastest", "shortest"), dec.getWeightingsAsStrings());
 
         FlagEncoder car = new CarFlagEncoder();
-        EncodingManager em = new EncodingManager(car);
+        EncodingManager em = EncodingManager.create(car);
         dec.addWeighting(new FastestWeighting(car)).addWeighting(new ShortestWeighting(car));
         dec.createPreparations(new GraphHopperStorage(new RAMDirectory(), em, false, new GraphExtension.NoOpExtension()), null);
         assertEquals(1, dec.getPreparations().get(0).getLandmarkStorage().getFactor(), .1);
diff --git a/core/src/test/java/com/graphhopper/routing/lm/LandmarkStorageTest.java b/core/src/test/java/com/graphhopper/routing/lm/LandmarkStorageTest.java
index 1d84ec392..ad508969f 100644
--- a/core/src/test/java/com/graphhopper/routing/lm/LandmarkStorageTest.java
+++ b/core/src/test/java/com/graphhopper/routing/lm/LandmarkStorageTest.java
@@ -49,7 +49,7 @@ public class LandmarkStorageTest {
     @Before
     public void setUp() {
         encoder = new CarFlagEncoder();
-        encodingManager = new EncodingManager(encoder);
+        encodingManager = EncodingManager.create(encoder);
         ghStorage = new GraphHopperStorage(new RAMDirectory(),
                 encodingManager, false, new GraphExtension.NoOpExtension());
         ghStorage.create(1000);
diff --git a/core/src/test/java/com/graphhopper/routing/lm/PrepareLandmarksTest.java b/core/src/test/java/com/graphhopper/routing/lm/PrepareLandmarksTest.java
index 83d48c365..def9c2eea 100644
--- a/core/src/test/java/com/graphhopper/routing/lm/PrepareLandmarksTest.java
+++ b/core/src/test/java/com/graphhopper/routing/lm/PrepareLandmarksTest.java
@@ -57,7 +57,7 @@ public class PrepareLandmarksTest
     public void setUp() {
         encoder = new CarFlagEncoder();
         tm = TraversalMode.NODE_BASED;
-        encodingManager = new EncodingManager(encoder);
+        encodingManager = EncodingManager.create(encoder);
         GraphHopperStorage tmp = new GraphHopperStorage(new RAMDirectory(),
                 encodingManager, false, new GraphExtension.NoOpExtension());
         tmp.create(1000);
diff --git a/core/src/test/java/com/graphhopper/routing/profiles/DecimalEncodedValueTest.java b/core/src/test/java/com/graphhopper/routing/profiles/DecimalEncodedValueTest.java
index ee7508a2f..52cbfac70 100644
--- a/core/src/test/java/com/graphhopper/routing/profiles/DecimalEncodedValueTest.java
+++ b/core/src/test/java/com/graphhopper/routing/profiles/DecimalEncodedValueTest.java
@@ -23,7 +23,7 @@ public class DecimalEncodedValueTest {
     @Test
     public void testMaxValue() {
         CarFlagEncoder carEncoder = new CarFlagEncoder(10, 0.5, 0);
-        EncodingManager em = new EncodingManager(carEncoder);
+        EncodingManager em = EncodingManager.create(carEncoder);
         DecimalEncodedValue carAverageSpeedEnc = em.getDecimalEncodedValue(EncodingManager.getKey(carEncoder, "average_speed"));
 
         ReaderWay way = new ReaderWay(1);
diff --git a/core/src/test/java/com/graphhopper/routing/subnetwork/PrepareRoutingSubnetworksTest.java b/core/src/test/java/com/graphhopper/routing/subnetwork/PrepareRoutingSubnetworksTest.java
index a41903238..247cf18a0 100644
--- a/core/src/test/java/com/graphhopper/routing/subnetwork/PrepareRoutingSubnetworksTest.java
+++ b/core/src/test/java/com/graphhopper/routing/subnetwork/PrepareRoutingSubnetworksTest.java
@@ -40,7 +40,7 @@ import static org.junit.Assert.*;
  */
 public class PrepareRoutingSubnetworksTest {
     private final FlagEncoder carFlagEncoder = new CarFlagEncoder();
-    private final EncodingManager em = new EncodingManager(carFlagEncoder);
+    private final EncodingManager em = EncodingManager.create(carFlagEncoder);
 
     GraphHopperStorage createStorage(EncodingManager eman) {
         return new GraphBuilder(eman).create();
@@ -153,7 +153,7 @@ public class PrepareRoutingSubnetworksTest {
     public void testRemoveNode() {
         FlagEncoder carEncoder = new CarFlagEncoder();
         BikeFlagEncoder bikeEncoder = new BikeFlagEncoder();
-        EncodingManager em2 = new EncodingManager(carEncoder, bikeEncoder);
+        EncodingManager em2 = EncodingManager.create(carEncoder, bikeEncoder);
         GraphHopperStorage g = createSubnetworkTestStorage2(em2);
         PrepareRoutingSubnetworks instance = new PrepareRoutingSubnetworks(g, em2.fetchEdgeEncoders());
 
@@ -178,7 +178,7 @@ public class PrepareRoutingSubnetworksTest {
     public void testRemoveSubnetworkWhenMultipleVehicles() {
         FlagEncoder carEncoder = new CarFlagEncoder();
         BikeFlagEncoder bikeEncoder = new BikeFlagEncoder();
-        EncodingManager em2 = new EncodingManager(carEncoder, bikeEncoder);
+        EncodingManager em2 = EncodingManager.create(carEncoder, bikeEncoder);
         GraphHopperStorage g = createSubnetworkTestStorage2(em2);
 
         EdgeIteratorState edge = GHUtility.getEdge(g, 3, 4);
diff --git a/core/src/test/java/com/graphhopper/routing/template/RoundTripRoutingTemplateTest.java b/core/src/test/java/com/graphhopper/routing/template/RoundTripRoutingTemplateTest.java
index 3157550c9..ea913eb2b 100644
--- a/core/src/test/java/com/graphhopper/routing/template/RoundTripRoutingTemplateTest.java
+++ b/core/src/test/java/com/graphhopper/routing/template/RoundTripRoutingTemplateTest.java
@@ -48,7 +48,7 @@ import static org.junit.Assert.assertEquals;
  */
 public class RoundTripRoutingTemplateTest {
     private final FlagEncoder carFE = new CarFlagEncoder();
-    private final EncodingManager em = new EncodingManager(carFE);
+    private final EncodingManager em = EncodingManager.create(carFE);
     // TODO private final TraversalMode tMode = TraversalMode.EDGE_BASED_2DIR;
     private final TraversalMode tMode = TraversalMode.NODE_BASED;
     private final GHPoint ghPoint1 = new GHPoint(0, 0);
diff --git a/core/src/test/java/com/graphhopper/routing/util/AbstractBikeFlagEncoderTester.java b/core/src/test/java/com/graphhopper/routing/util/AbstractBikeFlagEncoderTester.java
index 067657ce9..7693e729a 100644
--- a/core/src/test/java/com/graphhopper/routing/util/AbstractBikeFlagEncoderTester.java
+++ b/core/src/test/java/com/graphhopper/routing/util/AbstractBikeFlagEncoderTester.java
@@ -48,7 +48,7 @@ public abstract class AbstractBikeFlagEncoderTester {
 
     @Before
     public void setUp() {
-        encodingManager = new EncodingManager(encoder = createBikeEncoder());
+        encodingManager = EncodingManager.create(encoder = createBikeEncoder());
         roundaboutEnc = encodingManager.getBooleanEncodedValue(EncodingManager.ROUNDABOUT);
         priorityEnc = encodingManager.getDecimalEncodedValue(EncodingManager.getKey(encoder, "priority"));
         avSpeedEnc = encoder.getAverageSpeedEnc();
diff --git a/core/src/test/java/com/graphhopper/routing/util/BikeFlagEncoderTest.java b/core/src/test/java/com/graphhopper/routing/util/BikeFlagEncoderTest.java
index 4492390bf..3afcb361f 100644
--- a/core/src/test/java/com/graphhopper/routing/util/BikeFlagEncoderTest.java
+++ b/core/src/test/java/com/graphhopper/routing/util/BikeFlagEncoderTest.java
@@ -597,7 +597,7 @@ public class BikeFlagEncoderTest extends AbstractBikeFlagEncoderTester {
     @Test
     public void testTurnFlagEncoding_withCosts() {
         encoder = new BikeFlagEncoder(4, 2, 127);
-        new EncodingManager(encoder);
+        EncodingManager.create(encoder);
 
         long flags_r0 = encoder.getTurnFlags(true, 0);
         long flags_0 = encoder.getTurnFlags(false, 0);
diff --git a/core/src/test/java/com/graphhopper/routing/util/Car4WDFlagEncoderTest.java b/core/src/test/java/com/graphhopper/routing/util/Car4WDFlagEncoderTest.java
index 9d0d54e88..207f6282a 100644
--- a/core/src/test/java/com/graphhopper/routing/util/Car4WDFlagEncoderTest.java
+++ b/core/src/test/java/com/graphhopper/routing/util/Car4WDFlagEncoderTest.java
@@ -32,7 +32,7 @@ import static org.junit.Assert.assertTrue;
  * @author zstadler
  */
 public class Car4WDFlagEncoderTest extends CarFlagEncoderTest {
-    private final EncodingManager em = new EncodingManager("car4wd,bike,foot");
+    private final EncodingManager em = EncodingManager.create("car4wd,bike,foot");
     private final Car4WDFlagEncoder encoder = (Car4WDFlagEncoder) em.getEncoder("car4wd");
 
     @Override
diff --git a/core/src/test/java/com/graphhopper/routing/util/CarFlagEncoderTest.java b/core/src/test/java/com/graphhopper/routing/util/CarFlagEncoderTest.java
index 1a7220e4e..ace59bc44 100644
--- a/core/src/test/java/com/graphhopper/routing/util/CarFlagEncoderTest.java
+++ b/core/src/test/java/com/graphhopper/routing/util/CarFlagEncoderTest.java
@@ -37,7 +37,7 @@ import static org.junit.Assert.*;
  * @author Peter Karich
  */
 public class CarFlagEncoderTest {
-    private final EncodingManager em = new EncodingManager("car,bike,foot");
+    private final EncodingManager em = EncodingManager.create("car,bike,foot");
     private final CarFlagEncoder encoder = (CarFlagEncoder) em.getEncoder("car");
     private final BooleanEncodedValue roundaboutEnc = em.getBooleanEncodedValue(EncodingManager.ROUNDABOUT);
     private final DecimalEncodedValue avSpeedEnc = encoder.getAverageSpeedEnc();
@@ -522,7 +522,7 @@ public class CarFlagEncoderTest {
     @Test
     public void testTurnFlagEncoding_noCosts() {
         FlagEncoder tmpEnc = new CarFlagEncoder(8, 5, 0);
-        EncodingManager em = new EncodingManager(tmpEnc);
+        EncodingManager em = EncodingManager.create(tmpEnc);
 
         long flags_r0 = tmpEnc.getTurnFlags(true, 0);
         long flags_0 = tmpEnc.getTurnFlags(false, 0);
@@ -546,7 +546,7 @@ public class CarFlagEncoderTest {
     @Test
     public void testTurnFlagEncoding_withCosts() {
         FlagEncoder tmpEncoder = new CarFlagEncoder(8, 5, 127);
-        EncodingManager em = new EncodingManager(tmpEncoder);
+        EncodingManager em = EncodingManager.create(tmpEncoder);
 
         long flags_r0 = tmpEncoder.getTurnFlags(true, 0);
         long flags_0 = tmpEncoder.getTurnFlags(false, 0);
@@ -575,7 +575,7 @@ public class CarFlagEncoderTest {
     @Test
     public void testMaxValue() {
         CarFlagEncoder instance = new CarFlagEncoder(10, 0.5, 0);
-        EncodingManager em = new EncodingManager(instance);
+        EncodingManager em = EncodingManager.create(instance);
         DecimalEncodedValue avSpeedEnc = em.getDecimalEncodedValue(EncodingManager.getKey(instance, "average_speed"));
         ReaderWay way = new ReaderWay(1);
         way.setTag("highway", "motorway_link");
@@ -598,9 +598,9 @@ public class CarFlagEncoderTest {
     @Test
     public void testRegisterOnlyOnceAllowed() {
         CarFlagEncoder instance = new CarFlagEncoder(10, 0.5, 0);
-        EncodingManager tmpEM = new EncodingManager(instance);
+        EncodingManager tmpEM = EncodingManager.create(instance);
         try {
-            tmpEM = new EncodingManager(instance);
+            tmpEM = EncodingManager.create(instance);
             assertTrue(false);
         } catch (IllegalStateException ex) {
         }
diff --git a/core/src/test/java/com/graphhopper/routing/util/DataFlagEncoderTest.java b/core/src/test/java/com/graphhopper/routing/util/DataFlagEncoderTest.java
index 3f5a017fc..9ea657d1d 100644
--- a/core/src/test/java/com/graphhopper/routing/util/DataFlagEncoderTest.java
+++ b/core/src/test/java/com/graphhopper/routing/util/DataFlagEncoderTest.java
@@ -41,21 +41,21 @@ public class DataFlagEncoderTest {
         properties.put("store_weight", true);
         properties.put("store_width", true);
         encoder = new DataFlagEncoder(properties);
-        encodingManager = new EncodingManager(Arrays.asList(encoder), 8);
+        encodingManager = EncodingManager.create(Arrays.asList(encoder), 8);
         accessEnc = encoder.getAccessEnc();
         motorVehicleInt = encoder.getAccessType("motor_vehicle");
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void testInsufficientEncoderBitLength() {
-        EncodingManager em = new EncodingManager(Arrays.asList(new DataFlagEncoder(properties)));
+        EncodingManager em = EncodingManager.create(Arrays.asList(new DataFlagEncoder(properties)));
     }
 
     @Test
     public void testSufficientEncoderBitLength() {
         try {
-            EncodingManager em = new EncodingManager(Arrays.asList(new DataFlagEncoder(properties)), 8);
-            EncodingManager em1 = new EncodingManager(Arrays.asList(new DataFlagEncoder()));
+            EncodingManager em = EncodingManager.create(Arrays.asList(new DataFlagEncoder(properties)), 8);
+            EncodingManager em1 = EncodingManager.create(Arrays.asList(new DataFlagEncoder()));
         } catch (Throwable t) {
             fail();
         }
@@ -378,7 +378,7 @@ public class DataFlagEncoderTest {
 
         DataFlagEncoder encoder = new DataFlagEncoder(new PMap());
         encoder.setSpatialRuleLookup(index);
-        EncodingManager em = new EncodingManager(encoder);
+        EncodingManager em = EncodingManager.create(encoder);
 
         ReaderWay way = new ReaderWay(27l);
         way.setTag("highway", "track");
diff --git a/core/src/test/java/com/graphhopper/routing/util/DefaultEdgeFilterTest.java b/core/src/test/java/com/graphhopper/routing/util/DefaultEdgeFilterTest.java
index 18c148753..cec30e2f2 100644
--- a/core/src/test/java/com/graphhopper/routing/util/DefaultEdgeFilterTest.java
+++ b/core/src/test/java/com/graphhopper/routing/util/DefaultEdgeFilterTest.java
@@ -25,7 +25,6 @@ import com.graphhopper.routing.weighting.Weighting;
 import com.graphhopper.storage.CHGraph;
 import com.graphhopper.storage.GraphBuilder;
 import com.graphhopper.storage.GraphHopperStorage;
-import com.graphhopper.storage.IntsRef;
 import com.graphhopper.util.CHEdgeExplorer;
 import com.graphhopper.util.CHEdgeIterator;
 import com.graphhopper.util.CHEdgeIteratorState;
@@ -35,7 +34,7 @@ import static org.junit.Assert.assertEquals;
 
 public class DefaultEdgeFilterTest {
     private final CarFlagEncoder encoder = new CarFlagEncoder();
-    private final EncodingManager encodingManager = new EncodingManager(encoder);
+    private final EncodingManager encodingManager = EncodingManager.create(encoder);
     private final Weighting weighting = new ShortestWeighting(encoder);
     private final GraphHopperStorage graph = new GraphBuilder(encodingManager).setCHGraph(weighting).setEdgeBasedCH(true).create();
     private final CHGraph chGraph = graph.getGraph(CHGraph.class);
diff --git a/core/src/test/java/com/graphhopper/routing/util/EncodingManagerTest.java b/core/src/test/java/com/graphhopper/routing/util/EncodingManagerTest.java
index 4e6d20c76..b0c8ac444 100644
--- a/core/src/test/java/com/graphhopper/routing/util/EncodingManagerTest.java
+++ b/core/src/test/java/com/graphhopper/routing/util/EncodingManagerTest.java
@@ -37,7 +37,7 @@ public class EncodingManagerTest {
 
     @Test
     public void testCompatibility() {
-        EncodingManager manager = new EncodingManager("car,bike,foot");
+        EncodingManager manager = EncodingManager.create("car,bike,foot");
         BikeFlagEncoder bike = (BikeFlagEncoder) manager.getEncoder("bike");
         CarFlagEncoder car = (CarFlagEncoder) manager.getEncoder("car");
         FootFlagEncoder foot = (FootFlagEncoder) manager.getEncoder("foot");
@@ -47,17 +47,17 @@ public class EncodingManagerTest {
         assertNotEquals(car.hashCode(), foot.hashCode());
 
         FootFlagEncoder foot2 = new FootFlagEncoder();
-        EncodingManager manager2 = new EncodingManager(foot2);
+        EncodingManager manager2 = EncodingManager.create(foot2);
         assertNotEquals(foot, foot2);
         assertNotEquals(foot.hashCode(), foot2.hashCode());
 
         FootFlagEncoder foot3 = new FootFlagEncoder();
-        EncodingManager manager3 = new EncodingManager(foot3);
+        EncodingManager manager3 = EncodingManager.create(foot3);
         assertEquals(foot3, foot2);
         assertEquals(foot3.hashCode(), foot2.hashCode());
 
         try {
-            new EncodingManager("car,car");
+            EncodingManager.create("car,car");
             assertTrue("do not allow duplicate flag encoders", false);
         } catch (Exception ex) {
         }
@@ -65,29 +65,29 @@ public class EncodingManagerTest {
 
     @Test
     public void testEncoderAcceptNoException() {
-        EncodingManager manager = new EncodingManager("car");
-        assertTrue(manager.supports("car"));
-        assertFalse(manager.supports("foot"));
+        EncodingManager manager = EncodingManager.create("car");
+        assertTrue(manager.hasEncoder("car"));
+        assertFalse(manager.hasEncoder("foot"));
     }
 
     @Test
     public void testEncoderWithWrongVersionIsRejected() {
         thrown.expect(IllegalArgumentException.class);
-        EncodingManager manager = new EncodingManager("car|version=0");
+        EncodingManager manager = EncodingManager.create("car|version=0");
     }
 
     @Test
     public void testWrongEncoders() {
         try {
             FootFlagEncoder foot = new FootFlagEncoder();
-            new EncodingManager(foot, foot);
+            EncodingManager.create(foot, foot);
             assertTrue(false);
         } catch (Exception ex) {
             assertEquals("You must not register a FlagEncoder (foot) twice!", ex.getMessage());
         }
 
         try {
-            new EncodingManager(new FootFlagEncoder(), new CarFlagEncoder(), new BikeFlagEncoder(), new MountainBikeFlagEncoder(), new RacingBikeFlagEncoder());
+            EncodingManager.create(new FootFlagEncoder(), new CarFlagEncoder(), new BikeFlagEncoder(), new MountainBikeFlagEncoder(), new RacingBikeFlagEncoder());
             assertTrue(false);
         } catch (Exception ex) {
             assertTrue(ex.getMessage(), ex.getMessage().startsWith("Encoders are requesting 36 bits, more than 32 bits of edge flags"));
@@ -128,7 +128,7 @@ public class EncodingManagerTest {
             }
         };
 
-        EncodingManager subject = new EncodingManager(encoder);
+        EncodingManager subject = EncodingManager.create(encoder);
 
         assertEquals("new_encoder|my_properties|version=10", subject.toDetailsString());
     }
@@ -164,7 +164,7 @@ public class EncodingManagerTest {
                 return "less_relations_bits";
             }
         };
-        EncodingManager manager = new EncodingManager(defaultBike, lessRelationCodes);
+        EncodingManager manager = EncodingManager.create(defaultBike, lessRelationCodes);
 
         // relation code is PREFER
         osmRel.setTag("route", "bicycle");
@@ -187,7 +187,7 @@ public class EncodingManagerTest {
 
         BikeFlagEncoder bikeEncoder = new BikeFlagEncoder();
         MountainBikeFlagEncoder mtbEncoder = new MountainBikeFlagEncoder();
-        EncodingManager manager = new EncodingManager(bikeEncoder, mtbEncoder);
+        EncodingManager manager = EncodingManager.create(bikeEncoder, mtbEncoder);
 
         // relation code for network rcn is VERY_NICE for bike and PREFER for mountainbike
         osmRel.setTag("route", "bicycle");
@@ -204,7 +204,7 @@ public class EncodingManagerTest {
 
     public void testFullBitMask() {
         BitUtil bitUtil = BitUtil.LITTLE;
-        EncodingManager manager = new EncodingManager("car,foot");
+        EncodingManager manager = EncodingManager.create("car,foot");
         AbstractFlagEncoder carr = (AbstractFlagEncoder) manager.getEncoder("car");
         assertTrue(bitUtil.toBitString(carr.getNodeBitMask()).endsWith("00000000001111111"));
 
@@ -220,7 +220,7 @@ public class EncodingManagerTest {
 
     @Test
     public void testCompatibilityBug() {
-        EncodingManager manager2 = new EncodingManager(FlagEncoderFactory.DEFAULT, "bike2", 8);
+        EncodingManager manager2 = EncodingManager.create(FlagEncoderFactory.DEFAULT, "bike2", 8);
         ReaderWay osmWay = new ReaderWay(1);
         osmWay.setTag("highway", "footway");
         osmWay.setTag("name", "test");
@@ -231,7 +231,7 @@ public class EncodingManagerTest {
         assertEquals(4, singleSpeed, 1e-3);
         assertEquals(singleSpeed, singleBikeEnc.getSpeed(true, flags), 1e-3);
 
-        EncodingManager manager = new EncodingManager(FlagEncoderFactory.DEFAULT, "bike2,bike,foot", 8);
+        EncodingManager manager = EncodingManager.create(FlagEncoderFactory.DEFAULT, "bike2,bike,foot", 8);
         FootFlagEncoder foot = (FootFlagEncoder) manager.getEncoder("foot");
         BikeFlagEncoder bike = (BikeFlagEncoder) manager.getEncoder("bike2");
 
@@ -248,7 +248,7 @@ public class EncodingManagerTest {
     public void testSupportFords() {
         // 1) no encoder crossing fords
         String flagEncodersStr = "car,bike,foot";
-        EncodingManager manager = new EncodingManager(FlagEncoderFactory.DEFAULT, flagEncodersStr, 8);
+        EncodingManager manager = EncodingManager.create(FlagEncoderFactory.DEFAULT, flagEncodersStr, 8);
 
         assertTrue(((AbstractFlagEncoder) manager.getEncoder("car")).isBlockFords());
         assertTrue(((AbstractFlagEncoder) manager.getEncoder("bike")).isBlockFords());
@@ -256,7 +256,7 @@ public class EncodingManagerTest {
 
         // 2) two encoders crossing fords
         flagEncodersStr = "car,bike|block_fords=false,foot|block_fords=false";
-        manager = new EncodingManager(FlagEncoderFactory.DEFAULT, flagEncodersStr, 8);
+        manager = EncodingManager.create(FlagEncoderFactory.DEFAULT, flagEncodersStr, 8);
 
         assertTrue(((AbstractFlagEncoder) manager.getEncoder("car")).isBlockFords());
         assertFalse(((AbstractFlagEncoder) manager.getEncoder("bike")).isBlockFords());
@@ -264,7 +264,7 @@ public class EncodingManagerTest {
 
         // 2) Try combined with another tag
         flagEncodersStr = "car|turn_costs=true|block_fords=true,bike,foot|block_fords=false";
-        manager = new EncodingManager(FlagEncoderFactory.DEFAULT, flagEncodersStr, 8);
+        manager = EncodingManager.create(FlagEncoderFactory.DEFAULT, flagEncodersStr, 8);
 
         assertTrue(((AbstractFlagEncoder) manager.getEncoder("car")).isBlockFords());
         assertTrue(((AbstractFlagEncoder) manager.getEncoder("bike")).isBlockFords());
@@ -273,7 +273,7 @@ public class EncodingManagerTest {
 
     @Test
     public void testSharedEncodedValues() {
-        EncodingManager manager = new EncodingManager("car,foot,bike,motorcycle,mtb", 8);
+        EncodingManager manager = EncodingManager.create("car,foot,bike,motorcycle,mtb", 8);
 
         for (FlagEncoder tmp : manager.fetchEdgeEncoders()) {
             AbstractFlagEncoder encoder = (AbstractFlagEncoder) tmp;
diff --git a/core/src/test/java/com/graphhopper/routing/util/FootFlagEncoderTest.java b/core/src/test/java/com/graphhopper/routing/util/FootFlagEncoderTest.java
index 9bed18c95..11a1283a2 100644
--- a/core/src/test/java/com/graphhopper/routing/util/FootFlagEncoderTest.java
+++ b/core/src/test/java/com/graphhopper/routing/util/FootFlagEncoderTest.java
@@ -39,7 +39,7 @@ import static org.junit.Assert.*;
  * @author Peter Karich
  */
 public class FootFlagEncoderTest {
-    private final EncodingManager encodingManager = new EncodingManager("car,bike,foot");
+    private final EncodingManager encodingManager = EncodingManager.create("car,bike,foot");
     private final FootFlagEncoder footEncoder = (FootFlagEncoder) encodingManager.getEncoder("foot");
     private final DecimalEncodedValue footAvSpeedEnc = footEncoder.getAverageSpeedEnc();
     private final BooleanEncodedValue footAccessEnc = footEncoder.getAccessEnc();
@@ -412,7 +412,7 @@ public class FootFlagEncoderTest {
     @Test
     public void testBlockByDefault() {
         FootFlagEncoder tmpFootEncoder = new FootFlagEncoder();
-        new EncodingManager(tmpFootEncoder);
+        EncodingManager.create(tmpFootEncoder);
 
         ReaderNode node = new ReaderNode(1, -1, -1);
         node.setTag("barrier", "gate");
diff --git a/core/src/test/java/com/graphhopper/routing/util/HikeFlagEncoderTest.java b/core/src/test/java/com/graphhopper/routing/util/HikeFlagEncoderTest.java
index 78215d07a..0fa5a04de 100644
--- a/core/src/test/java/com/graphhopper/routing/util/HikeFlagEncoderTest.java
+++ b/core/src/test/java/com/graphhopper/routing/util/HikeFlagEncoderTest.java
@@ -29,7 +29,7 @@ import static org.junit.Assert.assertFalse;
  * @author Peter Karich
  */
 public class HikeFlagEncoderTest {
-    private final EncodingManager encodingManager = new EncodingManager("car,hike");
+    private final EncodingManager encodingManager = EncodingManager.create("car,hike");
     private final HikeFlagEncoder hikeEncoder = (HikeFlagEncoder) encodingManager.getEncoder("hike");
 
     @Test
diff --git a/core/src/test/java/com/graphhopper/routing/util/MotorcycleFlagEncoderTest.java b/core/src/test/java/com/graphhopper/routing/util/MotorcycleFlagEncoderTest.java
index f60004205..b0dc75b07 100644
--- a/core/src/test/java/com/graphhopper/routing/util/MotorcycleFlagEncoderTest.java
+++ b/core/src/test/java/com/graphhopper/routing/util/MotorcycleFlagEncoderTest.java
@@ -35,7 +35,7 @@ import static org.junit.Assert.*;
  * @author Peter Karich
  */
 public class MotorcycleFlagEncoderTest {
-    private final EncodingManager em = new EncodingManager("motorcycle,foot");
+    private final EncodingManager em = EncodingManager.create("motorcycle,foot");
     private final MotorcycleFlagEncoder encoder = (MotorcycleFlagEncoder) em.getEncoder("motorcycle");
     private final BooleanEncodedValue accessEnc = encoder.getAccessEnc();
 
diff --git a/core/src/test/java/com/graphhopper/routing/weighting/BlockAreaWeightingTest.java b/core/src/test/java/com/graphhopper/routing/weighting/BlockAreaWeightingTest.java
index 856a8a4b0..d9f9cafef 100644
--- a/core/src/test/java/com/graphhopper/routing/weighting/BlockAreaWeightingTest.java
+++ b/core/src/test/java/com/graphhopper/routing/weighting/BlockAreaWeightingTest.java
@@ -26,7 +26,7 @@ public class BlockAreaWeightingTest {
     @Before
     public void setUp() {
         encoder = new CarFlagEncoder();
-        em = new EncodingManager(Arrays.asList(encoder), 8);
+        em = EncodingManager.create(Arrays.asList(encoder), 8);
         graph = new GraphBuilder(em).create();
         // 0-1
         graph.edge(0, 1, 1, true);
diff --git a/core/src/test/java/com/graphhopper/routing/weighting/FastestWeightingTest.java b/core/src/test/java/com/graphhopper/routing/weighting/FastestWeightingTest.java
index 0f0296da9..da4ad7e7d 100644
--- a/core/src/test/java/com/graphhopper/routing/weighting/FastestWeightingTest.java
+++ b/core/src/test/java/com/graphhopper/routing/weighting/FastestWeightingTest.java
@@ -35,7 +35,7 @@ import static org.junit.Assert.assertEquals;
  * @author Peter Karich
  */
 public class FastestWeightingTest {
-    EncodingManager encodingManager = new EncodingManager("car");
+    EncodingManager encodingManager = EncodingManager.create("car");
     private final FlagEncoder encoder = encodingManager.getEncoder("car");
 
     @Test
@@ -86,7 +86,7 @@ public class FastestWeightingTest {
     @Test
     public void testTime() {
         FlagEncoder tmpEnc = new Bike2WeightFlagEncoder();
-        GraphHopperStorage g = new GraphBuilder(new EncodingManager(tmpEnc)).create();
+        GraphHopperStorage g = new GraphBuilder(EncodingManager.create(tmpEnc)).create();
         Weighting w = new FastestWeighting(tmpEnc);
 
         IntsRef edgeFlags = GHUtility.setProperties(g.getEncodingManager().createEdgeFlags(), tmpEnc, 15, true, true);
diff --git a/core/src/test/java/com/graphhopper/routing/weighting/GenericWeightingTest.java b/core/src/test/java/com/graphhopper/routing/weighting/GenericWeightingTest.java
index 2ef70559d..a525a0480 100644
--- a/core/src/test/java/com/graphhopper/routing/weighting/GenericWeightingTest.java
+++ b/core/src/test/java/com/graphhopper/routing/weighting/GenericWeightingTest.java
@@ -51,7 +51,7 @@ public class GenericWeightingTest {
         properties.put("store_weight", true);
         properties.put("store_width", true);
         encoder = new DataFlagEncoder(properties);
-        em = new EncodingManager(Arrays.asList(encoder), 8);
+        em = EncodingManager.create(Arrays.asList(encoder), 8);
     }
 
     @Before
@@ -89,7 +89,7 @@ public class GenericWeightingTest {
     @Test
     public void testDisabledRoadAttributes() {
         DataFlagEncoder simpleEncoder = new DataFlagEncoder();
-        EncodingManager simpleEncodingManager = new EncodingManager(simpleEncoder);
+        EncodingManager simpleEncodingManager = EncodingManager.create(simpleEncoder);
         Graph simpleGraph = new GraphBuilder(simpleEncodingManager).create();
 
         ReaderWay way = new ReaderWay(27l);
diff --git a/core/src/test/java/com/graphhopper/routing/weighting/ShortFastestWeightingTest.java b/core/src/test/java/com/graphhopper/routing/weighting/ShortFastestWeightingTest.java
index bbfb5285e..9b61b5f2e 100644
--- a/core/src/test/java/com/graphhopper/routing/weighting/ShortFastestWeightingTest.java
+++ b/core/src/test/java/com/graphhopper/routing/weighting/ShortFastestWeightingTest.java
@@ -33,7 +33,7 @@ import static org.junit.Assert.assertTrue;
  * @author Peter Karich
  */
 public class ShortFastestWeightingTest {
-    EncodingManager encodingManager = new EncodingManager("car");
+    EncodingManager encodingManager = EncodingManager.create("car");
     private final FlagEncoder encoder = encodingManager.getEncoder("car");
 
     @Test
diff --git a/core/src/test/java/com/graphhopper/storage/AbstractGraphStorageTester.java b/core/src/test/java/com/graphhopper/storage/AbstractGraphStorageTester.java
index 0bcd74985..ee6460fed 100644
--- a/core/src/test/java/com/graphhopper/storage/AbstractGraphStorageTester.java
+++ b/core/src/test/java/com/graphhopper/storage/AbstractGraphStorageTester.java
@@ -47,7 +47,7 @@ public abstract class AbstractGraphStorageTester {
     private final String locationParent = "./target/graphstorage";
     protected int defaultSize = 100;
     protected String defaultGraphLoc = "./target/graphstorage/default";
-    protected EncodingManager encodingManager = new EncodingManager("car,foot");
+    protected EncodingManager encodingManager = EncodingManager.create("car,foot");
     protected CarFlagEncoder carEncoder = (CarFlagEncoder) encodingManager.getEncoder("car");
     protected BooleanEncodedValue carAccessEnc = carEncoder.getAccessEnc();
     protected DecimalEncodedValue carAvSpeedEnc = carEncoder.getAverageSpeedEnc();
@@ -988,7 +988,7 @@ public abstract class AbstractGraphStorageTester {
             }
         });
         list.add(new TmpCarFlagEncoder(29, 0.001, 0));
-        EncodingManager manager = new EncodingManager(list, 8);
+        EncodingManager manager = EncodingManager.create(list, 8);
         graph = new GraphHopperStorage(dir, manager, false, new GraphExtension.NoOpExtension()).create(defaultSize);
 
         EdgeIteratorState edge = graph.edge(0, 1);
@@ -1037,7 +1037,7 @@ public abstract class AbstractGraphStorageTester {
                 return "car2";
             }
         });
-        manager = new EncodingManager(list, 20);
+        manager = EncodingManager.create(list, 20);
         graph = new GraphHopperStorage(new RAMDirectory(), manager, false, new GraphExtension.NoOpExtension()).create(defaultSize);
         edgeIter = graph.edge(0, 1).set(access0Enc, true).setReverse(access0Enc, false);
         assertTrue(edgeIter.get(access0Enc));
diff --git a/core/src/test/java/com/graphhopper/storage/GraphEdgeIdFinderTest.java b/core/src/test/java/com/graphhopper/storage/GraphEdgeIdFinderTest.java
index 7e175b1c9..f2db4b59f 100644
--- a/core/src/test/java/com/graphhopper/storage/GraphEdgeIdFinderTest.java
+++ b/core/src/test/java/com/graphhopper/storage/GraphEdgeIdFinderTest.java
@@ -42,7 +42,7 @@ public class GraphEdgeIdFinderTest {
     @Test
     public void testParseStringHints() {
         FlagEncoder encoder = new CarFlagEncoder();
-        EncodingManager em = new EncodingManager(encoder);
+        EncodingManager em = EncodingManager.create(encoder);
         GraphHopperStorage graph = new GraphBuilder(em).create();
         // 0-1-2
         // | |
@@ -82,7 +82,7 @@ public class GraphEdgeIdFinderTest {
     @Test
     public void testBlockAreasWithPolygon() {
         FlagEncoder encoder = new CarFlagEncoder();
-        EncodingManager em = new EncodingManager(encoder);
+        EncodingManager em = EncodingManager.create(encoder);
         GraphHopperStorage graph = new GraphBuilder(em).create();
 
         // 00-01-02-03
diff --git a/core/src/test/java/com/graphhopper/storage/GraphHopperStorageCHTest.java b/core/src/test/java/com/graphhopper/storage/GraphHopperStorageCHTest.java
index ea1f6e3d2..d9a31cc83 100644
--- a/core/src/test/java/com/graphhopper/storage/GraphHopperStorageCHTest.java
+++ b/core/src/test/java/com/graphhopper/storage/GraphHopperStorageCHTest.java
@@ -222,7 +222,7 @@ public class GraphHopperStorageCHTest extends GraphHopperStorageTest {
     @Test
     public void testGetWeightIfAdvancedEncoder() {
         FlagEncoder customEncoder = new Bike2WeightFlagEncoder();
-        EncodingManager em = new EncodingManager(customEncoder);
+        EncodingManager em = EncodingManager.create(customEncoder);
         FastestWeighting weighting = new FastestWeighting(customEncoder);
         GraphHopperStorage ghStorage = new GraphBuilder(em).setCHGraph(weighting).create();
         ghStorage.edge(0, 2);
@@ -434,7 +434,7 @@ public class GraphHopperStorageCHTest extends GraphHopperStorageTest {
     public void testShortcutCreationAndAccessForManyVehicles() {
         FlagEncoder tmpCar = new CarFlagEncoder();
         FlagEncoder tmpBike = new Bike2WeightFlagEncoder();
-        EncodingManager em = new EncodingManager(tmpCar, tmpBike);
+        EncodingManager em = EncodingManager.create(tmpCar, tmpBike);
         List<Weighting> chWeightings = new ArrayList<>();
         chWeightings.add(new FastestWeighting(tmpCar));
         chWeightings.add(new FastestWeighting(tmpBike));
diff --git a/core/src/test/java/com/graphhopper/storage/GraphHopperStorageForDataFlagEncoderTest.java b/core/src/test/java/com/graphhopper/storage/GraphHopperStorageForDataFlagEncoderTest.java
index 631b14ade..aa334adde 100644
--- a/core/src/test/java/com/graphhopper/storage/GraphHopperStorageForDataFlagEncoderTest.java
+++ b/core/src/test/java/com/graphhopper/storage/GraphHopperStorageForDataFlagEncoderTest.java
@@ -37,7 +37,7 @@ public class GraphHopperStorageForDataFlagEncoderTest {
         properties.put("store_weight", true);
         properties.put("store_width", false);
         encoder = new DataFlagEncoder(properties);
-        encodingManager = new EncodingManager(Arrays.asList(encoder), 8);
+        encodingManager = EncodingManager.create(Arrays.asList(encoder), 8);
     }
 
     @Before
diff --git a/core/src/test/java/com/graphhopper/storage/GraphHopperStorageLMTest.java b/core/src/test/java/com/graphhopper/storage/GraphHopperStorageLMTest.java
index a37d2b22c..1dc42b9a4 100644
--- a/core/src/test/java/com/graphhopper/storage/GraphHopperStorageLMTest.java
+++ b/core/src/test/java/com/graphhopper/storage/GraphHopperStorageLMTest.java
@@ -20,7 +20,7 @@ public class GraphHopperStorageLMTest {
         String defaultGraphLoc = "./target/ghstorage_lm";
         Helper.removeDir(new File(defaultGraphLoc));
         CarFlagEncoder carFlagEncoder = new CarFlagEncoder();
-        EncodingManager encodingManager = new EncodingManager(carFlagEncoder);
+        EncodingManager encodingManager = EncodingManager.create(carFlagEncoder);
         GraphHopperStorage graph = new GraphBuilder(encodingManager).setStore(true).
                 setLocation(defaultGraphLoc).create();
 
diff --git a/core/src/test/java/com/graphhopper/storage/TurnCostExtensionTest.java b/core/src/test/java/com/graphhopper/storage/TurnCostExtensionTest.java
index 5ffcd9152..b8857d19b 100644
--- a/core/src/test/java/com/graphhopper/storage/TurnCostExtensionTest.java
+++ b/core/src/test/java/com/graphhopper/storage/TurnCostExtensionTest.java
@@ -31,7 +31,7 @@ public class TurnCostExtensionTest {
     public void testMultipleTurnCosts() {
         FlagEncoder carEncoder = new CarFlagEncoder(5, 5, 3);
         FlagEncoder bikeEncoder = new BikeFlagEncoder(5, 5, 3);
-        EncodingManager manager = new EncodingManager(carEncoder, bikeEncoder);
+        EncodingManager manager = EncodingManager.create(carEncoder, bikeEncoder);
         GraphHopperStorage g = new GraphBuilder(manager).create();
         initGraph(g);
         TurnCostExtension tcs = (TurnCostExtension) g.getExtension();
@@ -98,7 +98,7 @@ public class TurnCostExtensionTest {
     public void testMergeFlagsBeforeAdding() {
         FlagEncoder carEncoder = new CarFlagEncoder(5, 5, 3);
         FlagEncoder bikeEncoder = new BikeFlagEncoder(5, 5, 3);
-        EncodingManager manager = new EncodingManager(carEncoder, bikeEncoder);
+        EncodingManager manager = EncodingManager.create(carEncoder, bikeEncoder);
         GraphHopperStorage g = new GraphBuilder(manager).create();
         initGraph(g);
         TurnCostExtension tcs = (TurnCostExtension) g.getExtension();
diff --git a/core/src/test/java/com/graphhopper/storage/change/ChangeGraphHelperTest.java b/core/src/test/java/com/graphhopper/storage/change/ChangeGraphHelperTest.java
index 006f0f88c..35926b18c 100644
--- a/core/src/test/java/com/graphhopper/storage/change/ChangeGraphHelperTest.java
+++ b/core/src/test/java/com/graphhopper/storage/change/ChangeGraphHelperTest.java
@@ -33,7 +33,7 @@ public class ChangeGraphHelperTest {
 
     @Before
     public void setUp() {
-        encodingManager = new EncodingManager("car");
+        encodingManager = EncodingManager.create("car");
         graph = new GraphBuilder(encodingManager).create();
     }
 
diff --git a/core/src/test/java/com/graphhopper/storage/index/AbstractLocationIndexTester.java b/core/src/test/java/com/graphhopper/storage/index/AbstractLocationIndexTester.java
index 547c04243..54fcaa2a5 100644
--- a/core/src/test/java/com/graphhopper/storage/index/AbstractLocationIndexTester.java
+++ b/core/src/test/java/com/graphhopper/storage/index/AbstractLocationIndexTester.java
@@ -75,7 +75,7 @@ public abstract class AbstractLocationIndexTester {
 
     @Test
     public void testSimpleGraph() {
-        Graph g = AbstractLocationIndexTester.this.createGHStorage(new EncodingManager("car"));
+        Graph g = AbstractLocationIndexTester.this.createGHStorage(EncodingManager.create("car"));
         initSimpleGraph(g);
 
         idx = createIndex(g, -1);
@@ -125,7 +125,7 @@ public abstract class AbstractLocationIndexTester {
 
     @Test
     public void testSimpleGraph2() {
-        Graph g = AbstractLocationIndexTester.this.createGHStorage(new EncodingManager("car"));
+        Graph g = AbstractLocationIndexTester.this.createGHStorage(EncodingManager.create("car"));
         initSimpleGraph(g);
 
         idx = createIndex(g, -1);
@@ -147,7 +147,7 @@ public abstract class AbstractLocationIndexTester {
 
     @Test
     public void testGrid() {
-        Graph g = createSampleGraph(new EncodingManager("car"));
+        Graph g = createSampleGraph(EncodingManager.create("car"));
         int locs = g.getNodes();
 
         idx = createIndex(g, -1);
@@ -202,7 +202,7 @@ public abstract class AbstractLocationIndexTester {
 
     @Test
     public void testSinglePoints120() {
-        Graph g = createSampleGraph(new EncodingManager("car"));
+        Graph g = createSampleGraph(EncodingManager.create("car"));
         idx = createIndex(g, -1);
 
         assertEquals(1, findID(idx, 1.637, 2.23));
@@ -217,7 +217,7 @@ public abstract class AbstractLocationIndexTester {
 
     @Test
     public void testSinglePoints32() {
-        Graph g = createSampleGraph(new EncodingManager("car"));
+        Graph g = createSampleGraph(EncodingManager.create("car"));
         idx = createIndex(g, -1);
 
         // 10 or 6
@@ -234,7 +234,7 @@ public abstract class AbstractLocationIndexTester {
 
     @Test
     public void testNoErrorOnEdgeCase_lastIndex() {
-        final EncodingManager encodingManager = new EncodingManager("car");
+        final EncodingManager encodingManager = EncodingManager.create("car");
         int locs = 10000;
         Graph g = AbstractLocationIndexTester.this.createGHStorage(new MMapDirectory(location), encodingManager, false);
         NodeAccess na = g.getNodeAccess();
@@ -327,7 +327,7 @@ public abstract class AbstractLocationIndexTester {
 
     @Test
     public void testDifferentVehicles() {
-        final EncodingManager encodingManager = new EncodingManager("car,foot");
+        final EncodingManager encodingManager = EncodingManager.create("car,foot");
         Graph g = AbstractLocationIndexTester.this.createGHStorage(encodingManager);
         initSimpleGraph(g);
         idx = createIndex(g, -1);
diff --git a/core/src/test/java/com/graphhopper/storage/index/Location2IDFullIndexTest.java b/core/src/test/java/com/graphhopper/storage/index/Location2IDFullIndexTest.java
index b7052e109..4506637f6 100644
--- a/core/src/test/java/com/graphhopper/storage/index/Location2IDFullIndexTest.java
+++ b/core/src/test/java/com/graphhopper/storage/index/Location2IDFullIndexTest.java
@@ -39,7 +39,7 @@ public class Location2IDFullIndexTest extends AbstractLocationIndexTester {
 
     @Test
     public void testFullIndex() {
-        LocationIndex tmpIdx = new Location2IDFullIndex(createSampleGraph(new EncodingManager("car")));
+        LocationIndex tmpIdx = new Location2IDFullIndex(createSampleGraph(EncodingManager.create("car")));
         assertEquals(5, findID(tmpIdx, 2, 3));
         assertEquals(10, findID(tmpIdx, 4, 1));
         assertEquals(10, findID(tmpIdx, 3.6, 1.4));
diff --git a/core/src/test/java/com/graphhopper/storage/index/Location2IDFullWithEdgesIndexTest.java b/core/src/test/java/com/graphhopper/storage/index/Location2IDFullWithEdgesIndexTest.java
index c9b0c41e6..03ae5d3b8 100644
--- a/core/src/test/java/com/graphhopper/storage/index/Location2IDFullWithEdgesIndexTest.java
+++ b/core/src/test/java/com/graphhopper/storage/index/Location2IDFullWithEdgesIndexTest.java
@@ -44,7 +44,7 @@ public class Location2IDFullWithEdgesIndexTest extends AbstractLocationIndexTest
 
     @Test
     public void testFullIndex() {
-        LocationIndex tmpIdx = new Location2IDFullWithEdgesIndex(createSampleGraph(new EncodingManager("car")));
+        LocationIndex tmpIdx = new Location2IDFullWithEdgesIndex(createSampleGraph(EncodingManager.create("car")));
         assertEquals(5, findID(tmpIdx, 2, 3));
         assertEquals(10, findID(tmpIdx, 4, 1));
         // 6, 9 or 10
diff --git a/core/src/test/java/com/graphhopper/storage/index/Location2IDQuadtreeTest.java b/core/src/test/java/com/graphhopper/storage/index/Location2IDQuadtreeTest.java
index 7b3ed2fa6..336e00f91 100644
--- a/core/src/test/java/com/graphhopper/storage/index/Location2IDQuadtreeTest.java
+++ b/core/src/test/java/com/graphhopper/storage/index/Location2IDQuadtreeTest.java
@@ -39,7 +39,7 @@ public class Location2IDQuadtreeTest extends AbstractLocationIndexTester {
 
     @Test
     public void testNormedDist() {
-        Location2IDQuadtree index = new Location2IDQuadtree(createGHStorage(new EncodingManager("car")), new RAMDirectory());
+        Location2IDQuadtree index = new Location2IDQuadtree(createGHStorage(EncodingManager.create("car")), new RAMDirectory());
         index.initAlgo(5, 6);
         assertEquals(1, index.getNormedDist(0, 1), 1e-6);
         assertEquals(2, index.getNormedDist(0, 7), 1e-6);
diff --git a/core/src/test/java/com/graphhopper/storage/index/LocationIndexTreeTest.java b/core/src/test/java/com/graphhopper/storage/index/LocationIndexTreeTest.java
index 82a815cf8..bc35fe84d 100644
--- a/core/src/test/java/com/graphhopper/storage/index/LocationIndexTreeTest.java
+++ b/core/src/test/java/com/graphhopper/storage/index/LocationIndexTreeTest.java
@@ -41,7 +41,7 @@ import static org.junit.Assert.assertTrue;
  * @author Peter Karich
  */
 public class LocationIndexTreeTest extends AbstractLocationIndexTester {
-    protected final EncodingManager encodingManager = new EncodingManager("car");
+    protected final EncodingManager encodingManager = EncodingManager.create("car");
 
     @Override
     public LocationIndexTree createIndex(Graph g, int resolution) {
@@ -222,7 +222,7 @@ public class LocationIndexTreeTest extends AbstractLocationIndexTester {
 
     @Test
     public void testMoreReal() {
-        Graph graph = createGHStorage(new EncodingManager("car"));
+        Graph graph = createGHStorage(EncodingManager.create("car"));
         NodeAccess na = graph.getNodeAccess();
         na.setNode(1, 51.2492152, 9.4317166);
         na.setNode(0, 52, 9);
@@ -435,7 +435,7 @@ public class LocationIndexTreeTest extends AbstractLocationIndexTester {
         CarFlagEncoder carEncoder = new CarFlagEncoder();
         BikeFlagEncoder bikeEncoder = new BikeFlagEncoder();
 
-        EncodingManager tmpEM = new EncodingManager(carEncoder, bikeEncoder);
+        EncodingManager tmpEM = EncodingManager.create(carEncoder, bikeEncoder);
         Graph graph = createGHStorage(new RAMDirectory(), tmpEM, false);
         NodeAccess na = graph.getNodeAccess();
 
diff --git a/core/src/test/java/com/graphhopper/util/BreadthFirstSearchTest.java b/core/src/test/java/com/graphhopper/util/BreadthFirstSearchTest.java
index 2e55b2619..18edfbf60 100644
--- a/core/src/test/java/com/graphhopper/util/BreadthFirstSearchTest.java
+++ b/core/src/test/java/com/graphhopper/util/BreadthFirstSearchTest.java
@@ -54,7 +54,7 @@ public class BreadthFirstSearchTest {
             }
         };
 
-        Graph g = new GraphBuilder(new EncodingManager("car")).create();
+        Graph g = new GraphBuilder(EncodingManager.create("car")).create();
         g.edge(0, 1, 85, true);
         g.edge(0, 2, 217, true);
         g.edge(0, 3, 173, true);
@@ -88,7 +88,7 @@ public class BreadthFirstSearchTest {
             }
         };
 
-        Graph g = new GraphBuilder(new EncodingManager("car")).create();
+        Graph g = new GraphBuilder(EncodingManager.create("car")).create();
         g.edge(1, 2, 1, false);
         g.edge(2, 3, 1, false);
         g.edge(3, 4, 1, false);
diff --git a/core/src/test/java/com/graphhopper/util/CHEdgeIteratorTest.java b/core/src/test/java/com/graphhopper/util/CHEdgeIteratorTest.java
index 79859a669..676cf8cae 100644
--- a/core/src/test/java/com/graphhopper/util/CHEdgeIteratorTest.java
+++ b/core/src/test/java/com/graphhopper/util/CHEdgeIteratorTest.java
@@ -40,7 +40,7 @@ public class CHEdgeIteratorTest {
     @Test
     public void testUpdateFlags() {
         CarFlagEncoder carFlagEncoder = new CarFlagEncoder();
-        EncodingManager encodingManager = new EncodingManager(carFlagEncoder);
+        EncodingManager encodingManager = EncodingManager.create(carFlagEncoder);
         FastestWeighting weighting = new FastestWeighting(carFlagEncoder);
         EdgeFilter carOutFilter = DefaultEdgeFilter.outEdges(carFlagEncoder);
         GraphHopperStorage ghStorage = new GraphBuilder(encodingManager).setCHGraph(weighting).create();
diff --git a/core/src/test/java/com/graphhopper/util/DepthFirstSearchTest.java b/core/src/test/java/com/graphhopper/util/DepthFirstSearchTest.java
index 07b185f5b..3a30a9fe4 100644
--- a/core/src/test/java/com/graphhopper/util/DepthFirstSearchTest.java
+++ b/core/src/test/java/com/graphhopper/util/DepthFirstSearchTest.java
@@ -57,7 +57,7 @@ public class DepthFirstSearchTest {
             }
         };
 
-        EncodingManager em = new EncodingManager("car");
+        EncodingManager em = EncodingManager.create("car");
         FlagEncoder fe = em.getEncoder("car");
         Graph g = new GraphBuilder(em).create();
         g.edge(1, 2, 1, false);
@@ -87,7 +87,7 @@ public class DepthFirstSearchTest {
             }
         };
 
-        EncodingManager em = new EncodingManager("car");
+        EncodingManager em = EncodingManager.create("car");
         FlagEncoder fe = em.getEncoder("car");
         Graph g = new GraphBuilder(em).create();
         g.edge(1, 2, 1, false);
diff --git a/core/src/test/java/com/graphhopper/util/GHUtilityTest.java b/core/src/test/java/com/graphhopper/util/GHUtilityTest.java
index fc3f4f939..bd98a5afa 100644
--- a/core/src/test/java/com/graphhopper/util/GHUtilityTest.java
+++ b/core/src/test/java/com/graphhopper/util/GHUtilityTest.java
@@ -33,7 +33,7 @@ import static org.junit.Assert.*;
  */
 public class GHUtilityTest {
     private final FlagEncoder carEncoder = new CarFlagEncoder();
-    private final EncodingManager encodingManager = new EncodingManager(carEncoder);
+    private final EncodingManager encodingManager = EncodingManager.create(carEncoder);
     private final BooleanEncodedValue accessEnc = carEncoder.getAccessEnc();
 
     Graph createGraph() {
diff --git a/core/src/test/java/com/graphhopper/util/InstructionListTest.java b/core/src/test/java/com/graphhopper/util/InstructionListTest.java
index a35734fc6..9bbbcdd86 100644
--- a/core/src/test/java/com/graphhopper/util/InstructionListTest.java
+++ b/core/src/test/java/com/graphhopper/util/InstructionListTest.java
@@ -60,7 +60,7 @@ public class InstructionListTest {
     @Before
     public void setUp() {
         carEncoder = new CarFlagEncoder();
-        carManager = new EncodingManager(carEncoder);
+        carManager = EncodingManager.create(carEncoder);
         roundaboutEnc = carManager.getBooleanEncodedValue(EncodingManager.ROUNDABOUT);
     }
 
diff --git a/core/src/test/java/com/graphhopper/util/PathSimplificationTest.java b/core/src/test/java/com/graphhopper/util/PathSimplificationTest.java
index 001ee30d3..50d87ff25 100644
--- a/core/src/test/java/com/graphhopper/util/PathSimplificationTest.java
+++ b/core/src/test/java/com/graphhopper/util/PathSimplificationTest.java
@@ -57,7 +57,7 @@ public class PathSimplificationTest {
     @Before
     public void setUp() {
         carEncoder = new CarFlagEncoder();
-        carManager = new EncodingManager(carEncoder);
+        carManager = EncodingManager.create(carEncoder);
     }
 
     @Test
diff --git a/isochrone/src/test/java/com/graphhopper/isochrone/algorithm/IsochroneTest.java b/isochrone/src/test/java/com/graphhopper/isochrone/algorithm/IsochroneTest.java
index cc1f8043c..2169078b6 100644
--- a/isochrone/src/test/java/com/graphhopper/isochrone/algorithm/IsochroneTest.java
+++ b/isochrone/src/test/java/com/graphhopper/isochrone/algorithm/IsochroneTest.java
@@ -25,7 +25,7 @@ import static org.junit.Assert.assertEquals;
  */
 public class IsochroneTest {
 
-    private final EncodingManager encodingManager = new EncodingManager("car");
+    private final EncodingManager encodingManager = EncodingManager.create("car");
     private final FlagEncoder carEncoder = encodingManager.getEncoder("car");
     private GraphHopperStorage graph;
 
diff --git a/reader-gtfs/src/test/java/com/graphhopper/AnotherAgencyIT.java b/reader-gtfs/src/test/java/com/graphhopper/AnotherAgencyIT.java
index 686e1c46b..d2791b7f9 100644
--- a/reader-gtfs/src/test/java/com/graphhopper/AnotherAgencyIT.java
+++ b/reader-gtfs/src/test/java/com/graphhopper/AnotherAgencyIT.java
@@ -55,7 +55,7 @@ public class AnotherAgencyIT {
     public static void init() {
         Helper.removeDir(new File(GRAPH_LOC));
         final PtFlagEncoder ptFlagEncoder = new PtFlagEncoder();
-        EncodingManager encodingManager = new EncodingManager(Arrays.asList(ptFlagEncoder, new FootFlagEncoder()), 8);
+        EncodingManager encodingManager = EncodingManager.create(Arrays.asList(ptFlagEncoder, new FootFlagEncoder()), 8);
         GHDirectory directory = GraphHopperGtfs.createGHDirectory(GRAPH_LOC);
         gtfsStorage = GraphHopperGtfs.createGtfsStorage();
         graphHopperStorage = GraphHopperGtfs.createOrLoad(directory, encodingManager, ptFlagEncoder, gtfsStorage, Arrays.asList("files/sample-feed.zip", "files/another-sample-feed.zip"), Collections.emptyList());
diff --git a/reader-gtfs/src/test/java/com/graphhopper/GraphHopperGtfsIT.java b/reader-gtfs/src/test/java/com/graphhopper/GraphHopperGtfsIT.java
index f52be9ec9..c089ae38b 100644
--- a/reader-gtfs/src/test/java/com/graphhopper/GraphHopperGtfsIT.java
+++ b/reader-gtfs/src/test/java/com/graphhopper/GraphHopperGtfsIT.java
@@ -65,7 +65,7 @@ public class GraphHopperGtfsIT {
         final CarFlagEncoder carFlagEncoder = new CarFlagEncoder();
         final FootFlagEncoder footFlagEncoder = new FootFlagEncoder();
 
-        EncodingManager encodingManager = new EncodingManager(Arrays.asList(carFlagEncoder, ptFlagEncoder, footFlagEncoder), 8);
+        EncodingManager encodingManager = EncodingManager.create(Arrays.asList(carFlagEncoder, ptFlagEncoder, footFlagEncoder), 8);
         GHDirectory directory = GraphHopperGtfs.createGHDirectory(GRAPH_LOC);
         gtfsStorage = GraphHopperGtfs.createGtfsStorage();
         graphHopperStorage = GraphHopperGtfs.createOrLoad(directory, encodingManager, ptFlagEncoder, gtfsStorage, Collections.singleton("files/sample-feed.zip"), Collections.emptyList());
diff --git a/reader-gtfs/src/test/java/com/graphhopper/GraphHopperMultimodalIT.java b/reader-gtfs/src/test/java/com/graphhopper/GraphHopperMultimodalIT.java
index 88e0bd6e3..0fca220de 100644
--- a/reader-gtfs/src/test/java/com/graphhopper/GraphHopperMultimodalIT.java
+++ b/reader-gtfs/src/test/java/com/graphhopper/GraphHopperMultimodalIT.java
@@ -53,7 +53,7 @@ public class GraphHopperMultimodalIT {
     public static void init() {
         Helper.removeDir(new File(GRAPH_LOC));
         final PtFlagEncoder ptFlagEncoder = new PtFlagEncoder();
-        EncodingManager encodingManager = new EncodingManager(Arrays.asList(ptFlagEncoder, new FootFlagEncoder()), 8);
+        EncodingManager encodingManager = EncodingManager.create(Arrays.asList(ptFlagEncoder, new FootFlagEncoder()), 8);
         GHDirectory directory = GraphHopperGtfs.createGHDirectory(GRAPH_LOC);
         GtfsStorage gtfsStorage = GraphHopperGtfs.createGtfsStorage();
         graphHopperStorage = GraphHopperGtfs.createOrLoad(directory, encodingManager, ptFlagEncoder, gtfsStorage, Collections.singleton("files/sample-feed.zip"), Collections.singleton("files/beatty.osm"));
diff --git a/reader-gtfs/src/test/java/com/graphhopper/RealtimeIT.java b/reader-gtfs/src/test/java/com/graphhopper/RealtimeIT.java
index 0bbcde76d..210475b25 100644
--- a/reader-gtfs/src/test/java/com/graphhopper/RealtimeIT.java
+++ b/reader-gtfs/src/test/java/com/graphhopper/RealtimeIT.java
@@ -65,7 +65,7 @@ public class RealtimeIT {
     public static void init() {
         Helper.removeDir(new File(GRAPH_LOC));
         final PtFlagEncoder ptFlagEncoder = new PtFlagEncoder();
-        EncodingManager encodingManager = new EncodingManager(Arrays.asList(new CarFlagEncoder(), ptFlagEncoder, new FootFlagEncoder()), 8);
+        EncodingManager encodingManager = EncodingManager.create(Arrays.asList(new CarFlagEncoder(), ptFlagEncoder, new FootFlagEncoder()), 8);
         GHDirectory directory = GraphHopperGtfs.createGHDirectory(GRAPH_LOC);
         GtfsStorage gtfsStorage = GraphHopperGtfs.createGtfsStorage();
         graphHopperStorage = GraphHopperGtfs.createOrLoad(directory, encodingManager, ptFlagEncoder, gtfsStorage, Collections.singleton("files/sample-feed.zip"), Collections.emptyList());
diff --git a/reader-gtfs/src/test/java/com/graphhopper/reader/gtfs/GraphExplorerTest.java b/reader-gtfs/src/test/java/com/graphhopper/reader/gtfs/GraphExplorerTest.java
index 70465355e..b8469c638 100644
--- a/reader-gtfs/src/test/java/com/graphhopper/reader/gtfs/GraphExplorerTest.java
+++ b/reader-gtfs/src/test/java/com/graphhopper/reader/gtfs/GraphExplorerTest.java
@@ -51,7 +51,7 @@ public class GraphExplorerTest {
     public GraphExplorerTest() {
         pt = new PtFlagEncoder();
         foot = new FootFlagEncoder();
-        encodingManager = new EncodingManager(Arrays.asList(pt, foot), 8);
+        encodingManager = EncodingManager.create(Arrays.asList(pt, foot), 8);
     }
 
     @Test
diff --git a/reader-gtfs/src/test/java/com/graphhopper/reader/gtfs/WrapperGraphTest.java b/reader-gtfs/src/test/java/com/graphhopper/reader/gtfs/WrapperGraphTest.java
index 28079a3ce..9fd42f377 100644
--- a/reader-gtfs/src/test/java/com/graphhopper/reader/gtfs/WrapperGraphTest.java
+++ b/reader-gtfs/src/test/java/com/graphhopper/reader/gtfs/WrapperGraphTest.java
@@ -23,8 +23,6 @@ import com.graphhopper.routing.util.FootFlagEncoder;
 import com.graphhopper.storage.GraphExtension;
 import com.graphhopper.storage.GraphHopperStorage;
 import com.graphhopper.storage.RAMDirectory;
-import org.junit.Assert;
-import org.junit.Assume;
 import org.junit.Test;
 
 import java.util.Arrays;
@@ -41,7 +39,7 @@ public class WrapperGraphTest {
     public WrapperGraphTest() {
         pt = new PtFlagEncoder();
         foot = new FootFlagEncoder();
-        encodingManager = new EncodingManager(Arrays.asList(pt, foot), 8);
+        encodingManager = EncodingManager.create(Arrays.asList(pt, foot), 8);
     }
 
     @Test
diff --git a/reader-osm/src/test/java/com/graphhopper/GraphHopperIT.java b/reader-osm/src/test/java/com/graphhopper/GraphHopperIT.java
index 7ca86dcee..a55dded8c 100644
--- a/reader-osm/src/test/java/com/graphhopper/GraphHopperIT.java
+++ b/reader-osm/src/test/java/com/graphhopper/GraphHopperIT.java
@@ -64,7 +64,7 @@ public class GraphHopperIT {
                 setStoreOnFlush(true).
                 setCHEnabled(false).
                 setGraphHopperLocation(graphFileFoot).
-                setEncodingManager(new EncodingManager(importVehicles)).
+                setEncodingManager(EncodingManager.create(importVehicles)).
                 importOrLoad();
     }
 
@@ -152,7 +152,7 @@ public class GraphHopperIT {
                 setOSMFile(DIR + "/monaco.osm.gz").
                 setCHEnabled(false).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager("car"));
+                setEncodingManager(EncodingManager.create("car"));
         tmpHopper.importOrLoad();
 
         GHRequest request = new GHRequest();
@@ -204,7 +204,7 @@ public class GraphHopperIT {
                 setOSMFile(DIR + "/north-bayreuth.osm.gz").
                 setCHEnabled(false).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager("bike, car"));
+                setEncodingManager(EncodingManager.create("bike, car"));
         tmpHopper.importOrLoad();
 
         GHRequest req = new GHRequest(50.028917, 11.496506, 49.985228, 11.600876).
@@ -242,7 +242,7 @@ public class GraphHopperIT {
                 setOSMFile(DIR + "/Laufamholzstrasse.osm.xml").
                 setCHEnabled(false).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager("car"));
+                setEncodingManager(EncodingManager.create("car"));
         tmpHopper.importOrLoad();
 
         GHRequest req = new GHRequest(49.46553, 11.154669, 49.465244, 11.152577).
@@ -277,7 +277,7 @@ public class GraphHopperIT {
                 setOSMFile(DIR + "/north-bayreuth.osm.gz").
                 setCHEnabled(false).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager("car,generic", 8));
+                setEncodingManager(EncodingManager.create("car,generic", 8));
         tmpHopper.importOrLoad();
 
         GHRequest req = new GHRequest(49.985307, 11.50628, 49.985731, 11.507465).
@@ -301,7 +301,7 @@ public class GraphHopperIT {
                 setOSMFile(DIR + "/north-bayreuth.osm.gz").
                 setCHEnabled(false).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager("generic,car", 8));
+                setEncodingManager(EncodingManager.create("generic,car", 8));
         tmpHopper.importOrLoad();
 
         GHRequest req = new GHRequest(49.985272, 11.506151, 49.986107, 11.507202).
@@ -576,7 +576,7 @@ public class GraphHopperIT {
                 setStoreOnFlush(true).
                 setCHEnabled(false).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager(importVehicles));
+                setEncodingManager(EncodingManager.create(importVehicles));
 
         tmpHopper.setElevationProvider(new SRTMProvider(DIR));
         tmpHopper.importOrLoad();
@@ -626,7 +626,7 @@ public class GraphHopperIT {
     public void testSRTMWithoutTunnelInterpolation() throws Exception {
         GraphHopper tmpHopper = new GraphHopperOSM().setOSMFile(osmFile).setStoreOnFlush(true)
                 .setCHEnabled(false).setGraphHopperLocation(tmpGraphFile)
-                .setEncodingManager(new EncodingManager(importVehicles, 8));
+                .setEncodingManager(EncodingManager.create(importVehicles, 8));
 
         tmpHopper.setElevationProvider(new SRTMProvider(DIR));
         tmpHopper.importOrLoad();
@@ -652,7 +652,7 @@ public class GraphHopperIT {
     public void testSRTMWithTunnelInterpolation() {
         GraphHopper tmpHopper = new GraphHopperOSM().setOSMFile(osmFile).setStoreOnFlush(true)
                 .setCHEnabled(false).setGraphHopperLocation(tmpGraphFile)
-                .setEncodingManager(new EncodingManager(genericImportVehicles, 8));
+                .setEncodingManager(EncodingManager.create(genericImportVehicles, 8));
 
         tmpHopper.setElevationProvider(new SRTMProvider(DIR));
         tmpHopper.importOrLoad();
@@ -660,7 +660,7 @@ public class GraphHopperIT {
         GHResponse rsp = tmpHopper.route(new GHRequest(43.74056471749763, 7.4299266210693755,
                 43.73790260334179, 7.427984089259056).setAlgorithm(ASTAR)
                 .setVehicle(vehicle).setWeighting(weightCalcStr));
-        PathWrapper arsp = rsp.getBest( );
+        PathWrapper arsp = rsp.getBest();
         // Without interpolation: 356.5
         assertEquals(350.9, arsp.getDistance(), .1);
         PointList pointList = arsp.getPoints();
@@ -687,7 +687,7 @@ public class GraphHopperIT {
                 setStoreOnFlush(true).
                 setCHEnabled(false).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager(tmpImportVehicles)).
+                setEncodingManager(EncodingManager.create(tmpImportVehicles)).
                 importOrLoad();
 
         GHResponse rsp = tmpHopper.route(new GHRequest(48.410987, 15.599492, 48.383419, 15.659294).
@@ -731,7 +731,7 @@ public class GraphHopperIT {
                 setOSMFile(tmpOsmFile).
                 setStoreOnFlush(true).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager(tmpImportVehicles)).
+                setEncodingManager(EncodingManager.create(tmpImportVehicles)).
                 importOrLoad();
 
         assertEquals(tmpVehicle, tmpHopper.getDefaultVehicle().toString());
@@ -771,7 +771,7 @@ public class GraphHopperIT {
                 setOSMFile(tmpOsmFile).
                 setStoreOnFlush(true).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager(tmpImportVehicles)).
+                setEncodingManager(EncodingManager.create(tmpImportVehicles)).
                 importOrLoad();
 
         assertEquals(tmpVehicle, tmpHopper.getDefaultVehicle().toString());
@@ -794,7 +794,7 @@ public class GraphHopperIT {
                 setOSMFile(tmpOsmFile).
                 setStoreOnFlush(true).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager("bike,car")).
+                setEncodingManager(EncodingManager.create("bike,car")).
                 importOrLoad();
         assertEquals("bike", tmpHopper.getDefaultVehicle().toString());
         checkMultiVehiclesWithCH(tmpHopper);
@@ -806,7 +806,7 @@ public class GraphHopperIT {
                 setOSMFile(tmpOsmFile).
                 setStoreOnFlush(true).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager("car,bike")).
+                setEncodingManager(EncodingManager.create("car,bike")).
                 importOrLoad();
         assertEquals("car", tmpHopper.getDefaultVehicle().toString());
         checkMultiVehiclesWithCH(tmpHopper);
@@ -859,7 +859,7 @@ public class GraphHopperIT {
                 setOSMFile(tmpOsmFile).
                 setStoreOnFlush(true).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager(tmpImportVehicles));
+                setEncodingManager(EncodingManager.create(tmpImportVehicles));
         tmpHopper.getCHFactoryDecorator().setWeightingsAsStrings(weightCalcStr);
         tmpHopper.importOrLoad();
 
@@ -902,7 +902,7 @@ public class GraphHopperIT {
                 setOSMFile(DIR + "/north-bayreuth.osm.gz").
                 setCHEnabled(false).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager("car"));
+                setEncodingManager(EncodingManager.create("car"));
         tmpHopper.importOrLoad();
 
         GHRequest req = new GHRequest().
@@ -924,7 +924,7 @@ public class GraphHopperIT {
                 setOSMFile(DIR + "/north-bayreuth.osm.gz").
                 setCHEnabled(false).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager("car"));
+                setEncodingManager(EncodingManager.create("car"));
         tmpHopper.importOrLoad();
 
         GHRequest req = new GHRequest().
@@ -946,7 +946,7 @@ public class GraphHopperIT {
                 setOSMFile(tmpOsmFile).
                 setStoreOnFlush(true).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager("car"));
+                setEncodingManager(EncodingManager.create("car"));
 
         tmpHopper.getCHFactoryDecorator().setEnabled(true).
                 setWeightingsAsStrings(Arrays.asList("fastest")).
@@ -1006,7 +1006,7 @@ public class GraphHopperIT {
                 setStoreOnFlush(true).
                 setCHEnabled(false).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager("car|turn_costs=true"));
+                setEncodingManager(EncodingManager.create("car|turn_costs=true"));
         tmpHopper.importOrLoad();
 
         // with turn costs (default if non-CH and turn cost enabled)
@@ -1032,7 +1032,7 @@ public class GraphHopperIT {
                 setStoreOnFlush(true).
                 setCHEnabled(true).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager("car|turn_costs=true"));
+                setEncodingManager(EncodingManager.create("car|turn_costs=true"));
         tmpHopper.getCHFactoryDecorator().setDisablingAllowed(true);
         tmpHopper.getCHFactoryDecorator().setEdgeBasedCHMode(CHAlgoFactoryDecorator.EdgeBasedCHMode.EDGE_AND_NODE);
         tmpHopper.importOrLoad();
@@ -1058,7 +1058,7 @@ public class GraphHopperIT {
                 setStoreOnFlush(true).
                 setCHEnabled(true).
                 setGraphHopperLocation(tmpGraphFile).
-                setEncodingManager(new EncodingManager("car|turn_costs=true"));
+                setEncodingManager(EncodingManager.create("car|turn_costs=true"));
         tmpHopper.getCHFactoryDecorator()
                 .setEdgeBasedCHMode(CHAlgoFactoryDecorator.EdgeBasedCHMode.EDGE_OR_NODE)
                 .setDisablingAllowed(true);
diff --git a/reader-osm/src/test/java/com/graphhopper/reader/osm/GraphHopperOSMTest.java b/reader-osm/src/test/java/com/graphhopper/reader/osm/GraphHopperOSMTest.java
index 515ada212..7f7bddf36 100644
--- a/reader-osm/src/test/java/com/graphhopper/reader/osm/GraphHopperOSMTest.java
+++ b/reader-osm/src/test/java/com/graphhopper/reader/osm/GraphHopperOSMTest.java
@@ -82,7 +82,7 @@ public class GraphHopperOSMTest {
     public void testLoadOSM() {
         GraphHopper closableInstance = new GraphHopperOSM().
                 setStoreOnFlush(true).
-                setEncodingManager(new EncodingManager("car")).
+                setEncodingManager(EncodingManager.create("car")).
                 setGraphHopperLocation(ghLoc).
                 setDataReaderFile(testOsm);
         closableInstance.importOrLoad();
@@ -119,7 +119,7 @@ public class GraphHopperOSMTest {
     @Test
     public void testLoadOSMNoCH() {
         GraphHopper gh = new GraphHopperOSM().setStoreOnFlush(true).setCHEnabled(false).
-                setEncodingManager(new EncodingManager("car")).
+                setEncodingManager(EncodingManager.create("car")).
                 setGraphHopperLocation(ghLoc).
                 setDataReaderFile(testOsm);
         gh.importOrLoad();
@@ -132,7 +132,7 @@ public class GraphHopperOSMTest {
 
         gh.close();
         gh = new GraphHopperOSM().setStoreOnFlush(true).setCHEnabled(false).
-                setEncodingManager(new EncodingManager("car"));
+                setEncodingManager(EncodingManager.create("car"));
         assertTrue(gh.load(ghLoc));
         rsp = gh.route(new GHRequest(51.2492152, 9.4317166, 51.2, 9.4));
         assertFalse(rsp.hasErrors());
@@ -153,7 +153,7 @@ public class GraphHopperOSMTest {
     public void testLoadingWithDifferentCHConfig_issue471() {
         // with CH should not be loadable without CH configured
         GraphHopper gh = new GraphHopperOSM().setStoreOnFlush(true).
-                setEncodingManager(new EncodingManager("car")).
+                setEncodingManager(EncodingManager.create("car")).
                 setGraphHopperLocation(ghLoc).
                 setDataReaderFile(testOsm);
         gh.importOrLoad();
@@ -163,7 +163,7 @@ public class GraphHopperOSMTest {
         gh.close();
 
         gh = new GraphHopperOSM().setStoreOnFlush(true).setCHEnabled(false).
-                setEncodingManager(new EncodingManager("car"));
+                setEncodingManager(EncodingManager.create("car"));
         try {
             gh.load(ghLoc);
             fail();
@@ -175,7 +175,7 @@ public class GraphHopperOSMTest {
 
         // without CH should not be loadable with CH enabled
         gh = new GraphHopperOSM().setStoreOnFlush(true).setCHEnabled(false).
-                setEncodingManager(new EncodingManager("car")).
+                setEncodingManager(EncodingManager.create("car")).
                 setGraphHopperLocation(ghLoc).
                 setDataReaderFile(testOsm);
         gh.importOrLoad();
@@ -185,7 +185,7 @@ public class GraphHopperOSMTest {
         gh.close();
 
         gh = new GraphHopperOSM().setStoreOnFlush(true).
-                setEncodingManager(new EncodingManager("car"));
+                setEncodingManager(EncodingManager.create("car"));
         try {
             gh.load(ghLoc);
             fail();
@@ -197,18 +197,18 @@ public class GraphHopperOSMTest {
     @Test
     public void testAllowMultipleReadingInstances() {
         GraphHopper instance1 = new GraphHopperOSM().setStoreOnFlush(true).
-                setEncodingManager(new EncodingManager("car")).
+                setEncodingManager(EncodingManager.create("car")).
                 setGraphHopperLocation(ghLoc).
                 setDataReaderFile(testOsm);
         instance1.importOrLoad();
 
         GraphHopper instance2 = new GraphHopperOSM().setStoreOnFlush(true).
-                setEncodingManager(new EncodingManager("car")).
+                setEncodingManager(EncodingManager.create("car")).
                 setDataReaderFile(testOsm);
         instance2.load(ghLoc);
 
         GraphHopper instance3 = new GraphHopperOSM().setStoreOnFlush(true).
-                setEncodingManager(new EncodingManager("car")).
+                setEncodingManager(EncodingManager.create("car")).
                 setDataReaderFile(testOsm);
         instance3.load(ghLoc);
 
@@ -233,7 +233,7 @@ public class GraphHopperOSMTest {
                 return super.importData();
             }
         }.setStoreOnFlush(true).
-                setEncodingManager(new EncodingManager("car")).
+                setEncodingManager(EncodingManager.create("car")).
                 setGraphHopperLocation(ghLoc).
                 setDataReaderFile(testOsm);
         final AtomicReference<Exception> ar = new AtomicReference<>();
@@ -250,7 +250,7 @@ public class GraphHopperOSMTest {
         thread.start();
 
         GraphHopper instance2 = new GraphHopperOSM().setStoreOnFlush(true).
-                setEncodingManager(new EncodingManager("car")).
+                setEncodingManager(EncodingManager.create("car")).
                 setDataReaderFile(testOsm);
         try {
             // let thread reach the CountDownLatch
@@ -277,7 +277,7 @@ public class GraphHopperOSMTest {
     public void testPrepare() {
         instance = new GraphHopperOSM().
                 setStoreOnFlush(false).
-                setEncodingManager(new EncodingManager("car")).
+                setEncodingManager(EncodingManager.create("car")).
                 setGraphHopperLocation(ghLoc).
                 setDataReaderFile(testOsm);
         instance.getCHFactoryDecorator().setWeightingsAsStrings("shortest");
@@ -293,7 +293,7 @@ public class GraphHopperOSMTest {
     public void testSortedGraph_noCH() {
         instance = new GraphHopperOSM().setStoreOnFlush(false).
                 setSortGraph(true).
-                setEncodingManager(new EncodingManager("car")).setCHEnabled(false).
+                setEncodingManager(EncodingManager.create("car")).setCHEnabled(false).
                 setGraphHopperLocation(ghLoc).
                 setDataReaderFile(testOsm);
         instance.importOrLoad();
@@ -320,7 +320,7 @@ public class GraphHopperOSMTest {
     public void testFootAndCar() {
         // now all ways are imported
         instance = new GraphHopperOSM().setStoreOnFlush(false).
-                setEncodingManager(new EncodingManager("car,foot")).setCHEnabled(false).
+                setEncodingManager(EncodingManager.create("car,foot")).setCHEnabled(false).
                 setGraphHopperLocation(ghLoc).
                 setDataReaderFile(testOsm3);
         instance.importOrLoad();
@@ -424,7 +424,7 @@ public class GraphHopperOSMTest {
     public void testNoNPE_ifLoadNotSuccessful() {
         instance = new GraphHopperOSM().
                 setStoreOnFlush(true).
-                setEncodingManager(new EncodingManager("car"));
+                setEncodingManager(EncodingManager.create("car"));
         try {
             // loading from empty directory
             new File(ghLoc).mkdirs();
@@ -439,7 +439,7 @@ public class GraphHopperOSMTest {
     @Test
     public void testDoesNotCreateEmptyFolderIfLoadingFromNonExistingPath() {
         instance = new GraphHopperOSM().
-                setEncodingManager(new EncodingManager("car"));
+                setEncodingManager(EncodingManager.create("car"));
 
         assertFalse(instance.load(ghLoc));
         assertFalse(new File(ghLoc).exists());
@@ -476,7 +476,7 @@ public class GraphHopperOSMTest {
         // missing OSM file to import
         instance = new GraphHopperOSM().
                 setStoreOnFlush(true).
-                setEncodingManager(new EncodingManager("car")).
+                setEncodingManager(EncodingManager.create("car")).
                 setGraphHopperLocation(ghLoc);
         try {
             instance.importOrLoad();
@@ -501,7 +501,7 @@ public class GraphHopperOSMTest {
         // Import is possible even if no storeOnFlush is specified BUT here we miss the OSM file
         instance = new GraphHopperOSM().
                 setStoreOnFlush(false).
-                setEncodingManager(new EncodingManager("car")).
+                setEncodingManager(EncodingManager.create("car")).
                 setGraphHopperLocation(ghLoc);
         try {
             instance.importOrLoad();
@@ -516,7 +516,7 @@ public class GraphHopperOSMTest {
     public void testFootOnly() {
         // now only footable ways are imported => no A D C and B D E => the other both ways have pillar nodes!
         instance = new GraphHopperOSM().setStoreOnFlush(false).
-                setEncodingManager(new EncodingManager("foot")).
+                setEncodingManager(EncodingManager.create("foot")).
                 setGraphHopperLocation(ghLoc).
                 setDataReaderFile(testOsm3);
         instance.importOrLoad();
@@ -683,7 +683,7 @@ public class GraphHopperOSMTest {
 
     private GraphHopper createSquareGraphInstance(boolean withCH) {
         CarFlagEncoder carEncoder = new CarFlagEncoder();
-        EncodingManager encodingManager = new EncodingManager(carEncoder);
+        EncodingManager encodingManager = EncodingManager.create(carEncoder);
         Weighting weighting = new FastestWeighting(carEncoder);
         GraphHopperStorage g = new GraphHopperStorage(Collections.singletonList(weighting), new RAMDirectory(), encodingManager,
                 false, new GraphExtension.NoOpExtension()).
@@ -732,7 +732,7 @@ public class GraphHopperOSMTest {
     @Test
     public void testCustomFactoryForNoneCH() {
         CarFlagEncoder carEncoder = new CarFlagEncoder();
-        EncodingManager em = new EncodingManager(carEncoder);
+        EncodingManager em = EncodingManager.create(carEncoder);
         // Weighting weighting = new FastestWeighting(carEncoder);
         instance = new GraphHopperOSM().setStoreOnFlush(false).setCHEnabled(false).
                 setEncodingManager(em).
@@ -792,7 +792,7 @@ public class GraphHopperOSMTest {
         HashMap<String, Long> shortcutCountMap = new HashMap<>();
         // try all parallelization modes        
         for (int threadCount = 1; threadCount < 6; threadCount++) {
-            EncodingManager em = new EncodingManager(Arrays.asList(new CarFlagEncoder(), new MotorcycleFlagEncoder(),
+            EncodingManager em = EncodingManager.create(Arrays.asList(new CarFlagEncoder(), new MotorcycleFlagEncoder(),
                     new MountainBikeFlagEncoder(), new RacingBikeFlagEncoder(), new FootFlagEncoder()), 8);
 
             GraphHopper tmpGH = new GraphHopperOSM().
@@ -833,7 +833,7 @@ public class GraphHopperOSMTest {
         HashMap<String, Integer> landmarkCount = new HashMap<>();
         // try all parallelization modes
         for (int threadCount = 1; threadCount < 6; threadCount++) {
-            EncodingManager em = new EncodingManager(Arrays.asList(new CarFlagEncoder(), new MotorcycleFlagEncoder(),
+            EncodingManager em = EncodingManager.create(Arrays.asList(new CarFlagEncoder(), new MotorcycleFlagEncoder(),
                     new MountainBikeFlagEncoder(), new RacingBikeFlagEncoder(), new FootFlagEncoder()), 8);
 
             GraphHopper tmpGH = new GraphHopperOSM().
@@ -878,7 +878,7 @@ public class GraphHopperOSMTest {
         TestEncoder simpleTruck = new TestEncoder("simple_truck");
 
         // use simple truck first
-        EncodingManager em = new EncodingManager(simpleTruck, truck);
+        EncodingManager em = EncodingManager.create(simpleTruck, truck);
         CHAlgoFactoryDecorator decorator = new CHAlgoFactoryDecorator();
         Weighting fwSimpleTruck = new FastestWeighting(simpleTruck);
         Weighting fwTruck = new FastestWeighting(truck);
@@ -907,7 +907,7 @@ public class GraphHopperOSMTest {
 
     @Test
     public void testGetMultipleWeightingsForCH() {
-        EncodingManager em = new EncodingManager(Arrays.asList(new CarFlagEncoder()), 8);
+        EncodingManager em = EncodingManager.create(Arrays.asList(new CarFlagEncoder()), 8);
 
         GraphHopper tmpGH = new GraphHopperOSM().
                 setStoreOnFlush(false).
diff --git a/reader-osm/src/test/java/com/graphhopper/reader/osm/OSMReaderTest.java b/reader-osm/src/test/java/com/graphhopper/reader/osm/OSMReaderTest.java
index 772444b31..d8c062348 100644
--- a/reader-osm/src/test/java/com/graphhopper/reader/osm/OSMReaderTest.java
+++ b/reader-osm/src/test/java/com/graphhopper/reader/osm/OSMReaderTest.java
@@ -466,7 +466,7 @@ public class OSMReaderTest {
 
     @Test
     public void testRelation() {
-        EncodingManager manager = new EncodingManager("bike");
+        EncodingManager manager = EncodingManager.create("bike");
         GraphHopperStorage ghStorage = new GraphHopperStorage(new RAMDirectory(), manager, false, new GraphExtension.NoOpExtension());
         OSMReader reader = new OSMReader(ghStorage);
         ReaderRelation osmRel = new ReaderRelation(1);
@@ -564,7 +564,7 @@ public class OSMReaderTest {
     public void testRoadAttributes() {
         GraphHopper hopper = new GraphHopperFacade(fileRoadAttributes);
         DataFlagEncoder dataFlagEncoder = new DataFlagEncoder().setStoreHeight(true).setStoreWeight(true).setStoreWidth(true);
-        hopper.setEncodingManager(new EncodingManager(Arrays.asList(dataFlagEncoder), 8));
+        hopper.setEncodingManager(EncodingManager.create(Arrays.asList(dataFlagEncoder), 8));
         hopper.importOrLoad();
 
         Graph graph = hopper.getGraphHopperStorage();
@@ -622,7 +622,7 @@ public class OSMReaderTest {
                 return 0;
             }
         };
-        EncodingManager manager = new EncodingManager(encoder);
+        EncodingManager manager = EncodingManager.create(encoder);
         GraphHopperStorage ghStorage = newGraph(dir, manager, false, false);
         final Map<Integer, Double> latMap = new HashMap<>();
         final Map<Integer, Double> lonMap = new HashMap<>();
@@ -726,7 +726,7 @@ public class OSMReaderTest {
         CarFlagEncoder car = new CarFlagEncoder(5, 5, 24);
         FootFlagEncoder foot = new FootFlagEncoder();
         BikeFlagEncoder bike = new BikeFlagEncoder(4, 2, 24);
-        EncodingManager manager = new EncodingManager(Arrays.asList(bike, foot, car), 4);
+        EncodingManager manager = EncodingManager.create(Arrays.asList(bike, foot, car), 4);
 
         GraphHopperStorage ghStorage = new GraphBuilder(manager).create();
         OSMReader reader = new OSMReader(ghStorage) {
@@ -840,7 +840,7 @@ public class OSMReaderTest {
     public void testRoutingRequestFails_issue665() {
         GraphHopper hopper = new GraphHopperOSM()
                 .setDataReaderFile(getClass().getResource(file7).getFile())
-                .setEncodingManager(new EncodingManager("car,motorcycle"))
+                .setEncodingManager(EncodingManager.create("car,motorcycle"))
                 .setGraphHopperLocation(dir);
         hopper.getCHFactoryDecorator().setEnabled(false);
         hopper.importOrLoad();
@@ -873,7 +873,7 @@ public class OSMReaderTest {
 
             footEncoder = new FootFlagEncoder();
 
-            setEncodingManager(new EncodingManager(footEncoder, carEncoder, bikeEncoder));
+            setEncodingManager(EncodingManager.create(footEncoder, carEncoder, bikeEncoder));
             carAccessEnc = carEncoder.getAccessEnc();
         }
 
diff --git a/reader-osm/src/test/java/com/graphhopper/reader/osm/OSMTagParserTest.java b/reader-osm/src/test/java/com/graphhopper/reader/osm/OSMReaderUtilityTest.java
similarity index 64%
rename from reader-osm/src/test/java/com/graphhopper/reader/osm/OSMTagParserTest.java
rename to reader-osm/src/test/java/com/graphhopper/reader/osm/OSMReaderUtilityTest.java
index d6a93988a..fc71fb1e5 100644
--- a/reader-osm/src/test/java/com/graphhopper/reader/osm/OSMTagParserTest.java
+++ b/reader-osm/src/test/java/com/graphhopper/reader/osm/OSMReaderUtilityTest.java
@@ -26,42 +26,42 @@ import static org.junit.Assert.fail;
  * @author Peter Karich
  * @author ratrun
  */
-public class OSMTagParserTest {
+public class OSMReaderUtilityTest {
     @Test
     public void testParseDuration() {
-        assertEquals(10 * 60, OSMTagParser.parseDuration("00:10"));
-        assertEquals(35 * 60, OSMTagParser.parseDuration("35"));
-        assertEquals(70 * 60, OSMTagParser.parseDuration("01:10"));
-        assertEquals(70 * 60 + 2, OSMTagParser.parseDuration("01:10:02"));
-        assertEquals(0, OSMTagParser.parseDuration(null));
-        assertEquals(60 * 20 * 60, OSMTagParser.parseDuration("20:00"));
-        assertEquals(20 * 60, OSMTagParser.parseDuration("0:20:00"));
-        assertEquals((60 * 2 + 20) * 60 + 2, OSMTagParser.parseDuration("02:20:02"));
+        assertEquals(10 * 60, OSMReaderUtility.parseDuration("00:10"));
+        assertEquals(35 * 60, OSMReaderUtility.parseDuration("35"));
+        assertEquals(70 * 60, OSMReaderUtility.parseDuration("01:10"));
+        assertEquals(70 * 60 + 2, OSMReaderUtility.parseDuration("01:10:02"));
+        assertEquals(0, OSMReaderUtility.parseDuration(null));
+        assertEquals(60 * 20 * 60, OSMReaderUtility.parseDuration("20:00"));
+        assertEquals(20 * 60, OSMReaderUtility.parseDuration("0:20:00"));
+        assertEquals((60 * 2 + 20) * 60 + 2, OSMReaderUtility.parseDuration("02:20:02"));
 
         // two months
-        assertEquals(31 + 31, OSMTagParser.parseDuration("P2M") / (24 * 60 * 60));
+        assertEquals(31 + 31, OSMReaderUtility.parseDuration("P2M") / (24 * 60 * 60));
 
         // two minutes
-        assertEquals(2 * 60, OSMTagParser.parseDuration("PT2M"));
-        assertEquals((5 * 60 + 12) * 60 + 36, OSMTagParser.parseDuration("PT5H12M36S"));
+        assertEquals(2 * 60, OSMReaderUtility.parseDuration("PT2M"));
+        assertEquals((5 * 60 + 12) * 60 + 36, OSMReaderUtility.parseDuration("PT5H12M36S"));
     }
 
     @Test
     public void testWrongDurationFormats() {
         try {
-            OSMTagParser.parseDuration("PT5h12m36s");
+            OSMReaderUtility.parseDuration("PT5h12m36s");
             fail("parseDuration didn't throw when I expected it to");
         } catch (IllegalArgumentException expectedException) {
             assertEquals(expectedException.getMessage(), "Cannot parse duration tag value: PT5h12m36s");
         }
         try {
-            OSMTagParser.parseDuration("oh");
+            OSMReaderUtility.parseDuration("oh");
             fail("parseDuration didn't throw when I expected it to");
         } catch (IllegalArgumentException expectedException) {
             assertEquals(expectedException.getMessage(), "Cannot parse duration tag value: oh");
         }
         try {
-            OSMTagParser.parseDuration("01:10:2");
+            OSMReaderUtility.parseDuration("01:10:2");
             fail("parseDuration didn't throw when I expected it to");
         } catch (IllegalArgumentException expectedException) {
             assertEquals(expectedException.getMessage(), "Cannot parse duration tag value: 01:10:2");
diff --git a/reader-osm/src/test/java/com/graphhopper/reader/osm/OSMTurnRelationTest.java b/reader-osm/src/test/java/com/graphhopper/reader/osm/OSMTurnRelationTest.java
index b159ca15d..9faf348c7 100644
--- a/reader-osm/src/test/java/com/graphhopper/reader/osm/OSMTurnRelationTest.java
+++ b/reader-osm/src/test/java/com/graphhopper/reader/osm/OSMTurnRelationTest.java
@@ -48,7 +48,7 @@ public class OSMTurnRelationTest {
         internalToOSMEdge.put(3, 3L);
         internalToOSMEdge.put(4, 4L);
 
-        GraphHopperStorage ghStorage = new GraphBuilder(new EncodingManager(encoder)).create();
+        GraphHopperStorage ghStorage = new GraphBuilder(EncodingManager.create(encoder)).create();
         EdgeBasedRoutingAlgorithmTest.initGraph(ghStorage);
         OSMReader osmReader = new OSMReader(ghStorage) {
 
diff --git a/reader-osm/src/test/java/com/graphhopper/routing/RoutingAlgorithmWithOSMIT.java b/reader-osm/src/test/java/com/graphhopper/routing/RoutingAlgorithmWithOSMIT.java
index 863c7af6a..a6c8551f9 100644
--- a/reader-osm/src/test/java/com/graphhopper/routing/RoutingAlgorithmWithOSMIT.java
+++ b/reader-osm/src/test/java/com/graphhopper/routing/RoutingAlgorithmWithOSMIT.java
@@ -556,8 +556,7 @@ public class RoutingAlgorithmWithOSMIT {
                     setCHEnabled(withCH).
                     setDataReaderFile(osmFile).
                     setGraphHopperLocation(graphFile).
-                    setEncodingManager(new EncodingManager(importVehicles, 8));
-                    // setEncodingManager(new EncodingManager.Builder(8).addAll(new DefaultFlagEncoderFactory(), importVehicles).build());
+                    setEncodingManager(new EncodingManager.Builder(8).addAll(new DefaultFlagEncoderFactory(), importVehicles).build());
 
             if (osmFile.contains("krautsand"))
                 hopper.setMinNetworkSize(0, 0);
@@ -618,7 +617,7 @@ public class RoutingAlgorithmWithOSMIT {
         System.out.println("testMonacoParallel takes a bit time...");
         String graphFile = "target/monaco-gh";
         Helper.removeDir(new File(graphFile));
-        final EncodingManager encodingManager = new EncodingManager("car");
+        final EncodingManager encodingManager = EncodingManager.create("car");
         final GraphHopper hopper = new GraphHopperOSM().
                 setStoreOnFlush(true).
                 setEncodingManager(encodingManager).setCHEnabled(false).
diff --git a/reader-osm/src/test/java/com/graphhopper/routing/TrafficChangeWithNodeOrderingReusingTest.java b/reader-osm/src/test/java/com/graphhopper/routing/TrafficChangeWithNodeOrderingReusingTest.java
index 1cac9c248..ae100f56b 100644
--- a/reader-osm/src/test/java/com/graphhopper/routing/TrafficChangeWithNodeOrderingReusingTest.java
+++ b/reader-osm/src/test/java/com/graphhopper/routing/TrafficChangeWithNodeOrderingReusingTest.java
@@ -56,7 +56,7 @@ public class TrafficChangeWithNodeOrderingReusingTest {
     public TrafficChangeWithNodeOrderingReusingTest(int maxDeviationPercentage) {
         this.maxDeviationPercentage = maxDeviationPercentage;
         FlagEncoder encoder = new CarFlagEncoder();
-        EncodingManager em = new EncodingManager(encoder);
+        EncodingManager em = EncodingManager.create(encoder);
         baseWeighting = new FastestWeighting(encoder);
         trafficWeighting = new RandomDeviationWeighting(baseWeighting, maxDeviationPercentage);
         Directory dir = new RAMDirectory("traffic-change-test");
diff --git a/web/src/test/java/com/graphhopper/http/isochrone/PtIsochroneResourceTest.java b/web/src/test/java/com/graphhopper/http/isochrone/PtIsochroneResourceTest.java
index c80d48854..b6e740421 100644
--- a/web/src/test/java/com/graphhopper/http/isochrone/PtIsochroneResourceTest.java
+++ b/web/src/test/java/com/graphhopper/http/isochrone/PtIsochroneResourceTest.java
@@ -44,7 +44,6 @@ import javax.ws.rs.client.WebTarget;
 import java.io.File;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
-import java.util.Arrays;
 import java.util.Collections;
 
 import static org.junit.Assert.assertFalse;
@@ -65,7 +64,7 @@ public class PtIsochroneResourceTest {
         final CarFlagEncoder carFlagEncoder = new CarFlagEncoder();
         final FootFlagEncoder footFlagEncoder = new FootFlagEncoder();
 
-        EncodingManager encodingManager = new EncodingManager(Arrays.asList(carFlagEncoder, footFlagEncoder, ptFlagEncoder), 12);
+        EncodingManager encodingManager = new EncodingManager.Builder(12).add(carFlagEncoder).add(footFlagEncoder).add(ptFlagEncoder).build();
         GHDirectory directory = GraphHopperGtfs.createGHDirectory(GRAPH_LOC);
         GtfsStorage gtfsStorage = GraphHopperGtfs.createGtfsStorage();
         graphHopperStorage = GraphHopperGtfs.createOrLoad(directory, encodingManager, ptFlagEncoder, gtfsStorage, Collections.singleton("../reader-gtfs/files/sample-feed.zip"), Collections.emptyList());