diff --git a/src/sysrepo_access.cpp b/src/sysrepo_access.cpp
index af553d9..d80f539 100644
--- a/src/sysrepo_access.cpp
+++ b/src/sysrepo_access.cpp
@@ -8,6 +8,7 @@
 
 #include <sysrepo-cpp/Session.h>
 #include "sysrepo_access.hpp"
+#include "yang_schema.hpp"
 
 leaf_data_ leafValueFromVal(const S_Val& value)
 {
@@ -72,8 +73,16 @@
 
 SysrepoAccess::SysrepoAccess(const std::string& appname)
     : m_connection(new Connection(appname.c_str()))
+    , m_schema(new YangSchema())
 {
     m_session = std::make_shared<Session>(m_connection);
+    m_schema->registerModuleCallback([this](const char* moduleName, const char* revision, const char* submodule) {
+        return fetchSchema(moduleName, revision, submodule);
+    });
+
+    for (const auto& it : listImplementedSchemas()) {
+        m_schema->loadModule(it);
+    }
 }
 
 std::map<std::string, leaf_data_> SysrepoAccess::getItems(const std::string& path)
@@ -121,3 +130,29 @@
 {
     m_session->commit();
 }
+
+std::string SysrepoAccess::fetchSchema(const char* module, const char* revision, const char* submodule)
+{
+    auto schema = m_session->get_schema(module, revision, submodule, SR_SCHEMA_YANG); // FIXME: maybe we should use get_submodule_schema for submodules?
+    if (schema.empty())
+        throw std::runtime_error(std::string("Module ") + module + " not available");
+
+    return schema;
+}
+
+std::vector<std::string> SysrepoAccess::listImplementedSchemas()
+{
+    std::vector<std::string> res;
+    auto schemas = m_session->list_schemas();
+    for (unsigned int i = 0; i < schemas->schema_cnt(); i++) {
+        auto schema = schemas->schema(i);
+        if (schema->implemented())
+            res.push_back(schema->module_name());
+    }
+    return res;
+}
+
+std::shared_ptr<Schema> SysrepoAccess::schema()
+{
+    return m_schema;
+}
