diff --git a/src/printer.c b/src/printer.c
index 9685fc5..e3dfd85 100644
--- a/src/printer.c
+++ b/src/printer.c
@@ -159,19 +159,19 @@
     return out->type;
 }
 
-API struct ly_out *
-ly_out_new_clb(ssize_t (*writeclb)(void *arg, const void *buf, size_t count), void *arg)
+API LY_ERR
+ly_out_new_clb(ssize_t (*writeclb)(void *arg, const void *buf, size_t count), void *arg, struct ly_out **out)
 {
-    struct ly_out *out;
+    LY_CHECK_ARG_RET(NULL, out, writeclb, LY_EINVAL);
 
-    out = calloc(1, sizeof *out);
-    LY_CHECK_ERR_RET(!out, LOGMEM(NULL), NULL);
+    *out = calloc(1, sizeof **out);
+    LY_CHECK_ERR_RET(!*out, LOGMEM(NULL), LY_EMEM);
 
-    out->type = LY_OUT_CALLBACK;
-    out->method.clb.func = writeclb;
-    out->method.clb.arg = arg;
+    (*out)->type = LY_OUT_CALLBACK;
+    (*out)->method.clb.func = writeclb;
+    (*out)->method.clb.arg = arg;
 
-    return out;
+    return LY_SUCCESS;
 }
 
 API ssize_t (*ly_out_clb(struct ly_out *out, ssize_t (*writeclb)(void *arg, const void *buf, size_t count)))(void *arg, const void *buf, size_t count)
@@ -205,41 +205,43 @@
     return prev_arg;
 }
 
-API struct ly_out *
-ly_out_new_fd(int fd)
+API LY_ERR
+ly_out_new_fd(int fd, struct ly_out **out)
 {
-    struct ly_out *out;
+    LY_CHECK_ARG_RET(NULL, out, fd != -1, LY_EINVAL);
 
-    out = calloc(1, sizeof *out);
-    LY_CHECK_ERR_RET(!out, LOGMEM(NULL), NULL);
+    *out = calloc(1, sizeof **out);
+    LY_CHECK_ERR_RET(!*out, LOGMEM(NULL), LY_EMEM);
 
 #ifdef HAVE_VDPRINTF
-    out->type = LY_OUT_FD;
-    out->method.fd = fd;
+    (*out)->type = LY_OUT_FD;
+    (*out)->method.fd = fd;
 #else
     /* Without vdfprintf(), change the printing method to printing to a FILE stream.
      * To preserve the original file descriptor, duplicate it and use it to open file stream. */
-    out->type = LY_OUT_FDSTREAM;
-    out->method.fdstream.fd = fd;
+    (*out)->type = LY_OUT_FDSTREAM;
+    (*out)->method.fdstream.fd = fd;
 
-    fd = dup(out->method.fdstream.fd);
+    fd = dup((*out)->method.fdstream.fd);
     if (fd < 0) {
         LOGERR(NULL, LY_ESYS, "Unable to duplicate provided file descriptor (%d) for printing the output (%s).",
-               out->method.fdstream.fd, strerror(errno));
-        free(out);
-        return NULL;
+               (*out)->method.fdstream.fd, strerror(errno));
+        free(*out);
+        *out = NULL;
+        return LY_ESYS;
     }
-    out->method.fdstream.f = fdopen(fd, "a");
-    if (!out->method.fdstream.f) {
+    (*out)->method.fdstream.f = fdopen(fd, "a");
+    if (!(*out)->method.fdstream.f) {
         LOGERR(NULL, LY_ESYS, "Unable to open provided file descriptor (%d) for printing the output (%s).",
-               out->method.fdstream.fd, strerror(errno));
-        free(out);
+               (*out)->method.fdstream.fd, strerror(errno));
+        free(*out);
+        *out = NULL;
         fclose(fd);
-        return NULL;
+        return LY_ESYS;
     }
 #endif
 
-    return out;
+    return LY_SUCCESS;
 }
 
 API int
@@ -284,18 +286,18 @@
     return prev_fd;
 }
 
-API struct ly_out *
-ly_out_new_file(FILE *f)
+API LY_ERR
+ly_out_new_file(FILE *f, struct ly_out **out)
 {
-    struct ly_out *out;
+    LY_CHECK_ARG_RET(NULL, out, f, LY_EINVAL);
 
-    out = calloc(1, sizeof *out);
-    LY_CHECK_ERR_RET(!out, LOGMEM(NULL), NULL);
+    *out = calloc(1, sizeof **out);
+    LY_CHECK_ERR_RET(!*out, LOGMEM(NULL), LY_EMEM);
 
-    out->type = LY_OUT_FILE;
-    out->method.f = f;
+    (*out)->type = LY_OUT_FILE;
+    (*out)->method.f = f;
 
-    return out;
+    return LY_SUCCESS;
 }
 
 API FILE *
@@ -314,25 +316,25 @@
     return prev_f;
 }
 
-API struct ly_out *
-ly_out_new_memory(char **strp, size_t size)
+API LY_ERR
+ly_out_new_memory(char **strp, size_t size, struct ly_out **out)
 {
-    struct ly_out *out;
+    LY_CHECK_ARG_RET(NULL, out, strp, LY_EINVAL);
 
-    out = calloc(1, sizeof *out);
-    LY_CHECK_ERR_RET(!out, LOGMEM(NULL), NULL);
+    *out = calloc(1, sizeof **out);
+    LY_CHECK_ERR_RET(!*out, LOGMEM(NULL), LY_EMEM);
 
-    out->type = LY_OUT_MEMORY;
-    out->method.mem.buf = strp;
+    (*out)->type = LY_OUT_MEMORY;
+    (*out)->method.mem.buf = strp;
     if (!size) {
         /* buffer is supposed to be allocated */
         *strp = NULL;
     } else if (*strp) {
         /* there is already buffer to use */
-        out->method.mem.size = size;
+        (*out)->method.mem.size = size;
     }
 
-    return out;
+    return LY_SUCCESS;
 }
 
 char *
@@ -406,22 +408,22 @@
     return LY_SUCCESS;
 }
 
-API struct ly_out *
-ly_out_new_filepath(const char *filepath)
+API LY_ERR
+ly_out_new_filepath(const char *filepath, struct ly_out **out)
 {
-    struct ly_out *out;
+    LY_CHECK_ARG_RET(NULL, out, filepath, LY_EINVAL);
 
-    out = calloc(1, sizeof *out);
-    LY_CHECK_ERR_RET(!out, LOGMEM(NULL), NULL);
+    *out = calloc(1, sizeof **out);
+    LY_CHECK_ERR_RET(!*out, LOGMEM(NULL), LY_EMEM);
 
-    out->type = LY_OUT_FILEPATH;
-    out->method.fpath.f = fopen(filepath, "w");
-    if (!out->method.fpath.f) {
+    (*out)->type = LY_OUT_FILEPATH;
+    (*out)->method.fpath.f = fopen(filepath, "w");
+    if (!(*out)->method.fpath.f) {
         LOGERR(NULL, LY_ESYS, "Failed to open file \"%s\" (%s).", filepath, strerror(errno));
-        return NULL;
+        return LY_ESYS;
     }
-    out->method.fpath.filepath = strdup(filepath);
-    return out;
+    (*out)->method.fpath.filepath = strdup(filepath);
+    return LY_SUCCESS;
 }
 
 API const char *
diff --git a/src/printer.h b/src/printer.h
index 4c15f7f..8929678 100644
--- a/src/printer.h
+++ b/src/printer.h
@@ -70,10 +70,11 @@
  *
  * @param[in] writeclb Pointer to the printer callback function writing the data (see write(2)).
  * @param[in] arg Optional caller-specific argument to be passed to the @p writeclb callback.
- * @return NULL in case of memory allocation error.
- * @return Created printer handler supposed to be passed to different ly*_print_*() functions.
+ * @param[out] out Created printer handler supposed to be passed to different ly*_print() functions.
+ * @return LY_SUCCESS in case of success
+ * @return LY_EMEM in case allocating the @p out handler fails.
  */
-struct ly_out *ly_out_new_clb(ssize_t (*writeclb)(void *arg, const void *buf, size_t count), void *arg);
+LY_ERR ly_out_new_clb(ssize_t (*writeclb)(void *arg, const void *buf, size_t count), void *arg, struct ly_out **out);
 
 /**
  * @brief Get or reset callback function associated with a callback printer handler.
@@ -98,10 +99,11 @@
  * @brief Create printer handler using file descriptor.
  *
  * @param[in] fd File descriptor to use.
- * @return NULL in case of error.
- * @return Created printer handler supposed to be passed to different ly*_print_*() functions.
+ * @param[out] out Created printer handler supposed to be passed to different ly*_print() functions.
+ * @return LY_SUCCESS in case of success
+ * @return LY_ERR value in case of failure.
  */
-struct ly_out *ly_out_new_fd(int fd);
+LY_ERR ly_out_new_fd(int fd, struct ly_out **out);
 
 /**
  * @brief Get or reset file descriptor printer handler.
@@ -117,10 +119,11 @@
  * @brief Create printer handler using file stream.
  *
  * @param[in] f File stream to use.
- * @return NULL in case of error.
- * @return Created printer handler supposed to be passed to different ly*_print_*() functions.
+ * @param[out] out Created printer handler supposed to be passed to different ly*_print() functions.
+ * @return LY_SUCCESS in case of success
+ * @return LY_ERR value in case of failure.
  */
-struct ly_out *ly_out_new_file(FILE *f);
+LY_ERR ly_out_new_file(FILE *f, struct ly_out **out);
 
 /**
  * @brief Get or reset file stream printer handler.
@@ -138,10 +141,11 @@
  * @p size of the buffer is set, the buffer is used (and extended if needed) to store the printed data.
  * @param[in] size Size of the buffer provided via @p strp. In case it is 0, the buffer for the printed data
  * is newly allocated even if @p strp points to a pointer to an existing buffer.
- * @return NULL in case of error.
- * @return Created printer handler supposed to be passed to different ly*_print_*() functions.
+ * @param[out] out Created printer handler supposed to be passed to different ly*_print() functions.
+ * @return LY_SUCCESS in case of success
+ * @return LY_ERR value in case of failure.
  */
-struct ly_out *ly_out_new_memory(char **strp, size_t size);
+LY_ERR ly_out_new_memory(char **strp, size_t size, struct ly_out **out);
 
 /**
  * @brief Get or change memory where the data are dumped.
@@ -162,7 +166,7 @@
  * @return NULL in case of error.
  * @return Created printer handler supposed to be passed to different ly*_print_*() functions.
  */
-struct ly_out *ly_out_new_filepath(const char *filepath);
+LY_ERR ly_out_new_filepath(const char *filepath, struct ly_out **out);
 
 /**
  * @brief Get or change the filepath of the file where the printer prints the data.
diff --git a/src/printer_data.c b/src/printer_data.c
index 1f67b76..1f29523 100644
--- a/src/printer_data.c
+++ b/src/printer_data.c
@@ -23,15 +23,6 @@
 #include "printer_internal.h"
 #include "tree_data.h"
 
-/**
- * @brief Common YANG data printer.
- *
- * @param[in] out Prepared structure defining the type and details of the printer output.
- * @param[in] root The root element of the (sub)tree to print.
- * @param[in] format Output format.
- * @param[in] options [Data printer flags](@ref dataprinterflags). With \p format LYD_LYB, only #LYDP_WITHSIBLINGS option is accepted.
- * @return LY_ERR value.
- */
 API ssize_t
 lyd_print(struct ly_out *out, const struct lyd_node *root, LYD_FORMAT format, int options)
 {
@@ -97,7 +88,7 @@
     /* init */
     *strp = NULL;
 
-    out = ly_out_new_memory(strp, 0);
+    LY_CHECK_RET(ly_out_new_memory(strp, 0, &out));
     return lyd_print_(out, root, format, options);
 }
 
@@ -108,7 +99,7 @@
 
     LY_CHECK_ARG_RET(NULL, fd != -1, root, LY_EINVAL);
 
-    out = ly_out_new_fd(fd);
+    LY_CHECK_RET(ly_out_new_fd(fd, &out));
     return lyd_print_(out, root, format, options);
 }
 
@@ -119,7 +110,7 @@
 
     LY_CHECK_ARG_RET(NULL, f, root, LY_EINVAL);
 
-    out = ly_out_new_file(f);
+    LY_CHECK_RET(ly_out_new_file(f, &out));
     return lyd_print_(out, root, format, options);
 }
 
@@ -130,7 +121,7 @@
 
     LY_CHECK_ARG_RET(NULL, path, root, LY_EINVAL);
 
-    out = ly_out_new_filepath(path);
+    LY_CHECK_RET(ly_out_new_filepath(path, &out));
     return lyd_print_(out, root, format, options);
 }
 
@@ -142,6 +133,6 @@
 
     LY_CHECK_ARG_RET(NULL, writeclb, root, LY_EINVAL);
 
-    out = ly_out_new_clb(writeclb, arg);
+    LY_CHECK_RET(ly_out_new_clb(writeclb, arg, &out));
     return lyd_print_(out, root, format, options);
 }
diff --git a/src/printer_schema.c b/src/printer_schema.c
index df14f21..acd00a2 100644
--- a/src/printer_schema.c
+++ b/src/printer_schema.c
@@ -95,7 +95,7 @@
     /* init */
     *strp = NULL;
 
-    out = ly_out_new_memory(strp, 0);
+    LY_CHECK_RET(ly_out_new_memory(strp, 0, &out));
     return lys_print_(out, module, format, line_length, options);
 }
 
@@ -106,7 +106,7 @@
 
     LY_CHECK_ARG_RET(NULL, fd != -1, module, LY_EINVAL);
 
-    out = ly_out_new_fd(fd);
+    LY_CHECK_RET(ly_out_new_fd(fd, &out));
     return lys_print_(out, module, format, line_length, options);
 }
 
@@ -117,7 +117,7 @@
 
     LY_CHECK_ARG_RET(NULL, f, module, LY_EINVAL);
 
-    out = ly_out_new_file(f);
+    LY_CHECK_RET(ly_out_new_file(f, &out));
     return lys_print_(out, module, format, line_length, options);
 }
 
@@ -128,7 +128,7 @@
 
     LY_CHECK_ARG_RET(NULL, path, module, LY_EINVAL);
 
-    out = ly_out_new_filepath(path);
+    LY_CHECK_RET(ly_out_new_filepath(path, &out));
     return lys_print_(out, module, format, line_length, options);
 }
 
@@ -140,7 +140,7 @@
 
     LY_CHECK_ARG_RET(NULL, writeclb, module, LY_EINVAL);
 
-    out = ly_out_new_clb(writeclb, arg);
+    LY_CHECK_RET(ly_out_new_clb(writeclb, arg, &out));
     return lys_print_(out, module, format, line_length, options);
 }
 
diff --git a/src/xpath.c b/src/xpath.c
index f73988b..459c78e 100644
--- a/src/xpath.c
+++ b/src/xpath.c
@@ -416,7 +416,7 @@
                 LY_CHECK_ERR_RET(!buf, LOGMEM(LYD_NODE_CTX(node)), LY_EMEM);
                 break;
             case LYD_ANYDATA_DATATREE:
-                out = ly_out_new_memory(&buf, 0);
+                LY_CHECK_RET(ly_out_new_memory(&buf, 0, &out));
                 rc = lyd_print(out, any->value.tree, LYD_XML, LYDP_WITHSIBLINGS);
                 ly_out_free(out, NULL, 0);
                 LY_CHECK_RET(rc < 0, -rc);
