Index: uspace/lib/c/include/ipc/vfs.h
===================================================================
--- uspace/lib/c/include/ipc/vfs.h	(revision 677745a8f02a62fcdda400d24b3f38e1b8940077)
+++ uspace/lib/c/include/ipc/vfs.h	(revision 5bcd5b79a057eba51e703c7e6f5dc7d22317b8eb)
@@ -95,4 +95,5 @@
 	VFS_OUT_UNMOUNTED,
 	VFS_OUT_GET_SIZE,
+	VFS_OUT_IS_EMPTY,
 	VFS_OUT_SYNC,
 	VFS_OUT_STAT,
Index: uspace/lib/fs/libfs.c
===================================================================
--- uspace/lib/fs/libfs.c	(revision 677745a8f02a62fcdda400d24b3f38e1b8940077)
+++ uspace/lib/fs/libfs.c	(revision 5bcd5b79a057eba51e703c7e6f5dc7d22317b8eb)
@@ -259,4 +259,29 @@
 }
 
+static void vfs_out_is_empty(ipc_callid_t rid, ipc_call_t *req)
+{
+	service_id_t service_id = (service_id_t) IPC_GET_ARG1(*req);
+	fs_index_t index = (fs_index_t) IPC_GET_ARG2(*req);
+	int rc;
+
+	fs_node_t *node = NULL;
+	rc = libfs_ops->node_get(&node, service_id, index);
+	if (rc != EOK) {
+		async_answer_0(rid, rc);
+	}
+	if (node == NULL) {
+		async_answer_0(rid, EINVAL);
+	}
+	
+	bool children = false;
+	rc = libfs_ops->has_children(&children, node);
+	libfs_ops->node_put(node);
+	
+	if (rc != EOK) {
+		async_answer_0(rid, rc);
+	}
+	async_answer_0(rid, children ? ENOTEMPTY : EOK);
+}
+
 static void vfs_connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)
 {
@@ -322,4 +347,7 @@
 		case VFS_OUT_GET_SIZE:
 			vfs_out_get_size(callid, &call);
+			break;
+		case VFS_OUT_IS_EMPTY:
+			vfs_out_is_empty(callid, &call);
 			break;
 		default:
