diff --git a/src/netconf-client.cpp b/src/netconf-client.cpp
index 3ced537..9f6908b 100644
--- a/src/netconf-client.cpp
+++ b/src/netconf-client.cpp
@@ -204,6 +204,11 @@
     return m_session;
 }
 
+libyang::S_Context Session::libyangContext()
+{
+    return std::make_shared<libyang::Context>(nc_session_get_ctx(m_session), nullptr);
+}
+
 Session::Session(struct nc_session* session)
     : m_session(session)
 {
diff --git a/src/netconf-client.h b/src/netconf-client.h
index 6d57e01..143f200 100644
--- a/src/netconf-client.h
+++ b/src/netconf-client.h
@@ -12,6 +12,7 @@
 
 namespace libyang {
 class Data_Node;
+class Context;
 }
 
 namespace libnetconf {
@@ -46,6 +47,8 @@
     std::shared_ptr<libyang::Data_Node> rpc(const std::string& xmlData);
     void commit();
     void discard();
+
+    std::shared_ptr<libyang::Context> libyangContext();
     struct nc_session* session_internal(); // FIXME: remove me
 protected:
     struct nc_session* m_session;
diff --git a/src/netconf_access.cpp b/src/netconf_access.cpp
index 91b1874..9fb456d 100644
--- a/src/netconf_access.cpp
+++ b/src/netconf_access.cpp
@@ -62,39 +62,22 @@
     return res;
 }
 
-void NetconfAccess::datastoreInit()
-{
-    m_schema->registerModuleCallback([this](const char* moduleName, const char* revision, const char* submodule, const char* submoduleRevision) {
-        return fetchSchema(moduleName,
-                           revision ? std::optional{revision} : std::nullopt,
-                           submodule ? std::optional{submodule} : std::nullopt,
-                           submoduleRevision ? std::optional{submoduleRevision} : std::nullopt);
-    });
-
-    for (const auto& it : listImplementedSchemas()) {
-        m_schema->loadModule(it);
-    }
-}
-
 NetconfAccess::NetconfAccess(const std::string& hostname, uint16_t port, const std::string& user, const std::string& pubKey, const std::string& privKey)
-    : m_schema(new YangSchema())
+    : m_session(libnetconf::client::Session::connectPubkey(hostname, port, user, pubKey, privKey))
+    , m_schema(std::make_shared<YangSchema>(m_session->libyangContext()))
 {
-    m_session = libnetconf::client::Session::connectPubkey(hostname, port, user, pubKey, privKey);
-    datastoreInit();
 }
 
 NetconfAccess::NetconfAccess(std::unique_ptr<libnetconf::client::Session>&& session)
     : m_session(std::move(session))
-    , m_schema(new YangSchema())
+    , m_schema(std::make_shared<YangSchema>(m_session->libyangContext()))
 {
-    datastoreInit();
 }
 
 NetconfAccess::NetconfAccess(const std::string& socketPath)
-    : m_schema(new YangSchema())
+    : m_session(libnetconf::client::Session::connectSocket(socketPath))
+    , m_schema(std::make_shared<YangSchema>(m_session->libyangContext()))
 {
-    m_session = libnetconf::client::Session::connectSocket(socketPath);
-    datastoreInit();
 }
 
 void NetconfAccess::setLeaf(const std::string& path, leaf_data_ value)
diff --git a/src/yang_schema.cpp b/src/yang_schema.cpp
index 999f33a..ddd6f37 100644
--- a/src/yang_schema.cpp
+++ b/src/yang_schema.cpp
@@ -58,6 +58,12 @@
 {
 }
 
+YangSchema::YangSchema(std::shared_ptr<libyang::Context> lyCtx)
+    : m_context(lyCtx)
+{
+
+}
+
 YangSchema::~YangSchema() = default;
 
 void YangSchema::addSchemaString(const char* schema)
diff --git a/src/yang_schema.hpp b/src/yang_schema.hpp
index 7fcd58c..1ff5144 100644
--- a/src/yang_schema.hpp
+++ b/src/yang_schema.hpp
@@ -27,6 +27,7 @@
 class YangSchema : public Schema {
 public:
     YangSchema();
+    YangSchema(std::shared_ptr<libyang::Context> lyCtx);
     ~YangSchema() override;
 
     bool isContainer(const schemaPath_& location, const ModuleNodePair& node) const override;
