diff --git a/src/libyang_utils.cpp b/src/libyang_utils.cpp
index e6b825d..9051e16 100644
--- a/src/libyang_utils.cpp
+++ b/src/libyang_utils.cpp
@@ -1,4 +1,5 @@
 #include "libyang_utils.hpp"
+#include <cmath>
 
 leaf_data_ leafValueFromValue(const libyang::S_Value& value, LY_DATA_TYPE type)
 {
@@ -17,7 +18,7 @@
     case LY_TYPE_UINT16:
         return value->uint16();
     case LY_TYPE_UINT32:
-        return value->uintu32();
+        return value->uint32();
     case LY_TYPE_UINT64:
         return value->uint64();
     case LY_TYPE_BOOL:
@@ -28,6 +29,11 @@
         return enum_{std::string(value->enm()->name())};
     case LY_TYPE_BINARY:
         return std::string{value->binary()};
+    case LY_TYPE_DEC64:
+    {
+        auto v = value->dec64();
+        return v.value * std::pow(10, -v.digits);
+    }
     default: // TODO: implement all types
         return "(can't print)"s;
     }
diff --git a/src/netconf-client.cpp b/src/netconf-client.cpp
index 2869a1f..63045f0 100644
--- a/src/netconf-client.cpp
+++ b/src/netconf-client.cpp
@@ -288,10 +288,11 @@
         throw std::runtime_error("Cannot create get RPC");
     }
     auto reply = impl::do_rpc_data(this, std::move(rpc));
+    auto dataNode = libyang::create_new_Data_Node(reply->data);
     // TODO: can we do without copying?
     // If we just default-construct a new node (or use the create_new_Data_Node) and then set reply->data to nullptr,
     // there are mem leaks and even libnetconf2 complains loudly.
-    return libyang::create_new_Data_Node(reply->data)->dup_withsiblings(1);
+    return dataNode ? dataNode->dup_withsiblings(1) : nullptr;
 }
 
 std::string Session::getSchema(const std::string_view identifier, const std::optional<std::string_view> version)
@@ -320,14 +321,9 @@
         throw std::runtime_error("Cannot create get-config RPC");
     }
     auto reply = impl::do_rpc_data(this, std::move(rpc));
-    // TODO: can we do without copying?
-    // If we just default-construct a new node (or use the create_new_Data_Node) and then set reply->data to nullptr,
-    // there are mem leaks and even libnetconf2 complains loudly.
     auto dataNode = libyang::create_new_Data_Node(reply->data);
-    if (!dataNode)
-        return nullptr;
-    else
-        return dataNode->dup_withsiblings(1);
+    // TODO: can we do without copying? See Session::get() for details.
+    return dataNode ? dataNode->dup_withsiblings(1) : nullptr;
 }
 
 void Session::editConfig(const NC_DATASTORE datastore,
diff --git a/src/netconf_access.cpp b/src/netconf_access.cpp
index fd8f2a8..4cffb52 100644
--- a/src/netconf_access.cpp
+++ b/src/netconf_access.cpp
@@ -52,7 +52,7 @@
 DatastoreAccess::Tree NetconfAccess::getItems(const std::string& path)
 {
     Tree res;
-    auto config = m_session->getConfig(NC_DATASTORE_RUNNING, (path != "/") ? std::optional{path} : std::nullopt);
+    auto config = m_session->get((path != "/") ? std::optional{path} : std::nullopt);
 
     if (config) {
         for (auto it : config->tree_for()) {
diff --git a/submodules/dependencies b/submodules/dependencies
index e0af555..71ee2bd 160000
--- a/submodules/dependencies
+++ b/submodules/dependencies
@@ -1 +1 @@
-Subproject commit e0af5558e441b630580bf4ad0aab8a700ab09ce2
+Subproject commit 71ee2bde0047fbb3d585a7b6af202d819cdaa864
diff --git a/tests/datastore_access.cpp b/tests/datastore_access.cpp
index a7fc6f5..4a25803 100644
--- a/tests/datastore_access.cpp
+++ b/tests/datastore_access.cpp
@@ -288,6 +288,17 @@
 
     }
 
+    SECTION("floats")
+    {
+        datastore.setLeaf("/example-schema:leafDecimal", 123.4);
+        REQUIRE_CALL(mock, write("/example-schema:leafDecimal", std::nullopt, "123.4"s));
+        datastore.commitChanges();
+        DatastoreAccess::Tree expected {
+            {"/example-schema:leafDecimal", 123.4},
+        };
+        REQUIRE(datastore.getItems("/example-schema:leafDecimal") == expected);
+    }
+
     waitForCompletionAndBitMore(seq1);
 }
 
