--- psi-git/src/contactview.cpp	2009-01-16 16:23:42.546875000 +0100
+++ psi/src/contactview.cpp	2009-01-16 23:36:06.578125000 +0100
@@ -62,6 +62,7 @@
 #include "bookmarkmanager.h"
 #include "groupchatdlg.h"
 #include "tabdlg.h"
+#include "statusdlg.h"
 
 static inline int rankStatus(int status) 
 {
@@ -1090,6 +1091,19 @@
 
 			d->cv->qa_ren->addTo(&pm);
 			pm.insertSeparator();
+// mpk - send status to group; mass auth			
+			pm.insertItem(IconsetFactory::icon("psiplus/action_direct_presence").icon(), tr("Send Status to Group"),9);
+			if(!online)
+				pm.setItemEnabled(9,false);
+			QMenu *authm = new QMenu(&pm);
+			authm->insertItem(tr("Resend Authorization to Group"),6);
+			authm->insertItem(tr("Request Authorization from Group"),7);
+			authm->insertItem(tr("Remove Authorization from Group"),8);
+			pm.insertItem(IconsetFactory::iconPixmap("psi/register"), tr("Authorization"), authm, 5);
+			if(!online)
+				pm.setItemEnabled(5,false);
+			pm.insertSeparator();	
+// END send status to group; mass auth	
 			pm.insertItem(IconsetFactory::icon("psi/remove").icon(), tr("Remove Group"), 2);
 			pm.insertItem(IconsetFactory::icon("psi/remove").icon(), tr("Remove Group and Contacts"), 3);
 		}
@@ -1168,6 +1182,31 @@
                         	if (gcDlg) gcDlg->close();
 			}
 		}
+// mpk - send status to group; mass auth
+		else if(x == 6 && online) {
+			QList<XMPP::Jid> list = contactListFromGroup(i->groupName());
+			for(QList<Jid>::Iterator it = list.begin(); it != list.end(); ++it)
+				actionAuth(*it);
+		}
+		else if(x == 7 && online) {
+			QList<XMPP::Jid> list = contactListFromGroup(i->groupName());
+			for(QList<Jid>::Iterator it = list.begin(); it != list.end(); ++it)
+				actionAuthRequest(*it);
+		}
+		else if(x == 8 && online) {
+			QList<XMPP::Jid> list = contactListFromGroup(i->groupName());
+			for(QList<Jid>::Iterator it = list.begin(); it != list.end(); ++it)
+				actionAuthRemove(*it);
+		}
+		else if(x == 9 && online) {
+			StatusSetDlg *w = new StatusSetDlg(d->pa->psi(), d->pa->status());
+			QList<XMPP::Jid> list = contactListFromGroup(i->groupName());
+			w->setJidList(list);
+			connect(w, SIGNAL(setJidList(const QList<XMPP::Jid> &, const Status &)), SLOT(setStatusFromDialog(const QList<XMPP::Jid> &, const Status &)));
+			w->show();
+		}	
+// END mpk - send status to group; mass auth
+		
 	}
 	else if(i->type() == ContactViewItem::Contact) {
 		bool self = false;
@@ -1447,6 +1486,10 @@
 				pm.insertItem(IconsetFactory::icon("psi/gpg-no").icon(), tr("Unassign Open&PGP key"), 22);
 		}
 
+// mpk - send status to contact
+		pm.insertItem(IconsetFactory::icon("psiplus/action_direct_presence").icon(), tr("Sen&d Status"), 29);
+// END mpk - send status to contact
+
 		d->cv->qa_vcard->addTo( &pm );
 
 		if(!isPrivate) {
@@ -1456,6 +1499,7 @@
 
 		if (isMuc && !isPrivate) {
 			GCMainDlg *gc = psiAccount()->findDialog<GCMainDlg*>(u->jid().bare());
+			pm.insertItem(IconsetFactory::icon("psiplus/action_direct_presence").icon(), tr("Sen&d Status"), 29);
 			if(gc && !gc->isTabHidden())
 				pm.insertItem(IconsetFactory::icon("psi/arrowRight").icon(), tr("Hide"), 26);
 			else pm.insertItem(IconsetFactory::icon("psi/arrowLeft").icon(), tr("Show"), 27);
@@ -1598,6 +1642,14 @@
 			GCMainDlg *gc = psiAccount()->findDialog<GCMainDlg*>(u->jid().bare());
         		if (gc) gc->close();
 		}
+// mpk - send status to contact
+		else if (x == 29 && online) {
+			StatusSetDlg *w = new StatusSetDlg(d->pa->psi(), d->pa->status());
+			w->setJid(u->jid());
+			connect(w, SIGNAL(setJid(const Jid &, const Status &)), SLOT(setStatusFromDialog(const Jid &, const Status &)));
+			w->show();
+		}	
+// END mpk - send status to contact
 		else if(x >= base_sendto && x < base_hidden) {
 			int n = x - base_sendto;
 #ifndef WHITEBOARDING
@@ -1695,6 +1747,26 @@
 		}
 	}
 }
+
+// mpk - send status to group; mass auth
+void ContactProfile::setStatusFromDialog(const Jid &j, const Status &s)
+{
+	JT_Presence *p = new JT_Presence(d->pa->client()->rootTask());
+	p->pres(j,s);
+	p->go(true);
+}
+
+void ContactProfile::setStatusFromDialog(const QList<XMPP::Jid> &j, const Status &s)
+{
+	for(QList<Jid>::const_iterator it = j.begin(); it != j.end(); ++it)
+	{
+		JT_Presence *p = new JT_Presence(d->pa->client()->rootTask());
+		p->pres(*it,s);
+		p->go(true);
+	}	
+}
+// END mpk - send status to group; mass auth
+
 
 void ContactProfile::scActionDefault(ContactViewItem *i)
 {
--- psi-git/src/contactview.h	2009-01-16 13:55:15.218750000 +0100
+++ psi/src/contactview.h	2009-01-16 23:22:42.390625000 +0100
@@ -30,6 +30,7 @@
 #include <QDropEvent>
 
 #include "xmpp_clientstream.h"
+#include "xmpp_tasks.h"
 
 class IconAction;
 class UserListItem;
@@ -130,6 +131,11 @@
 
 private slots:
 	void updateGroups();
+
+// mpk - send status to group; mass auth
+public slots:
+	void setStatusFromDialog(const Jid &j, const Status &s);
+	void setStatusFromDialog(const QList<XMPP::Jid> &j, const Status &s);	
 
 public:
 	class Entry;
--- psi-git/src/statusdlg.h	2009-01-16 11:44:34.250000000 +0100
+++ psi/src/statusdlg.h	2009-01-16 23:10:25.421875000 +0100
@@ -22,6 +22,11 @@
 #define STATUSDLG_H
 
 #include <QDialog>
+// mpk - send status to group; mass auth
+#include <QList>
+#include "xmpp_jid.h"
+#include "contactview.h"
+// END mpk - send status to group; mass auth
 
 class PsiCon;
 class PsiAccount;
@@ -33,6 +38,8 @@
 
 using namespace XMPP;
 
+enum setStatusEnum{setStatusForAccount = 0, setStatusForJid, setStatusForJidList};
+
 class StatusShowDlg : public QDialog
 {
 	Q_OBJECT
@@ -47,10 +54,16 @@
 	StatusSetDlg(PsiCon *, const Status &);
 	StatusSetDlg(PsiAccount *, const Status &);
 	~StatusSetDlg();
+// mpk - send status to group; mass auth	
+	void setJid(const Jid &);
+	void setJidList(const QList<XMPP::Jid> &);	
 
 signals:
 	void set(const XMPP::Status &, bool withPriority);
 	void cancelled();
+// mpk - send status to group; mass auth	
+	void setJid(const Jid &, const Status &);
+	void setJidList(const QList<XMPP::Jid> &, const Status &);
 
 private slots:
 	void doButton();
--- psi-git/src/statusdlg.cpp	2009-01-16 11:44:34.234375000 +0100
+++ psi/src/statusdlg.cpp	2009-01-16 23:10:26.171875000 +0100
@@ -91,6 +91,11 @@
 	QComboBox *cb_preset;
 	QLineEdit *le_priority;
 	QCheckBox *save;
+// mpk - send status to group; mass auth
+	Jid j;
+	QList<XMPP::Jid> jl;
+	setStatusEnum setStatusMode;
+// END mpk - send status to group; mass auth
 };
 
 StatusSetDlg::StatusSetDlg(PsiCon *psi, const Status &s)
@@ -104,6 +109,7 @@
 	d->s = s;
 
 	setWindowTitle(CAP(tr("Set Status: All accounts")));
+	d->setStatusMode = setStatusForAccount; // mpk - send status to group; mass auth
 	init();
 }
 
@@ -118,9 +124,24 @@
 	d->s = s;
 
 	setWindowTitle(CAP(tr("Set Status: %1").arg(d->pa->name())));
+	d->setStatusMode = setStatusForAccount; // mpk - send status to group; mass auth
 	init();
 }
 
+// mpk - send status to group; mass auth
+void StatusSetDlg::setJid(const Jid &j)
+{
+	d->j = j;
+	d->setStatusMode = setStatusForJid;
+}
+
+void StatusSetDlg::setJidList(const QList<XMPP::Jid> &jl)
+{
+	d->jl = jl;
+	d->setStatusMode = setStatusForJidList;
+}
+// END mpk - send status to group; mass auth
+
 void StatusSetDlg::init()
 {
 	int type = makeSTATUS(d->s);
@@ -244,10 +265,35 @@
 	QString str = d->te->text();
 
  	if (d->le_priority->text().isEmpty())
- 		emit set(makeStatus(type, str), false);
+// mpk - send status to group; mass auth
+ 		//emit set(makeStatus(type, str), false);
+ 		switch(d->setStatusMode) {
+			case setStatusForAccount:
+				emit set(makeStatus(type,str), false);
+				break;
+			case setStatusForJid:
+				emit setJid(d->j, makeStatus(type,str));
+				break;
+			case setStatusForJidList:
+				emit setJidList(d->jl, makeStatus(type,str));
+				break;
+		}
+// END mpk - send status to group; mass auth
  	else 
- 		emit set(makeStatus(type, str, d->le_priority->text().toInt()), true);
-
+// mpk - send status to group; mass auth
+ 		//emit set(makeStatus(type, str, d->le_priority->text().toInt()), true);
+		switch(d->setStatusMode) {
+			case setStatusForAccount:
+				emit set(makeStatus(type,str, d->le_priority->text().toInt()), true);
+				break;
+			case setStatusForJid:
+				emit setJid(d->j, makeStatus(type,str, d->le_priority->text().toInt()));
+				break;
+			case setStatusForJidList:
+				emit setJidList(d->jl, makeStatus(type,str, d->le_priority->text().toInt()));
+				break;
+		}
+// END mpk - send status to group; mass auth
 	close();
 }
 
