diff --git a/examples/Makefile b/examples/Makefile
index ed73fcd..1539ecc 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -1,5 +1,5 @@
 CFLAGS ?= -g -O2
-override CFLAGS += -Wall -D_GNU_SOURCE -L../src/
+override CFLAGS += -Wall -D_GNU_SOURCE -L../src/ -I../src/include/
 
 all_targets += io_uring-test io_uring-cp link-cp
 
diff --git a/src/Makefile b/src/Makefile
index aa93199..cbd3fda 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -3,7 +3,7 @@ includedir ?= $(prefix)/include
 libdir ?= $(prefix)/lib
 
 CFLAGS ?= -g -fomit-frame-pointer -O2
-override CFLAGS += -Wall -I.
+override CFLAGS += -Wall -Iinclude/
 SO_CFLAGS=-shared -fPIC $(CFLAGS)
 L_CFLAGS=$(CFLAGS)
 LINK_FLAGS=
@@ -27,7 +27,7 @@ liburing_srcs := setup.c queue.c syscall.c register.c
 liburing_objs := $(patsubst %.c,%.ol,$(liburing_srcs))
 liburing_sobjs := $(patsubst %.c,%.os,$(liburing_srcs))
 
-$(liburing_objs) $(liburing_sobjs): io_uring.h
+$(liburing_objs) $(liburing_sobjs): include/liburing/io_uring.h
 
 %.os: %.c
 	$(CC) $(SO_CFLAGS) -c -o $@ $<
@@ -46,10 +46,10 @@ $(libname): $(liburing_sobjs) liburing.map
 	$(CC) $(SO_CFLAGS) -Wl,--version-script=liburing.map -Wl,-soname=$(soname) -o $@ $(liburing_sobjs) $(LINK_FLAGS)
 
 install: $(all_targets)
-	install -D -m 644 io_uring.h $(includedir)/io_uring.h
-	install -D -m 644 liburing.h $(includedir)/liburing.h
-	install -D -m 644 compat.h $(includedir)/compat.h
-	install -D -m 644 barrier.h $(includedir)/barrier.h
+	install -D -m 644 include/liburing/io_uring.h $(includedir)/liburing/io_uring.h
+	install -D -m 644 include/liburing.h $(includedir)/liburing.h
+	install -D -m 644 include/liburing/compat.h $(includedir)/liburing/compat.h
+	install -D -m 644 include/liburing/barrier.h $(includedir)/liburing/barrier.h
 	install -D -m 644 liburing.a $(libdir)/liburing.a
 ifeq ($(ENABLE_SHARED),1)
 	install -D -m 755 $(libname) $(libdir)/$(libname)
@@ -57,7 +57,7 @@ ifeq ($(ENABLE_SHARED),1)
 	ln -sf $(libname) $(libdir)/liburing.so
 endif
 
-$(liburing_objs): liburing.h
+$(liburing_objs): include/liburing.h
 
 clean:
 	rm -f $(all_targets) $(liburing_objs) $(liburing_sobjs) $(soname).new
diff --git a/test/Makefile b/test/Makefile
index 98f863c..4d056f8 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -1,5 +1,5 @@
 CFLAGS ?= -g -O2
-override CFLAGS += -Wall -D_GNU_SOURCE -L../src/
+override CFLAGS += -Wall -D_GNU_SOURCE -L../src/ -I../src/include/
 
 all_targets += poll poll-cancel ring-leak fsync io_uring_setup io_uring_register \
 	       io_uring_enter nop sq-full cq-full 35fa71a030ca-test \
diff --git a/src/liburing.h b/src/include/liburing.h
similarity index 98%
rename from src/liburing.h
rename to src/include/liburing.h
index a350a01..fb78cd3 100644
--- a/src/liburing.h
+++ b/src/include/liburing.h
@@ -9,9 +9,9 @@ extern "C" {
 #include <signal.h>
 #include <string.h>
 #include <inttypes.h>
-#include "compat.h"
-#include "io_uring.h"
-#include "barrier.h"
+#include "liburing/compat.h"
+#include "liburing/io_uring.h"
+#include "liburing/barrier.h"
 
 /*
  * Library interface to io_uring
diff --git a/src/barrier.h b/src/include/liburing/barrier.h
similarity index 100%
rename from src/barrier.h
rename to src/include/liburing/barrier.h
diff --git a/src/compat.h b/src/include/liburing/compat.h
similarity index 100%
rename from src/compat.h
rename to src/include/liburing/compat.h
diff --git a/src/io_uring.h b/src/include/liburing/io_uring.h
similarity index 100%
rename from src/io_uring.h
rename to src/include/liburing/io_uring.h
diff --git a/examples/io_uring-cp.c b/examples/io_uring-cp.c
index 97f61aa..adb7b29 100644
--- a/examples/io_uring-cp.c
+++ b/examples/io_uring-cp.c
@@ -12,7 +12,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/ioctl.h>
-#include "../src/liburing.h"
+#include "liburing.h"
 
 #define QD	64
 #define BS	(32*1024)
diff --git a/examples/io_uring-test.c b/examples/io_uring-test.c
index 0b975ad..4f5ebf6 100644
--- a/examples/io_uring-test.c
+++ b/examples/io_uring-test.c
@@ -9,7 +9,7 @@
 #include <string.h>
 #include <stdlib.h>
 #include <unistd.h>
-#include "../src/liburing.h"
+#include "liburing.h"
 
 #define QD	4
 
diff --git a/examples/link-cp.c b/examples/link-cp.c
index a4c02e5..af80a2e 100644
--- a/examples/link-cp.c
+++ b/examples/link-cp.c
@@ -13,7 +13,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/ioctl.h>
-#include "../src/liburing.h"
+#include "liburing.h"
 
 #define QD	64
 #define BS	(32*1024)
diff --git a/src/queue.c b/src/queue.c
index 72b2293..74a077f 100644
--- a/src/queue.c
+++ b/src/queue.c
@@ -6,10 +6,10 @@
 #include <string.h>
 #include <stdbool.h>
 
-#include "compat.h"
-#include "io_uring.h"
+#include "liburing/compat.h"
+#include "liburing/io_uring.h"
 #include "liburing.h"
-#include "barrier.h"
+#include "liburing/barrier.h"
 
 static int __io_uring_get_cqe(struct io_uring *ring,
 			      struct io_uring_cqe **cqe_ptr, int wait)
diff --git a/src/register.c b/src/register.c
index 7561575..f5fc196 100644
--- a/src/register.c
+++ b/src/register.c
@@ -5,8 +5,8 @@
 #include <errno.h>
 #include <string.h>
 
-#include "compat.h"
-#include "io_uring.h"
+#include "liburing/compat.h"
+#include "liburing/io_uring.h"
 #include "liburing.h"
 
 int io_uring_register_buffers(struct io_uring *ring, const struct iovec *iovecs,
diff --git a/src/setup.c b/src/setup.c
index 343a317..47b0deb 100644
--- a/src/setup.c
+++ b/src/setup.c
@@ -5,8 +5,8 @@
 #include <errno.h>
 #include <string.h>
 
-#include "compat.h"
-#include "io_uring.h"
+#include "liburing/compat.h"
+#include "liburing/io_uring.h"
 #include "liburing.h"
 
 static int io_uring_mmap(int fd, struct io_uring_params *p,
diff --git a/src/syscall.c b/src/syscall.c
index d0c58cf..3fd8713 100644
--- a/src/syscall.c
+++ b/src/syscall.c
@@ -5,8 +5,8 @@
 #include <sys/syscall.h>
 #include <sys/uio.h>
 #include <signal.h>
-#include "compat.h"
-#include "io_uring.h"
+#include "liburing/compat.h"
+#include "liburing/io_uring.h"
 
 #ifdef __alpha__
 /*
diff --git a/test/cq-full.c b/test/cq-full.c
index 82c5a65..25fa42c 100644
--- a/test/cq-full.c
+++ b/test/cq-full.c
@@ -9,7 +9,7 @@
 #include <string.h>
 #include <fcntl.h>
 
-#include "../src/liburing.h"
+#include "liburing.h"
 
 static int queue_n_nops(struct io_uring *ring, int n)
 {
diff --git a/test/eeed8b54e0df-test.c b/test/eeed8b54e0df-test.c
index 9083d3e..84237d5 100644
--- a/test/eeed8b54e0df-test.c
+++ b/test/eeed8b54e0df-test.c
@@ -9,7 +9,7 @@
 #include <string.h>
 #include <fcntl.h>
 
-#include "../src/liburing.h"
+#include "liburing.h"
 
 #define BLOCK	4096
 
diff --git a/test/fsync.c b/test/fsync.c
index 44264f4..e6e0898 100644
--- a/test/fsync.c
+++ b/test/fsync.c
@@ -9,7 +9,7 @@
 #include <string.h>
 #include <fcntl.h>
 
-#include "../src/liburing.h"
+#include "liburing.h"
 
 static int test_single_fsync(struct io_uring *ring)
 {
diff --git a/test/io_uring_enter.c b/test/io_uring_enter.c
index b25afd5..c2030c1 100644
--- a/test/io_uring_enter.c
+++ b/test/io_uring_enter.c
@@ -22,8 +22,8 @@
 #include <sys/resource.h>
 #include <limits.h>
 #include <sys/time.h>
-#include "../src/liburing.h"
-#include "../src/barrier.h"
+#include "liburing.h"
+#include "liburing/barrier.h"
 
 #define IORING_MAX_ENTRIES 4096
 
diff --git a/test/io_uring_register.c b/test/io_uring_register.c
index 32e5217..59c8a86 100644
--- a/test/io_uring_register.c
+++ b/test/io_uring_register.c
@@ -21,7 +21,7 @@
 #include <sys/time.h>
 #include <sys/resource.h>
 #include <limits.h>
-#include "../src/liburing.h"
+#include "liburing.h"
 
 static int pagesize;
 static rlim_t mlock_limit;
diff --git a/test/io_uring_setup.c b/test/io_uring_setup.c
index 09e16e5..2dd3763 100644
--- a/test/io_uring_setup.c
+++ b/test/io_uring_setup.c
@@ -13,7 +13,7 @@
 #include <unistd.h>
 #include <errno.h>
 #include <sys/sysinfo.h>
-#include "../src/liburing.h"
+#include "liburing.h"
 
 /*
  * Attempt the call with the given args.  Return 0 when expect matches
diff --git a/test/link.c b/test/link.c
index e7ca3e3..603b507 100644
--- a/test/link.c
+++ b/test/link.c
@@ -9,7 +9,7 @@
 #include <string.h>
 #include <fcntl.h>
 
-#include "../src/liburing.h"
+#include "liburing.h"
 
 /*
  * Test failing head of chain, and dependent getting -ECANCELED
diff --git a/test/nop.c b/test/nop.c
index 8e6bfb0..1373695 100644
--- a/test/nop.c
+++ b/test/nop.c
@@ -9,7 +9,7 @@
 #include <string.h>
 #include <fcntl.h>
 
-#include "../src/liburing.h"
+#include "liburing.h"
 
 static int test_single_nop(struct io_uring *ring)
 {
diff --git a/test/poll-cancel.c b/test/poll-cancel.c
index 19efc5f..4761569 100644
--- a/test/poll-cancel.c
+++ b/test/poll-cancel.c
@@ -12,7 +12,7 @@
 #include <sys/wait.h>
 #include <sys/signal.h>
 
-#include "../src/liburing.h"
+#include "liburing.h"
 
 struct poll_data {
 	unsigned is_poll;
diff --git a/test/poll.c b/test/poll.c
index d22d9c5..ed424fc 100644
--- a/test/poll.c
+++ b/test/poll.c
@@ -11,7 +11,7 @@
 #include <sys/poll.h>
 #include <sys/wait.h>
 
-#include "../src/liburing.h"
+#include "liburing.h"
 
 static void sig_alrm(int sig)
 {
diff --git a/test/ring-leak.c b/test/ring-leak.c
index 99466e4..02b06f9 100644
--- a/test/ring-leak.c
+++ b/test/ring-leak.c
@@ -21,7 +21,7 @@
 #include <string.h>
 #include <linux/fs.h>
 
-#include "../src/liburing.h"
+#include "liburing.h"
 
 static int __io_uring_register_files(int ring_fd, int fd1, int fd2)
 {
diff --git a/test/send_recvmsg.c b/test/send_recvmsg.c
index 9187906..ada6559 100644
--- a/test/send_recvmsg.c
+++ b/test/send_recvmsg.c
@@ -9,7 +9,7 @@
 #include <sys/types.h>
 #include <sys/socket.h>
 
-#include "../src/liburing.h"
+#include "liburing.h"
 
 static char str[] = "This is a test of sendmsg and recvmsg over io_uring!";
 
diff --git a/test/sq-full.c b/test/sq-full.c
index 5bf7f72..3fbe0a5 100644
--- a/test/sq-full.c
+++ b/test/sq-full.c
@@ -9,7 +9,7 @@
 #include <string.h>
 #include <fcntl.h>
 
-#include "../src/liburing.h"
+#include "liburing.h"
 
 int main(int argc, char *argv[])
 {
diff --git a/liburing.spec b/liburing.spec
index 189a16a..e577a8f 100644
--- a/liburing.spec
+++ b/liburing.spec
@@ -47,7 +47,8 @@ make install DESTDIR=$RPM_BUILD_ROOT
 
 %files devel
 %defattr(-,root,root)
-%attr(0644,root,root) %{_includedir}/*
+%attr(0755,root,root) %{_includedir}/liburing/*
+%attr(0644,root,root) %{_includedir}/liburing.h
 %attr(0755,root,root) %{_libdir}/liburing.so
 %attr(0644,root,root) %{_libdir}/liburing.a
 %attr(0644,root,root) %{_libdir}/pkgconfig/*
