Index: uspace/drv/bus/usb/usbmast/inquiry.c
===================================================================
--- uspace/drv/bus/usb/usbmast/inquiry.c	(revision 239e7e10b291d0b930cbf65fb727aa3cf7cfc533)
+++ uspace/drv/bus/usb/usbmast/inquiry.c	(revision 7b2c17c12c46efe87496f77b088e9069ce6ad8fd)
@@ -52,6 +52,4 @@
 	((type)( (number) & (BITS_GET_MID_MASK(type, bitcount, offset)) ) >> (offset))
 
-#define INQUIRY_RESPONSE_LENGTH 36
-
 /** Get string representation for SCSI peripheral device type.
  *
@@ -89,13 +87,13 @@
     usb_massstor_inquiry_result_t *inquiry_result)
 {
+	scsi_std_inquiry_data_t inq_data;
+	size_t response_len;
 	scsi_cdb_inquiry_t inquiry = {
 		.op_code = SCSI_CMD_INQUIRY,
 		.evpd = 0,
 		.page_code = 0,
-		.alloc_len = host2uint16_t_be(INQUIRY_RESPONSE_LENGTH),
+		.alloc_len = host2uint16_t_be(sizeof(inq_data)),
 		.control = 0
 	};
-	size_t response_len;
-	uint8_t response[INQUIRY_RESPONSE_LENGTH];
 
 	int rc;
@@ -103,5 +101,5 @@
 	rc = usb_massstor_data_in(dev, bulk_in_idx, bulk_out_idx,
 	    0xDEADBEEF, 0, (uint8_t *) &inquiry, sizeof(inquiry),
-	    response, INQUIRY_RESPONSE_LENGTH, &response_len);
+	    &inq_data, sizeof(inq_data), &response_len);
 
 	if (rc != EOK) {
@@ -111,31 +109,31 @@
 	}
 
-	if (response_len < 8) {
-		usb_log_error("The SCSI response is too short.\n");
-		return ERANGE;
+	if (response_len < SCSI_STD_INQUIRY_DATA_MIN_SIZE) {
+		usb_log_error("The SCSI inquiry response is too short.\n");
+		return EIO;
 	}
 
 	/*
-	 * This is an ugly part of the code. We will parse the returned
-	 * data by hand and try to get as many useful data as possible.
+	 * Parse inquiry data and fill in the result structure.
 	 */
+
 	bzero(inquiry_result, sizeof(*inquiry_result));
 
-	/* This shall be returned by all devices. */
-	inquiry_result->peripheral_device_type
-	    = BITS_GET(uint8_t, response[0], 5, 0);
-	inquiry_result->removable = BITS_GET(uint8_t, response[1], 1, 7);
+	inquiry_result->device_type =
+	    BITS_GET(uint8_t, inq_data.pqual_devtype, 5, 0);
+	inquiry_result->removable =
+	    BITS_GET(uint8_t, inq_data.rmb, 1, 7);
 
-	if (response_len < 32) {
-		return EOK;
-	}
+	str_ncpy(inquiry_result->vendor, 9,
+	    (const char *) &inq_data.vendor, 8);
+	trim_trailing_spaces(inquiry_result->vendor);
 
-	str_ncpy(inquiry_result->vendor_id, 9,
-	    (const char *) &response[8], 8);
-	trim_trailing_spaces(inquiry_result->vendor_id);
+	str_ncpy(inquiry_result->product, 17,
+	    (const char *) &inq_data.product, 16);
+	trim_trailing_spaces(inquiry_result->product);
 
-	str_ncpy(inquiry_result->product_and_revision, 12,
-	    (const char *) &response[16], 11);
-	trim_trailing_spaces(inquiry_result->product_and_revision);
+	str_ncpy(inquiry_result->revision, 5,
+	    (const char *) &inq_data.revision, 4);
+	trim_trailing_spaces(inquiry_result->revision);
 
 	return EOK;
Index: uspace/drv/bus/usb/usbmast/main.c
===================================================================
--- uspace/drv/bus/usb/usbmast/main.c	(revision 239e7e10b291d0b930cbf65fb727aa3cf7cfc533)
+++ uspace/drv/bus/usb/usbmast/main.c	(revision 7b2c17c12c46efe87496f77b088e9069ce6ad8fd)
@@ -119,8 +119,10 @@
 
 	usb_log_info("Mass storage `%s': " \
-	    "`%s' by `%s' is %s (%s), %zu LUN(s).\n",
+	    "%s by %s rev. %s is %s (%s), %zu LUN(s).\n",
 	    dev->ddf_dev->name,
-	    inquiry.product_and_revision, inquiry.vendor_id,
-	    usb_str_masstor_scsi_peripheral_device_type(inquiry.peripheral_device_type),
+	    inquiry.product,
+	    inquiry.vendor,
+	    inquiry.revision,
+	    usb_str_masstor_scsi_peripheral_device_type(inquiry.device_type),
 	    inquiry.removable ? "removable" : "non-removable",
 	    lun_count);
Index: uspace/drv/bus/usb/usbmast/mast.h
===================================================================
--- uspace/drv/bus/usb/usbmast/mast.h	(revision 239e7e10b291d0b930cbf65fb727aa3cf7cfc533)
+++ uspace/drv/bus/usb/usbmast/mast.h	(revision 7b2c17c12c46efe87496f77b088e9069ce6ad8fd)
@@ -47,12 +47,14 @@
  */
 typedef struct {
-	/** SCSI peripheral device type. */
-	int peripheral_device_type;
-	/** Whether the device is removable. */
+	/** SCSI peripheral device type */
+	unsigned device_type;
+	/** Whether the device is removable */
 	bool removable;
-	/** Vendor ID string. */
-	char vendor_id[9];
-	/** Product ID and product revision string. */
-	char product_and_revision[12];
+	/** Vendor ID string */
+	char vendor[9];
+	/** Product ID string */
+	char product[17];
+	/** Revision string */
+	char revision[17];
 } usb_massstor_inquiry_result_t;
 
Index: uspace/lib/scsi/include/scsi/spc.h
===================================================================
--- uspace/lib/scsi/include/scsi/spc.h	(revision 239e7e10b291d0b930cbf65fb727aa3cf7cfc533)
+++ uspace/lib/scsi/include/scsi/spc.h	(revision 7b2c17c12c46efe87496f77b088e9069ce6ad8fd)
@@ -58,4 +58,39 @@
 } __attribute__((packed)) scsi_cdb_inquiry_t;
 
+/** Minimum size of inquiry data required since SCSI-2 */
+#define SCSI_STD_INQUIRY_DATA_MIN_SIZE 36
+
+/** Standard inquiry data.
+ *
+ * Returned for Inquiry command with evpd bit cleared.
+ */
+typedef struct {
+	/** Peripheral qualifier, Peripheral device type */
+	uint8_t pqual_devtype;
+	/** RMB, reserved */
+	uint8_t rmb;
+	/** Version */
+	uint8_t version;
+	/** Obsolete, NormACA, HiSup, Response Data Format */
+	uint8_t aca_hisup_rdf;
+	/** Additional Length */
+	uint8_t additional_len;
+	/** SCCS, ACC, TPGS, 3PC, Reserved, Protect */
+	uint8_t cap1;
+	/** Obsolete, EncServ, VS, MuliP, Obsolete, Addr16 */
+	uint8_t cap2;
+	/** Obsolete, WBus16, Sync, Obsolete, CmdQue, VS */
+	uint8_t cap3;
+
+	/** Vendor string */
+	uint8_t vendor[8];
+	/** Product string */
+	uint8_t product[16];
+	/** Revision string */
+	uint8_t revision[4];
+
+	/* End of required data */
+} scsi_std_inquiry_data_t;
+
 /** SCSI peripheral device type */
 enum scsi_device_type {
