diff --git a/src/conio/CMakeLists.txt b/src/conio/CMakeLists.txt
index 3ea57c0b925eb0bb488863dd095d0ff0a9a389ad..a53c7c8237664befbd879f0b19813228607ef5ec 100644
--- a/src/conio/CMakeLists.txt
+++ b/src/conio/CMakeLists.txt
@@ -1,40 +1,71 @@
 project (ConIOLib C)
 
-cmake_minimum_required(VERSION 2.8.11)
+cmake_minimum_required(VERSION 3.11)
 
 INCLUDE (CheckFunctionExists)
-INCLUDE (FindSDL)
-INCLUDE (FindX11)
-INCLUDE (FindCurses)
-INCLUDE (FindThreads)
-find_package(XPDev QUIET CONFIG PATHS lib/cmake/XPDev)
+find_package(X11)
+# So on BSD, this causes the find to fail.  However, it's required for Linux
+# This is because on BSD, ncursesw.h does not exist, but libraries use
+# ncurses.h
+set(CURSES_NEED_WIDE TRUE)
+find_package(Threads REQUIRED)
+if(NOT WIN32)
+	find_package(Curses)
+	find_package(PkgConfig)
+	pkg_check_modules(SDL2 sdl2)
+endif()
 
 set(SOURCE
+	allfonts.c
 	ansi_cio.c
 	ciolib.c
+	ciolib.rc
 	cterm.c
-	vidmodes.c
-	allfonts.c
 	mouse.c
+	syncicon64.c
+	utf8_codepages.c
+	vidmodes.c
+	xbr.c
+)
+
+set(HEADER
+	ciolib.h
+	cterm.h
+	keys.h
+	mouse.h
+	utf8_codepages.h
+	vidmodes.h
 )
 
 if(WIN32)
 	list(APPEND SOURCE win32cio.c ciolib.rc)
 endif()
 
-if(CURSES_FOUND)
-	list(APPEND SOURCE curs_cio.c)
+if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Windows")
+	if(CURSES_FOUND)
+		list(APPEND SOURCE curs_cio.c)
+		set(USE_CURSES_ANYWAY TRUE)
+	else()
+		if(${CMAKE_SYSTEM_NAME} MATCHES "(Free|Open|Net)BSD")
+			list(APPEND SOURCE curs_cio.c)
+			set(USE_CURSES_ANYWAY TRUE)
+		else()
+			message(FATAL_ERROR "ncursesw not found")
+		endif()
+	endif()
 endif()
 
 if(X11_FOUND)
 	list(APPEND SOURCE x_events.c x_cio.c)
 	set(NEED_BITMAP TRUE)
 	set(NEED_DLOPEN TRUE)
+	set(NEED_SCALE TRUE)
 endif()
 
-if(SDL_FOUND)
+if(SDL2_INCLUDE_DIRS)
 	list(APPEND SOURCE sdl_con.c)
 	list(APPEND SOURCE sdlfuncs.c)
+	set(NEED_SCALE TRUE)
 	if(WIN32)
 		list(APPEND SOURCE SDL_win32_main.c)
 	endif()
@@ -49,46 +80,49 @@ if(NEED_BITMAP)
 	list(APPEND SOURCE bitmap_con.c)
 endif()
 
-add_library(ciolib SHARED ${SOURCE})
-if(XPDev_FOUND)
-	target_link_libraries(ciolib xpdev)
+if(NEED_SCALE)
+	list(APPEND SOURCE scale.c)
+endif()
+
+add_library(ciolib OBJECT ${SOURCE})
+target_include_directories(ciolib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
+if(CURSES_FOUND)
+	if(${CMAKE_SYSTEM_NAME} MATCHES "(Free|Open|Net)BSD")
+		list(APPEND SOURCE curs_cio.c)
+		set(USE_CURSES_ANYWAY TRUE)
+	endif()
+endif()
+
+if(X11_FOUND)
+	target_include_directories(ciolib PRIVATE ${X11_INCLUDE_DIR})
 else()
-	INCLUDE(../build/SynchronetMacros.cmake)
-	require_lib(ciolib xpdev)
+	target_compile_definitions(ciolib PRIVATE NO_X)
 endif()
-target_compile_definitions(ciolib PRIVATE CIOLIB_EXPORTS)
-target_compile_definitions(ciolib INTERFACE CIOLIB_IMPORTS)
 
-if(SDL_FOUND)
-	target_include_directories(ciolib PRIVATE ${SDL_INCLUDE_DIR})
-	target_compile_definitions(ciolib PUBLIC WITH_SDL)
+if(SDL2_INCLUDE_DIRS)
+	target_include_directories(ciolib PUBLIC ${SDL2_INCLUDE_DIRS})
 endif()
 
 if(NOT WIN32)
 	target_link_libraries(ciolib pthread)
 endif()
 
-if(CURSES_FOUND)
-	if(CURSES_HAVE_NCURSES_H)
-		target_compile_definitions(ciolib PRIVATE N_CURSES_LIB)
+if(USE_CURSES_ANYWAY)
+	if(CURSES_FOUND)
+		if (CURSES_HAVE_NCURSES_NCURSES_H)
+			target_compile_definitions(ciolib PRIVATE DEBIAN_HATES_YOU)
+		elseif(CURSES_HAVE_NCURSES_H)
+			target_compile_definitions(ciolib PRIVATE N_CURSES_LIB)
+		endif()
+		target_link_libraries(ciolib ${NCURSES_LIBRARIES})
+	else()
+		target_link_libraries(ciolib ${CURSES_NCURSES_LIBRARY})
+		target_link_libraries(ciolib ${CURSES_TINFO_LIBRARY_NAME})
 	endif()
-	target_link_libraries(ciolib ${CURSES_LIBRARIES})
 endif()
 
 CHECK_FUNCTION_EXISTS(vasprintf HAVE_VASPRINTF) 
 if(HAVE_VASPRINTF)
 	target_compile_definitions(ciolib PRIVATE HAVE_VASPRINTF)
 endif()
-
-target_link_libraries(ciolib ${CMAKE_DL_LIBS})
-
-set(INSTALL_HEADERS
-	ciolib.h
-	cterm.h
-)
-
-export(PACKAGE CIOLib)
-
-install(TARGETS ciolib DESTINATION lib EXPORT CIOLibConfig)
-install(FILES ${INSTALL_HEADERS} DESTINATION include)
-install(EXPORT CIOLibConfig DESTINATION lib/cmake/CIOLib)
+target_link_libraries(ciolib hash encode xpdev)