diff -Naur mjpegtools-1.8.0.orig/mpeg2enc/encodertypes.h mjpegtools-1.8.0/mpeg2enc/encodertypes.h
--- mjpegtools-1.8.0.orig/mpeg2enc/encodertypes.h	2008-12-10 10:57:56.000000000 -0600
+++ mjpegtools-1.8.0/mpeg2enc/encodertypes.h	2008-12-10 11:02:08.000000000 -0600
@@ -26,7 +26,7 @@
 
 #include "config.h"
 
-
+#include <stdlib.h>
 
 class Parity
 {
diff -Naur mjpegtools-1.8.0.orig/mpeg2enc/macroblock.cc mjpegtools-1.8.0/mpeg2enc/macroblock.cc
--- mjpegtools-1.8.0.orig/mpeg2enc/macroblock.cc	2008-12-10 10:57:56.000000000 -0600
+++ mjpegtools-1.8.0/mpeg2enc/macroblock.cc	2008-12-10 11:02:41.000000000 -0600
@@ -20,6 +20,7 @@
  */
 
 #include <stdio.h>
+#include <limits.h>
 
 #include "macroblock.hh"
 #include "mpeg2syntaxcodes.h"
diff -Naur mjpegtools-1.8.0.orig/mpeg2enc/picturereader.cc mjpegtools-1.8.0/mpeg2enc/picturereader.cc
--- mjpegtools-1.8.0.orig/mpeg2enc/picturereader.cc	2008-12-10 10:57:56.000000000 -0600
+++ mjpegtools-1.8.0/mpeg2enc/picturereader.cc	2008-12-10 11:03:04.000000000 -0600
@@ -25,6 +25,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
+#include <limits.h>
 #include <errno.h>
 #include "simd.h"
 #include "mpeg2encoder.hh"
diff -Naur mjpegtools-1.8.0.orig/mplex/inputstrm.cpp mjpegtools-1.8.0/mplex/inputstrm.cpp
--- mjpegtools-1.8.0.orig/mplex/inputstrm.cpp	2008-12-10 10:58:55.000000000 -0600
+++ mjpegtools-1.8.0/mplex/inputstrm.cpp	2008-12-10 11:03:36.000000000 -0600
@@ -23,6 +23,7 @@
 
 #include <config.h>
 #include <assert.h>
+#include <limits.h>
 
 #include "mjpeg_types.h"
 #include "inputstrm.hpp"
diff -Naur mjpegtools-1.8.0.orig/mplex/padstrm.cpp mjpegtools-1.8.0/mplex/padstrm.cpp
--- mjpegtools-1.8.0.orig/mplex/padstrm.cpp	2008-12-10 10:58:55.000000000 -0600
+++ mjpegtools-1.8.0/mplex/padstrm.cpp	2008-12-10 11:04:06.000000000 -0600
@@ -24,6 +24,7 @@
 #include "config.h"
 #endif
 
+#include <string.h>
 #include "padstrm.hpp"
 
 
diff -Naur mjpegtools-1.8.0.orig/mplex/multiplexor.cpp mjpegtools-1.8.0/mplex/multiplexor.cpp
--- mjpegtools-1.8.0.orig/mplex/multiplexor.cpp	2008-12-10 10:58:55.000000000 -0600
+++ mjpegtools-1.8.0/mplex/multiplexor.cpp	2008-12-10 11:04:53.000000000 -0600
@@ -22,6 +22,7 @@
 #include <config.h>
 #include <math.h>
 #include <stdlib.h>
+#include <string.h>
 
 #include <mjpeg_types.h>
 #include <mjpeg_logging.h>
diff -Naur mjpegtools-1.8.0.orig/mplex/main.cpp mjpegtools-1.8.0/mplex/main.cpp
--- mjpegtools-1.8.0.orig/mplex/main.cpp	2008-12-10 10:58:55.000000000 -0600
+++ mjpegtools-1.8.0/mplex/main.cpp	2008-12-10 11:05:20.000000000 -0600
@@ -31,6 +31,7 @@
 #include <getopt.h>
 #endif
 #include <string>
+#include <string.h>
 #include <memory>
 #include <sys/stat.h>
 #ifndef _WIN32
diff -Naur mjpegtools-1.8.0.orig/y4mdenoise/Set.hh mjpegtools-1.8.0/y4mdenoise/Set.hh
--- mjpegtools-1.8.0.orig/y4mdenoise/Set.hh	2008-12-10 11:00:49.000000000 -0600
+++ mjpegtools-1.8.0/y4mdenoise/Set.hh	2008-12-10 11:06:30.000000000 -0600
@@ -23,7 +23,7 @@
 		// How we implement ourselves.
 	
 public:
-	typedef typename Imp::Allocator Allocator;
+	typedef typename Imp::Allocator_t Allocator;
 		// The type of allocator to use to allocate items in the set.
 
 	Set (const PRED &a_rPred = PRED(),
diff -Naur mjpegtools-1.8.0.orig/y4mdenoise/SkipList.hh mjpegtools-1.8.0/y4mdenoise/SkipList.hh
--- mjpegtools-1.8.0.orig/y4mdenoise/SkipList.hh	2008-12-10 11:00:49.000000000 -0600
+++ mjpegtools-1.8.0/y4mdenoise/SkipList.hh	2008-12-10 11:09:34.000000000 -0600
@@ -57,19 +57,19 @@
 		// Will give good sorting for up to e^10 items.
 	
 public:
-	typedef Allocator<Node,HEADERCHUNK> Allocator;
+	typedef Allocator<Node,HEADERCHUNK> Allocator_t;
 		// The type of node allocator to use.
 
-	static Allocator sm_oNodeAllocator;
+	static Allocator_t sm_oNodeAllocator;
 		// The default node allocator.
 
 	SkipList (const PRED &a_rPred = PRED(),
-			Allocator &a_rAlloc = sm_oNodeAllocator);
+			Allocator_t &a_rAlloc = sm_oNodeAllocator);
 		// Default constructor.  Must be followed by Init().
 
 	SkipList (Status_t &a_reStatus, bool a_bAllowDuplicates,
 			uint32_t a_nRandSeed, const PRED &a_rPred = PRED(),
-			Allocator &a_rAlloc = sm_oNodeAllocator);
+			Allocator_t &a_rAlloc = sm_oNodeAllocator);
 		// Constructor.  Specify whether or not duplicates are allowed,
 		// and provide a random number seed.
 
@@ -255,7 +255,7 @@
 
 private:
 	
-	Allocator &m_rNodeAllocator;
+	Allocator_t &m_rNodeAllocator;
 		// Where we get memory to allocate nodes.
 
 	bool m_bAllowDuplicates;
@@ -337,7 +337,7 @@
 
 // The default node allocator.  Allocates 64K at a time.
 template <class KEY, class VALUE, class KEYFN, class PRED>
-typename SkipList<KEY,VALUE,KEYFN,PRED>::Allocator
+typename SkipList<KEY,VALUE,KEYFN,PRED>::Allocator_t
 	SkipList<KEY,VALUE,KEYFN,PRED>::sm_oNodeAllocator (65536);
 
 
@@ -345,7 +345,7 @@
 // Default constructor.  Must be followed by Init().
 template <class KEY, class VALUE, class KEYFN, class PRED>
 SkipList<KEY,VALUE,KEYFN,PRED>::SkipList (const PRED &a_rPred,
-		Allocator &a_rAlloc)
+		Allocator_t &a_rAlloc)
 	: m_rNodeAllocator (a_rAlloc), m_oPred (a_rPred)
 {
 	// Set up some defaults.
@@ -371,7 +371,7 @@
 template <class KEY, class VALUE, class KEYFN, class PRED>
 SkipList<KEY,VALUE,KEYFN,PRED>::SkipList (Status_t &a_reStatus,
 		bool a_bAllowDuplicates, uint32_t a_nRandSeed,
-		const PRED &a_rPred, Allocator &a_rAlloc)
+		const PRED &a_rPred, Allocator_t &a_rAlloc)
 	: m_rNodeAllocator (a_rAlloc), m_oPred (a_rPred)
 {
 	// Make sure they didn't start us off with an error.