diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfig.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfig.java
index 28ed5d1..f4217bb 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfig.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfig.java
@@ -33,7 +33,6 @@
   static final String CONFIG_MAX_AGE = "maxAge";
   static final String CONFIG_MAX_TRIES = "maxTries";
   static final String CONFIG_RETURN_LIMIT = "returnLimit";
-  static final String CONFIG_DRIVER = "storeDriver";
   static final String CONFIG_URL = "storeUrl";
   static final String CONFIG_LOCAL_PATH = "localStorePath";
   static final String CONFIG_URL_OPTIONS = "urlOptions";
@@ -50,7 +49,6 @@
   static final int DEFAULT_RETURN_LIMIT = 5000;
   static final int DEFAULT_WAIT_TIME = 1000;
   static final int DEFAULT_CONN_TIME = 1000;
-  static final String DEFAULT_DRIVER = "org.h2.Driver";
   static final int DEFAULT_EVICT_IDLE_TIME = 1000 * 60;
   static final int DEFAULT_MAX_CONNECTIONS = 8;
 
@@ -60,7 +58,6 @@
   private int returnLimit;
   private int waitTime;
   private int connectTime;
-  private String storeDriver;
   private String storeUrl;
   private Path localStorePath;
   private String urlOptions;
@@ -78,7 +75,6 @@
     returnLimit = cfg.getInt(CONFIG_RETURN_LIMIT, DEFAULT_RETURN_LIMIT);
     waitTime = cfg.getInt(CONFIG_WAIT_TIME, DEFAULT_WAIT_TIME);
     connectTime = cfg.getInt(CONFIG_CONN_TIME, DEFAULT_CONN_TIME);
-    storeDriver = cfg.getString(CONFIG_DRIVER, DEFAULT_DRIVER);
     storeUrl = cfg.getString(CONFIG_URL, H2_DB_PREFIX + site.data_dir.resolve("db").normalize());
     localStorePath =
         Paths.get(
@@ -107,10 +103,6 @@
     return connectTime;
   }
 
-  public String getStoreDriver() {
-    return storeDriver;
-  }
-
   public String getStoreUrl() {
     return storeUrl;
   }
@@ -131,11 +123,6 @@
     return maxTries;
   }
 
-  /** @return the local-store (database) driver which happens to be h2 */
-  public String getLocalStoreDriver() {
-    return DEFAULT_DRIVER;
-  }
-
   public Path getLocalStorePath() {
     return localStorePath;
   }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java
index 2fdda24..d0e5d94 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java
@@ -49,9 +49,8 @@
   private final Gson gson;
   private BasicDataSource ds;
 
-  SQLClient(String storeDriver, String storeUrl, String urlOptions) {
+  SQLClient(String storeUrl, String urlOptions) {
     ds = new BasicDataSource();
-    ds.setDriverClassName(storeDriver);
     ds.setUrl(storeUrl);
     ds.setConnectionProperties(urlOptions);
     ds.setMaxWait(MILLISECONDS.convert(30, SECONDS));
@@ -107,7 +106,7 @@
    * @throws SQLException If there was a problem with the database
    */
   void createDBIfNotCreated() throws SQLException {
-    boolean postgresql = ds.getDriverClassName().contains("postgresql");
+    boolean postgresql = ds.getUrl().contains("postgresql");
     execute(SQLTable.createTableQuery(postgresql));
     execute(SQLTable.createIndexes(postgresql));
   }
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLModule.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLModule.java
index 9b14366..1088b15 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLModule.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLModule.java
@@ -40,8 +40,7 @@
   @Singleton
   @EventsDb
   SQLClient provideSqlClient(EventsLogConfig cfg) {
-    SQLClient sqlClient =
-        new SQLClient(cfg.getStoreDriver(), cfg.getStoreUrl(), cfg.getUrlOptions());
+    SQLClient sqlClient = new SQLClient(cfg.getStoreUrl(), cfg.getUrlOptions());
     sqlClient.setUsername(cfg.getStoreUsername());
     sqlClient.setPassword(cfg.getStorePassword());
     sqlClient.setEvictIdleTime(cfg.getEvictIdleTime());
@@ -55,7 +54,6 @@
   SQLClient provideLocalSqlClient(EventsLogConfig cfg) {
     SQLClient sqlClient =
         new SQLClient(
-            cfg.getLocalStoreDriver(),
             H2_DB_PREFIX + cfg.getLocalStorePath().resolve(SQLTable.TABLE_NAME),
             cfg.getUrlOptions());
     sqlClient.setEvictIdleTime(cfg.getEvictIdleTime());
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index ce1572c..07654db 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -23,10 +23,6 @@
 :    Specify the max amount of events that will be returned for each query.
      When not specified, the default value is 5000.
 
-plugin.@PLUGIN@.storeDriver
-:    Specify the driver of the database. When not specified, the default driver is
-     org.h2.Driver.
-
 plugin.@PLUGIN@.storeUrl
 :    Specify the path to the directory in which to keep the database. When not
      specified, the default path is jdbc:h2:\<gerrit_site>/data/db.
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfigTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfigTest.java
index ff52ebc..484d156 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfigTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/EventsLogConfigTest.java
@@ -16,7 +16,6 @@
 
 import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.CONFIG_CONN_TIME;
 import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.CONFIG_COPY_LOCAL;
-import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.CONFIG_DRIVER;
 import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.CONFIG_EVICT_IDLE_TIME;
 import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.CONFIG_LOCAL_PATH;
 import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.CONFIG_MAX_AGE;
@@ -29,7 +28,6 @@
 import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.CONFIG_USERNAME;
 import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.CONFIG_WAIT_TIME;
 import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.DEFAULT_CONN_TIME;
-import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.DEFAULT_DRIVER;
 import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.DEFAULT_EVICT_IDLE_TIME;
 import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.DEFAULT_MAX_AGE;
 import static com.ericsson.gerrit.plugins.eventslog.EventsLogConfig.DEFAULT_MAX_CONNECTIONS;
@@ -88,10 +86,8 @@
     assertThat(eventsLogConfig.getReturnLimit()).isEqualTo(DEFAULT_RETURN_LIMIT);
     assertThat(eventsLogConfig.getConnectTime()).isEqualTo(DEFAULT_CONN_TIME);
     assertThat(eventsLogConfig.getWaitTime()).isEqualTo(DEFAULT_WAIT_TIME);
-    assertThat(eventsLogConfig.getLocalStoreDriver()).isEqualTo(DEFAULT_DRIVER);
     assertThat(eventsLogConfig.getLocalStorePath().toString() + "/")
         .isEqualTo(site.site_path.toString() + "/events-db/");
-    assertThat(eventsLogConfig.getStoreDriver()).isEqualTo(DEFAULT_DRIVER);
     assertThat(eventsLogConfig.getStoreUrl())
         .isEqualTo("jdbc:h2:" + site.data_dir.toString() + "/db");
     assertThat(eventsLogConfig.getUrlOptions()).isEmpty();
@@ -112,9 +108,7 @@
     assertThat(eventsLogConfig.getReturnLimit()).isEqualTo(10000);
     assertThat(eventsLogConfig.getConnectTime()).isEqualTo(5000);
     assertThat(eventsLogConfig.getWaitTime()).isEqualTo(5000);
-    assertThat(eventsLogConfig.getLocalStoreDriver()).isEqualTo(DEFAULT_DRIVER);
     assertThat(eventsLogConfig.getLocalStorePath().toString() + "/").isEqualTo(LOCAL_STORE_PATH);
-    assertThat(eventsLogConfig.getStoreDriver()).isEqualTo("org.h2.Driver2");
     assertThat(eventsLogConfig.getStoreUrl()).isEqualTo("jdbc:h2:~/gerrit/db");
     assertThat(eventsLogConfig.getUrlOptions()).isEqualTo(Joiner.on(";").join(urlOptions));
     assertThat(eventsLogConfig.getStoreUsername()).isEqualTo("testUsername");
@@ -131,7 +125,6 @@
     config.setInt(PLUGIN, PLUGIN_NAME, CONFIG_RETURN_LIMIT, 10000);
     config.setInt(PLUGIN, PLUGIN_NAME, CONFIG_CONN_TIME, 5000);
     config.setInt(PLUGIN, PLUGIN_NAME, CONFIG_WAIT_TIME, 5000);
-    config.setString(PLUGIN, PLUGIN_NAME, CONFIG_DRIVER, "org.h2.Driver2");
     config.setString(PLUGIN, PLUGIN_NAME, CONFIG_URL, "jdbc:h2:~/gerrit/db");
     config.setString(PLUGIN, PLUGIN_NAME, CONFIG_LOCAL_PATH, LOCAL_STORE_PATH);
     config.setStringList(PLUGIN, PLUGIN_NAME, CONFIG_URL_OPTIONS, urlOptions);
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java
index 7f3c81c..c0b4650 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLStoreTest.java
@@ -62,7 +62,6 @@
   private static final Logger log = LoggerFactory.getLogger(SQLStoreTest.class);
   private static final String TEST_URL = "jdbc:h2:mem:" + TABLE_NAME;
   private static final String TEST_LOCAL_URL = "jdbc:h2:mem:test";
-  private static final String TEST_DRIVER = "org.h2.Driver";
   private static final String TEST_OPTIONS = "DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false";
   private static final String TERM_CONN_MSG = "terminating connection";
   private static final String MSG = "message";
@@ -97,8 +96,8 @@
   }
 
   private void setUpClient() {
-    eventsDb = new SQLClient(TEST_DRIVER, TEST_URL, TEST_OPTIONS);
-    localEventsDb = new SQLClient(TEST_DRIVER, TEST_LOCAL_URL, TEST_OPTIONS);
+    eventsDb = new SQLClient(TEST_URL, TEST_OPTIONS);
+    localEventsDb = new SQLClient(TEST_LOCAL_URL, TEST_OPTIONS);
     store =
         new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
     store.start();
@@ -269,8 +268,8 @@
     when(pc.isVisible()).thenReturn(true);
     doThrow(e).when(pcFactoryMock).controlFor((mockEvent3.getProjectNameKey()), userMock);
 
-    eventsDb = new SQLClient(TEST_DRIVER, TEST_URL, TEST_OPTIONS);
-    localEventsDb = new SQLClient(TEST_DRIVER, TEST_LOCAL_URL, TEST_OPTIONS);
+    eventsDb = new SQLClient(TEST_URL, TEST_OPTIONS);
+    localEventsDb = new SQLClient(TEST_LOCAL_URL, TEST_OPTIONS);
     store =
         new SQLStore(pcFactoryMock, userProviderMock, cfgMock, eventsDb, localEventsDb, poolMock);
 
@@ -332,7 +331,7 @@
    */
   @Test
   public void testConnectionTask() throws Exception {
-    eventsDb = new SQLClient(TEST_DRIVER, TEST_URL, TEST_OPTIONS);
+    eventsDb = new SQLClient(TEST_URL, TEST_OPTIONS);
     localEventsDb = mock(SQLClient.class);
     when(localEventsDb.dbExists()).thenReturn(true);
     when(localEventsDb.getAll()).thenReturn(ImmutableList.of(mock(SQLEntry.class)));
@@ -356,7 +355,7 @@
   private void checkConnectionAndRestore(boolean copy) throws Exception {
     MockEvent mockEvent = new MockEvent();
     eventsDb = mock(SQLClient.class);
-    localEventsDb = new SQLClient(TEST_DRIVER, TEST_LOCAL_URL, TEST_OPTIONS);
+    localEventsDb = new SQLClient(TEST_LOCAL_URL, TEST_OPTIONS);
     localEventsDb.createDBIfNotCreated();
     localEventsDb.storeEvent(mockEvent);
     doThrow(new SQLException(new ConnectException()))
