diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c
index 63e074bb5482da62a87a9768624b876a1e57cb7b..0efc23732ad5ce39656af4d084de125bfa14d090 100644
--- a/res/res_musiconhold.c
+++ b/res/res_musiconhold.c
@@ -1471,12 +1471,6 @@ static int local_ast_moh_start(struct ast_channel *chan, const char *mclass, con
 				if (state && state->class) {
 					/* Class already exist for this channel */
 					ast_log(LOG_NOTICE, "This channel already has a MOH class attached (%s)!\n", state->class->name);
-					if (state->class->realtime && !ast_test_flag(global_flags, MOH_CACHERTCLASSES) && !strcasecmp(mohclass->name, state->class->name)) {
-						/* we found RT class with the same name, seems like we should continue playing existing one */
-						/* XXX This code is impossible to reach */
-						mohclass = mohclass_unref(mohclass, "unreffing potential mohclass (channel already has a class)");
-						mohclass = state->class;
-					}
 				}
 				/* We don't want moh_register to unref the mohclass because we do it at the end of this function as well.
 				 * If we allowed moh_register to unref the mohclass,too, then the count would be off by one. The result would
@@ -1529,7 +1523,7 @@ static int local_ast_moh_start(struct ast_channel *chan, const char *mclass, con
 						if (state->class->realtime && !ast_test_flag(global_flags, MOH_CACHERTCLASSES) && !strcasecmp(mohclass->name, state->class->name)) {
 							/* we found RT class with the same name, seems like we should continue playing existing one */
 							mohclass = mohclass_unref(mohclass, "unreffing potential mohclass (channel already has one)");
-							mohclass = state->class;
+							mohclass = mohclass_ref(state->class, "using existing class from state");
 						}
 					} else {
 						if (ast_pthread_create_background(&mohclass->thread, NULL, monmp3thread, mohclass)) {