--- a/src/pmpz.h
+++ b/src/pmpz.h
@@ -24,6 +24,9 @@
 
 #include <gmp.h>
 #include "postgres.h"
+#if PG_VERSION_NUM >= 160000
+#include <varatt.h>
+#endif
 
 typedef struct
 {
@@ -40,7 +43,7 @@ typedef struct
 /* Macros to convert mpz arguments and return values */
 
 #define PGMP_GETARG_PMPZ(n) \
-    ((pmpz*)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(n))))
+    ((pmpz*)(PG_DETOAST_DATUM(PG_GETARG_DATUM(n))))
 
 #define PGMP_GETARG_MPZ(z,n) \
     mpz_from_pmpz(z, PGMP_GETARG_PMPZ(n));
--- a/src/pmpq.h
+++ b/src/pmpq.h
@@ -24,6 +24,9 @@
 
 #include <gmp.h>
 #include "postgres.h"
+#if PG_VERSION_NUM >= 160000
+#include <varatt.h>
+#endif
 
 typedef struct
 {
@@ -69,7 +72,7 @@ typedef struct
 /* Macros to convert mpz arguments and return values */
 
 #define PGMP_GETARG_PMPQ(x) \
-    ((pmpq*)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(x))))
+    ((pmpq*)(PG_DETOAST_DATUM(PG_GETARG_DATUM(x))))
 
 #define PGMP_GETARG_MPQ(q,n) \
     mpq_from_pmpq(q, PGMP_GETARG_PMPQ(n));
--- a/src/pmpq_io.c
+++ b/src/pmpq_io.c
@@ -71,7 +71,7 @@ PGMP_PG_FUNCTION(pmpq_in_base)
             errhint("base should be between 2 and %d", PGMP_MAXBASE_IO)));
     }
 
-    str = TextDatumGetCString(PG_GETARG_POINTER(0));
+    str = TextDatumGetCString(PointerGetDatum(PG_GETARG_POINTER(0)));
 
     mpq_init(q);
     if (0 != mpq_set_str(q, str, base))
--- a/src/pmpz_io.c
+++ b/src/pmpz_io.c
@@ -70,7 +70,7 @@ PGMP_PG_FUNCTION(pmpz_in_base)
             errhint("base should be between 2 and %d", PGMP_MAXBASE_IO)));
     }
 
-    str = TextDatumGetCString(PG_GETARG_POINTER(0));
+    str = TextDatumGetCString(PointerGetDatum(PG_GETARG_POINTER(0)));
 
     if (0 != mpz_init_set_str(z, str, base))
     {
