diff --git a/.github/workflows/builds.yml b/.github/workflows/builds.yml
index 7578bbee..72294f16 100644
--- a/.github/workflows/builds.yml
+++ b/.github/workflows/builds.yml
@@ -11,6 +11,7 @@ jobs:
     strategy:
         matrix:
           container:
+            - php:8.4-rc
             - php:8.3
             - php:8.2
             - php:8.1
diff --git a/src/php_snuffleupagus.h b/src/php_snuffleupagus.h
index 6e035d40..b4d1be1f 100644
--- a/src/php_snuffleupagus.h
+++ b/src/php_snuffleupagus.h
@@ -42,6 +42,7 @@
 #include "ext/standard/php_string.h"
 #include "ext/standard/php_var.h"
 #include "ext/session/php_session.h"
+#include "ext/hash/php_hash.h"
 #include "php.h"
 #include "php_ini.h"
 #include "rfc1867.h"
@@ -58,9 +59,11 @@
 #error Snuffleupagus only works with PHP7+. You shouldn't use PHP5 anyway, \
   since it's not supported anymore: https://secure.php.net/supported-versions.php
 #endif
+
 #if PHP_VERSION_ID < 70200
 typedef void (*zif_handler)(INTERNAL_FUNCTION_PARAMETERS);
 #endif
+
 #if PHP_VERSION_ID >= 80000
 #define TSRMLS_FETCH()
 #define TSRMLS_C
@@ -70,6 +73,13 @@ typedef void (*zif_handler)(INTERNAL_FUNCTION_PARAMETERS);
 #endif
 #endif
 
+#if PHP_VERSION_ID < 80200
+#include "ext/standard/php_rand.h"
+#include "ext/standard/php_random.h"
+#else
+#include "ext/random/php_random.h"
+#endif
+
 #define SP_CONFIG_VALID 1
 #define SP_CONFIG_INVALID 0
 #define SP_CONFIG_NONE -1
diff --git a/src/sp_harden_rand.h b/src/sp_harden_rand.h
index bbe9be49..0721da05 100644
--- a/src/sp_harden_rand.h
+++ b/src/sp_harden_rand.h
@@ -1,8 +1,6 @@
 #ifndef __SP_HARDEN_RAND_H
 #define __SP_HARDEN_RAND_H
 
-#include "ext/standard/php_rand.h"
-#include "ext/standard/php_random.h"
 #include "zend_exceptions.h"
 
 int hook_rand(void);
diff --git a/src/tests/session_encryption/set_custom_session_handler.phpt b/src/tests/session_encryption/set_custom_session_handler.phpt
index 04edcd0b..1f3f9073 100644
--- a/src/tests/session_encryption/set_custom_session_handler.phpt
+++ b/src/tests/session_encryption/set_custom_session_handler.phpt
@@ -3,6 +3,7 @@ Set a custom session handler
 --SKIPIF--
 <?php if (!extension_loaded("snuffleupagus")) print "skip"; ?>
 <?php if (!extension_loaded("session")) print "skip"; ?>
+<?php if (PHP_VERSION_ID >= 80400) print "skip"; /* Calling session_set_save_handler() with more than 2 arguments is deprecated */ ?>
 --EXTENSIONS--
 session
 --INI--
diff --git a/src/tweetnacl.c b/src/tweetnacl.c
index 746cabc2..e6d6ed25 100644
--- a/src/tweetnacl.c
+++ b/src/tweetnacl.c
@@ -1,7 +1,6 @@
 /* Since TweetNacl doesn't come with a `randombytes` implementation,
 we're using the one from PHP.*/
 #include "php_snuffleupagus.h"
-#include "ext/standard/php_random.h"
 
 static void randombytes(unsigned char *x, unsigned long long xlen) {
   assert(SIZE_MAX >= ULLONG_MAX);  // max(size_t) > max(ull) ?