diff --git a/src/sbbs3/fidodefs.h b/src/sbbs3/fidodefs.h
new file mode 100644
index 0000000000000000000000000000000000000000..9e417733d6b75d118d49a8b2f27891a37eea4639
--- /dev/null
+++ b/src/sbbs3/fidodefs.h
@@ -0,0 +1,162 @@
+/* fidodefs.h */
+
+/* FidoNet constants, macros, and structure definitions */
+
+/* $Id$ */
+
+/****************************************************************************
+ * @format.tab-size 4		(Plain Text/Source Code File Header)			*
+ * @format.use-tabs true	(see http://www.synchro.net/ptsc_hdr.html)		*
+ *																			*
+ * Copyright 2003 Rob Swindell - http://www.synchro.net/copyright.html		*
+ *																			*
+ * This program is free software; you can redistribute it and/or			*
+ * modify it under the terms of the GNU General Public License				*
+ * as published by the Free Software Foundation; either version 2			*
+ * of the License, or (at your option) any later version.					*
+ * See the GNU General Public License for more details: gpl.txt or			*
+ * http://www.fsf.org/copyleft/gpl.html										*
+ *																			*
+ * Anonymous FTP access to the most recent released source is available at	*
+ * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net	*
+ *																			*
+ * Anonymous CVS access to the development source and modification history	*
+ * is available at cvs.synchro.net:/cvsroot/sbbs, example:					*
+ * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs login			*
+ *     (just hit return, no password is necessary)							*
+ * cvs -d :pserver:anonymous@cvs.synchro.net:/cvsroot/sbbs checkout src		*
+ *																			*
+ * For Synchronet coding style and modification guidelines, see				*
+ * http://www.synchro.net/source.html										*
+ *																			*
+ * You are encouraged to submit any modifications (preferably in Unix diff	*
+ * format) via e-mail to mods@synchro.net									*
+ *																			*
+ * Note: If this box doesn't appear square, then you need to fix your tabs.	*
+ ****************************************************************************/
+
+#ifndef _FIDODEFS_H_
+#define _FIDODEFS_H_
+
+#include "gen_defs.h"	/* uchar */
+
+#define FIDO_NAME_LEN	36
+#define FIDO_SUBJ_LEN	72
+#define FIDO_TIME_LEN	20
+#define FIDO_PASS_LEN	8
+									/* Attribute bits for fmsghdr_t.attr	*/
+#define FIDO_PRIVATE	(1<<0)		/* Private message						*/
+#define FIDO_CRASH		(1<<1)		/* Crash-mail (send immediately)		*/
+#define FIDO_RECV		(1<<2)		/* Received successfully				*/
+#define FIDO_SENT		(1<<3)		/* Sent successfully					*/
+#define FIDO_FILE		(1<<4)		/* File attached						*/
+#define FIDO_INTRANS	(1<<5)		/* In transit							*/
+#define FIDO_ORPHAN 	(1<<6)		/* Orphan								*/
+#define FIDO_KILLSENT	(1<<7)		/* Kill it after sending it				*/
+#define FIDO_LOCAL		(1<<8)		/* Created locally - on this system		*/
+#define FIDO_HOLD		(1<<9)		/* Hold - don't send it yet				*/
+#define FIDO_FREQ		(1<<11) 	/* File request							*/
+#define FIDO_RRREQ		(1<<12) 	/* Return receipt request				*/
+#define FIDO_RR 		(1<<13) 	/* This is a return receipt				*/
+#define FIDO_AUDIT		(1<<14) 	/* Audit request						*/
+#define FIDO_FUPREQ 	(1<<15) 	/* File update request					*/
+
+#if defined(_WIN32) || defined(__BORLANDC__)
+	#define PRAGMA_PACK
+#endif
+
+#if defined(PRAGMA_PACK)
+	#define _PACK
+#else
+	#define _PACK __attribute__ ((packed))
+#endif
+
+#if defined(PRAGMA_PACK)
+#pragma pack(push)		/* Disk image structures must be packed */
+#pragma pack(1)
+#endif
+
+typedef struct _PACK {				/* Fidonet Packet Header				*/
+    short orignode,					/* Origination Node of Packet			*/
+          destnode,					/* Destination Node of Packet			*/
+          year,						/* Year of Packet Creation e.g. 1995	*/
+          month,					/* Month of Packet Creation 0-11		*/
+          day,						/* Day of Packet Creation 1-31			*/
+          hour,						/* Hour of Packet Creation 0-23			*/
+          min,						/* Minute of Packet Creation 0-59		*/
+          sec,						/* Second of Packet Creation 0-59		*/
+          baud,						/* Max Baud Rate of Orig & Dest			*/
+          pkttype,					/* Packet Type (-1 is obsolete)			*/
+          orignet,					/* Origination Net of Packet			*/
+          destnet;					/* Destination Net of Packet			*/
+    uchar prodcode,					/* Product Code (00h is Fido)			*/
+          sernum,					/* Binary Serial Number or NULL			*/
+          password[FIDO_PASS_LEN];	/* Session Password or NULL				*/
+    short origzone,					/* Origination Zone of Packet or NULL	*/
+          destzone;					/* Destination Zone of Packet or NULL	*/
+	union {							
+		char padding[20];			/* Fill Characters (Type 2.0)			*/
+		struct {					/* OR Type 2+ Packet Header Info		*/
+			short auxnet,			/* Orig Net if Origin is a Point		*/
+				  cwcopy;			/* Must be Equal to cword				*/
+			uchar prodcode, 		/* Product Code							*/
+				  revision; 		/* Revision								*/
+			short cword,			/* Compatibility Word					*/
+				  origzone, 		/* Zone of Packet Sender or NULL		*/
+				  destzone, 		/* Zone of Packet Receiver or NULL		*/
+				  origpoint,		/* Origination Point of Packet			*/
+				  destpoint;		/* Destination Point of Packet			*/
+			char empty[4];			
+		} two_plus;					
+		struct {					/* OR Type 2.2 Packet Header Info		*/
+			char origdomn[8];		/* Origination Domain					*/
+			char destdomn[8];		/* Destination Domain					*/
+			char empty[4]; 			/* Product Specific Data				*/
+		} two_two;
+	} fill;
+
+} fpkthdr_t;
+
+#define FIDO_PACKET_HDR_LEN 58
+
+typedef struct _PACK {				/* FidoNet Packed Message Header 		*/
+	short	type;					/* Message type: 2						*/
+	short	orignode;
+	short	destnode;
+	short	orignet;
+	short	destnet;
+	short	attr;
+	short	cost;
+	char	time[FIDO_TIME_LEN];	/* Time in goof-ball ASCII format		*/
+} fpkdmsg_t;
+
+#define FIDO_PACKED_MSG_HDR_LEN 34	/* Fixed header fields only */
+
+typedef struct _PACK {				/* FidoNet stored msg (*.msg) header	*/
+	char	from[FIDO_NAME_LEN],	/* From user							*/
+			to[FIDO_NAME_LEN], 		/* To user								*/
+			subj[FIDO_SUBJ_LEN],	/* Message title						*/
+			time[FIDO_TIME_LEN];	/* Time in goof-ball ASCII format		*/
+	short	read,					/* Times read							*/
+			destnode,				/* Destination node						*/
+			orignode,				/* Origin node							*/
+			cost,					/* Cost in pennies						*/
+			orignet,				/* Origin net							*/
+			destnet,				/* Destination net						*/
+			destzone,				/* Destination zone						*/
+			origzone,				/* Origin zone							*/
+			destpoint,				/* Destination point					*/
+			origpoint,				/* Origin point							*/
+			re, 					/* Message number regarding				*/
+			attr,					/* Attributes - see FIDO_*				*/
+			next;					/* Next message number in stream		*/
+} fmsghdr_t;
+
+#define FIDO_STORED_MSG_HDR_LEN 190
+
+#if defined(PRAGMA_PACK)
+#pragma pack(pop)		/* original packing */
+#endif
+
+#endif	/* Don't add anything after this line */
+
diff --git a/src/sbbs3/sbbsdefs.h b/src/sbbs3/sbbsdefs.h
index 685ab67bc02834fcae8dbc3cc8930ef180d2bd36..2f1e2394c790f0791565eb9942ec256606e7b8bc 100644
--- a/src/sbbs3/sbbsdefs.h
+++ b/src/sbbs3/sbbsdefs.h
@@ -38,10 +38,12 @@
 #ifndef _SBBSDEFS_H
 #define _SBBSDEFS_H
 
-#include "gen_defs.h"
-#include "nodedefs.h"
 #include <time.h>
 
+#include "gen_defs.h"	/* uchar, ushort, uint, ulong, etc. */
+#include "nodedefs.h"	/* node_t */
+#include "fidodefs.h"	/* fmsghdr_t, fpkthdr_t, FIDO_*, etc. */
+
 /*************/
 /* Constants */
 /*************/
@@ -217,23 +219,6 @@ typedef struct {
 #define NMAIL_FILE		(1<<5)		/* Allow file attachments */
 #define NMAIL_DIRECT	(1<<6)		/* Default netmail to direct */
 
-									/* Attribute bits for fido msg header */
-#define FIDO_PRIVATE	(1<<0)		/* Private message */
-#define FIDO_CRASH		(1<<1)		/* Crash-mail (send immediately) */
-#define FIDO_RECV		(1<<2)		/* Received successfully */
-#define FIDO_SENT		(1<<3)		/* Sent successfully */
-#define FIDO_FILE		(1<<4)		/* File attached */
-#define FIDO_INTRANS	(1<<5)		/* In transit */
-#define FIDO_ORPHAN 	(1<<6)		/* Orphan */
-#define FIDO_KILLSENT	(1<<7)		/* Kill it after sending it */
-#define FIDO_LOCAL		(1<<8)		/* Created locally - on this system */
-#define FIDO_HOLD		(1<<9)		/* Hold - don't send it yet */
-#define FIDO_FREQ		(1<<11) 	/* File request */
-#define FIDO_RRREQ		(1<<12) 	/* Return receipt request */
-#define FIDO_RR 		(1<<13) 	/* This is a return receipt */
-#define FIDO_AUDIT		(1<<14) 	/* Audit request */
-#define FIDO_FUPREQ 	(1<<15) 	/* File update request */
-
 									/* Bit values for sub_cfg and sav_sub_cfg	*/
 #define SUB_CFG_NSCAN	0x0005		/* bits 0 and 2								*/
 #define SUB_CFG_SSCAN	0x0002		/* bit 1									*/
@@ -1016,27 +1001,6 @@ typedef struct {						/* System/Node Statistics */
 
 } stats_t;
 
-typedef struct {						/* FidoNet msg header */
-	char	from[36],					/* From user */
-			to[36], 					/* To user */
-			subj[72],					/* Message title */
-			time[20];					/* Time in goof-ball ASCII format */
-	short	read,						/* Times read */
-			destnode,					/* Destination node */
-			orignode,					/* Origin node */
-			cost,						/* Cost in pennies */
-			orignet,					/* Origin net */
-			destnet,					/* Destination net */
-			destzone,					/* Destination zone */
-			origzone,					/* Origin zone */
-			destpoint,					/* Destination point */
-			origpoint,					/* Origin point */
-			re, 						/* Message number regarding */
-			attr,						/* Attributes - see FIDO_* */
-			next;						/* Next message number in stream */
-
-} fmsghdr_t;
-
 typedef struct {						/* Sub-board scan information */
 	ushort	cfg;						/* User's configuration */
 	ulong	ptr;						/* New-message pointer */