diff -pruN libyahoo2-0.7.5/src/libyahoo2.c libyahoo2-mod/src/libyahoo2.c
--- libyahoo2-0.7.5/src/libyahoo2.c	2004-08-09 02:47:59.000000000 +0530
+++ libyahoo2-mod/src/libyahoo2.c	2005-03-09 01:19:52.000000000 +0530
@@ -1348,6 +1348,7 @@ static void yahoo_process_status(struct 
 	int away = 0;
 	int idle = 0;
 	char *msg = NULL;
+	char logoff = FALSE;
 	
 	if(pkt->service == YAHOO_SERVICE_LOGOFF && pkt->status == -1) {
 		YAHOO_CALLBACK(ext_yahoo_login_response)(yd->client_id, YAHOO_LOGIN_DUPL, NULL);
@@ -1373,6 +1374,20 @@ static void yahoo_process_status(struct 
 			NOTICE(("key %d:%s", pair->key, pair->value));
 			break;
 		case 7: /* the current buddy */
+			if(name) 
+			{
+				if (state == YAHOO_STATUS_AVAILABLE) {
+					YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, NULL, 0);
+				} else if (state == YAHOO_STATUS_CUSTOM) {
+					YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, msg, away);
+				} else {
+					YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, NULL, idle);
+				}
+
+				/* reset state variables for next record */
+				name = msg = NULL;
+				state = away = idle = 0;
+			}
 			name = pair->value;
 			break;
 		case 10: /* state */
@@ -1394,15 +1409,8 @@ static void yahoo_process_status(struct 
 			break;
 		case 13: /* in pager? */
 			if (pkt->service == YAHOO_SERVICE_LOGOFF || strtol(pair->value, NULL, 10) == 0) {
+				logoff = TRUE;
 				YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, YAHOO_STATUS_OFFLINE, NULL, 1);
-				break;
-			}
-			if (state == YAHOO_STATUS_AVAILABLE) {
-				YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, NULL, 0);
-			} else if (state == YAHOO_STATUS_CUSTOM) {
-				YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, msg, away);
-			} else {
-				YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, NULL, idle);
 			}
 
 			break;
@@ -1418,6 +1426,16 @@ static void yahoo_process_status(struct 
 			break;
 		}
 	}
+
+	if(name && logoff == FALSE) {
+		if (state == YAHOO_STATUS_AVAILABLE) {
+			YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, NULL, 0);
+		} else if (state == YAHOO_STATUS_CUSTOM) {
+			YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, msg, away);
+		} else {
+			YAHOO_CALLBACK(ext_yahoo_status_changed)(yd->client_id, name, state, NULL, idle);
+		}
+	}
 }
 
 static void yahoo_process_list(struct yahoo_input_data *yid, struct yahoo_packet *pkt)
