Index: uspace/app/bithenge/compound.c
===================================================================
--- uspace/app/bithenge/compound.c	(revision 6be4142b13aac4b9ed8b2805a5a6998491afc977)
+++ uspace/app/bithenge/compound.c	(revision 1b6b76dd363de2ca79808ebf48d6d78a2a764d2b)
@@ -287,7 +287,6 @@
 	if (bithenge_node_type(in) != BITHENGE_NODE_BLOB)
 		return EINVAL;
-	uint64_t size;
 	return bithenge_transform_prefix_apply(self->xform, scope,
-	    bithenge_node_as_blob(in), out, &size);
+	    bithenge_node_as_blob(in), out, NULL);
 }
 
Index: uspace/app/bithenge/expression.c
===================================================================
--- uspace/app/bithenge/expression.c	(revision 6be4142b13aac4b9ed8b2805a5a6998491afc977)
+++ uspace/app/bithenge/expression.c	(revision 1b6b76dd363de2ca79808ebf48d6d78a2a764d2b)
@@ -970,5 +970,6 @@
 {
 	expression_transform_t *self = transform_as_expression(base);
-	*out_size = 0;
+	if (out_size)
+		*out_size = 0;
 	return bithenge_expression_evaluate(self->expr, scope, out_node);
 }
Index: uspace/app/bithenge/sequence.c
===================================================================
--- uspace/app/bithenge/sequence.c	(revision 6be4142b13aac4b9ed8b2805a5a6998491afc977)
+++ uspace/app/bithenge/sequence.c	(revision 1b6b76dd363de2ca79808ebf48d6d78a2a764d2b)
@@ -546,9 +546,11 @@
 		return rc;
 
-	rc = seq_node_field_offset(node_as_seq(*out_node), out_size,
-	    self->num_subtransforms);
-	if (rc != EOK) {
-		bithenge_node_dec_ref(*out_node);
-		return rc;
+	if (out_size) {
+		rc = seq_node_field_offset(node_as_seq(*out_node), out_size,
+		    self->num_subtransforms);
+		if (rc != EOK) {
+			bithenge_node_dec_ref(*out_node);
+			return rc;
+		}
 	}
 
@@ -815,20 +817,23 @@
 		return rc;
 
-	bithenge_int_t count = node_as_repeat(*out_node)->count;
-	if (count != -1) {
-		rc = seq_node_field_offset(node_as_seq(*out_node), out_size, count);
-		if (rc != EOK) {
-			bithenge_node_dec_ref(*out_node);
-			return rc;
-		}
-	} else {
-		*out_size = 0;
-		for (count = 1; ; count++) {
-			aoff64_t size;
+	if (out_size) {
+		bithenge_int_t count = node_as_repeat(*out_node)->count;
+		if (count != -1) {
 			rc = seq_node_field_offset(node_as_seq(*out_node),
-			    &size, count);
-			if (rc != EOK)
-				break;
-			*out_size = size;
+			    out_size, count);
+			if (rc != EOK) {
+				bithenge_node_dec_ref(*out_node);
+				return rc;
+			}
+		} else {
+			*out_size = 0;
+			for (count = 1; ; count++) {
+				aoff64_t size;
+				rc = seq_node_field_offset(
+				    node_as_seq(*out_node), &size, count);
+				if (rc != EOK)
+					break;
+				*out_size = size;
+			}
 		}
 	}
@@ -1087,15 +1092,17 @@
 		return rc;
 
-	rc = bithenge_node_for_each(*out_node, for_each_noop, NULL);
-	if (rc != EOK) {
-		bithenge_node_dec_ref(*out_node);
-		return rc;
-	}
-
-	rc = seq_node_field_offset(node_as_seq(*out_node), out_size,
-	    node_as_do_while(*out_node)->count);
-	if (rc != EOK) {
-		bithenge_node_dec_ref(*out_node);
-		return rc;
+	if (out_size) {
+		rc = bithenge_node_for_each(*out_node, for_each_noop, NULL);
+		if (rc != EOK) {
+			bithenge_node_dec_ref(*out_node);
+			return rc;
+		}
+
+		rc = seq_node_field_offset(node_as_seq(*out_node), out_size,
+		    node_as_do_while(*out_node)->count);
+		if (rc != EOK) {
+			bithenge_node_dec_ref(*out_node);
+			return rc;
+		}
 	}
 
Index: uspace/app/bithenge/transform.c
===================================================================
--- uspace/app/bithenge/transform.c	(revision 6be4142b13aac4b9ed8b2805a5a6998491afc977)
+++ uspace/app/bithenge/transform.c	(revision 1b6b76dd363de2ca79808ebf48d6d78a2a764d2b)
@@ -143,5 +143,6 @@
  * @param[out] out_node Holds the result of applying this transform to the
  * prefix.
- * @param[out] out_size Holds the size of the prefix.
+ * @param[out] out_size Holds the size of the prefix. Can be null, in which
+ * case the size is not determined.
  * @return EOK on success, ENOTSUP if not supported, or another error code from
  * errno.h. */
@@ -158,14 +159,17 @@
 		return ENOTSUP;
 
-	int rc = bithenge_transform_prefix_length(self, scope, blob, out_size);
+	aoff64_t size;
+	int rc = bithenge_transform_prefix_length(self, scope, blob, &size);
 	if (rc != EOK)
 		return rc;
 	bithenge_node_t *prefix_blob;
 	bithenge_blob_inc_ref(blob);
-	rc = bithenge_new_subblob(&prefix_blob, blob, 0, *out_size);
+	rc = bithenge_new_subblob(&prefix_blob, blob, 0, size);
 	if (rc != EOK)
 		return rc;
 	rc = bithenge_transform_apply(self, scope, prefix_blob, out_node);
 	bithenge_node_dec_ref(prefix_blob);
+	if (out_size)
+		*out_size = size;
 	return rc;
 }
@@ -560,10 +564,12 @@
 {
 	char buffer;
-	*out_size = 1;
-	int rc = bithenge_blob_read_bits(blob, 0, &buffer, out_size, true);
-	if (rc != EOK)
-		return rc;
-	if (*out_size != 1)
-		return EINVAL;
+	aoff64_t size = 1;
+	int rc = bithenge_blob_read_bits(blob, 0, &buffer, &size, true);
+	if (rc != EOK)
+		return rc;
+	if (size != 1)
+		return EINVAL;
+	if (out_size)
+		*out_size = size;
 	return bithenge_new_boolean_node(out_node, (buffer & 1) != 0);
 }
@@ -902,12 +908,14 @@
 		return EINVAL;
 
-	*out_size = num_bits;
+	aoff64_t size = num_bits;
 	uint8_t buffer[sizeof(bithenge_int_t)];
-	rc = bithenge_blob_read_bits(blob, 0, (char *)buffer, out_size,
+	rc = bithenge_blob_read_bits(blob, 0, (char *)buffer, &size,
 	    little_endian);
 	if (rc != EOK)
 		return rc;
-	if (*out_size != (aoff64_t)num_bits)
-		return EINVAL;
+	if (size != (aoff64_t)num_bits)
+		return EINVAL;
+	if (out_size)
+		*out_size = size;
 
 	bithenge_int_t result = 0;
