diff --git a/ChangeLog b/ChangeLog
index f43d9766c7636353795c14097b4bd324687278ac..6092721cad1b10367216f689969cf4ae36ab35f2 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2005-11-10  Kevin P. Fleming  <kpfleming@digium.com>
 
+	* many files: ensure that system headers are included before Asterisk headers (issue #5693)
+
 	* channels/chan_iax2.c (complete_iax2_show_peer): don't return from function without releasing lock (issue #5685)
 
 	* channels/iax2-provision.c (iax_provision_reload): don't leak memory (issue #5700)
diff --git a/cdr/cdr_csv.c b/cdr/cdr_csv.c
index 63beb3dcb0b99159a62ffec37193f476423716a6..4577590536703040a2e2588c90911d6c54f4c345 100755
--- a/cdr/cdr_csv.c
+++ b/cdr/cdr_csv.c
@@ -27,6 +27,13 @@
  */
 
 #include <sys/types.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <time.h>
 
 #include "asterisk.h"
 
@@ -46,14 +53,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 /* #define CSV_LOGUNIQUEID 1 */
 /* #define CSV_LOGUSERFIELD 1 */
 
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <time.h>
-
 /*----------------------------------------------------
   The values are as follows:
 
diff --git a/cdr/cdr_custom.c b/cdr/cdr_custom.c
index 0658c8e44f7dbe324248f91d94db17ceffc3b72d..64fddb368201b4a7f3f8fd01730206c24de7ad61 100755
--- a/cdr/cdr_custom.c
+++ b/cdr/cdr_custom.c
@@ -29,6 +29,13 @@
  */
 
 #include <sys/types.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <time.h>
 
 #include "asterisk.h"
 
@@ -46,14 +53,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 
 #define DATE_FORMAT "%Y-%m-%d %T"
 
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <time.h>
-
 AST_MUTEX_DEFINE_STATIC(lock);
 
 static char *desc = "Customizable Comma Separated Values CDR Backend";
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index d601fc05d28bd2b0a77932c6f42c836431c5cfe8..c6df0fd3dfc2480d650851956784286b5b1f81d7 100755
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -26,6 +26,35 @@
  * \ingroup channel_drivers
  */
 
+#include <sys/mman.h>
+#include <arpa/inet.h>
+#include <dirent.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netinet/in_systm.h>
+#include <netinet/ip.h>
+#include <sys/time.h>
+#include <sys/signal.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <netdb.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <regex.h>
+#ifdef IAX_TRUNKING
+#include <sys/ioctl.h>
+#ifdef __linux__
+#include <linux/zaptel.h>
+#else
+#include <zaptel.h>
+#endif /* __linux__ */
+#endif
+
 #include "asterisk.h"
 
 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
@@ -60,34 +89,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/devicestate.h"
 #include "asterisk/netsock.h"
 
-#include <sys/mman.h>
-#include <arpa/inet.h>
-#include <dirent.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netinet/in_systm.h>
-#include <netinet/ip.h>
-#include <sys/time.h>
-#include <sys/signal.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <netdb.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <regex.h>
-#ifdef IAX_TRUNKING
-#include <sys/ioctl.h>
-#ifdef __linux__
-#include <linux/zaptel.h>
-#else
-#include <zaptel.h>
-#endif /* __linux__ */
-#endif
 #include "iax2.h"
 #include "iax2-parser.h"
 #include "iax2-provision.h"
diff --git a/channels/iax2-parser.c b/channels/iax2-parser.c
index fbb4d0155928167d178111fd8491ad6d4053703a..3ef80a39c3c4387be161b4439020c892d3fc05c9 100755
--- a/channels/iax2-parser.c
+++ b/channels/iax2-parser.c
@@ -26,6 +26,10 @@
 #include <sys/socket.h>
 #include <string.h>
 #include <netinet/in.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
 
 #include "asterisk.h"
 
@@ -34,15 +38,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/frame.h"
 #include "asterisk/utils.h"
 #include "asterisk/unaligned.h"
-#include <arpa/inet.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
 #include "iax2.h"
 #include "iax2-parser.h"
 #include "iax2-provision.h"
 
-
 static int frames = 0;
 static int iframes = 0;
 static int oframes = 0;
diff --git a/channels/iax2-provision.c b/channels/iax2-provision.c
index c9a803bfab4d9a5a76d240d1923b28e382318879..c1b6f4b3d20ba3b1fab35144e4a78d14f794b430 100755
--- a/channels/iax2-provision.c
+++ b/channels/iax2-provision.c
@@ -21,6 +21,16 @@
  *
  */
 
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <netdb.h>
+#include <netinet/in.h>
+#include <netinet/in_systm.h>
+#include <netinet/ip.h>
+#include <sys/socket.h>
+
 #include "asterisk.h"
 
 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
@@ -33,16 +43,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/options.h"
 #include "asterisk/md5.h"
 #include "asterisk/astdb.h"
-#include <netinet/in.h>
-#include <netinet/in_systm.h>
-#include <netinet/ip.h>
-#include <sys/socket.h>
 #include "asterisk/utils.h"
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <netdb.h>
 #include "iax2.h"
 #include "iax2-provision.h"
 #include "iax2-parser.h"
diff --git a/funcs/pbx_functions.c b/funcs/pbx_functions.c
index f9422bf9559ab6dd27a254c74759b02ad2b41767..2d5c519c9001e35b577789f065c0a479c5e8541d 100755
--- a/funcs/pbx_functions.c
+++ b/funcs/pbx_functions.c
@@ -24,6 +24,7 @@
 
 #include <sys/types.h>
 #include <stdlib.h>
+#include <stdio.h>
 
 #include "asterisk.h"