diff --git a/Makefile b/Makefile
index 9035141..ed7a2c4 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,8 @@ MANPREFIX = $(PREFIX)/man
 
 #CPPFLAGS = -DDEBUG
 #CFLAGS = -g
-LDLIBS = -lcurses
+CFLAGS = -O3 -march=native
+LDLIBS = -lcurses -lmagic
 
 DISTFILES = noice.c strlcat.c strlcpy.c util.h config.def.h\
     noice.1 Makefile README LICENSE
diff --git a/config.def.h b/config.def.h
index af9bcbb..b9f6741 100644
--- a/config.def.h
+++ b/config.def.h
@@ -8,12 +8,13 @@ int idletimeout = 0; /* Screensaver timeout in seconds, 0 to disable */
 char *idlecmd = "rain"; /* The screensaver program */
 
 struct assoc assocs[] = {
-	{ "\\.(avi|mp4|mkv|mp3|ogg|flac|mov)$", "mplayer" },
-	{ "\\.(png|jpg|gif)$", "feh" },
-	{ "\\.(html|svg)$", "firefox" },
-	{ "\\.pdf$", "mupdf" },
+	//{ "\\.(avi|mp4|mkv|mp3|ogg|flac|mov)$", "mpv" },
+	{ "\\.(wma|mp3|ogg|flac)$", "fmedia" },
+	//{ "\\.(png|jpg|gif)$", "feh" },
+	//{ "\\.(html|svg)$", "firefox" },
+	{ "\\.pdf$", "zathura" },
 	{ "\\.sh$", "sh" },
-	{ ".", "less" },
+	//{ ".", "less" },
 };
 
 struct key bindings[] = {
diff --git a/noice.c b/noice.c
index a588a55..4db6f7f 100644
--- a/noice.c
+++ b/noice.c
@@ -17,6 +17,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
+#include <magic.h>
 
 #include "util.h"
 
@@ -207,6 +208,20 @@ openwith(char *file)
 	char *bin = NULL;
 	int i;
 
+	const char *mime;
+	magic_t magic;
+
+	magic = magic_open(MAGIC_MIME_TYPE);
+	magic_load(magic, NULL);
+	magic_compile(magic, NULL);
+	mime = magic_file(magic, file);
+	DPRINTF_S(mime);
+
+	if (strcmp(mime, "text/plain") == 0)
+		magic_close(magic);
+		return "vim";
+	magic_close(magic);
+
 	for (i = 0; i < LEN(assocs); i++) {
 		if (regcomp(&regex, assocs[i].regex,
 			    REG_NOSUB | REG_EXTENDED | REG_ICASE) != 0)
@@ -650,6 +665,9 @@ nochange:
 			case S_IFREG:
 				bin = openwith(newpath);
 				if (bin == NULL) {
+                                        char cmd[512];
+                                        sprintf(cmd, "xdg-open \"%s\" > /dev/null 2>&1", newpath);
+                                        system(cmd);
 					printmsg("No association");
 					goto nochange;
 				}