diff -aur tvheadend/src/service_mapper.c tvheadend.new/src/service_mapper.c --- tvheadend/src/service_mapper.c 2015-02-04 20:57:28.049427813 +0100 +++ tvheadend.new/src/service_mapper.c 2015-02-04 21:00:05.000000000 +0100 @@ -103,7 +103,6 @@ /* Already mapped (or in progress) */ if (s->s_sm_onqueue) continue; - if (LIST_FIRST(&s->s_channels)) continue; tvhtrace("service_mapper", " not mapped"); service_mapper_stat.total++; service_mapper_stat.ignore++; @@ -278,15 +277,9 @@ goto exit; } - /* Safety check (in-case something has been mapped manually in the interim) */ - if (!bq && LIST_FIRST(&s->s_channels)) { - service_mapper_stat.ignore++; - goto exit; - } - /* Find existing channel */ name = service_get_channel_name(s); - if (!bq && service_mapper_conf.merge_same_name && name && *name) + if (!bq && (LIST_FIRST(&s->s_channels) || service_mapper_conf.merge_same_name) && name && *name) chn = channel_find_by_name(name); if (!chn) { chn = channel_create(NULL, NULL, NULL); @@ -436,6 +429,8 @@ subscription_unsubscribe(sub); if(err) { + service_set_enabled((service_t *)s, 0, s->s_auto); + tvhinfo("service_mapper", "%s: failed [err %s]", s->s_nicename, err); service_mapper_stat.fail++; } else