diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf
index 84d33232a5..e0dad4f026 100644
--- a/Configurations/10-main.conf
+++ b/Configurations/10-main.conf
@@ -1715,36 +1715,6 @@ sub vms_info {
         shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
         ranlib           => "$ENV{'RANLIB'}",
     },
-    "haiku-common" => {
-        template         => 1,
-        cc               => "cc",
-        cflags           => add_before(picker(default => "-DL_ENDIAN -Wall",
-                                              debug   => "-g -O0",
-                                              release => "-O2"),
-                                       threads("-D_REENTRANT")),
-        sys_id           => "HAIKU",
-        lflags           => "-lnetwork",
-        perlasm_scheme   => "elf",
-        thread_scheme    => "pthreads",
-        dso_scheme       => "dlfcn",
-        shared_target    => "haiku-shared",
-        shared_cflag     => "-fPIC",
-        shared_ldflag    => "-shared",
-        shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-    },
-    "haiku-x86" => {
-        inherit_from     => [ "haiku-common", asm("x86_elf_asm") ],
-        cflags           => add(picker(default => "",
-                                       release => "-fomit-frame-pointer")),
-        bn_ops           => "BN_LLONG",
-    },
-    # Haiku builds with no-asm
-    "haiku-x86_64" => {
-        inherit_from     => [ "haiku-common", asm("x86_64_asm") ],
-        cflags           => add("-m64"),
-        bn_ops           => "SIXTY_FOUR_BIT_LONG",
-    },
-
 
     ##### VMS
     "vms-generic" => {
diff --git a/Configurations/50-haiku.conf b/Configurations/50-haiku.conf
new file mode 100644
index 0000000000..f114666609
--- /dev/null
+++ b/Configurations/50-haiku.conf
@@ -0,0 +1,29 @@
+%targets = (
+    "haiku-common" => {
+        template         => 1,
+        cc               => "cc",
+        cflags           => add_before(picker(default => "-DL_ENDIAN -Wall -include \$(SRCDIR)/os-dep/haiku.h",
+                                              debug   => "-g -O0",
+                                              release => "-O2"),
+                                       threads("-D_REENTRANT")),
+        sys_id           => "HAIKU",
+        ex_libs          => "-lnetwork",
+        perlasm_scheme   => "elf",
+        thread_scheme    => "pthreads",
+        dso_scheme       => "dlfcn",
+        shared_target    => "gnu-shared",
+        shared_cflag     => "-fPIC",
+        shared_ldflag    => "-shared",
+        shared_extension => ".so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+    },
+    "haiku-x86" => {
+        inherit_from     => [ "haiku-common", asm("x86_elf_asm") ],
+        cflags           => add(picker(release => "-fomit-frame-pointer")),
+        bn_ops           => "BN_LLONG",
+    },
+    "haiku-x86_64" => {
+        inherit_from     => [ "haiku-common" ],
+        cflags           => add("-m64"),
+        bn_ops           => "SIXTY_FOUR_BIT_LONG",
+    },
+);
diff --git a/e_os.h b/e_os.h
index 83b024add0..1c4c204c9a 100644
--- a/e_os.h
+++ b/e_os.h
@@ -504,13 +504,6 @@ struct servent *getservbyname(const char *name, const char *proto);
 # endif
 /* end vxworks */
 
-/* haiku */
-# if defined(OPENSSL_SYS_HAIKU)
-#  include <sys/select.h>
-#  include <sys/time.h>
-# endif
-/* end haiku */
-
 #define OSSL_NELEM(x)    (sizeof(x)/sizeof(x[0]))
 
 #ifdef  __cplusplus
diff --git a/os-dep/haiku.h b/os-dep/haiku.h
new file mode 100644
index 0000000000..7e908efaaf
--- /dev/null
+++ b/os-dep/haiku.h
@@ -0,0 +1,2 @@
+#include <sys/select.h>
+#include <sys/time.h>