Index: uspace/lib/device/include/hr.h
===================================================================
--- uspace/lib/device/include/hr.h	(revision 8b51009d8adb87b39341aef74db3eeb0f2a2fa7a)
+++ uspace/lib/device/include/hr.h	(revision a5ec4263bc4f320dbe3328b8e724f3d739c37283)
@@ -117,5 +117,6 @@
 extern errno_t		 hr_sess_init(hr_t **);
 extern void		 hr_sess_destroy(hr_t *);
-extern errno_t		 hr_create(hr_t *, hr_config_t *, bool);
+extern errno_t		 hr_create(hr_t *, hr_config_t *);
+extern errno_t		 hr_assemble(hr_t *, hr_config_t *, size_t *);
 extern errno_t		 hr_auto_assemble(size_t *);
 extern errno_t		 hr_stop(const char *, long);
Index: uspace/lib/device/src/hr.c
===================================================================
--- uspace/lib/device/src/hr.c	(revision 8b51009d8adb87b39341aef74db3eeb0f2a2fa7a)
+++ uspace/lib/device/src/hr.c	(revision a5ec4263bc4f320dbe3328b8e724f3d739c37283)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Miroslav Cimerman
+ * Copyright (c) 2025 Miroslav Cimerman
  * All rights reserved.
  *
@@ -88,5 +88,5 @@
 }
 
-errno_t hr_create(hr_t *hr, hr_config_t *hr_config, bool assemble)
+errno_t hr_create(hr_t *hr, hr_config_t *hr_config)
 {
 	errno_t rc, retval;
@@ -98,5 +98,5 @@
 		return EINVAL;
 
-	req = async_send_0(exch, assemble ? HR_ASSEMBLE : HR_CREATE, NULL);
+	req = async_send_0(exch, HR_CREATE, NULL);
 
 	rc = async_data_write_start(exch, hr_config, sizeof(hr_config_t));
@@ -113,4 +113,40 @@
 
 	return EOK;
+}
+
+errno_t hr_assemble(hr_t *hr, hr_config_t *hr_config, size_t *rassembled_cnt)
+{
+	errno_t rc;
+	async_exch_t *exch;
+	aid_t req;
+	size_t assembled_cnt;
+
+	exch = async_exchange_begin(hr->sess);
+	if (exch == NULL)
+		return EINVAL;
+
+	req = async_send_0(exch, HR_ASSEMBLE, NULL);
+
+	rc = async_data_write_start(exch, hr_config, sizeof(hr_config_t));
+	if (rc != EOK) {
+		async_exchange_end(exch);
+		async_forget(req);
+		return rc;
+	}
+
+	rc = async_data_read_start(exch, &assembled_cnt, sizeof(size_t));
+	if (rc != EOK) {
+		async_exchange_end(exch);
+		async_forget(req);
+		return rc;
+	}
+
+	async_exchange_end(exch);
+	async_wait_for(req, &rc);
+
+	if (rassembled_cnt != NULL)
+		*rassembled_cnt = assembled_cnt;
+
+	return rc;
 }
 
