<<I also understand that the item's addresses must be byte addresses.>> Definitely not. The distinction between 'byte address' and 'word address' matters in Transact, but not C. <<Here is example from some of my (running) programs: .... short msg, recs; char cbuf [MAXBUF+1]; long eof; foptions fop; .... /* get name, foptions, record length, eof */ mpe_ffileinfo ( msg, 1, cbuf, 2, (char*)&fop, 4, (char*)&recs, 10, (char*)&eof ); if ( ccode () != CCE ) doferr ( msg, "FG:recsize" );>> Constructs like this will generally work (since the casts don't make any difference in the generated code), but they will also typically generate the diagnostic about "parameter nn points to a less strictly aligned type". It's usually better to pass the type as what it really is, or (where appropriate) as a more-demanding type. Steve