int err = 0;
        int master_wep_flag;
        int auth_flag;
+       int enc_flag;
 
-       if (priv->wep_on)
+       if (priv->encode_alg == IW_ENCODE_ALG_WEP)
                __orinoco_hw_setup_wepkeys(priv);
 
        if (priv->wep_restrict)
        else
                auth_flag = HERMES_AUTH_OPEN;
 
+       if (priv->encode_alg == IW_ENCODE_ALG_WEP)
+               enc_flag = 1;
+       else
+               enc_flag = 0;
+
        switch (priv->firmware_type) {
        case FIRMWARE_TYPE_AGERE: /* Agere style WEP */
-               if (priv->wep_on) {
+               if (priv->encode_alg == IW_ENCODE_ALG_WEP) {
                        /* Enable the shared-key authentication. */
                        err = hermes_write_wordrec(hw, USER_BAP,
                                                   HERMES_RID_CNFAUTHENTICATION_AGERE,
                }
                err = hermes_write_wordrec(hw, USER_BAP,
                                           HERMES_RID_CNFWEPENABLED_AGERE,
-                                          priv->wep_on);
+                                          enc_flag);
                if (err)
                        return err;
                break;
 
        case FIRMWARE_TYPE_INTERSIL: /* Intersil style WEP */
        case FIRMWARE_TYPE_SYMBOL: /* Symbol style WEP */
-               if (priv->wep_on) {
+               if (priv->encode_alg == IW_ENCODE_ALG_WEP) {
                        if (priv->wep_restrict ||
                            (priv->firmware_type == FIRMWARE_TYPE_SYMBOL))
                                master_wep_flag = HERMES_WEP_PRIVACY_INVOKED |
        priv->channel = 0; /* use firmware default */
 
        priv->promiscuous = 0;
-       priv->wep_on = 0;
+       priv->encode_alg = IW_ENCODE_ALG_NONE;
        priv->tx_key = 0;
 
        /* Make the hardware available, as long as it hasn't been
        struct orinoco_private *priv = netdev_priv(dev);
        int index = (erq->flags & IW_ENCODE_INDEX) - 1;
        int setindex = priv->tx_key;
-       int enable = priv->wep_on;
+       int encode_alg = priv->encode_alg;
        int restricted = priv->wep_restrict;
        u16 xlen = 0;
        int err = -EINPROGRESS;         /* Call commit handler */
                        xlen = 0;
 
                /* Switch on WEP if off */
-               if ((!enable) && (xlen > 0)) {
+               if ((encode_alg != IW_ENCODE_ALG_WEP) && (xlen > 0)) {
                        setindex = index;
-                       enable = 1;
+                       encode_alg = IW_ENCODE_ALG_WEP;
                }
        } else {
                /* Important note : if the user do "iwconfig eth0 enc off",
        }
 
        if (erq->flags & IW_ENCODE_DISABLED)
-               enable = 0;
+               encode_alg = IW_ENCODE_ALG_NONE;
        if (erq->flags & IW_ENCODE_OPEN)
                restricted = 0;
        if (erq->flags & IW_ENCODE_RESTRICTED)
        priv->tx_key = setindex;
 
        /* Try fast key change if connected and only keys are changed */
-       if (priv->wep_on && enable && (priv->wep_restrict == restricted) &&
+       if ((priv->encode_alg == encode_alg) &&
+           (priv->wep_restrict == restricted) &&
            netif_carrier_ok(dev)) {
                err = __orinoco_hw_setup_wepkeys(priv);
                /* No need to commit if successful */
                goto out;
        }
 
-       priv->wep_on = enable;
+       priv->encode_alg = encode_alg;
        priv->wep_restrict = restricted;
 
  out:
                index = priv->tx_key;
 
        erq->flags = 0;
-       if (! priv->wep_on)
+       if (!priv->encode_alg)
                erq->flags |= IW_ENCODE_DISABLED;
        erq->flags |= index + 1;