diff --git a/src/out.c b/src/out.c
index 9eed077..081abf5 100644
--- a/src/out.c
+++ b/src/out.c
@@ -55,6 +55,20 @@
                 /* explicit default node */
                 return 0;
             }
+        } else if (lysc_is_np_cont(node->schema)) {
+            if (options & LYD_PRINT_KEEPEMPTYCONT) {
+                /* explicit request to print, redundant to check */
+                return 1;
+            }
+
+            LY_LIST_FOR(lyd_child(node), elem) {
+                if (lyd_node_should_print(elem, options)) {
+                    return 1;
+                }
+            }
+
+            /* NP container without any printed children (such as other NP containers with only nodes set to their default values) */
+            return 0;
         }
     } else if ((node->flags & LYD_DEFAULT) && (node->schema->nodetype == LYS_CONTAINER)) {
         if (options & LYD_PRINT_KEEPEMPTYCONT) {
diff --git a/tests/utests/data/test_printer_json.c b/tests/utests/data/test_printer_json.c
index 85ace73..65539f0 100644
--- a/tests/utests/data/test_printer_json.c
+++ b/tests/utests/data/test_printer_json.c
@@ -1,4 +1,4 @@
-/*
+/**
  * @file test_printer_json.c
  * @author: Radek Krejci <rkrejci@cesnet.cz>
  * @brief unit tests for functions from printer_yang.c
@@ -21,9 +21,20 @@
             "revision 2014-05-08;"
             "anydata data;"
             "}";
+    const char *schema2 = "module schema2 {namespace urn:tests:schema2;prefix s2;yang-version 1.1;"
+            "  container a {"
+            "    container b {"
+            "      leaf c {"
+            "        type string;"
+            "        default \"dflt\";"
+            "      }"
+            "    }"
+            "  }"
+            "}";
 
     UTEST_SETUP;
     UTEST_ADD_MODULE(schema1, LYS_IN_YANG, NULL, NULL);
+    UTEST_ADD_MODULE(schema2, LYS_IN_YANG, NULL, NULL);
     return 0;
 }
 
@@ -41,11 +52,31 @@
     lyd_free_all(tree);
 }
 
+static void
+test_empty_container_wd_trim(void **state)
+{
+    struct lyd_node *tree;
+    char *buffer = NULL;
+    const char *data = "{\"schema2:a\":{\"b\":{\"c\":\"dflt\"}}}";
+
+    CHECK_PARSE_LYD_PARAM(data, LYD_JSON, 0, LYD_VALIDATE_PRESENT, LY_SUCCESS, tree);
+    assert_int_equal(LY_SUCCESS, lyd_print_mem(&buffer, tree, LYD_JSON, LYD_PRINT_SHRINK | LYD_PRINT_WD_TRIM));
+    CHECK_STRING(buffer, "{}");
+    free(buffer);
+
+    assert_int_equal(LY_SUCCESS, lyd_print_mem(&buffer, tree, LYD_JSON, LYD_PRINT_SHRINK | LYD_PRINT_WD_TRIM | LYD_PRINT_KEEPEMPTYCONT));
+    CHECK_STRING(buffer, "{\"schema2:a\":{\"b\":{}}}");
+    free(buffer);
+
+    lyd_free_all(tree);
+}
+
 int
 main(void)
 {
     const struct CMUnitTest tests[] = {
         UTEST(test_container_presence, setup),
+        UTEST(test_empty_container_wd_trim, setup),
     };
 
     return cmocka_run_group_tests(tests, NULL, NULL);
