diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c
index 344f0e231ff66a614d6fbf07256675b5cf19304b..74bcb587c129e0e4cd18d652cb7b0a7263cb80ad 100644
--- a/res/res_musiconhold.c
+++ b/res/res_musiconhold.c
@@ -414,7 +414,7 @@ static int spawn_mp3(struct mohclass *class)
 		files = 1;
 	} else {
 		dir = opendir(class->dir);
-		if (!dir && !strstr(class->dir,"http://") && !strstr(class->dir,"HTTP://")) {
+		if (!dir && !strncasecmp(class->dir, "http://", 7)) {
 			ast_log(LOG_WARNING, "%s is not a valid directory\n", class->dir);
 			return -1;
 		}
@@ -457,8 +457,7 @@ static int spawn_mp3(struct mohclass *class)
 		}
 	}
 
-
-	if (strstr(class->dir,"http://") || strstr(class->dir,"HTTP://")) {
+	if (!strncasecmp(class->dir, "http://", 7)) {
 		ast_copy_string(fns[files], class->dir, sizeof(fns[files]));
 		argv[argc++] = fns[files];
 		files++;
@@ -489,7 +488,7 @@ static int spawn_mp3(struct mohclass *class)
 		close(fds[1]);
 		return -1;
 	}
-	if (time(NULL) - class->start < respawn_time) {
+	if (!strncasecmp(class->dir, "http://", 7) && time(NULL) - class->start < respawn_time) {
 		sleep(respawn_time - (time(NULL) - class->start));
 	}
 
@@ -840,8 +839,9 @@ static int moh_generate(struct ast_channel *chan, void *data, int len, int sampl
 	short buf[1280 + AST_FRIENDLY_OFFSET / 2];
 	int res;
 
-	if (!moh->parent->pid)
+	if (!moh->parent->pid && moh->parent->inuse == 0) {
 		return -1;
+	}
 
 	len = ast_codec_get_len(moh->parent->format, samples);