diff --git a/src/multiset.c b/src/multiset.c
index 5eaedef7aee515903d43c023e2b407864df271b7..f09002dfda695d1b4319263320959ba15afe11bc 100644
--- a/src/multiset.c
+++ b/src/multiset.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: multiset.c,v 1.111 2008/05/11 14:55:53 mast Exp $
+|| $Id: multiset.c,v 1.112 2008/05/11 21:30:59 mast Exp $
 */
 
 #include "global.h"
@@ -145,8 +145,13 @@ PMOD_EXPORT const char msg_multiset_no_node_refs[] =
    ((MSD_B)->cmp_less.type != T_INT &&					\
     is_identical (&(MSD_A)->cmp_less, &(MSD_B)->cmp_less)))
 
+union nodeptr {
+  union msnode *ms;
+  struct rb_node_hdr *rb;
+};
+
 #define HDR(NODE) ((struct rb_node_hdr *) msnode_check (NODE))
-#define PHDR(NODEPTR) ((struct rb_node_hdr **) msnode_ptr_check (NODEPTR))
+#define PHDR(NODEPTR) (&((union nodeptr *) msnode_ptr_check (NODEPTR))->rb)
 #define RBNODE(NODE) ((union msnode *) rb_node_check (NODE))
 #define INODE(NODE) ((union msnode *) msnode_ind_check (NODE))
 #define IVNODE(NODE) ((union msnode *) msnode_indval_check (NODE))