diff --git a/src/sysrepo_access.cpp b/src/sysrepo_access.cpp
index 2c80c2d..f84bb91 100644
--- a/src/sysrepo_access.cpp
+++ b/src/sysrepo_access.cpp
@@ -93,8 +93,13 @@
         return fetchSchema(moduleName, revision, submodule);
     });
 
-    for (const auto& it : listImplementedSchemas()) {
-        m_schema->loadModule(it);
+    for (const auto& it : listSchemas()) {
+        if (it->implemented()) {
+            m_schema->loadModule(it->module_name());
+            for (unsigned int i = 0; i < it->enabled_feature_cnt(); i++) {
+                m_schema->enableFeature(it->module_name(), it->enabled_features(i));
+            }
+        }
     }
 }
 
@@ -205,9 +210,9 @@
     return schema;
 }
 
-std::vector<std::string> SysrepoAccess::listImplementedSchemas()
+std::vector<std::shared_ptr<sysrepo::Yang_Schema>> SysrepoAccess::listSchemas()
 {
-    std::vector<std::string> res;
+    std::vector<sysrepo::S_Yang_Schema> res;
     std::shared_ptr<sysrepo::Yang_Schemas> schemas;
     try {
         schemas = m_session->list_schemas();
@@ -216,8 +221,7 @@
     }
     for (unsigned int i = 0; i < schemas->schema_cnt(); i++) {
         auto schema = schemas->schema(i);
-        if (schema->implemented())
-            res.push_back(schema->module_name());
+        res.push_back(schema);
     }
     return res;
 }
diff --git a/src/sysrepo_access.hpp b/src/sysrepo_access.hpp
index 8df1153..9861ab4 100644
--- a/src/sysrepo_access.hpp
+++ b/src/sysrepo_access.hpp
@@ -18,6 +18,7 @@
 namespace sysrepo {
 class Connection;
 class Session;
+class Yang_Schema;
 }
 
 class Schema;
@@ -43,7 +44,7 @@
     [[noreturn]] void reportErrors();
 
     std::string fetchSchema(const char* module, const char* revision, const char* submodule);
-    std::vector<std::string> listImplementedSchemas();
+    std::vector<std::shared_ptr<sysrepo::Yang_Schema>> listSchemas();
 
     std::shared_ptr<sysrepo::Connection> m_connection;
     std::shared_ptr<sysrepo::Session> m_session;
diff --git a/src/yang_schema.cpp b/src/yang_schema.cpp
index 1ac7a79..4c55b27 100644
--- a/src/yang_schema.cpp
+++ b/src/yang_schema.cpp
@@ -370,6 +370,11 @@
     m_context->load_module(moduleName.c_str());
 }
 
+void YangSchema::enableFeature(const std::string& moduleName, const std::string& featureName)
+{
+    m_context->get_module(moduleName.c_str())->feature_enable(featureName.c_str());
+}
+
 void YangSchema::registerModuleCallback(const std::function<std::string(const char*, const char*, const char*)>& clb)
 {
     auto lambda = [clb](const char* mod_name, const char* mod_revision, const char* submod_name, const char* submod_revision) {
diff --git a/src/yang_schema.hpp b/src/yang_schema.hpp
index aa5faa4..14b0f1e 100644
--- a/src/yang_schema.hpp
+++ b/src/yang_schema.hpp
@@ -50,6 +50,9 @@
     /** @short Loads a module called moduleName. */
     void loadModule(const std::string& moduleName);
 
+    /** @short Enables a feature called featureName on a module called moduleName. */
+    void enableFeature(const std::string& moduleName, const std::string& featureName);
+
     /** @short Adds a new module passed as a YANG string. */
     void addSchemaString(const char* schema);
 
