diff --git a/gtk/setupwizard.c b/gtk/setupwizard.c
index b03b1be2d28cb6b75c0ff844aee55ec865ac920f..c972a56b87632c57167bc0bf7ff4bcce396506f6 100644
--- a/gtk/setupwizard.c
+++ b/gtk/setupwizard.c
@@ -221,13 +221,21 @@ static void account_password_changed(GtkEntry *entry, GtkWidget *w) {
 	GtkImage* isPasswordOk = GTK_IMAGE(g_object_get_data(G_OBJECT(w),"passwordOk"));
 	GtkEntry* password_confirm = GTK_ENTRY(g_object_get_data(G_OBJECT(w),"password_confirm"));
 	GtkWidget *assistant=gtk_widget_get_toplevel(w);
+	GtkLabel* passwordError = GTK_LABEL(g_object_get_data(G_OBJECT(w),"error"));
 
 	if (gtk_entry_get_text_length(password) >= PASSWORD_MIN_SIZE &&
 	g_ascii_strcasecmp(gtk_entry_get_text(password), gtk_entry_get_text(password_confirm)) == 0) {
 		is_password_correct = 1;
 		gtk_image_set_from_pixbuf(isPasswordOk, ok);
+		gtk_label_set_text(passwordError, "");
 	}
 	else {
+		if (gtk_entry_get_text_length(password) < PASSWORD_MIN_SIZE) {
+			gtk_label_set_text(passwordError, "Password too short !");
+		}
+		else if (!g_ascii_strcasecmp(gtk_entry_get_text(password), gtk_entry_get_text(password_confirm)) == 0) {
+			gtk_label_set_text(passwordError, "Passwords don't match !");
+		}
 		is_password_correct = 0;
 		gtk_image_set_from_pixbuf(isPasswordOk, notok);
 	}
@@ -241,15 +249,27 @@ static void account_username_changed(GtkEntry *entry, GtkWidget *w) {
 	GtkWidget *assistant=gtk_widget_get_toplevel(w);
 	GtkEntry* username = GTK_ENTRY(g_object_get_data(G_OBJECT(w),"username"));
 	GtkImage* isUsernameOk = GTK_IMAGE(g_object_get_data(G_OBJECT(w),"usernameOk"));
+	GtkLabel* usernameError = GTK_LABEL(g_object_get_data(G_OBJECT(w),"error"));
 
 	LinphoneAccountCreator *creator=linphone_gtk_assistant_get_creator(assistant);
 	linphone_account_creator_set_username(creator, gtk_entry_get_text(username));
-	if (g_regex_match_simple("^[a-zA-Z]+[a-zA-Z0-9.\\-_]{2,}$", gtk_entry_get_text(username), 0, 0)
-	&& linphone_account_creator_test_existence(creator) == 0) {
+	int account_existing = linphone_account_creator_test_existence(creator);
+	if (g_regex_match_simple("^[a-zA-Z]+[a-zA-Z0-9.\\-_]{4,}$", gtk_entry_get_text(username), 0, 0)
+	&& account_existing == 0) {
 		is_username_available = 1;
 		gtk_image_set_from_pixbuf(isUsernameOk, ok);
+		gtk_label_set_text(usernameError, "");
 	}
 	else {
+		if (account_existing == 1) {
+			gtk_label_set_text(usernameError, "Username already in use !");
+		}
+		else if (gtk_entry_get_text_length(username) < LOGIN_MIN_SIZE) {
+			gtk_label_set_text(usernameError, "Username too short");
+		}
+		else if (!g_regex_match_simple("^[a-zA-Z]+[a-zA-Z0-9.\\-_]{4,}$", gtk_entry_get_text(username), 0, 0)) {
+			gtk_label_set_text(usernameError, "Unauthorized username");
+		}
 		is_username_available = 0;
 		gtk_image_set_from_pixbuf(isUsernameOk, notok);
 	}
@@ -277,6 +297,11 @@ static GtkWidget *create_account_information_page() {
 	gtk_entry_set_visibility(GTK_ENTRY(entryPassword2), FALSE);
 	GtkWidget *checkNewsletter=gtk_check_button_new_with_label("Keep me informed with linphone updates");
 
+	GdkColor color;
+	gdk_color_parse ("red", &color);
+	GtkWidget *labelError=gtk_label_new(NULL);
+	gtk_widget_modify_fg(labelError, GTK_STATE_NORMAL, &color);
+
 	GtkWidget *passwordVbox1=gtk_vbox_new(FALSE,2);
 	GtkWidget *passwordVbox2=gtk_vbox_new(FALSE,2);
 	gtk_box_pack_start (GTK_BOX (passwordVbox1), labelPassword, TRUE, FALSE, 2);
@@ -294,7 +319,8 @@ static GtkWidget *create_account_information_page() {
 	gtk_table_attach_defaults(GTK_TABLE(vbox), passwordVbox1, 0, 1, 3, 4);
 	gtk_table_attach_defaults(GTK_TABLE(vbox), passwordVbox2, 1, 2, 3, 4);
 	gtk_table_attach_defaults(GTK_TABLE(vbox), isPasswordOk, 2, 3, 3, 4);
-	gtk_table_attach_defaults(GTK_TABLE(vbox), checkNewsletter, 0, 3, 5, 6);
+	gtk_table_attach_defaults(GTK_TABLE(vbox), labelError, 1, 2, 5, 6);
+	gtk_table_attach_defaults(GTK_TABLE(vbox), checkNewsletter, 0, 3, 6, 7);
 
 	gtk_widget_show_all(vbox);
 	g_object_set_data(G_OBJECT(vbox),"username",entryUsername);
@@ -305,6 +331,7 @@ static GtkWidget *create_account_information_page() {
 	g_object_set_data(G_OBJECT(vbox),"emailOk",isEmailOk);
 	g_object_set_data(G_OBJECT(vbox),"password_confirm",entryPassword2);
 	g_object_set_data(G_OBJECT(vbox),"newsletter",checkNewsletter);
+	g_object_set_data(G_OBJECT(vbox),"error",labelError);
 	g_signal_connect(G_OBJECT(entryUsername),"changed",(GCallback)account_username_changed,vbox);
 	g_signal_connect(G_OBJECT(entryPassword),"changed",(GCallback)account_password_changed,vbox);
 	g_signal_connect(G_OBJECT(entryEmail),"changed",(GCallback)account_email_changed,vbox);