public Driver getDriver(String sDriverClassName) throws TelosysToolsException
    {
        Driver driverInstance = null;

        //--- Try to find an existing instance of this type of driver 
        driverInstance = _drivers.get(sDriverClassName);
        if ( driverInstance != null )
        {
            log ("Driver already loaded");
            return driverInstance ;
        }
                        
        //--- Try to load the driver class with the specific class loader
        log ("Loading the driver class '" + sDriverClassName  + "' ...");
        Class<?> driverClass = null;
        try
        {
            if (_loader != null) {
                log ("Loading with specific class loader ...");
                driverClass = _loader.loadClass(sDriverClassName);
            }
            else {
            	//throwException("Class loader is not initialized (_loader == null)");
                log ("Loading with default class loader ...");
            	driverClass = loadWithDefaultClassLoader(sDriverClassName) ; // v 2.1.1 #LGU
            }
        } catch (ClassNotFoundException e)
        {
        	throwException("Cannot load class '" + sDriverClassName + "' (ClassNotFoundException)", e);
        }
        if (driverClass == null) {
        	// Unexpected situation 
        	throwException("Cannot load class '" + sDriverClassName + "' (unknown reason)");
        }

        //--- Try to create an instance of this driver
        log ("Driver class loaded." );
        log ("Creating new driver instance ..." );
        try {
            driverInstance = (Driver) driverClass.newInstance();
        } 
        catch (InstantiationException e) {
        	throwException("Cannot create driver instance (InstantiationException)", e);
        } 
        catch (IllegalAccessException e) {
        	throwException("Cannot create driver instance (IllegalAccessException)", e);
        }

        if ( driverInstance != null ) {
            log ("Driver instance created.");
            //--- Store the driver instance ( for the future )
            _drivers.put(sDriverClassName, driverInstance);
        }
        else {
        	throwException("Cannot create driver instance (unknown reason)");
        }
        
        return driverInstance ;
    }