diff --git a/network-store-server/pom.xml b/network-store-server/pom.xml
index dd0a1dcf..5f3f4245 100644
--- a/network-store-server/pom.xml
+++ b/network-store-server/pom.xml
@@ -101,6 +101,11 @@
lombok
+
+ com.powsybl
+ powsybl-network-store-iidm-impl
+ runtime
+
com.powsybl
powsybl-config-classic
diff --git a/network-store-server/src/main/java/com/powsybl/network/store/server/ExtensionHandler.java b/network-store-server/src/main/java/com/powsybl/network/store/server/ExtensionHandler.java
new file mode 100644
index 00000000..4f5ce593
--- /dev/null
+++ b/network-store-server/src/main/java/com/powsybl/network/store/server/ExtensionHandler.java
@@ -0,0 +1,208 @@
+/**
+ * Copyright (c) 2024, RTE (http://www.rte-france.com)
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+package com.powsybl.network.store.server;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.Lists;
+import com.powsybl.network.store.model.ExtensionAttributes;
+import com.powsybl.network.store.model.IdentifiableAttributes;
+import com.powsybl.network.store.model.Resource;
+import com.powsybl.network.store.model.ResourceType;
+import com.powsybl.network.store.server.dto.OwnerInfo;
+import com.powsybl.network.store.server.exceptions.UncheckedSqlException;
+import org.springframework.stereotype.Component;
+
+import javax.sql.DataSource;
+import java.io.UncheckedIOException;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.*;
+
+import static com.powsybl.network.store.server.NetworkStoreRepository.BATCH_SIZE;
+import static com.powsybl.network.store.server.Utils.bindValues;
+
+/**
+ * @author Antoine Bouhours
+ */
+@Component
+public class ExtensionHandler {
+ private final DataSource dataSource;
+ private final ObjectMapper mapper;
+
+ public ExtensionHandler(DataSource dataSource, ObjectMapper mapper) {
+ this.dataSource = dataSource;
+ this.mapper = mapper;
+ }
+
+ public void insertExtensions(Map> extensions) {
+ try (var connection = dataSource.getConnection()) {
+ try (var preparedStmt = connection.prepareStatement(QueryExtensionCatalog.buildInsertExtensionsQuery())) {
+ List