--- squeezelite-1.8.orig/decode.c	2015-12-14 11:46:13.631537126 +0000
+++ squeezelite-1.8/decode.c	2015-12-14 11:45:23.856634387 +0000
@@ -119,10 +119,33 @@
 	return 0;
 }
 
+static void sort_codecs(int pry, struct codec* ptr) {
+	static int priority[MAX_CODECS];
+	int i, tpry;
+	struct codec* tptr;
+
+	for (i = 0; i < MAX_CODECS; i++) {
+		if (!codecs[i]) {
+			codecs[i] = ptr;
+			priority[i] = pry;
+			return;
+		}
+		if (pry < priority[i]) {
+			tptr = codecs[i];
+			codecs[i] = ptr;
+			ptr = tptr;
+			tpry = priority[i];
+			priority[i] = pry;
+			pry = tpry;
+		}
+	}
+}
+
 static thread_type thread;
 
 void decode_init(log_level level, const char *include_codecs, const char *exclude_codecs) {
 	int i;
+	char* o;
 
 	loglevel = level;
 
@@ -132,24 +155,33 @@
 	// dsf,dff,alc,wma,wmap,wmal,aac,spt,ogg,ogf,flc,aif,pcm,mp3
 	i = 0;
 #if DSD
-	if (!strstr(exclude_codecs, "dsd")  && (!include_codecs || strstr(include_codecs, "dsd")))  codecs[i++] = register_dsd();
+	if (!strstr(exclude_codecs, "dsd")	&& (!include_codecs || (o = strstr(include_codecs, "dsd"))))
+		sort_codecs((include_codecs ? o - include_codecs : i), register_dsd());
 #endif
 #if FFMPEG
-	if (!strstr(exclude_codecs, "alac") && (!include_codecs || strstr(include_codecs, "alac")))  codecs[i++] = register_ff("alc");
-	if (!strstr(exclude_codecs, "wma")  && (!include_codecs || strstr(include_codecs, "wma")))   codecs[i++] = register_ff("wma");
+	if (!strstr(exclude_codecs, "alac") && (!include_codecs || (o = strstr(include_codecs, "alac"))))
+		sort_codecs((include_codecs ? o - include_codecs : i), register_ff("alc"));
+	if (!strstr(exclude_codecs, "wma")	&& (!include_codecs || (o = strstr(include_codecs, "wma"))))
+		sort_codecs((include_codecs ? o - include_codecs : i), register_ff("wma"));
 #endif
 #ifndef DISABLE_FAAD
-	if (!strstr(exclude_codecs, "aac")  && (!include_codecs || strstr(include_codecs, "aac")))  codecs[i++] = register_faad();
+	if (!strstr(exclude_codecs, "aac")	&& (!include_codecs || (o = strstr(include_codecs, "aac"))))
+		sort_codecs((include_codecs ? o - include_codecs : i), register_faad());
 #endif
-	if (!strstr(exclude_codecs, "ogg")  && (!include_codecs || strstr(include_codecs, "ogg")))  codecs[i++] = register_vorbis();
-	if (!strstr(exclude_codecs, "flac") && (!include_codecs || strstr(include_codecs, "flac"))) codecs[i++] = register_flac();
-	if (!strstr(exclude_codecs, "pcm")  && (!include_codecs || strstr(include_codecs, "pcm")))  codecs[i++] = register_pcm();
+	if (!strstr(exclude_codecs, "ogg")	&& (!include_codecs || (o = strstr(include_codecs, "ogg"))))
+		sort_codecs((include_codecs ? o - include_codecs : i), register_vorbis());
+	if (!strstr(exclude_codecs, "flac") && (!include_codecs || (o = strstr(include_codecs, "flac"))))
+		sort_codecs((include_codecs ? o - include_codecs : i), register_flac());
+	if (!strstr(exclude_codecs, "pcm")	&& (!include_codecs || (o = strstr(include_codecs, "pcm"))))
+		sort_codecs((include_codecs ? o - include_codecs : i), register_pcm());
 
 	// try mad then mpg for mp3 unless command line option passed
 	if (!(strstr(exclude_codecs, "mp3") || strstr(exclude_codecs, "mad")) &&
-		(!include_codecs || strstr(include_codecs, "mp3") || strstr(include_codecs, "mad")))	codecs[i] = register_mad();
-	if (!(strstr(exclude_codecs, "mp3") || strstr(exclude_codecs, "mpg")) && !codecs[i] &&
-		(!include_codecs || strstr(include_codecs, "mp3") || strstr(include_codecs, "mpg")))    codecs[i] = register_mpg();
+		(!include_codecs || (o = strstr(include_codecs, "mp3")) || (o = strstr(include_codecs, "mad"))))
+		sort_codecs((include_codecs ? o - include_codecs : i), register_mad());
+	else if (!(strstr(exclude_codecs, "mp3") || strstr(exclude_codecs, "mpg")) &&
+		(!include_codecs || (o = strstr(include_codecs, "mp3")) || (o = strstr(include_codecs, "mpg"))))
+		sort_codecs((include_codecs ? o - include_codecs : i), register_mpg());
 
 	mutex_create(decode.mutex);
 
