public GTFSPlugin getPlugin(){
		if (plugin == null){
			synchronized (this) {
				String pluginName = properties.getProperty("plugin");
				if (pluginName == null){
					plugin = new DefaultPlugin();
				}else{
					try{
						Class<?> pluginClass  = Class.forName(pluginName);
						boolean validPlugin = false;
						for (Class<?> c : pluginClass.getInterfaces()) {
					        if (c.equals(GTFSPlugin.class)) {
					            validPlugin = true;
					        }
					    }
						if (validPlugin)
							plugin = (GTFSPlugin) pluginClass.newInstance();
						else
							throw new IllegalArgumentException("The specified plugin is not found or not valid");
					}catch (Exception e) {
						throw new IllegalArgumentException("The specified plugin is not found or not valid");
					}
				}
			}
		}
		return plugin;
	}