Hi Timo, > +static void clcc_poll_dialing_cb(gboolean ok, GAtResult *result, > + gpointer user_data) > +{ > + struct ofono_voicecall *vc = user_data; > + struct voicecall_data *vd = ofono_voicecall_get_data(vc); > + GSList *calls, *dialing; > + > + if (!ok) > + return; > + > + calls = at_util_parse_clcc(result); > + dialing = find_dialing(calls); > + > + if (dialing == NULL) { > + if (vd->clcc_source) > + g_source_remove(vd->clcc_source); > + > + vd->clcc_source = g_timeout_add(POLL_CLCC_DELAY, > + poll_clcc, vc); > + return; > + } > + > + clcc_poll_cb(ok, result, user_data); I'm not entirely happy that we parse the CLCC list twice here, once in this function and once in the clcc_poll_cb. Would setting a flag in ciev_callsetup_notify and checking it in clcc_poll_cb be a better idea? e.g. if (num_active > 1 || num_held > 1) vd->clcc_source = g_timeout_add(POLL_CLCC_INTERVAL, poll_clcc, vc); would go into something like: poll_again = num_active > 1 || num_held > 1; if (vd->flags & FLAG_NOKIA_N9_BROKEN_DIAL) { poll_again = TRUE; vd->flags &= FLAG_NOKIA_N9_BROKEN_DIAL; } if (poll_again) .... Regards, -Denis