diff --git a/sflphone-gtk/src/menus.c b/sflphone-gtk/src/menus.c
index e6a6e7ea07964fea75f162bf7be6de2113a62aa4..683667cc643eb1822320a4673ea5f4447fd6fc0a 100644
--- a/sflphone-gtk/src/menus.c
+++ b/sflphone-gtk/src/menus.c
@@ -920,20 +920,26 @@ show_popup_menu_history(GtkWidget *my_widget, GdkEventButton *event)
       button, event_time);
 }
 
+static void edit_number_cb (gpointer user_data) {
+
+    show_edit_number ((call_t*)user_data);
+}
+
+
     void
 show_popup_menu_contacts(GtkWidget *my_widget, GdkEventButton *event)
 {
 
   gboolean pickup = FALSE;
-  gboolean remove = FALSE;
   gboolean accounts = FALSE;
+  gboolean edit = FALSE;
 
   call_t * selectedCall = calltab_get_selected_call( contacts );
   if (selectedCall)
   {
-    remove = TRUE;
     pickup = TRUE;
     accounts = TRUE;
+    edit = TRUE;
   }
 
   GtkWidget *menu;
@@ -956,6 +962,14 @@ show_popup_menu_contacts(GtkWidget *my_widget, GdkEventButton *event)
     gtk_widget_show (menu_items);
   }
 
+    if (edit)
+    {
+        menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_EDIT, get_accel_group());
+        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items);
+        g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (edit_number_cb), selectedCall);
+        gtk_widget_show (menu_items);
+    }
+
   if(accounts)
   {
       add_registered_accounts_to_menu (menu);
@@ -1010,3 +1024,40 @@ void add_registered_accounts_to_menu (GtkWidget *menu) {
     }
 
 }
+
+
+static void change_number_cb (gpointer userdata) {
+
+    gtk_widget_destroy (GTK_WIDGET (userdata));
+}
+
+void show_edit_number (call_t *call) {
+
+    GtkDialog * dialog;
+    GtkWidget * num, *ok, *hbox;
+    
+    dialog = GTK_DIALOG (gtk_dialog_new());
+
+    // Set window properties
+    gtk_window_set_default_size(GTK_WINDOW(dialog), 200, 20);
+    gtk_window_set_title(GTK_WINDOW(dialog), _("Edit number"));
+    
+    hbox = gtk_hbox_new (FALSE, 0);
+    gtk_box_pack_start(GTK_BOX (dialog->vbox), hbox, TRUE, TRUE, 0);
+
+    num = gtk_entry_new ();
+    gtk_entry_set_text(GTK_ENTRY(num), "514-384-8557");
+    gtk_box_pack_start(GTK_BOX (hbox), num, TRUE, TRUE, 0);
+    
+    ok = gtk_button_new_from_stock (GTK_STOCK_OK);
+    gtk_box_pack_start(GTK_BOX (hbox), ok, TRUE, TRUE, 0);
+    g_signal_connect(G_OBJECT (ok), "clicked", G_CALLBACK (change_number_cb), dialog);
+
+    gtk_widget_show_all (dialog->vbox);
+
+    gtk_dialog_run(dialog);
+    gtk_widget_destroy(GTK_WIDGET(dialog));
+
+}
+
+
diff --git a/src/sipvoiplink.cpp b/src/sipvoiplink.cpp
index 07daedf94abdba51246f205247651c8c2942b8e5..7f6a88ff6d1d44fd4e17237ee721d055b4eb9d8b 100644
--- a/src/sipvoiplink.cpp
+++ b/src/sipvoiplink.cpp
@@ -1261,6 +1261,43 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
     // Private functions
     ///////////////////////////////////////////////////////////////////////////////
 
+    pj_status_t SIPVoIPLink::enable_dns_srv_resolver (pjsip_endpoint *endpt, pj_dns_resolver **p_resv) {
+
+        pj_status_t status;
+        pj_dns_resolver *resv;
+        pj_str_t servers[1];
+        pj_uint16_t port = 5353;
+        pjsip_resolver_t *res;
+
+        // Create the DNS resolver instance 
+        status = pjsip_endpt_create_resolver (endpt, &resv);
+        if (status != PJ_SUCCESS) {
+            _debug ("Error creating the DNS resolver instance\n");
+            return status;
+        }
+
+        // Update the name servers for the DNS resolver
+        servers[0] = pj_str((char*)"savoirfairelinux.com");
+        status = pj_dns_resolver_set_ns (resv, 1, servers, NULL);
+        if (status != PJ_SUCCESS){
+            _debug ("Error updating the name servers for the DNS resolver\n");
+            return status;
+        }
+
+        // Set the DNS resolver instance of the SIP resolver engine
+        status = pjsip_endpt_set_resolver (endpt, resv);
+        if (status != PJ_SUCCESS){
+            _debug ("Error setting the DNS resolver instance of the SIP resolver engine\n");
+            return status;
+        }
+
+        *p_resv = resv;
+
+        return PJ_SUCCESS;
+    
+    }
+
+
     bool SIPVoIPLink::pjsip_init()
     {
         pj_status_t status;
@@ -1271,6 +1308,7 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
         std::string name_mod;
         bool useStun;
         validStunServer = true;
+        pj_dns_resolver *p_resv; 
 
         name_mod = "sflphone";
 
@@ -1358,6 +1396,9 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam
 
         _debug("UserAgent: SIP Init -- listening on port %d\n", _localExternPort);
 
+        status = enable_dns_srv_resolver (_endpt, &p_resv);
+        PJ_ASSERT_RETURN( status == PJ_SUCCESS, 1 );
+
         // Initialize transaction layer
         status = pjsip_tsx_layer_init_module(_endpt);
         PJ_ASSERT_RETURN( status == PJ_SUCCESS, 1 );
diff --git a/src/sipvoiplink.h b/src/sipvoiplink.h
index 51bd9a01378b6a6f3dcf1ce90a664736927aba6d..5536f9936f4773ba14d6a0218436d80f9d955c2f 100644
--- a/src/sipvoiplink.h
+++ b/src/sipvoiplink.h
@@ -42,7 +42,7 @@ class AudioRtp;
 #define RANDOM_SIP_PORT   rand() % 64000 + 1024
 
 // To set the verbosity. From 0 (min) to 6 (max)
-#define PJ_LOG_LEVEL 1
+#define PJ_LOG_LEVEL 6
 
 /**
  * @file sipvoiplink.h
@@ -325,6 +325,15 @@ class SIPVoIPLink : public VoIPLink
         /* The singleton instance */
         static SIPVoIPLink* _instance;
 
+        /**
+         * Enable the SIP SRV resolver
+         * @param endpt     The SIP endpoint
+         * @param p_resv    Pointer to receive The DNS resolver instance
+         *
+         * @return pj_status_t  PJ_SUCCESS on success
+         */
+        pj_status_t enable_dns_srv_resolver (pjsip_endpoint *endpt, pj_dns_resolver ** p_resv);
+
         void busy_sleep(unsigned msec);
 
         /**