Index: ompi/mca/pml/ob1/pml_ob1_hdr.h
===================================================================
--- ompi/mca/pml/ob1/pml_ob1_hdr.h	(revision 27454)
+++ ompi/mca/pml/ob1/pml_ob1_hdr.h	(working copy)
@@ -455,4 +455,37 @@
 #else
 #define ob1_hdr_hton(h, t, p) do{}while(0)
 #endif
-#endif
+
+static inline __opal_attribute_always_inline__ void
+ob1_hdr_copy(mca_pml_ob1_hdr_t *src, mca_pml_ob1_hdr_t *dst)
+{
+    switch(src->hdr_common.hdr_type) {
+        case MCA_PML_OB1_HDR_TYPE_MATCH:
+            memcpy( &(dst->hdr_match), &(src->hdr_match), sizeof(mca_pml_ob1_match_hdr_t) );
+            break;
+        case MCA_PML_OB1_HDR_TYPE_RNDV:
+            memcpy( &(dst->hdr_rndv), &(src->hdr_rndv), sizeof(mca_pml_ob1_rendezvous_hdr_t) );
+            break;
+        case MCA_PML_OB1_HDR_TYPE_RGET:
+            memcpy( &(dst->hdr_rget), &(src->hdr_rget), sizeof(mca_pml_ob1_rget_hdr_t) );
+            break;
+        case MCA_PML_OB1_HDR_TYPE_ACK:
+            memcpy( &(dst->hdr_ack), &(src->hdr_ack), sizeof(mca_pml_ob1_ack_hdr_t) );
+            break;
+        case MCA_PML_OB1_HDR_TYPE_FRAG:
+            memcpy( &(dst->hdr_frag), &(src->hdr_frag), sizeof(mca_pml_ob1_frag_hdr_t) );
+            break;
+        case MCA_PML_OB1_HDR_TYPE_PUT:
+            memcpy( &(dst->hdr_rdma), &(src->hdr_rdma), sizeof(mca_pml_ob1_rdma_hdr_t) );
+            break;
+        case MCA_PML_OB1_HDR_TYPE_FIN:
+            memcpy( &(dst->hdr_fin), &(src->hdr_fin), sizeof(mca_pml_ob1_fin_hdr_t) );
+            break;
+        default:
+            memcpy( &(dst->hdr_common), &(src->hdr_common), sizeof(mca_pml_ob1_common_hdr_t) );
+            break;
+    }
+}
+
+#endif  /* MCA_PML_OB1_HEADER_H */
+
Index: ompi/mca/pml/ob1/pml_ob1_recvfrag.h
===================================================================
--- ompi/mca/pml/ob1/pml_ob1_recvfrag.h	(revision 27454)
+++ ompi/mca/pml/ob1/pml_ob1_recvfrag.h	(working copy)
@@ -69,7 +69,7 @@
     unsigned char* _ptr = (unsigned char*)frag->addr;                   \
     /* init recv_frag */                                                \
     frag->btl = btl;                                                    \
-    frag->hdr = *(mca_pml_ob1_hdr_t*)hdr;                               \
+    ob1_hdr_copy( (mca_pml_ob1_hdr_t*)hdr, &frag->hdr );                \
     frag->num_segments = 1;                                             \
     _size = segs[0].seg_len;                                            \
     for( i = 1; i < cnt; i++ ) {                                        \
