uint16_t* const BytesProcessed)
 {
        uint8_t  ErrorCode;
-       uint16_t BytesInTransfer = 0;
+       uint16_t BytesInTransfer = BytesProcessed ? *BytesProcessed : 0;
 
        if ((ErrorCode = Endpoint_WaitUntilReady()))
          return ErrorCode;
 
-       if (BytesProcessed != NULL)
-         Length -= *BytesProcessed;
-
-       while (Length)
+       while (BytesInTransfer < Length)
        {
                if (!(Endpoint_IsReadWriteAllowed()))
                {
 
                        if (BytesProcessed != NULL)
                        {
-                               *BytesProcessed += BytesInTransfer;
+                               *BytesProcessed = BytesInTransfer;
                                return ENDPOINT_RWSTREAM_IncompleteTransfer;
                        }
 
                else
                {
                        Endpoint_Discard_8();
-
-                       Length--;
                        BytesInTransfer++;
                }
        }
                              uint16_t* const BytesProcessed)
 {
        uint8_t  ErrorCode;
-       uint16_t BytesInTransfer = 0;
+       uint16_t BytesInTransfer = BytesProcessed ? *BytesProcessed : 0;
 
        if ((ErrorCode = Endpoint_WaitUntilReady()))
          return ErrorCode;
 
-       if (BytesProcessed != NULL)
-         Length -= *BytesProcessed;
-
-       while (Length)
+       while (BytesInTransfer < Length)
        {
                if (!(Endpoint_IsReadWriteAllowed()))
                {
 
                        if (BytesProcessed != NULL)
                        {
-                               *BytesProcessed += BytesInTransfer;
+                               *BytesProcessed = BytesInTransfer;
                                return ENDPOINT_RWSTREAM_IncompleteTransfer;
                        }
 
                else
                {
                        Endpoint_Write_8(0);
-
-                       Length--;
                        BytesInTransfer++;
                }
        }
 
                                 uint16_t* const BytesProcessed)
 {
        uint8_t  ErrorCode;
-       uint16_t BytesInTransfer = 0;
+       uint16_t BytesInTransfer = BytesProcessed ? *BytesProcessed : 0;
 
        if ((ErrorCode = Endpoint_WaitUntilReady()))
          return ErrorCode;
 
-       if (BytesProcessed != NULL)
-         Length -= *BytesProcessed;
-
-       while (Length)
+       while (BytesInTransfer < Length)
        {
                if (!(Endpoint_IsReadWriteAllowed()))
                {
 
                        if (BytesProcessed != NULL)
                        {
-                               *BytesProcessed += BytesInTransfer;
+                               *BytesProcessed = BytesInTransfer;
                                return ENDPOINT_RWSTREAM_IncompleteTransfer;
                        }
 
                else
                {
                        Endpoint_Discard_8();
-
-                       Length--;
                        BytesInTransfer++;
                }
        }
                              uint16_t* const BytesProcessed)
 {
        uint8_t  ErrorCode;
-       uint16_t BytesInTransfer = 0;
+       uint16_t BytesInTransfer = BytesProcessed ? *BytesProcessed : 0;
 
        if ((ErrorCode = Endpoint_WaitUntilReady()))
          return ErrorCode;
 
-       if (BytesProcessed != NULL)
-         Length -= *BytesProcessed;
-
-       while (Length)
+       while (BytesInTransfer < Length)
        {
                if (!(Endpoint_IsReadWriteAllowed()))
                {
 
                        if (BytesProcessed != NULL)
                        {
-                               *BytesProcessed += BytesInTransfer;
+                               *BytesProcessed = BytesInTransfer;
                                return ENDPOINT_RWSTREAM_IncompleteTransfer;
                        }
 
                else
                {
                        Endpoint_Write_8(0);
-
-                       Length--;
                        BytesInTransfer++;
                }
        }
 
                                 uint16_t* const BytesProcessed)
 {
        uint8_t  ErrorCode;
-       uint16_t BytesInTransfer = 0;
+       uint16_t BytesInTransfer = BytesProcessed ? *BytesProcessed : 0;
 
        if ((ErrorCode = Endpoint_WaitUntilReady()))
          return ErrorCode;
 
-       if (BytesProcessed != NULL)
-         Length -= *BytesProcessed;
-
-       while (Length)
+       while (BytesInTransfer < Length)
        {
                if (!(Endpoint_IsReadWriteAllowed()))
                {
 
                        if (BytesProcessed != NULL)
                        {
-                               *BytesProcessed += BytesInTransfer;
+                               *BytesProcessed = BytesInTransfer;
                                return ENDPOINT_RWSTREAM_IncompleteTransfer;
                        }
 
                else
                {
                        Endpoint_Discard_8();
-
-                       Length--;
                        BytesInTransfer++;
                }
        }
                              uint16_t* const BytesProcessed)
 {
        uint8_t  ErrorCode;
-       uint16_t BytesInTransfer = 0;
+       uint16_t BytesInTransfer = BytesProcessed ? *BytesProcessed : 0;
 
        if ((ErrorCode = Endpoint_WaitUntilReady()))
          return ErrorCode;
 
-       if (BytesProcessed != NULL)
-         Length -= *BytesProcessed;
-
-       while (Length)
+       while (BytesInTransfer < Length)
        {
                if (!(Endpoint_IsReadWriteAllowed()))
                {
 
                        if (BytesProcessed != NULL)
                        {
-                               *BytesProcessed += BytesInTransfer;
+                               *BytesProcessed = BytesInTransfer;
                                return ENDPOINT_RWSTREAM_IncompleteTransfer;
                        }
 
                else
                {
                        Endpoint_Write_8(0);
-
-                       Length--;
                        BytesInTransfer++;
                }
        }