These modifications were implementated for dialogs having PRACK and UPDATE

--- a/modules/dialog/dlg_handlers.c    Fri Jun 14 13:45:41 2013 +0200
+++ b/modules/dialog/dlg_handlers.c    Fri Jun 14 13:55:24 2013 +0200
@@ -1249,16 +1249,18 @@
     }
 
     if ( (event==DLG_EVENT_REQ || event==DLG_EVENT_REQACK)
-    && new_state==DLG_STATE_CONFIRMED) {
+         && (new_state==DLG_STATE_CONFIRMED || new_state==DLG_STATE_EARLY)) {
 
         timeout = get_dlg_timeout(req);
         if (timeout!=default_timeout) {
             dlg->lifetime = timeout;
         }
-        if (update_dlg_timer( &dlg->tl, dlg->lifetime )==-1) {
+        if (new_state!=DLG_STATE_EARLY) {
+          if (update_dlg_timer( &dlg->tl, dlg->lifetime )==-1) {
             LM_ERR("failed to update dialog lifetime\n");
+          }
         }
-        if (update_cseqs(dlg, req, dir)!=0) {
+        if ((event != DLG_EVENT_REQACK) && (update_cseqs(dlg, req, dir)!=0)) {
             LM_ERR("cseqs update failed\n");
         } else {
             dlg->dflags |= DLG_FLAG_CHANGED;

--- a/modules/dialog/dlg_hash.c    Fri Jun 14 13:45:41 2013 +0200
+++ b/modules/dialog/dlg_hash.c    Fri Jun 14 13:55:24 2013 +0200
@@ -883,6 +883,7 @@
             break;
         case DLG_EVENT_REQACK:
             switch (dlg->state) {
+                         case DLG_STATE_EARLY:
                 case DLG_STATE_CONFIRMED_NA:
                     dlg->state = DLG_STATE_CONFIRMED;
                     break;