--- ./udrivewatcher.pas	2012-02-07 09:53:25.000000000 +0400
+++ ./udrivewatcher.pas	2012-02-07 12:30:39.000000000 +0400
@@ -708,6 +708,7 @@
   DeviceFile: String;
   MountPoint: String;
   HandledByUDisks: Boolean = False;
+  HaveUAM: Boolean = False;
 begin
   Result := TDrivesList.Create;
   try
@@ -717,6 +718,9 @@
     if IsUDisksAvailable then
       HaveUDisksDevices := uUDisks.EnumerateDevices(UDisksDevices);
 
+    // fix me. If uam installed, usb and mmc mounted automatic.
+    HaveUAM := (fpSystemStatus('stat -c %s /lib/udev/uam/find-helper.sh > /dev/null') = 0);
+
     // Storage devices have to be in fstab or mtab and reported by UDisks.
     for I:= Low(MntEntFileList) to High(MntEntFileList) do
     begin
@@ -795,12 +799,27 @@
                 DriveLabel := Path;
                 FileSystem := StrPas(pme^.mnt_type);
 
-                if IsPartOfString(['ISO9660', 'CDROM', 'CDRW', 'DVD'], UpperCase(FileSystem)) then
+                IsMounted:= False; // Checked via mtab below.
+                if IsPartOfString(['ISO9660', 'CDROM', 'CDRW', 'DVD'], UpperCase(FileSystem)) then // for external usb cdrom and dvd
+                  begin
+                    DriveType := dtOptical;
+                    if HaveUAM then
+                      IsMounted:= True;
+                  end else
+                if IsPartOfString(['ISO9660', 'CDROM', 'CDRW', 'DVD'], UpperCase(DeviceFile)) then
                   DriveType := dtOptical else
                 if IsPartOfString(['FLOPPY'], UpperCase(FileSystem)) then
                   DriveType := dtFloppy else
+                if IsPartOfString(['FLOPPY', '/DEV/FD'], UpperCase(DeviceFile)) then
+                  DriveType := dtFloppy else
                 if IsPartOfString(['ZIP', 'USB', 'CAMERA'], UpperCase(FileSystem)) then
                   DriveType := dtFlash else
+                if IsPartOfString(['/MEDIA/'], UpperCase(MountPoint)) then
+                  begin
+                    DriveType := dtFlash;
+                    if HaveUAM then
+                      IsMounted:= True;
+                  end else
                 if IsPartOfString(['NFS', 'SMB', 'NETW', 'CIFS'], UpperCase(FileSystem)) then
                   DriveType := dtNetwork
                 else
@@ -809,7 +828,6 @@
                 IsMediaAvailable:= True;
                 IsMediaEjectable:= (DriveType = dtOptical);
                 IsMediaRemovable:= DriveType in [dtFloppy, dtOptical, dtFlash];
-                IsMounted:= False; // Checked via mtab below.
               end;
             end
             // Mark drive as mounted if found in mtab.
