diff --git a/src/conio/Common.gmake b/src/conio/Common.gmake
index 7d9767830aeb6f231b6c597ee2ad761832072f1a..71785345869a149a42b288e4c15b0c3188a64f6d 100644
--- a/src/conio/Common.gmake
+++ b/src/conio/Common.gmake
@@ -27,6 +27,84 @@ endif
 ifdef NO_X
  ifndef WITH_SDL
   CIOLIB-MT_CFLAGS		+=	-DNO_FONTS
-  CIOLIB-CFLAGS			+=	-DNO_FONTS
+  CIOLIB_CFLAGS			+=	-DNO_FONTS
+ endif
+endif
+
+# Find SDL headers!
+ifdef USE_SDL
+ ifndef WITH_SDL_AUDIO
+  ifdef SDL_CONFIG
+   ifeq ($(shell ${SDL_CONFIG} --cflags > /dev/null 2>&1 && echo YES),YES)
+	WITH_SDL	:=	1
+   endif
+  else
+   ifeq ($(os),darwin)
+	ifeq ($(shell if [ -d /Library/Frameworks/SDL.framework ] ; then echo YES ; fi),YES)
+     WITH_SDL	:=	1
+	endif
+   else
+	ifeq ($(shell sdl-config --cflags > /dev/null 2>&1 && echo YES),YES)
+     SDL_CONFIG := sdl-config
+     WITH_SDL	:=	1
+	else
+     ifeq ($(shell sdl13-config --cflags > /dev/null 2>&1 && echo YES),YES)
+      SDL_CONFIG := sdl13-config
+      WITH_SDL	:=	1
+     else
+      ifeq ($(shell sdl12-config --cflags > /dev/null 2>&1 && echo YES),YES)
+       SDL_CONFIG := sdl12-config
+       WITH_SDL	:=	1
+      else
+       ifeq ($(shell sdl11-config --cflags > /dev/null 2>&1 && echo YES),YES)
+    	SDL_CONFIG := sdl11-config
+    	WITH_SDL	:=	1
+       endif
+      endif
+     endif
+	endif
+   endif
+  endif
+ endif
+endif
+
+ifdef WITH_SDL
+ ifndef WITH_SDL_AUDIO
+  ifdef SDL_CONFIG
+   ifeq ($(shell ${SDL_CONFIG} --cflags > /dev/null 2>&1 && echo YES),YES)
+	CIOLIB-MT_CFLAGS	+=	-DWITH_SDL
+	CIOLIB-MT_CFLAGS	+=	$(shell $(SDL_CONFIG) --cflags)
+	CIOLIB_CFLAGS	+=	-DWITH_SDL
+	CIOLIB_CFLAGS	+=	$(shell $(SDL_CONFIG) --cflags)
+	ifdef STATIC_SDL
+     CIOLIB-MT_LIBS	+=	$(shell $(SDL_CONFIG) --static-libs)
+     CIOLIB-MT_CFLAGS	+=	-DSTATIC_SDL
+     CIOLIB-LIBS	+=	$(shell $(SDL_CONFIG) --static-libs)
+     CIOLIB-CFLAGS	+=	-DSTATIC_SDL
+	else
+     ifeq ($(os),darwin)
+      CIOLIB-MT_LIBS		+=  $(UL_PRE)dl$(UL_SUF)
+      CIOLIB_LIBS		+=  $(UL_PRE)dl$(UL_SUF)
+     endif
+     ifeq ($(os),linux)
+      CIOLIB-MT_LIBS		+=  $(UL_PRE)dl$(UL_SUF)
+      CIOLIB_LIBS		+=  $(UL_PRE)dl$(UL_SUF)
+     endif
+     ifeq ($(os),sunos)
+      CIOLIB-MT_LIBS		+=  $(UL_PRE)dl$(UL_SUF)
+      CIOLIB_LIBS		+=  $(UL_PRE)dl$(UL_SUF)
+     endif
+	endif
+   endif
+  else
+   ifeq ($(os),darwin)
+	CIOLIB-MT_CFLAGS	+=	-DWITH_SDL -DSTATIC_SDL
+	CIOLIB-MT_CFLAGS	+=	-I/Library/Frameworks/SDL.framework/Headers
+	CIOLIB-MT_LIBS	+=	-framework SDL -framework Cocoa -framework Carbon -I/Library/Frameworks/SDL.framework/Headers
+	CIOLIB_CFLAGS	+=	-DWITH_SDL -DSTATIC_SDL
+	CIOLIB_CFLAGS	+=	-I/Library/Frameworks/SDL.framework/Headers
+	CIOLIB_LIBS	+=	-framework SDL -framework Cocoa -framework Carbon -I/Library/Frameworks/SDL.framework/Headers
+   endif
+  endif
  endif
 endif
diff --git a/src/conio/GNUmakefile b/src/conio/GNUmakefile
index 9dc883986afe86715cde912e46aa53fc5aa407a4..279dc84974e4c3eda5d30679dc3570ec9481cd5e 100644
--- a/src/conio/GNUmakefile
+++ b/src/conio/GNUmakefile
@@ -12,8 +12,17 @@ else
 			$(MTOBJODIR)$(DIRSEP)x_cio$(OFILE)
 endif
 
-ifdef WITH_SDL
+ifdef WITH_SDL_AUDIO
  OBJS	+=	$(MTOBJODIR)$(DIRSEP)sdl_con$(OFILE)
+else
+ ifdef WITH_SDL
+  OBJS	+=	$(MTOBJODIR)$(DIRSEP)sdl_con$(OFILE)
+  OBJS	+=      $(MTOBJODIR)$(DIRSEP)sdlfuncs$(OFILE)
+  ifeq ($(os),darwin)
+   MTOBJS	+=      $(MTOBJODIR)$(DIRSEP)SDLMain$(OFILE)
+   OBJS 	+=      $(OBJODIR)$(DIRSEP)SDLMain$(OFILE)
+  endif
+ endif
 endif
 
 ifeq ($(os),netbsd)
diff --git a/src/conio/ciolib.c b/src/conio/ciolib.c
index c734a4a669aa01b25fd77a62c5a29fd3bb72f2bd..a87d40402042a70eb7096b79705eed25e60a9a9e 100644
--- a/src/conio/ciolib.c
+++ b/src/conio/ciolib.c
@@ -48,7 +48,7 @@
 #define CIOLIB_NO_MACROS
 #include "ciolib.h"
 
-#ifdef WITH_SDL
+#if defined(WITH_SDL) || defined(WITH_SDL_AUDIO)
  #include "sdl_con.h"
 #endif
 #ifdef _WIN32
@@ -111,7 +111,7 @@ CIOLIBEXPORT char * CIOLIBCALL ciolib_getcliptext(void);
 
 #define CIOLIB_INIT()		{ if(initialized != 1) initciolib(CIOLIB_MODE_AUTO); }
 
-#ifdef WITH_SDL
+#if defined(WITH_SDL) || defined(WITH_SDL_AUDIO)
 int try_sdl_init(int mode)
 {
 	if(!sdl_initciolib(mode)) {
@@ -304,7 +304,7 @@ CIOLIBEXPORT int CIOLIBCALL initciolib(int mode)
 
 	switch(mode) {
 		case CIOLIB_MODE_AUTO:
-#ifdef WITH_SDL
+#if defined(WITH_SDL) || defined(WITH_SDL_AUDIO)
 			if(!try_sdl_init(mode))
 #endif
 #ifdef _WIN32
@@ -337,7 +337,7 @@ CIOLIBEXPORT int CIOLIBCALL initciolib(int mode)
 			try_ansi_init(mode);
 			break;
 
-#ifdef WITH_SDL
+#if defined(WITH_SDL) || defined(WITH_SDL_AUDIO)
 		case CIOLIB_MODE_SDL:
 		case CIOLIB_MODE_SDL_FULLSCREEN:
 			try_sdl_init(mode);
diff --git a/src/conio/ciolib.h b/src/conio/ciolib.h
index 3f9378ab148e17cacaada2401a9d917dec5c2dac..c497070c8ac7d707cb0a99eac4884d6d5337d5f6 100644
--- a/src/conio/ciolib.h
+++ b/src/conio/ciolib.h
@@ -361,4 +361,13 @@ CIOLIBEXPORT int CIOLIBCALL ciolib_loadfont(char *filename);
 	#define loadfont(a)				ciolib_loadfont(a)
 #endif
 
+#ifdef WITH_SDL
+	#include <SDL.h>
+
+	#ifdef main
+		#undef main
+	#endif
+	#define	main	CIOLIB_main
+#endif
+
 #endif	/* Do not add anything after this line */
diff --git a/src/conio/sdlfuncs.c b/src/conio/sdlfuncs.c
index 7b1a66d322642244501cb56af6fb358672acf85f..fc02014c0fb7b96ed366a9436be3477c61b496bc 100644
--- a/src/conio/sdlfuncs.c
+++ b/src/conio/sdlfuncs.c
@@ -28,7 +28,7 @@ static int main_returned=0;
 static SDL_sem *sdl_main_sem;
 SDL_sem *sdl_exit_sem;
 
-int XPDEV_main(int argc, char **argv, char **enviro);
+int CIOLIB_main(int argc, char **argv, char **enviro);
 
 #ifdef STATIC_SDL
 int load_sdl_funcs(struct sdlfuncs *sdlf)
@@ -479,7 +479,7 @@ static int sdl_run_main(void *data)
 	int	ret;
 
 	args=data;
-	ret=XPDEV_main(args->argc, args->argv, args->enviro);
+	ret=CIOLIB_main(args->argc, args->argv, args->enviro);
 	main_returned=1;
 	sdl.SemPost(sdl_main_sem);
 	if(sdl_exit_drawing_thread!=NULL)
@@ -589,6 +589,6 @@ int SDL_main_env(int argc, char **argv, char **env)
 			sdl.WaitThread(main_thread, &main_ret);
 	}
 	else
-		main_ret=XPDEV_main(argc, argv, env);
+		main_ret=CIOLIB_main(argc, argv, env);
 	return(main_ret);
 }