diff --git a/src/main/kotlin/unibz/cs/semint/kprime/adapter/repository/JdbcAdapter.kt b/src/main/kotlin/unibz/cs/semint/kprime/adapter/repository/JdbcAdapter.kt
index e5b0c293925cffe2d91ac922041d2acb460cc855..74f8b1a2d374b26d6eb5094bba462cce02561635 100644
--- a/src/main/kotlin/unibz/cs/semint/kprime/adapter/repository/JdbcAdapter.kt
+++ b/src/main/kotlin/unibz/cs/semint/kprime/adapter/repository/JdbcAdapter.kt
@@ -4,10 +4,11 @@ import unibz.cs.semint.kprime.domain.DataSource
 import unibz.cs.semint.kprime.domain.dql.Query
 import unibz.cs.semint.kprime.usecase.common.SQLizeSelectUseCase
 import java.lang.IllegalArgumentException
-import java.sql.Connection
-import java.sql.DriverManager
-import java.sql.ResultSet
+import java.net.URL
+import java.net.URLClassLoader
+import java.sql.*
 import java.util.*
+import java.util.logging.Logger
 
 
 class JdbcAdapter {
@@ -63,14 +64,62 @@ class JdbcAdapter {
         conn.commit()
     }
 
+    internal class DriverShim(d: Driver) : Driver {
+        private val driver: Driver
+
+        init {
+            driver = d
+        }
+
+        @Throws(SQLException::class)
+        override fun acceptsURL(u: String?): Boolean {
+            return driver.acceptsURL(u)
+        }
+
+        @Throws(SQLException::class)
+        override fun connect(u: String?, p: Properties?): Connection {
+            return driver.connect(u, p)
+        }
+
+        @Throws(SQLException::class)
+        override fun getPropertyInfo(u: String?, p: Properties?): Array<DriverPropertyInfo> {
+            return driver.getPropertyInfo(u, p)
+        }
+
+        override fun getMajorVersion(): Int {
+            return driver.majorVersion
+        }
+
+        override fun getMinorVersion(): Int {
+            return driver.minorVersion
+        }
+
+        override fun jdbcCompliant(): Boolean {
+            return driver.jdbcCompliant()
+        }
+
+        override fun getParentLogger(): Logger {
+            return driver.parentLogger
+        }
+    }
+
+
     private fun openConnection(datasource: DataSource): Connection? {
         val source = datasource
         val user = source.user
         val pass = source.pass
         val path = source.path
 
-//        println("Looking for... driver [${source.driver}] for connection [$path] with user [$user].")
-        Class.forName(source.driver).newInstance()
+        println("Looking for... driver [${source.driver}][${source.driverUrl}] for connection [$path] with user [$user].")
+        if (source.driverUrl.isNotEmpty()) {
+            val u = URL("jar:file:${source.driverUrl}!/")// /home/nipe/Temp/postgresql-42.2.8.jar
+            val classname = source.driver
+            val ucl = URLClassLoader(arrayOf(u) )
+            val d = Class.forName(classname, true, ucl).newInstance() as Driver
+            DriverManager.registerDriver(DriverShim(d))
+        } else {
+            Class.forName(source.driver).newInstance()
+        }
 
         var conn: Connection?
 //        println("Connection preparing...")
diff --git a/src/main/kotlin/unibz/cs/semint/kprime/domain/DataSource.kt b/src/main/kotlin/unibz/cs/semint/kprime/domain/DataSource.kt
index 461d06848b4bbe6138cd61eddfbfd3867ef09783..de131b297a4e42fd6955073c6c6f1795c230a455 100644
--- a/src/main/kotlin/unibz/cs/semint/kprime/domain/DataSource.kt
+++ b/src/main/kotlin/unibz/cs/semint/kprime/domain/DataSource.kt
@@ -8,7 +8,8 @@ class DataSource(
         var driver: String,
         var path: String,
         var user: String,
-        var pass: String) : Serializable {
+        var pass: String,
+        var driverUrl: String = "") : Serializable {
 
     var connection : DataSourceConnection? = null
     var currentResources: HashMap<String,Any>? = null