*/
 
 #define  __INCLUDE_FROM_USB_DRIVER
-#include "../../HighLevel/USBMode.h"
+#include "../../Core/USBMode.h"
+
 #if defined(USB_CAN_BE_HOST)
 
 #define  __INCLUDE_FROM_SI_DRIVER
        if (DESCRIPTOR_TYPE(ConfigDescriptorData) != DTYPE_Configuration)
          return SI_ENUMERROR_InvalidConfigDescriptor;
 
-       while (!(DataINEndpoint) || !(DataOUTEndpoint))
+       while (!(DataINEndpoint) || !(DataOUTEndpoint) || !(EventsEndpoint))
        {
                if (!(StillImageInterface) ||
                    USB_GetNextDescriptorComp(&ConfigDescriptorSize, &ConfigDescriptorData,
        Pipe_SelectPipe(SIInterfaceInfo->Config.DataOUTPipeNumber);
        Pipe_Unfreeze();
 
-       if ((ErrorCode = Pipe_Write_Stream_LE(PIMAHeader, PIMA_COMMAND_SIZE(0), NO_STREAM_CALLBACK)) != PIPE_RWSTREAM_NoError)
+       if ((ErrorCode = Pipe_Write_Stream_LE(PIMAHeader, PIMA_COMMAND_SIZE(0), NULL)) != PIPE_RWSTREAM_NoError)
          return ErrorCode;
 
        uint8_t ParamBytes = (PIMAHeader->DataLength - PIMA_COMMAND_SIZE(0));
 
        if (ParamBytes)
        {
-               if ((ErrorCode = Pipe_Write_Stream_LE(&PIMAHeader->Params, ParamBytes, NO_STREAM_CALLBACK)) != PIPE_RWSTREAM_NoError)
+               if ((ErrorCode = Pipe_Write_Stream_LE(&PIMAHeader->Params, ParamBytes, NULL)) != PIPE_RWSTREAM_NoError)
                  return ErrorCode;
        }
 
                  return PIPE_RWSTREAM_DeviceDisconnected;
        }
 
-       Pipe_Read_Stream_LE(PIMAHeader, PIMA_COMMAND_SIZE(0), NO_STREAM_CALLBACK);
+       Pipe_Read_Stream_LE(PIMAHeader, PIMA_COMMAND_SIZE(0), NULL);
 
        if (PIMAHeader->Type == PIMA_CONTAINER_ResponseBlock)
        {
                uint8_t ParamBytes = (PIMAHeader->DataLength - PIMA_COMMAND_SIZE(0));
 
                if (ParamBytes)
-                 Pipe_Read_Stream_LE(&PIMAHeader->Params, ParamBytes, NO_STREAM_CALLBACK);
+                 Pipe_Read_Stream_LE(&PIMAHeader->Params, ParamBytes, NULL);
 
                Pipe_ClearIN();
        }
        Pipe_SelectPipe(SIInterfaceInfo->Config.DataOUTPipeNumber);
        Pipe_Unfreeze();
 
-       ErrorCode = Pipe_Write_Stream_LE(Buffer, Bytes, NO_STREAM_CALLBACK);
+       ErrorCode = Pipe_Write_Stream_LE(Buffer, Bytes, NULL);
 
        Pipe_ClearOUT();
        Pipe_Freeze();
        Pipe_SelectPipe(SIInterfaceInfo->Config.DataINPipeNumber);
        Pipe_Unfreeze();
 
-       ErrorCode = Pipe_Read_Stream_LE(Buffer, Bytes, NO_STREAM_CALLBACK);
+       ErrorCode = Pipe_Read_Stream_LE(Buffer, Bytes, NULL);
 
        Pipe_Freeze();
 
        Pipe_SelectPipe(SIInterfaceInfo->Config.EventsPipeNumber);
        Pipe_Unfreeze();
 
-       ErrorCode = Pipe_Read_Stream_LE(PIMAHeader, sizeof(PIMA_Container_t), NO_STREAM_CALLBACK);
+       ErrorCode = Pipe_Read_Stream_LE(PIMAHeader, sizeof(PIMA_Container_t), NULL);
 
        Pipe_ClearIN();
        Pipe_Freeze();
 uint8_t SI_Host_OpenSession(USB_ClassInfo_SI_Host_t* const SIInterfaceInfo)
 {
        if ((USB_HostState != HOST_STATE_Configured) || !(SIInterfaceInfo->State.IsActive))
-         return HOST_SENDCONTROL_DeviceDisconnected;
+         return PIPE_RWSTREAM_DeviceDisconnected;
 
        uint8_t ErrorCode;
 
 uint8_t SI_Host_CloseSession(USB_ClassInfo_SI_Host_t* const SIInterfaceInfo)
 {
        if ((USB_HostState != HOST_STATE_Configured) || !(SIInterfaceInfo->State.IsActive))
-         return HOST_SENDCONTROL_DeviceDisconnected;
+         return PIPE_RWSTREAM_DeviceDisconnected;
 
        uint8_t ErrorCode;
 
                             uint32_t* const Params)
 {
        if ((USB_HostState != HOST_STATE_Configured) || !(SIInterfaceInfo->State.IsActive))
-         return HOST_SENDCONTROL_DeviceDisconnected;
+         return PIPE_RWSTREAM_DeviceDisconnected;
 
        uint8_t ErrorCode;
 
        PIMA_Container_t PIMABlock;
 
        if ((USB_HostState != HOST_STATE_Configured) || !(SIInterfaceInfo->State.IsActive))
-         return HOST_SENDCONTROL_DeviceDisconnected;
+         return PIPE_RWSTREAM_DeviceDisconnected;
 
        if ((ErrorCode = SI_Host_ReceiveBlockHeader(SIInterfaceInfo, &PIMABlock)) != PIPE_RWSTREAM_NoError)
          return ErrorCode;