--- /dev/null
+Index: src/modules/perl/mod_perl.h
+===================================================================
+--- src/modules/perl/mod_perl.h (revision 607690)
++++ src/modules/perl/mod_perl.h (working copy)
+@@ -141,7 +141,8 @@
+ /* betting on Perl*Handlers not using CvXSUBANY
+ * mod_perl reuses this field for handler attributes
+ */
+-#define MP_CODE_ATTRS(cv) (CvXSUBANY((CV*)cv).any_i32)
++U16 *mp_code_attrs(pTHX_ CV *cv);
++#define MP_CODE_ATTRS(cv) (*mp_code_attrs(aTHX_ cv))
+
+ #define MgTypeExt(mg) (mg->mg_type == '~')
+
+Index: src/modules/perl/modperl_mgv.c
+===================================================================
+--- src/modules/perl/modperl_mgv.c (revision 607694)
++++ src/modules/perl/modperl_mgv.c (working copy)
+@@ -271,7 +271,7 @@
+ }
+ else {
+ if ((cv = get_cv(name, FALSE))) {
+- handler->attrs = (U32)MP_CODE_ATTRS(cv);
++ handler->attrs = MP_CODE_ATTRS(cv);
+ handler->mgv_cv =
+ modperl_mgv_compile(aTHX_ p, HvNAME(GvSTASH(CvGV(cv))));
+ modperl_mgv_append(aTHX_ p, handler->mgv_cv, GvNAME(CvGV(cv)));
+@@ -334,7 +334,7 @@
+ modperl_mgv_new_name(handler->mgv_obj, p, name);
+ }
+
+- handler->attrs = (U32)MP_CODE_ATTRS(cv);
++ handler->attrs = MP_CODE_ATTRS(cv);
+ /* note: this is the real function after @ISA lookup */
+ handler->mgv_cv = modperl_mgv_compile(aTHX_ p, HvNAME(GvSTASH(gv)));
+ modperl_mgv_append(aTHX_ p, handler->mgv_cv, handler_name);
+Index: src/modules/perl/modperl_types.h
+===================================================================
+--- src/modules/perl/modperl_types.h (revision 607690)
++++ src/modules/perl/modperl_types.h (working copy)
+@@ -195,7 +195,7 @@
+ const char *name;
+ CV *cv;
+ U8 flags;
+- U32 attrs;
++ U16 attrs;
+ modperl_handler_t *next;
+ };
+
+Index: src/modules/perl/modperl_util.c
+===================================================================
+--- src/modules/perl/modperl_util.c (revision 607694)
++++ src/modules/perl/modperl_util.c (working copy)
+Index: xs/Apache2/Filter/Apache2__Filter.h
+@@ -903,3 +903,13 @@
+ return retval ? SvREFCNT_inc(retval) : &PL_sv_undef;
+ }
+
++U16 *mp_code_attrs(pTHX_ CV *cv) {
++ MAGIC *mg;
++
++ if (!SvMAGICAL(cv)) {
++ sv_magic((SV*)cv, Nullsv, PERL_MAGIC_ext, NULL, -1);
++ }
++
++ mg = mg_find((SV*)cv, PERL_MAGIC_ext);
++ return &(mg->mg_private);
++}
+===================================================================
+--- xs/Apache2/Filter/Apache2__Filter.h (revision 607694)
++++ xs/Apache2/Filter/Apache2__Filter.h (working copy)
+@@ -86,9 +86,9 @@
+ return len;
+ }
+
+-static MP_INLINE U32 *modperl_filter_attributes(SV *package, SV *cvrv)
++static MP_INLINE U16 *modperl_filter_attributes(pTHX_ SV *package, SV *cvrv)
+ {
+- return (U32 *)&MP_CODE_ATTRS(SvRV(cvrv));
++ return &MP_CODE_ATTRS(SvRV(cvrv));
+ }
+
+ #ifdef MP_TRACE
+@@ -118,7 +118,7 @@
+ MP_STATIC XS(MPXS_modperl_filter_attributes)
+ {
+ dXSARGS;
+- U32 *attrs = modperl_filter_attributes(ST(0), ST(1));
++ U16 *attrs = modperl_filter_attributes(aTHX_ ST(0), ST(1));
+ I32 i;
+ #ifdef MP_TRACE
+ HV *stash = gv_stashsv(ST(0), TRUE);
+