Index: libcfa/configure
===================================================================
--- libcfa/configure	(revision d3ab18345e7d56314e0a9b01494e226dbd444325)
+++ libcfa/configure	(revision 08a994e717c46ee688776bb6c7c1bff9109eb2c7)
@@ -16962,4 +16962,16 @@
 done
 
+for ac_func in preadv2 pwritev2
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
 
 ac_config_files="$ac_config_files Makefile src/Makefile prelude/Makefile"
Index: libcfa/configure.ac
===================================================================
--- libcfa/configure.ac	(revision d3ab18345e7d56314e0a9b01494e226dbd444325)
+++ libcfa/configure.ac	(revision 08a994e717c46ee688776bb6c7c1bff9109eb2c7)
@@ -119,4 +119,5 @@
 
 AC_CHECK_HEADERS([linux/io_uring.h])
+AC_CHECK_FUNCS([preadv2 pwritev2])
 
 AC_CONFIG_FILES([
Index: libcfa/prelude/defines.hfa.in
===================================================================
--- libcfa/prelude/defines.hfa.in	(revision d3ab18345e7d56314e0a9b01494e226dbd444325)
+++ libcfa/prelude/defines.hfa.in	(revision 08a994e717c46ee688776bb6c7c1bff9109eb2c7)
@@ -16,4 +16,7 @@
 #undef HAVE_LINUX_IO_URING_H
 
+#undef HAVE_PREADV2
+#undef HAVE_PWRITEV2
+
 // #define __CFA_IO_POLLING_USER__
 // #define __CFA_IO_POLLING_KERNEL__
Index: libcfa/src/Makefile.in
===================================================================
--- libcfa/src/Makefile.in	(revision d3ab18345e7d56314e0a9b01494e226dbd444325)
+++ libcfa/src/Makefile.in	(revision 08a994e717c46ee688776bb6c7c1bff9109eb2c7)
@@ -241,8 +241,8 @@
 	containers/vector.hfa bitmanip.hfa math.hfa gmp.hfa time_t.hfa \
 	bits/align.hfa bits/containers.hfa bits/defs.hfa \
-	bits/debug.hfa bits/locks.hfa concurrency/coroutine.hfa \
-	concurrency/thread.hfa concurrency/kernel.hfa \
-	concurrency/monitor.hfa concurrency/mutex.hfa \
-	concurrency/invoke.h
+	bits/debug.hfa bits/locks.hfa containers/list.hfa \
+	concurrency/coroutine.hfa concurrency/thread.hfa \
+	concurrency/kernel.hfa concurrency/monitor.hfa \
+	concurrency/mutex.hfa concurrency/invoke.h
 HEADERS = $(nobase_cfa_include_HEADERS)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
@@ -463,5 +463,5 @@
 
 #----------------------------------------------------------------------------------------------------------------
-@BUILDLIB_TRUE@headers_nosrc = bitmanip.hfa math.hfa gmp.hfa time_t.hfa bits/align.hfa bits/containers.hfa bits/defs.hfa bits/debug.hfa bits/locks.hfa
+@BUILDLIB_TRUE@headers_nosrc = bitmanip.hfa math.hfa gmp.hfa time_t.hfa bits/align.hfa bits/containers.hfa bits/defs.hfa bits/debug.hfa bits/locks.hfa containers/list.hfa
 @BUILDLIB_FALSE@headers = 
 @BUILDLIB_TRUE@headers = fstream.hfa iostream.hfa iterator.hfa limits.hfa rational.hfa time.hfa stdlib.hfa common.hfa \
Index: libcfa/src/concurrency/io.cfa
===================================================================
--- libcfa/src/concurrency/io.cfa	(revision d3ab18345e7d56314e0a9b01494e226dbd444325)
+++ libcfa/src/concurrency/io.cfa	(revision 08a994e717c46ee688776bb6c7c1bff9109eb2c7)
@@ -544,7 +544,13 @@
 	#include <sys/socket.h>
 	#include <sys/syscall.h>
+
+#if defined(HAVE_PREADV2)
 	struct iovec;
 	extern ssize_t preadv2 (int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags);
+#endif
+#if defined(HAVE_PWRITEV2)
+	struct iovec;
 	extern ssize_t pwritev2(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags);
+#endif
 
 	extern int fsync(int fd);
@@ -572,27 +578,31 @@
 //-----------------------------------------------------------------------------
 // Asynchronous operations
-ssize_t cfa_preadv2(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_READV)
-		return preadv2(fd, iov, iovcnt, offset, flags);
-	#else
-		__submit_prelude
-
-		(*sqe){ IORING_OP_READV, fd, iov, iovcnt, offset };
-
-		__submit_wait
-	#endif
-}
-
-ssize_t cfa_pwritev2(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags) {
-	#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_WRITEV)
-		return pwritev2(fd, iov, iovcnt, offset, flags);
-	#else
-		__submit_prelude
-
-		(*sqe){ IORING_OP_WRITEV, fd, iov, iovcnt, offset };
-
-		__submit_wait
-	#endif
-}
+#if defined(HAVE_PREADV2)
+	ssize_t cfa_preadv2(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags) {
+		#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_READV)
+			return preadv2(fd, iov, iovcnt, offset, flags);
+		#else
+			__submit_prelude
+
+			(*sqe){ IORING_OP_READV, fd, iov, iovcnt, offset };
+
+			__submit_wait
+		#endif
+	}
+#endif
+
+#if defined(HAVE_PWRITEV2)
+	ssize_t cfa_pwritev2(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags) {
+		#if !defined(HAVE_LINUX_IO_URING_H) || !defined(IORING_OP_WRITEV)
+			return pwritev2(fd, iov, iovcnt, offset, flags);
+		#else
+			__submit_prelude
+
+			(*sqe){ IORING_OP_WRITEV, fd, iov, iovcnt, offset };
+
+			__submit_wait
+		#endif
+	}
+#endif
 
 int cfa_fsync(int fd) {
@@ -822,13 +832,17 @@
 			return IS_DEFINED(IORING_OP_READV);
 
-		if( /*func == (fptr_t)pwritev2 || */
-			func == (fptr_t)cfa_pwritev2 )
-			#define _CFA_IO_FEATURE_IORING_OP_WRITEV ,
-			return IS_DEFINED(IORING_OP_WRITEV);
-
-		if( /*func == (fptr_t)fsync || */
-			func == (fptr_t)cfa_fsync )
-			#define _CFA_IO_FEATURE_IORING_OP_FSYNC ,
-			return IS_DEFINED(IORING_OP_FSYNC);
+		#if defined(HAVE_PREADV2)
+			if( /*func == (fptr_t)pwritev2 || */
+				func == (fptr_t)cfa_pwritev2 )
+				#define _CFA_IO_FEATURE_IORING_OP_WRITEV ,
+				return IS_DEFINED(IORING_OP_WRITEV);
+		#endif
+
+		#if defined(HAVE_PWRITEV2)
+			if( /*func == (fptr_t)fsync || */
+				func == (fptr_t)cfa_fsync )
+				#define _CFA_IO_FEATURE_IORING_OP_FSYNC ,
+				return IS_DEFINED(IORING_OP_FSYNC);
+		#endif
 
 		if( /*func == (fptr_t)ync_file_range || */
