Index: protocols/jabber/jabber.c
===================================================================
--- protocols/jabber/jabber.c	(revision e14b47b826594772e4f3d0dbec1bf17153aa92b1)
+++ protocols/jabber/jabber.c	(revision ce199b726735374aca84b2111bb19ec103478ebc)
@@ -61,5 +61,5 @@
 	s = set_add( &acc->set, "activity_timeout", "600", set_eval_int, acc );
 	
-	s = set_add( &acc->set, "oauth", "false", set_eval_bool, acc );
+	s = set_add( &acc->set, "oauth", "false", set_eval_oauth, acc );
 
 	g_snprintf( str, sizeof( str ), "%d", jabber_port_list[0] );
@@ -76,4 +76,7 @@
 	s = set_add( &acc->set, "resource_select", "activity", NULL, acc );
 	
+	s = set_add( &acc->set, "sasl", "true", set_eval_bool, acc );
+	s->flags |= ACC_SET_OFFLINE_ONLY | SET_HIDDEN_DEFAULT;
+	
 	s = set_add( &acc->set, "server", NULL, set_eval_account, acc );
 	s->flags |= ACC_SET_NOSAVE | ACC_SET_OFFLINE_ONLY | SET_NULL_OK;
@@ -84,7 +87,4 @@
 	s = set_add( &acc->set, "tls", "try", set_eval_tls, acc );
 	s->flags |= ACC_SET_OFFLINE_ONLY;
-	
-	s = set_add( &acc->set, "sasl", "true", set_eval_bool, acc );
-	s->flags |= ACC_SET_OFFLINE_ONLY | SET_HIDDEN_DEFAULT;
 
 	s = set_add( &acc->set, "user_agent", "BitlBee", NULL, acc );
Index: protocols/twitter/twitter.c
===================================================================
--- protocols/twitter/twitter.c	(revision e14b47b826594772e4f3d0dbec1bf17153aa92b1)
+++ protocols/twitter/twitter.c	(revision ce199b726735374aca84b2111bb19ec103478ebc)
@@ -240,10 +240,10 @@
 	s->flags |= ACC_SET_OFFLINE_ONLY;
 
+	s = set_add(&acc->set, "oauth", def_oauth, set_eval_oauth, acc);
+
 	s = set_add(&acc->set, "show_ids", "false", set_eval_bool, acc);
 	s->flags |= ACC_SET_OFFLINE_ONLY;
 
 	s = set_add(&acc->set, "show_old_mentions", "true", set_eval_bool, acc);
-
-	s = set_add(&acc->set, "oauth", def_oauth, set_eval_bool, acc);
 }
 
Index: root_commands.c
===================================================================
--- root_commands.c	(revision e14b47b826594772e4f3d0dbec1bf17153aa92b1)
+++ root_commands.c	(revision ce199b726735374aca84b2111bb19ec103478ebc)
@@ -443,7 +443,25 @@
 		}
 		
-		irc_rootmsg( irc, "Account successfully added with tag %s%s",
-		             a->tag, cmd[4] ? "" :
-		             ", now use /OPER to enter the password" );
+		irc_rootmsg( irc, "Account successfully added with tag %s", a->tag );
+		
+		if( cmd[4] == NULL )
+		{
+			set_t *oauth = set_find( &a->set, "oauth" );
+			if( oauth && bool2int( set_value( oauth ) ) )
+			{
+				*a->pass = '\0';
+				irc_rootmsg( irc, "No need to enter a password for this "
+				             "account since it's using OAuth" );
+			}
+			else
+			{
+				irc_rootmsg( irc, "You can now use the /OPER command to "
+				             "enter the password" );
+				if( oauth )
+					irc_rootmsg( irc, "Alternatively, enable oauth if "
+					             "the account supports it: account %s "
+					             "set oauth on", a->tag );
+			}
+		}
 		
 		return;
Index: set.c
===================================================================
--- set.c	(revision e14b47b826594772e4f3d0dbec1bf17153aa92b1)
+++ set.c	(revision ce199b726735374aca84b2111bb19ec103478ebc)
@@ -85,5 +85,5 @@
 		return NULL;
 	
-	return s->value ? s->value : s->def;
+	return set_value( s );
 }
 
@@ -250,25 +250,11 @@
 }
 
-/*
-char *set_eval_ops( set_t *set, char *value )
-{
-	irc_t *irc = set->data;
-	
-	if( g_strcasecmp( value, "user" ) == 0 )
-		irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
-		                                              irc->channel, "+o-o", irc->nick, irc->mynick );
-	else if( g_strcasecmp( value, "root" ) == 0 )
-		irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
-		                                              irc->channel, "-o+o", irc->nick, irc->mynick );
-	else if( g_strcasecmp( value, "both" ) == 0 )
-		irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
-		                                              irc->channel, "+oo", irc->nick, irc->mynick );
-	else if( g_strcasecmp( value, "none" ) == 0 )
-		irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
-		                                              irc->channel, "-oo", irc->nick, irc->mynick );
-	else
-		return SET_INVALID;
-	
-	return value;
-}
-*/
+char *set_eval_oauth( set_t *set, char *value )
+{
+	account_t *acc = set->data;
+	
+	if( bool2int( value ) && strcmp( acc->pass, PASSWORD_PENDING ) == 0 )
+		*acc->pass = '\0';
+	
+	return set_eval_bool( set, value );
+}
Index: set.h
===================================================================
--- set.h	(revision e14b47b826594772e4f3d0dbec1bf17153aa92b1)
+++ set.h	(revision ce199b726735374aca84b2111bb19ec103478ebc)
@@ -77,4 +77,6 @@
 } set_t;
 
+#define set_value( set ) ((set)->value) ? ((set)->value) : ((set)->def)
+
 /* Should be pretty clear. */
 set_t *set_add( set_t **head, const char *key, const char *def, set_eval eval, void *data );
@@ -111,5 +113,5 @@
 /* Some not very generic evaluators that really shouldn't be here... */
 char *set_eval_to_char( set_t *set, char *value );
-char *set_eval_ops( set_t *set, char *value );
+char *set_eval_oauth( set_t *set, char *value );
 
 #endif /* __SET_H__ */
