diff --git a/Makefile b/Makefile
index 0861ec0b..86ea0aa8 100644
--- a/Makefile
+++ b/Makefile
@@ -67,6 +67,9 @@ else ifneq (, $(findstring linux, $(SYS))$(findstring gnu, $(SYS)))
 else ifneq (, $(findstring freebsd, $(SYS))$(findstring openbsd, $(SYS)))
 	DAEMON_SRC += $(DAEMON_SRC_DIR)/UnixDaemon.cpp
 	include Makefile.bsd
+else ifneq (, $(findstring haiku, $(SYS)))
+	DAEMON_SRC += $(DAEMON_SRC_DIR)/UnixDaemon.cpp
+	include Makefile.haiku
 else # not supported
 	$(error Not supported platform)
 endif
diff --git a/build/CMakeLists.txt b/build/CMakeLists.txt
index 3185ffab..abfadfca 100644
--- a/build/CMakeLists.txt
+++ b/build/CMakeLists.txt
@@ -139,6 +139,10 @@ if(APPLE)
   add_definitions(-DMAC_OSX)
 endif()
 
+if(HAIKU)
+  add_definitions(-D_DEFAULT_SOURCE -D_GNU_SOURCE)
+endif()
+
 if(MSVC)
   add_definitions(-DWINVER=0x0600)
   add_definitions(-D_WIN32_WINNT=0x0600)
diff --git a/libi2pd/FS.cpp b/libi2pd/FS.cpp
index 7334550f..d38bcc2f 100644
--- a/libi2pd/FS.cpp
+++ b/libi2pd/FS.cpp
@@ -136,6 +136,14 @@ namespace fs {
 		dataDir = (home != NULL && strlen(home) > 0) ? home : "";
 		dataDir += "/Library/Application Support/" + appName;
 		return;
+#elif defined(__HAIKU__)
+		char *home = getenv("HOME");
+		if (home != NULL && strlen(home) > 0) {
+			dataDir = std::string(home) + "/config/settings/" + appName;
+		} else {
+			dataDir = "/tmp/" + appName;
+		}
+		return;
 #else /* other unix */
 #if defined(ANDROID)
 		const char * ext = getenv("EXTERNAL_STORAGE");
diff --git a/libi2pd/I2PEndian.h b/libi2pd/I2PEndian.h
index 06abf29a..681a4999 100644
--- a/libi2pd/I2PEndian.h
+++ b/libi2pd/I2PEndian.h
@@ -14,7 +14,7 @@
 #if defined(__FreeBSD__) || defined(__NetBSD__)
 #include <sys/endian.h>
 
-#elif defined(__linux__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__GLIBC__)
+#elif defined(__linux__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__GLIBC__) || defined(__HAIKU__)
 #include <endian.h>
 
 #elif defined(__APPLE__) && defined(__MACH__)
diff --git a/libi2pd/util.cpp b/libi2pd/util.cpp
index 088a7af5..a7afdce8 100644
--- a/libi2pd/util.cpp
+++ b/libi2pd/util.cpp
@@ -27,6 +27,17 @@
 # include <AvailabilityMacros.h>
 #endif
 
+#if defined(__HAIKU__)
+#include <gnu/pthread.h>
+#include <posix/pthread.h>
+#include <posix/sys/sockio.h>
+#include <posix/sys/ioctl.h>
+#ifndef _DEFAULT_SOURCE
+#define _DEFAULT_SOURCE
+#include <bsd/ifaddrs.h>
+#endif
+#endif
+
 #ifdef _WIN32
 #include <stdlib.h>
 #include <string.h>