public StorageDevice(String device) throws DBusException {
        this.device = device;
        boolean isOpticalDisc = false;
        String connectionInterface = null;

        /*
         * The Udisks2 interface "Drive" reports *all* USB drives as removable,
         * even those where /sys/block/[device]/removable is '0'.
         * Because the value in /sys/block/[device]/removable is the correct one
         * we use it instead of the more "modern" Udisks2 interface. :-P
         */
        try {
            removable = new FileReader(
                    "/sys/block/" + device + "/removable").read() == '1';
        } catch (IOException ex) {
            LOGGER.log(Level.WARNING, "", ex);
        }

        boolean systemInternal = false;

        if (DbusTools.DBUS_VERSION == DbusTools.DbusVersion.V1) {
            vendor = DbusTools.getStringProperty(device, "DriveVendor");
            model = DbusTools.getStringProperty(device, "DriveModel");
            revision = DbusTools.getStringProperty(device, "DriveRevision");
            serial = DbusTools.getStringProperty(device, "DriveSerial");
            size = DbusTools.getLongProperty(device, "DeviceSize");
            systemInternal = DbusTools.getBooleanProperty(
                    device, "DeviceIsSystemInternal");
            connectionInterface = DbusTools.getStringProperty(
                    device, "DriveConnectionInterface");
            isOpticalDisc = DbusTools.getBooleanProperty(
                    device, "DeviceIsOpticalDisc");

        } else {

            try {
                List<String> interfaceNames
                        = DbusTools.getDeviceInterfaceNames(device);
                String blockInterfaceName = "org.freedesktop.UDisks2.Block";
                if (interfaceNames.contains(blockInterfaceName)) {
                    // query block device specific properties
                    systemInternal = DbusTools.getDeviceBooleanProperty(
                            device, blockInterfaceName, "HintSystem");

                    // query drive specific properties
                    String driveObjectPath = DbusTools.getDevicePathProperty(
                            device, blockInterfaceName, "Drive").toString();
                    if (driveObjectPath.equals("/")) {
                        // raid device
                        raid = true;
                        String raidObjectPath = DbusTools.getDevicePathProperty(
                                device, blockInterfaceName, "MDRaid").toString();
                        String raidInterface = "org.freedesktop.UDisks2.MDRaid";
                        raidLevel = DbusTools.getStringProperty(
                                raidObjectPath, raidInterface, "Level");
                        raidDeviceCount = DbusTools.getIntProperty(
                                raidObjectPath, raidInterface, "NumDevices");
                        size = DbusTools.getLongProperty(
                                raidObjectPath, raidInterface, "Size");
                    } else {
                        // non-raid device
                        String driveInterface = "org.freedesktop.UDisks2.Drive";
                        vendor = DbusTools.getStringProperty(
                                driveObjectPath, driveInterface, "Vendor");
                        model = DbusTools.getStringProperty(
                                driveObjectPath, driveInterface, "Model");
                        revision = DbusTools.getStringProperty(
                                driveObjectPath, driveInterface, "Revision");
                        serial = DbusTools.getStringProperty(
                                driveObjectPath, driveInterface, "Serial");
                        size = DbusTools.getLongProperty(
                                driveObjectPath, driveInterface, "Size");
                        connectionInterface = DbusTools.getStringProperty(
                                driveObjectPath, driveInterface, "ConnectionBus");
                        isOpticalDisc = DbusTools.getBooleanProperty(
                                driveObjectPath, driveInterface, "Optical");
                    }
                }
            } catch (SAXException | IOException |
                    ParserConfigurationException ex) {
                LOGGER.log(Level.SEVERE, "", ex);
            }
        }

        // little stupid heuristic to determine storage device type
        if (isOpticalDisc) {
            type = Type.OpticalDisc;
        } else if (device.startsWith("mmcblk")) {
            type = Type.SDMemoryCard;
        } else if ((systemInternal == false)
                && "usb".equals(connectionInterface)) {
            type = Type.USBFlashDrive;
        } else {
            type = Type.HardDrive;
        }
    }