diff -ruN licq.bak/include/licq_icq.h licq/include/licq_icq.h
--- licq.bak/include/licq_icq.h	Wed Oct 30 00:53:34 2002
+++ licq/include/licq_icq.h	Tue Nov 12 09:16:58 2002
@@ -68,6 +68,7 @@
 const unsigned short ICQ_SNACxSUB_OFFLINExLIST     = 0x000c;
 
 // Subtypes for message family
+const unsigned short ICQ_SNACxMSG_ICBMxERROR       = 0x0001; // server
 const unsigned short ICQ_SNACxMSG_SETxICQxMODE     = 0x0002; // client
 const unsigned short ICQ_SNACxMSG_REQUESTxRIGHTS   = 0x0004; // client
 const unsigned short ICQ_SNACxMSG_RIGHTSxGRANTED   = 0x0005; // server
diff -ruN licq.bak/plugins/qt-gui/po/bg_BG.po licq/plugins/qt-gui/po/bg_BG.po
--- licq.bak/plugins/qt-gui/po/bg_BG.po	Mon Oct 28 19:59:24 2002
+++ licq/plugins/qt-gui/po/bg_BG.po	Tue Nov 12 09:16:58 2002
@@ -3147,8 +3147,8 @@
 msgstr "50 - 59"
 
 #: searchuserdlg.cpp:153
-msgid "SearchUserDlg::69+"
-msgstr "69+"
+msgid "SearchUserDlg::60+"
+msgstr "60+"
 
 #: searchuserdlg.cpp:252
 msgid "SearchUserDlg::A&lert User"
diff -ruN licq.bak/plugins/qt-gui/po/bg_BG.ts licq/plugins/qt-gui/po/bg_BG.ts
--- licq.bak/plugins/qt-gui/po/bg_BG.ts	Mon Oct 28 19:59:24 2002
+++ licq/plugins/qt-gui/po/bg_BG.ts	Tue Nov 12 09:16:58 2002
@@ -1839,8 +1839,8 @@
 <context>
     <name>SearchUserDlg</name>
     <message>
-        <source>69+</source>
-        <translation>69+</translation>
+        <source>60+</source>
+        <translation>60+</translation>
     </message>
     <message>
         <source>Male</source>
diff -ruN licq.bak/plugins/qt-gui/po/cs_CZ.po licq/plugins/qt-gui/po/cs_CZ.po
--- licq.bak/plugins/qt-gui/po/cs_CZ.po	Sat Jun  1 06:45:05 2002
+++ licq/plugins/qt-gui/po/cs_CZ.po	Tue Nov 12 09:16:58 2002
@@ -4445,7 +4445,7 @@
 msgstr ""
 
 #: searchuserdlg.cpp:130
-msgid "SearchUserDlg::69+"
+msgid "SearchUserDlg::60+"
 msgstr ""
 
 #: searchuserdlg.cpp:232
diff -ruN licq.bak/plugins/qt-gui/po/cs_CZ.ts licq/plugins/qt-gui/po/cs_CZ.ts
--- licq.bak/plugins/qt-gui/po/cs_CZ.ts	Fri Oct 25 15:16:55 2002
+++ licq/plugins/qt-gui/po/cs_CZ.ts	Tue Nov 12 09:16:58 2002
@@ -3429,7 +3429,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>69+</source>
+        <source>60+</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff -ruN licq.bak/plugins/qt-gui/po/de.po licq/plugins/qt-gui/po/de.po
--- licq.bak/plugins/qt-gui/po/de.po	Thu Sep  5 10:32:36 2002
+++ licq/plugins/qt-gui/po/de.po	Tue Nov 12 09:16:58 2002
@@ -3393,8 +3393,8 @@
 msgstr "50 - 59"
 
 #: searchuserdlg.cpp:153
-msgid "SearchUserDlg::69+"
-msgstr "69+"
+msgid "SearchUserDlg::60+"
+msgstr "60+"
 
 #: searchuserdlg.cpp:252
 msgid "SearchUserDlg::A&lert User"
diff -ruN licq.bak/plugins/qt-gui/po/de.ts licq/plugins/qt-gui/po/de.ts
--- licq.bak/plugins/qt-gui/po/de.ts	Mon Nov 11 21:20:51 2002
+++ licq/plugins/qt-gui/po/de.ts	Tue Nov 12 09:16:58 2002
@@ -3565,8 +3565,8 @@
 <context>
     <name>SearchUserDlg</name>
     <message>
-        <source>69+</source>
-        <translation>69+</translation>
+        <source>60+</source>
+        <translation>60+</translation>
     </message>
     <message>
         <source>Male</source>
diff -ruN licq.bak/plugins/qt-gui/po/es.ts licq/plugins/qt-gui/po/es.ts
--- licq.bak/plugins/qt-gui/po/es.ts	Fri Oct 25 15:16:55 2002
+++ licq/plugins/qt-gui/po/es.ts	Tue Nov 12 09:16:58 2002
@@ -3530,7 +3530,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>69+</source>
+        <source>60+</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff -ruN licq.bak/plugins/qt-gui/po/fr.ts licq/plugins/qt-gui/po/fr.ts
--- licq.bak/plugins/qt-gui/po/fr.ts	Fri Oct 25 15:16:55 2002
+++ licq/plugins/qt-gui/po/fr.ts	Tue Nov 12 09:16:58 2002
@@ -4153,7 +4153,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>69+</source>
+        <source>60+</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff -ruN licq.bak/plugins/qt-gui/po/it.po licq/plugins/qt-gui/po/it.po
--- licq.bak/plugins/qt-gui/po/it.po	Fri Jul 26 21:34:42 2002
+++ licq/plugins/qt-gui/po/it.po	Tue Nov 12 09:16:58 2002
@@ -3258,7 +3258,7 @@
 msgstr ""
 
 #: searchuserdlg.cpp:148
-msgid "SearchUserDlg::69+"
+msgid "SearchUserDlg::60+"
 msgstr ""
 
 #: searchuserdlg.cpp:247
diff -ruN licq.bak/plugins/qt-gui/po/it.ts licq/plugins/qt-gui/po/it.ts
--- licq.bak/plugins/qt-gui/po/it.ts	Fri Oct 25 15:16:55 2002
+++ licq/plugins/qt-gui/po/it.ts	Tue Nov 12 09:16:58 2002
@@ -3707,7 +3707,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>69+</source>
+        <source>60+</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff -ruN licq.bak/plugins/qt-gui/po/ja_JP.eucJP.ts licq/plugins/qt-gui/po/ja_JP.eucJP.ts
--- licq.bak/plugins/qt-gui/po/ja_JP.eucJP.ts	Fri Oct 25 15:16:55 2002
+++ licq/plugins/qt-gui/po/ja_JP.eucJP.ts	Tue Nov 12 09:16:58 2002
@@ -3830,7 +3830,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>69+</source>
+        <source>60+</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff -ruN licq.bak/plugins/qt-gui/po/pl.ts licq/plugins/qt-gui/po/pl.ts
--- licq.bak/plugins/qt-gui/po/pl.ts	Fri Oct 25 15:16:55 2002
+++ licq/plugins/qt-gui/po/pl.ts	Tue Nov 12 09:16:58 2002
@@ -3655,7 +3655,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>69+</source>
+        <source>60+</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff -ruN licq.bak/plugins/qt-gui/po/pt.ts licq/plugins/qt-gui/po/pt.ts
--- licq.bak/plugins/qt-gui/po/pt.ts	Fri Oct 25 15:16:55 2002
+++ licq/plugins/qt-gui/po/pt.ts	Tue Nov 12 09:16:58 2002
@@ -4040,7 +4040,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>69+</source>
+        <source>60+</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff -ruN licq.bak/plugins/qt-gui/po/ru.po licq/plugins/qt-gui/po/ru.po
--- licq.bak/plugins/qt-gui/po/ru.po	Thu Nov  7 20:06:14 2002
+++ licq/plugins/qt-gui/po/ru.po	Tue Nov 12 09:16:58 2002
@@ -3486,8 +3486,8 @@
 msgstr "50 - 59"
 
 #: searchuserdlg.cpp:153
-msgid "SearchUserDlg::69+"
-msgstr "69+"
+msgid "SearchUserDlg::60+"
+msgstr "60+"
 
 #: searchuserdlg.cpp:252
 msgid "SearchUserDlg::A&lert User"
diff -ruN licq.bak/plugins/qt-gui/po/ru.ts licq/plugins/qt-gui/po/ru.ts
--- licq.bak/plugins/qt-gui/po/ru.ts	Thu Nov  7 20:06:14 2002
+++ licq/plugins/qt-gui/po/ru.ts	Tue Nov 12 09:16:58 2002
@@ -3375,8 +3375,8 @@
 <context>
     <name>SearchUserDlg</name>
     <message>
-        <source>69+</source>
-        <translation>69+</translation>
+        <source>60+</source>
+        <translation>60+</translation>
     </message>
     <message>
         <source>Male</source>
diff -ruN licq.bak/plugins/qt-gui/po/sr.po licq/plugins/qt-gui/po/sr.po
--- licq.bak/plugins/qt-gui/po/sr.po	Sun Jun 30 14:16:26 2002
+++ licq/plugins/qt-gui/po/sr.po	Tue Nov 12 09:16:58 2002
@@ -3150,8 +3150,8 @@
 msgstr "50 - 59"
 
 #: searchuserdlg.cpp:130
-msgid "SearchUserDlg::69+"
-msgstr "69+"
+msgid "SearchUserDlg::60+"
+msgstr "60+"
 
 #: searchuserdlg.cpp:243
 msgid "SearchUserDlg::A&lert User"
diff -ruN licq.bak/plugins/qt-gui/po/sr.ts licq/plugins/qt-gui/po/sr.ts
--- licq.bak/plugins/qt-gui/po/sr.ts	Fri Oct 25 15:16:56 2002
+++ licq/plugins/qt-gui/po/sr.ts	Tue Nov 12 09:16:58 2002
@@ -3610,8 +3610,8 @@
 <context>
     <name>SearchUserDlg</name>
     <message>
-        <source>69+</source>
-        <translation>69+</translation>
+        <source>60+</source>
+        <translation>60+</translation>
     </message>
     <message>
         <source>Male</source>
diff -ruN licq.bak/plugins/qt-gui/po/sv.ts licq/plugins/qt-gui/po/sv.ts
--- licq.bak/plugins/qt-gui/po/sv.ts	Fri Oct 25 15:16:56 2002
+++ licq/plugins/qt-gui/po/sv.ts	Tue Nov 12 09:16:58 2002
@@ -3623,7 +3623,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>69+</source>
+        <source>60+</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff -ruN licq.bak/plugins/qt-gui/po/tr.ts licq/plugins/qt-gui/po/tr.ts
--- licq.bak/plugins/qt-gui/po/tr.ts	Fri Oct 25 15:16:56 2002
+++ licq/plugins/qt-gui/po/tr.ts	Tue Nov 12 09:16:58 2002
@@ -3557,7 +3557,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <source>69+</source>
+        <source>60+</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
diff -ruN licq.bak/plugins/qt-gui/po/uk.po licq/plugins/qt-gui/po/uk.po
--- licq.bak/plugins/qt-gui/po/uk.po	Wed Jul 17 09:47:15 2002
+++ licq/plugins/qt-gui/po/uk.po	Tue Nov 12 09:16:58 2002
@@ -3539,8 +3539,8 @@
 msgstr "50 - 59"
 
 #: searchuserdlg.cpp:148
-msgid "SearchUserDlg::69+"
-msgstr "69+"
+msgid "SearchUserDlg::60+"
+msgstr "60+"
 
 #: searchuserdlg.cpp:247
 msgid "SearchUserDlg::A&lert User"
diff -ruN licq.bak/plugins/qt-gui/po/uk.ts licq/plugins/qt-gui/po/uk.ts
--- licq.bak/plugins/qt-gui/po/uk.ts	Fri Oct 25 15:16:56 2002
+++ licq/plugins/qt-gui/po/uk.ts	Tue Nov 12 09:16:58 2002
@@ -3649,8 +3649,8 @@
 <context>
     <name>SearchUserDlg</name>
     <message>
-        <source>69+</source>
-        <translation>69+</translation>
+        <source>60+</source>
+        <translation>60+</translation>
     </message>
     <message>
         <source>Male</source>
diff -ruN licq.bak/plugins/qt-gui/src/searchuserdlg.cpp licq/plugins/qt-gui/src/searchuserdlg.cpp
--- licq.bak/plugins/qt-gui/src/searchuserdlg.cpp	Thu Aug 15 05:08:06 2002
+++ licq/plugins/qt-gui/src/searchuserdlg.cpp	Tue Nov 12 09:16:58 2002
@@ -165,7 +165,7 @@
   cmbAge->insertItem(tr("30 - 39"), 3);
   cmbAge->insertItem(tr("40 - 49"), 4);
   cmbAge->insertItem(tr("50 - 59"), 5);
-  cmbAge->insertItem(tr("69+"), 6);
+  cmbAge->insertItem(tr("60+"), 6);
   cmbAge->setFixedWidth(cmbAge->sizeHint().width());
   grid_lay->addWidget(cmbAge, CR, 3);
   grid_lay->addWidget(new QLabel(tr("Gender:"), whitepages_tab), ++CR, 1);
diff -ruN licq.bak/plugins/qt-gui/src/showawaymsgdlg.cpp licq/plugins/qt-gui/src/showawaymsgdlg.cpp
--- licq.bak/plugins/qt-gui/src/showawaymsgdlg.cpp	Wed Oct 30 16:38:35 2002
+++ licq/plugins/qt-gui/src/showawaymsgdlg.cpp	Tue Nov 12 09:16:58 2002
@@ -127,19 +127,24 @@
   bool isOk = (e->Result() == EVENT_ACKED || e->Result() == EVENT_SUCCESS);
 
   QString title, result;
-  switch (e->Result())
+  if (e->ExtendedAck() && !e->ExtendedAck()->Accepted())
+    result = tr("refused");
+  else
   {
-  case EVENT_FAILED:
-    result = tr("failed");
-    break;
-  case EVENT_TIMEDOUT:
-    result = tr("timed out");
-    break;
-  case EVENT_ERROR:
-    result = tr("error");
-    break;
-  default:
-    break;
+    switch (e->Result())
+    {
+    case EVENT_FAILED:
+      result = tr("failed");
+      break;
+    case EVENT_TIMEDOUT:
+      result = tr("timed out");
+      break;
+    case EVENT_ERROR:
+      result = tr("error");
+      break;
+    default:
+      break;
+    }
   }
 
   if(!result.isEmpty())
@@ -152,11 +157,13 @@
 
   // FIXME server command
   if (isOk && (e->Command() == ICQ_CMDxTCP_START ||
-               e->Command() == ICQ_CMDxSND_THRUxSERVER))
+               e->SNAC() == ((ICQ_SNACxFAM_MESSAGE << 16) | ICQ_SNACxMSG_SENDxSERVER)))
   {
     ICQUser* u = gUserManager.FetchUser(m_nUin, LOCK_R);
     QTextCodec * codec = UserCodec::codecForICQUser(u);
-    mleAwayMsg->setText(codec->toUnicode(u->AutoResponse()));
+    const char *autoResp = (e->ExtendedAck() && !e->ExtendedAck()->Accepted())?
+                             e->ExtendedAck()->Response():u->AutoResponse();
+    mleAwayMsg->setText(codec->toUnicode(autoResp));
     gUserManager.DropUser(u);
     mleAwayMsg->setEnabled(true);
     mleAwayMsg->setBackgroundMode(PaletteBase);
diff -ruN licq.bak/src/icqd-filetransfer.cpp licq/src/icqd-filetransfer.cpp
--- licq.bak/src/icqd-filetransfer.cpp	Fri Oct 25 13:37:57 2002
+++ licq/src/icqd-filetransfer.cpp	Tue Nov 12 09:16:58 2002
@@ -225,6 +225,12 @@
     return false;
   }
 
+  if (!StartFileTransferServer())
+  {
+    PushFileTransferEvent(FT_ERRORxBIND);
+    return false;
+  }
+
   // Create the socket manager thread
   if (pthread_create(&thread_ft, NULL, &FileTransferManager_tep, this) == -1)
   {
@@ -242,7 +248,7 @@
   m_nDirection = D_SENDER;
 
   // Validate the pathnames
-  if (lPathNames.size() == 0) return;
+  if (lPathNames.empty()) return;
 
   struct stat buf;
   ConstFileList::iterator iter;
@@ -949,15 +955,7 @@
   int l, nSocketsAvailable, nCurrentSocket;
   char buf[2];
 
-  if (ftman->m_nDirection == D_RECEIVER)
-  {
-    if (!ftman->StartFileTransferServer())
-    {
-      ftman->PushFileTransferEvent(FT_ERRORxBIND);
-      return NULL;
-    }
-  }
-  else if (ftman->m_nDirection == D_SENDER)
+  if (ftman->m_nDirection == D_SENDER)
   {
     if (!ftman->ConnectToFileServer(ftman->m_nPort))
     {
@@ -965,7 +963,7 @@
       return NULL;
     }
   }
-  else
+  else if (ftman->m_nDirection != D_RECEIVER)
     return NULL;
 
   while (true)
diff -ruN licq.bak/src/icqd-srv.cpp licq/src/icqd-srv.cpp
--- licq.bak/src/icqd-srv.cpp	Sat Nov  9 15:50:01 2002
+++ licq/src/icqd-srv.cpp	Tue Nov 12 09:16:58 2002
@@ -1609,7 +1609,7 @@
     }
     // 0 if not set -> Online
     unsigned long nNewStatus = packet.UnpackUnsignedLongTLV(0x0006);
-    unsigned short nOldStatus = u->Status();
+    unsigned long nOldStatus = u->StatusFull();
       
     if (packet.getTLVLen(0x000a) == 4) {
       unsigned long userIP = packet.UnpackUnsignedLongTLV(0x000a);
@@ -1669,7 +1669,7 @@
         strcpy(szExtraInfo, "");
       szExtraInfo[27] = '\0';
 
-      if (u->StatusFull() != nNewStatus)
+      if (nOldStatus != nNewStatus)
       {
         ChangeUserStatus(u, nNewStatus);
         gLog.Info("%s%s (%ld) changed status: %s (v%01x)%s.\n", L_SRVxSTR, u->GetAlias(),
@@ -1678,6 +1678,8 @@
           gLog.Unknown("%sUnknown status flag for %s (%ld): 0x%08lX\n",
                        L_UNKNOWNxSTR, u->GetAlias(), nUin, (nNewStatus & ICQ_STATUS_FxUNKNOWNxFLAGS));
         nNewStatus &= ICQ_STATUS_FxUNKNOWNxFLAGS;
+        u->SetAutoResponse(NULL);
+        u->SetShowAwayMsg(false);
       }
 
       if (intIP)
@@ -1710,8 +1712,6 @@
         u->SetMode(mode);
         u->SetSendServer(mode == MODE_INDIRECT);
       }
-      u->SetAutoResponse(NULL);
-      u->SetShowAwayMsg(false);
     }
     
     // We are no longer able to differentiate oncoming users from the
@@ -1761,11 +1761,40 @@
 //--------ProcessMessageFam------------------------------------------------
 void CICQDaemon::ProcessMessageFam(CBuffer &packet, unsigned short nSubtype)
 {
-  /*unsigned long Flags =*/ packet.UnpackUnsignedLongBE();
-  /*unsigned short nSubSequence =*/ packet.UnpackUnsignedShortBE();
+  /*unsigned short Flags =*/ packet.UnpackUnsignedShortBE();
+  unsigned long nSubSequence = packet.UnpackUnsignedLongBE();
 
   switch (nSubtype)
   {
+  case ICQ_SNACxMSG_ICBMxERROR:
+  {
+    ICQEvent *e = DoneServerEvent(nSubSequence, EVENT_ERROR);
+    if (e)
+    {
+      ProcessDoneEvent(e);
+
+      unsigned short err = packet.UnpackUnsignedShortBE();
+      switch (err)
+      {
+      case 0x0004:
+        gLog.Warn("%sUser is offline.\n", L_WARNxSTR);
+        break;
+      case 0x0009:
+        gLog.Warn("%sClient does not understand type-2 messages.\n", L_WARNxSTR);
+        break;
+      case 0x000e:
+        gLog.Warn("%sPacket was malformed.\n", L_WARNxSTR);
+        break;
+      default:
+        gLog.Unknown("%sUnknown ICBM error: 0x%04x.\n", L_UNKNOWNxSTR, err);
+      }
+
+    }
+    else
+      gLog.Warn("%sICBM error for unknown event.\n", L_WARNxSTR);
+
+    break;
+  }
   case ICQ_SNACxMSG_SERVERxMESSAGE:
   {
     unsigned long nMsgID[2], nUin;
@@ -2419,7 +2448,7 @@
 									nMsgID);
 			}
 
-			pExtendedAck = new CExtendedAck(false, 0, szMessage);
+			pExtendedAck = new CExtendedAck(true, 0, szMessage);
 			nSubResult = ICQ_TCPxACK_RETURN;
 		}
 
@@ -2524,8 +2553,13 @@
 
             unsigned long nUin = atoi(szName);
             unsigned short nInGroup = gUserManager.GetGroupFromID(nTag);
+            bool isOnList = true;
             if (nUin && !gUserManager.IsOnList(nUin))
+            {
+              isOnList = false;
               AddUserToList(nUin, false); // Don't notify server
+            }
+
             char *szUnicodeAlias = gTranslator.FromUnicode(szNewName);
 
             ICQUser *u = gUserManager.FetchUser(nUin, LOCK_W);
@@ -2571,8 +2605,11 @@
               else
                 u->SetSID(nID);
 
-              // They aren't a new user if we added them to a server list
-              u->SetNewUser(false);
+              if (!isOnList)
+              {
+                // They aren't a new user if we added them to a server list
+                u->SetNewUser(false);
+              }
 
               // Skip the call to AddUserToGroup
               u->AddToGroup(GROUPS_USER, nInGroup);
@@ -2870,7 +2907,10 @@
       sendTM.tm_min = msg.UnpackChar();
       sendTM.tm_sec = 0;
       sendTM.tm_isdst = -1;
-      nTimeSent = mktime(&sendTM);
+
+      ICQOwner *o = gUserManager.FetchOwner(LOCK_R);
+      nTimeSent = mktime(&sendTM) - o->SystemTimeGMTOffset();
+      gUserManager.DropOwner();
       
       // Msg type & flags
       unsigned short nTypeMsg = msg.UnpackUnsignedShort();
diff -ruN licq.bak/src/icqd-tcp.cpp licq/src/icqd-tcp.cpp
--- licq.bak/src/icqd-tcp.cpp	Sun Nov  3 11:25:08 2002
+++ licq/src/icqd-tcp.cpp	Tue Nov 12 09:16:58 2002
@@ -1181,6 +1181,7 @@
     packet >> junkChar;
     if (junkChar != 0x0D) message[j++] = junkChar;
   }
+  message[j] = '\0';
 
   if (nInVersion <= 4)
   {
