memset(targ, 0, sizeof(*targ));
 
        if (sc) {
+               int maxsync = AHC_SYNCRATE_DT;
+               int ultra = 0;
+               int flags = sc->device_flags[target_offset];
+
+               if (ahc->flags & AHC_NEWEEPROM_FMT) {
+                   if (flags & CFSYNCHISULTRA)
+                       ultra = 1;
+               } else if (flags & CFULTRAEN)
+                       ultra = 1;
+               /* AIC nutcase; 10MHz appears as ultra = 1, CFXFER = 0x04
+                * change it to ultra=0, CFXFER = 0 */
+               if(ultra && (flags & CFXFER) == 0x04) {
+                       ultra = 0;
+                       flags &= ~CFXFER;
+               }
+           
                if ((ahc->features & AHC_ULTRA2) != 0) {
-                       scsirate = sc->device_flags[target_offset] & CFXFER;
+                       scsirate = (flags & CFXFER) | (ultra ? 0x8 : 0);
                } else {
-                       scsirate = (sc->device_flags[target_offset] & CFXFER) << 4;
-                       if (sc->device_flags[target_offset] & CFSYNCH)
-                               scsirate |= SOFS;
+                       scsirate = (flags & CFXFER) << 4;
+                       maxsync = ultra ? AHC_SYNCRATE_ULTRA : 
+                               AHC_SYNCRATE_FAST;
                }
-               if (sc->device_flags[target_offset] & CFWIDEB) {
-                       scsirate |= WIDEXFER;
-                       spi_max_width(starget) = 1;
-               } else
-                       spi_max_width(starget) = 0;
+               spi_max_width(starget) = (flags & CFWIDEB) ? 1 : 0;
+               if (!(flags & CFSYNCH))
+                       spi_max_offset(starget) = 0;
                spi_min_period(starget) = 
-                       ahc_find_period(ahc, scsirate, AHC_SYNCRATE_DT);
+                       ahc_find_period(ahc, scsirate, maxsync);
+
                tinfo = ahc_fetch_transinfo(ahc, channel, ahc->our_id,
                                            starget->id, &tstate);
        }