diff --git a/Lib/irix5/CL.py b/Lib/irix5/CL.py
index 41c56e0..468ecaa 100755
--- a/Lib/irix5/CL.py
+++ b/Lib/irix5/CL.py
@@ -1,236 +1,24 @@
-#
-# cl.h - Compression Library typedefs and prototypes
-#
-#   01/07/92	Cleanup by Brian Knittel
-#   02/18/92	Original Version by Brian Knittel
-#
-
-#
-# originalFormat parameter values
-#
-MAX_NUMBER_OF_ORIGINAL_FORMATS = 32
-
-# Audio
-MONO = 0
-STEREO_INTERLEAVED = 1
-
-# Video 
-# YUV is defined to be the same thing as YCrCb (luma and two chroma components).
-# 422 is appended to YUV (or YCrCb) if the chroma is sub-sampled by 2 
-#	horizontally, packed as U Y1 V Y2 (byte order).
-# 422HC is appended to YUV (or YCrCb) if the chroma is sub-sampled by 2 
-#	vertically in addition to horizontally, and is packed the same as 
-#	422 except that U & V are not valid on the second line.
-#
-RGB = 0
-RGBX = 1
-RGBA = 2
-RGB332 = 3
-
-GRAYSCALE = 4
-Y = 4
-YUV = 5	
-YCbCr = 5	
-YUV422 = 6				# 4:2:2 sampling
-YCbCr422 = 6				# 4:2:2 sampling
-YUV422HC = 7				# 4:1:1 sampling
-YCbCr422HC = 7				# 4:1:1 sampling
-YUV422DC = 7				# 4:1:1 sampling
-YCbCr422DC = 7				# 4:1:1 sampling
-
-BEST_FIT = -1	
-
-def BytesPerSample(s):
-	if s in (MONO, YUV):
-		return 2
-	elif s == STEREO_INTERLEAVED:
-		return 4
-	else:
-		return 0
-
-def BytesPerPixel(f):
-	if f in (RGB, YUV):
-		return 3
-	elif f in (RGBX, RGBA):
-		return 4
-	elif f in (RGB332, GRAYSCALE):
-		return 1
-	else:
-		return 2
-
-def AudioFormatName(f):
-	if f == MONO:
-		return 'MONO'
-	elif f == STEREO_INTERLEAVED:
-		return 'STEREO_INTERLEAVED'
-	else:
-		return 'Not a valid format'
-
-def VideoFormatName(f):
-	if f == RGB:
-		return 'RGB'
-	elif f == RGBX:
-		return 'RGBX'
-	elif f == RGBA:
-		return 'RGBA'
-	elif f == RGB332:
-		return 'RGB332'
-	elif f == GRAYSCALE:
-		return 'GRAYSCALE'
-	elif f == YUV:
-		return 'YUV'
-	elif f == YUV422:
-		return 'YUV422'
-	elif f == YUV422DC:
-		return 'YUV422DC'
-	else:
-		return 'Not a valid format'
-
-MAX_NUMBER_OF_AUDIO_ALGORITHMS = 32
-MAX_NUMBER_OF_VIDEO_ALGORITHMS = 32
-
-#
-# Algorithm types
-#
-AUDIO = 0
-VIDEO = 1
-
-def AlgorithmNumber(scheme):
-	return scheme & 0x7fff
-def AlgorithmType(scheme):
-	return (scheme >> 15) & 1
-def Algorithm(type, n):
-	return n | ((type & 1) << 15)
-
-#
-# "compressionScheme" argument values
-#
-UNKNOWN_SCHEME = -1
-
-UNCOMPRESSED_AUDIO = Algorithm(AUDIO, 0)
-G711_ULAW = Algorithm(AUDIO, 1)
-ULAW = Algorithm(AUDIO, 1)
-G711_ALAW = Algorithm(AUDIO, 2)
-ALAW = Algorithm(AUDIO, 2)
-AWARE_MPEG_AUDIO = Algorithm(AUDIO, 3)
-AWARE_MULTIRATE = Algorithm(AUDIO, 4)
-    
-UNCOMPRESSED = Algorithm(VIDEO, 0)
-UNCOMPRESSED_VIDEO = Algorithm(VIDEO, 0)
-RLE = Algorithm(VIDEO, 1)
-JPEG = Algorithm(VIDEO, 2)
-MPEG_VIDEO = Algorithm(VIDEO, 3)
-MVC1 = Algorithm(VIDEO, 4)
-RTR = Algorithm(VIDEO, 5)
-RTR1 = Algorithm(VIDEO, 5)
-
-#
-# Parameters
-#
-MAX_NUMBER_OF_PARAMS = 256
-# Default Parameters
-IMAGE_WIDTH = 0
-IMAGE_HEIGHT = 1 
-ORIGINAL_FORMAT = 2
-INTERNAL_FORMAT = 3
-COMPONENTS = 4
-BITS_PER_COMPONENT = 5
-FRAME_RATE = 6
-COMPRESSION_RATIO = 7
-EXACT_COMPRESSION_RATIO = 8
-FRAME_BUFFER_SIZE = 9 
-COMPRESSED_BUFFER_SIZE = 10
-BLOCK_SIZE = 11
-PREROLL = 12
-FRAME_TYPE = 13
-ALGORITHM_ID = 14
-ALGORITHM_VERSION = 15
-ORIENTATION = 16
-NUMBER_OF_FRAMES = 17
-SPEED = 18
-LAST_FRAME_INDEX = 19
-NUMBER_OF_PARAMS = 20
-
-# JPEG Specific Parameters
-QUALITY_FACTOR = NUMBER_OF_PARAMS + 0
-
-# MPEG Specific Parameters
-END_OF_SEQUENCE = NUMBER_OF_PARAMS + 0
-
-# RTR Specific Parameters
-QUALITY_LEVEL = NUMBER_OF_PARAMS + 0
-ZOOM_X = NUMBER_OF_PARAMS + 1
-ZOOM_Y = NUMBER_OF_PARAMS + 2
-
-#
-# Parameter value types
-#
-ENUM_VALUE = 0				# only certain constant values are valid
-RANGE_VALUE = 1				# any value in a given range is valid
-FLOATING_ENUM_VALUE = 2			# only certain constant floating point values are valid
-FLOATING_RANGE_VALUE = 3		# any value in a given floating point range is valid
-
-#
-# Algorithm Functionality
-#
-DECOMPRESSOR = 1
-COMPRESSOR = 2
-CODEC = 3
-
-#
-# Buffer types
-#
-NONE = 0
-FRAME = 1
-DATA = 2
-
-#
-# Frame types
-#
-NONE = 0
-KEYFRAME = 1
-INTRA = 1
-PREDICTED = 2
-BIDIRECTIONAL = 3
-
-#
-# Orientations
-#
-TOP_DOWN = 0
-BOTTOM_UP = 1
-
-#
-# SGI Proprietaty Algorithm Header Start Code
-#
-HEADER_START_CODE = 0xc1C0DEC
-
-#
-# error codes
-#
-
-BAD_NO_BUFFERSPACE =  -2		# no space for internal buffers
-BAD_PVBUFFER =  -3			# param/val buffer doesn't make sense
-BAD_BUFFERLENGTH_NEG =  -4		# negative buffer length
-BAD_BUFFERLENGTH_ODD =  -5		# odd length parameter/value buffer
-BAD_PARAM =  -6				# invalid parameter
-BAD_COMPRESSION_SCHEME =  -7		# compression scheme parameter invalid
-BAD_COMPRESSOR_HANDLE =  -8		# compression handle parameter invalid
-BAD_COMPRESSOR_HANDLE_POINTER = -9	# compression handle pointer invalid
-BAD_BUFFER_HANDLE = -10			# buffer handle invalid
-BAD_BUFFER_QUERY_SIZE = -11		# buffer query size too large
-JPEG_ERROR = -12			# error from libjpeg
-BAD_FRAME_SIZE = -13			# frame size invalid
-PARAM_OUT_OF_RANGE = -14		# parameter out of range
-ADDED_ALGORITHM_ERROR = -15		# added algorithm had a unique error
-BAD_ALGORITHM_TYPE = -16		# bad algorithm type
-BAD_ALGORITHM_NAME = -17		# bad algorithm name
-BAD_BUFFERING = -18			# bad buffering calls
-BUFFER_NOT_CREATED = -19		# buffer not created
-BAD_BUFFER_EXISTS = -20			# buffer already created
-BAD_INTERNAL_FORMAT = -21		# invalid internal format
-BAD_BUFFER_POINTER = -22		# invalid buffer pointer
-FRAME_BUFFER_SIZE_ZERO = -23		# frame buffer has zero size
-BAD_STREAM_HEADER = -24			# invalid stream header
-
-BAD_LICENSE = -25			# netls license not valid
-AWARE_ERROR = -26			# error from libawcmp
+# Backward compatible module CL.
+# All relevant symbols are now defined in the module cl.
+try:
+	from cl import *
+except ImportError:
+	from CL_old import *
+else:
+	del CompressImage
+	del DecompressImage
+	del GetAlgorithmName
+	del OpenCompressor
+	del OpenDecompressor
+	del QueryAlgorithms
+	del QueryMaxHeaderSize
+	del QueryScheme
+	del QuerySchemeFromName
+	del SetDefault
+	del SetMax
+	del SetMin
+	try:
+		del cvt_type
+	except NameError:
+		pass
+	del error
diff --git a/Lib/irix5/CL_old.py b/Lib/irix5/CL_old.py
new file mode 100755
index 0000000..41c56e0
--- /dev/null
+++ b/Lib/irix5/CL_old.py
@@ -0,0 +1,236 @@
+#
+# cl.h - Compression Library typedefs and prototypes
+#
+#   01/07/92	Cleanup by Brian Knittel
+#   02/18/92	Original Version by Brian Knittel
+#
+
+#
+# originalFormat parameter values
+#
+MAX_NUMBER_OF_ORIGINAL_FORMATS = 32
+
+# Audio
+MONO = 0
+STEREO_INTERLEAVED = 1
+
+# Video 
+# YUV is defined to be the same thing as YCrCb (luma and two chroma components).
+# 422 is appended to YUV (or YCrCb) if the chroma is sub-sampled by 2 
+#	horizontally, packed as U Y1 V Y2 (byte order).
+# 422HC is appended to YUV (or YCrCb) if the chroma is sub-sampled by 2 
+#	vertically in addition to horizontally, and is packed the same as 
+#	422 except that U & V are not valid on the second line.
+#
+RGB = 0
+RGBX = 1
+RGBA = 2
+RGB332 = 3
+
+GRAYSCALE = 4
+Y = 4
+YUV = 5	
+YCbCr = 5	
+YUV422 = 6				# 4:2:2 sampling
+YCbCr422 = 6				# 4:2:2 sampling
+YUV422HC = 7				# 4:1:1 sampling
+YCbCr422HC = 7				# 4:1:1 sampling
+YUV422DC = 7				# 4:1:1 sampling
+YCbCr422DC = 7				# 4:1:1 sampling
+
+BEST_FIT = -1	
+
+def BytesPerSample(s):
+	if s in (MONO, YUV):
+		return 2
+	elif s == STEREO_INTERLEAVED:
+		return 4
+	else:
+		return 0
+
+def BytesPerPixel(f):
+	if f in (RGB, YUV):
+		return 3
+	elif f in (RGBX, RGBA):
+		return 4
+	elif f in (RGB332, GRAYSCALE):
+		return 1
+	else:
+		return 2
+
+def AudioFormatName(f):
+	if f == MONO:
+		return 'MONO'
+	elif f == STEREO_INTERLEAVED:
+		return 'STEREO_INTERLEAVED'
+	else:
+		return 'Not a valid format'
+
+def VideoFormatName(f):
+	if f == RGB:
+		return 'RGB'
+	elif f == RGBX:
+		return 'RGBX'
+	elif f == RGBA:
+		return 'RGBA'
+	elif f == RGB332:
+		return 'RGB332'
+	elif f == GRAYSCALE:
+		return 'GRAYSCALE'
+	elif f == YUV:
+		return 'YUV'
+	elif f == YUV422:
+		return 'YUV422'
+	elif f == YUV422DC:
+		return 'YUV422DC'
+	else:
+		return 'Not a valid format'
+
+MAX_NUMBER_OF_AUDIO_ALGORITHMS = 32
+MAX_NUMBER_OF_VIDEO_ALGORITHMS = 32
+
+#
+# Algorithm types
+#
+AUDIO = 0
+VIDEO = 1
+
+def AlgorithmNumber(scheme):
+	return scheme & 0x7fff
+def AlgorithmType(scheme):
+	return (scheme >> 15) & 1
+def Algorithm(type, n):
+	return n | ((type & 1) << 15)
+
+#
+# "compressionScheme" argument values
+#
+UNKNOWN_SCHEME = -1
+
+UNCOMPRESSED_AUDIO = Algorithm(AUDIO, 0)
+G711_ULAW = Algorithm(AUDIO, 1)
+ULAW = Algorithm(AUDIO, 1)
+G711_ALAW = Algorithm(AUDIO, 2)
+ALAW = Algorithm(AUDIO, 2)
+AWARE_MPEG_AUDIO = Algorithm(AUDIO, 3)
+AWARE_MULTIRATE = Algorithm(AUDIO, 4)
+    
+UNCOMPRESSED = Algorithm(VIDEO, 0)
+UNCOMPRESSED_VIDEO = Algorithm(VIDEO, 0)
+RLE = Algorithm(VIDEO, 1)
+JPEG = Algorithm(VIDEO, 2)
+MPEG_VIDEO = Algorithm(VIDEO, 3)
+MVC1 = Algorithm(VIDEO, 4)
+RTR = Algorithm(VIDEO, 5)
+RTR1 = Algorithm(VIDEO, 5)
+
+#
+# Parameters
+#
+MAX_NUMBER_OF_PARAMS = 256
+# Default Parameters
+IMAGE_WIDTH = 0
+IMAGE_HEIGHT = 1 
+ORIGINAL_FORMAT = 2
+INTERNAL_FORMAT = 3
+COMPONENTS = 4
+BITS_PER_COMPONENT = 5
+FRAME_RATE = 6
+COMPRESSION_RATIO = 7
+EXACT_COMPRESSION_RATIO = 8
+FRAME_BUFFER_SIZE = 9 
+COMPRESSED_BUFFER_SIZE = 10
+BLOCK_SIZE = 11
+PREROLL = 12
+FRAME_TYPE = 13
+ALGORITHM_ID = 14
+ALGORITHM_VERSION = 15
+ORIENTATION = 16
+NUMBER_OF_FRAMES = 17
+SPEED = 18
+LAST_FRAME_INDEX = 19
+NUMBER_OF_PARAMS = 20
+
+# JPEG Specific Parameters
+QUALITY_FACTOR = NUMBER_OF_PARAMS + 0
+
+# MPEG Specific Parameters
+END_OF_SEQUENCE = NUMBER_OF_PARAMS + 0
+
+# RTR Specific Parameters
+QUALITY_LEVEL = NUMBER_OF_PARAMS + 0
+ZOOM_X = NUMBER_OF_PARAMS + 1
+ZOOM_Y = NUMBER_OF_PARAMS + 2
+
+#
+# Parameter value types
+#
+ENUM_VALUE = 0				# only certain constant values are valid
+RANGE_VALUE = 1				# any value in a given range is valid
+FLOATING_ENUM_VALUE = 2			# only certain constant floating point values are valid
+FLOATING_RANGE_VALUE = 3		# any value in a given floating point range is valid
+
+#
+# Algorithm Functionality
+#
+DECOMPRESSOR = 1
+COMPRESSOR = 2
+CODEC = 3
+
+#
+# Buffer types
+#
+NONE = 0
+FRAME = 1
+DATA = 2
+
+#
+# Frame types
+#
+NONE = 0
+KEYFRAME = 1
+INTRA = 1
+PREDICTED = 2
+BIDIRECTIONAL = 3
+
+#
+# Orientations
+#
+TOP_DOWN = 0
+BOTTOM_UP = 1
+
+#
+# SGI Proprietaty Algorithm Header Start Code
+#
+HEADER_START_CODE = 0xc1C0DEC
+
+#
+# error codes
+#
+
+BAD_NO_BUFFERSPACE =  -2		# no space for internal buffers
+BAD_PVBUFFER =  -3			# param/val buffer doesn't make sense
+BAD_BUFFERLENGTH_NEG =  -4		# negative buffer length
+BAD_BUFFERLENGTH_ODD =  -5		# odd length parameter/value buffer
+BAD_PARAM =  -6				# invalid parameter
+BAD_COMPRESSION_SCHEME =  -7		# compression scheme parameter invalid
+BAD_COMPRESSOR_HANDLE =  -8		# compression handle parameter invalid
+BAD_COMPRESSOR_HANDLE_POINTER = -9	# compression handle pointer invalid
+BAD_BUFFER_HANDLE = -10			# buffer handle invalid
+BAD_BUFFER_QUERY_SIZE = -11		# buffer query size too large
+JPEG_ERROR = -12			# error from libjpeg
+BAD_FRAME_SIZE = -13			# frame size invalid
+PARAM_OUT_OF_RANGE = -14		# parameter out of range
+ADDED_ALGORITHM_ERROR = -15		# added algorithm had a unique error
+BAD_ALGORITHM_TYPE = -16		# bad algorithm type
+BAD_ALGORITHM_NAME = -17		# bad algorithm name
+BAD_BUFFERING = -18			# bad buffering calls
+BUFFER_NOT_CREATED = -19		# buffer not created
+BAD_BUFFER_EXISTS = -20			# buffer already created
+BAD_INTERNAL_FORMAT = -21		# invalid internal format
+BAD_BUFFER_POINTER = -22		# invalid buffer pointer
+FRAME_BUFFER_SIZE_ZERO = -23		# frame buffer has zero size
+BAD_STREAM_HEADER = -24			# invalid stream header
+
+BAD_LICENSE = -25			# netls license not valid
+AWARE_ERROR = -26			# error from libawcmp
