Index: uspace/drv/ohci/batch.c
===================================================================
--- uspace/drv/ohci/batch.c	(revision c7b582620681e6a7655a2fe435df4bb9bbac4977)
+++ uspace/drv/ohci/batch.c	(revision 33d19a7c14a38c0f59d9c61144fd4e7b59212d14)
@@ -151,7 +151,7 @@
 
 	/* NOTE: OHCI is capable of handling buffer that crosses page boundaries
-	 * it is, however, not capable of handling buffer that accupies more
-	 * than two pages (the first page is computete using start pointer, the
-	 * other using end pointer)*/
+	 * it is, however, not capable of handling buffer that occupies more
+	 * than two pages (the first page is computed using start pointer, the
+	 * other using the end pointer) */
         if (setup_size + buffer_size > 0) {
 		data->device_buffer = malloc32(setup_size + buffer_size);
@@ -180,7 +180,6 @@
 	ohci_transfer_batch_t *data = instance->private_data;
 	assert(data);
-	size_t tds = data->td_count;
 	usb_log_debug("Batch(%p) checking %zu td(s) for completion.\n",
-	    instance, tds);
+	    instance, data->td_count);
 	usb_log_debug("ED: %x:%x:%x:%x.\n",
 	    data->ed->status, data->ed->td_head, data->ed->td_tail,
@@ -188,5 +187,5 @@
 	size_t i = 0;
 	instance->transfered_size = instance->buffer_size;
-	for (; i < tds; ++i) {
+	for (; i < data->td_count; ++i) {
 		assert(data->tds[i] != NULL);
 		usb_log_debug("TD %zu: %x:%x:%x:%x.\n", i,
@@ -213,6 +212,7 @@
 	assert(hcd_ep);
 	hcd_ep->td = data->tds[i];
-	if (i > 0)
-		instance->transfered_size -= td_remain_size(data->tds[i - 1]);
+	assert(i > 0);
+	for (--i;i < data->td_count; ++i)
+		instance->transfered_size -= td_remain_size(data->tds[i]);
 
 	/* Clear possible ED HALT */
Index: uspace/drv/ohci/hw_struct/transfer_descriptor.h
===================================================================
--- uspace/drv/ohci/hw_struct/transfer_descriptor.h	(revision c7b582620681e6a7655a2fe435df4bb9bbac4977)
+++ uspace/drv/ohci/hw_struct/transfer_descriptor.h	(revision 33d19a7c14a38c0f59d9c61144fd4e7b59212d14)
@@ -41,6 +41,8 @@
 #include "completion_codes.h"
 
-/* OHCI TDs can handle up to 8KB buffers */
-#define OHCI_TD_MAX_TRANSFER (8 * 1024)
+/* OHCI TDs can handle up to 8KB buffers, however, it can use max 2 pages.
+ * Using 4KB buffers guarantees the page count condition.
+ * (OHCI assumes 4KB pages) */
+#define OHCI_TD_MAX_TRANSFER (4 * 1024)
 
 typedef struct td {
