Index: server/lib/ippattribute.py
===================================================================
--- server/lib/ippattribute.py	(revision 8979f907286779f8921e644f8f04b23cc89b0a73)
+++ server/lib/ippattribute.py	(revision 264657160e09a00f9f620f27cb7e6f672f4a9882)
@@ -2,4 +2,5 @@
 
 import sys, struct, logging
+from ippvalue import IPPValue
 
 # initialize logger
Index: server/lib/ippattributegroup.py
===================================================================
--- server/lib/ippattributegroup.py	(revision 8979f907286779f8921e644f8f04b23cc89b0a73)
+++ server/lib/ippattributegroup.py	(revision 264657160e09a00f9f620f27cb7e6f672f4a9882)
@@ -2,4 +2,5 @@
 
 import sys, struct, logging
+from ippattribute import IPPAttribute
 
 # initialize logger
Index: server/lib/ipprequest.py
===================================================================
--- server/lib/ipprequest.py	(revision 8979f907286779f8921e644f8f04b23cc89b0a73)
+++ server/lib/ipprequest.py	(revision 264657160e09a00f9f620f27cb7e6f672f4a9882)
@@ -2,4 +2,7 @@
 
 import sys, struct, logging
+from ippattributegroup import IPPAttributeGroup
+from ippattribute import IPPAttribute
+from ippvalue import IPPValue
 
 # initialize logger
@@ -108,5 +111,5 @@
             # as long as the next byte isn't signaling the end of the
             # attributes, keep looping and parsing attributes
-            while next_byte != IPPTags.END_OF_ATTRIBUTES_TAG:
+            while next_byte != AttributeTags.END:
                 
                 attribute_group_tag = next_byte
@@ -130,5 +133,5 @@
                     logger.debug("name-length : %i" % name_length)
                     
-                    if name_length != IPPTags.ZERO_NAME_LENGTH:
+                    if name_length != AttributeTags.ZERO_NAME_LENGTH:
                         # read the name (a string of name_length bytes)
                         name          = request.read(name_length)
@@ -209,5 +212,5 @@
 
         # conver the end-of-attributes-tag to binary
-        end_of_attributes_tag = struct.pack('>b', IPPTags.END_OF_ATTRIBUTES_TAG)
+        end_of_attributes_tag = struct.pack('>b', AttributeTags.END)
 
         # convert the data to binary
Index: server/lib/ippvalue.py
===================================================================
--- server/lib/ippvalue.py	(revision 8979f907286779f8921e644f8f04b23cc89b0a73)
+++ server/lib/ippvalue.py	(revision 264657160e09a00f9f620f27cb7e6f672f4a9882)
@@ -2,4 +2,5 @@
 
 import sys, struct, logging
+from ippconstants import *
 
 # initialize logger
@@ -46,25 +47,25 @@
 
         # out-of-band value tags
-        if self.value_tag == IPPTags.UNSUPPORTED or \
-               self.value_tag == IPPTags.DEFAULT or \
-               self.value_tag == IPPTags.UNKNOWN or \
-               self.value_tag == IPPTags.NO_VALUE:
+        if self.value_tag == OutOfBandTags.UNSUPPORTED or \
+               self.value_tag == OutOfBandTags.DEFAULT or \
+               self.value_tag == OutOfBandTags.UNKNOWN or \
+               self.value_tag == OutOfBandTags.NO_VALUE:
             self.value = ''
 
         # integer value tags
-        elif self.value_tag == IPPTags.GENERIC_INTEGER:
+        elif self.value_tag == IntegerTags.GENERIC:
             pass # not supported
-        elif self.value_tag == IPPTags.INTEGER:
+        elif self.value_tag == IntegerTags.INTEGER:
             self.value = struct.unpack('>i', value)[0]
-        elif self.value_tag == IPPTags.BOOLEAN:
+        elif self.value_tag == IntegerTags.BOOLEAN:
             self.value = struct.unpack('>?', value)[0]
-        elif self.value_tag == IPPTags.ENUM:
+        elif self.value_tag == IntegerTags.ENUM:
             self.value = struct.unpack('>i', value)[0]
 
         # octet string value tags
-        elif self.value_tag == IPPTags.UNSPECIFIED_OCTETSTRING:
+        elif self.value_tag == OctetStringTags.UNSPECIFIED_OCTETSTRING:
             pass
         
-        elif self.value_tag == IPPTags.DATETIME:
+        elif self.value_tag == OctetStringTags.DATETIME:
             # field  octets  contents                  range
             # -----  ------  --------                  -----
@@ -83,5 +84,5 @@
             self.value = struct.unpack('>hbbbbbbcbb', value)[0]
             
-        elif self.value_tag == IPPTags.RESOLUTION:
+        elif self.value_tag == OctetStringTags.RESOLUTION:
             # OCTET-STRING consisting of nine octets of 2
             # SIGNED-INTEGERs followed by a SIGNED-BYTE. The first
@@ -93,5 +94,5 @@
             self.value = struct.unpack('>iib', value)
             
-        elif self.value_tag == IPPTags.RANGE_OF_INTEGER:
+        elif self.value_tag == OctetStringTags.RANGE_OF_INTEGER:
             # Eight octets consisting of 2 SIGNED-INTEGERs.  The first
             # SIGNED-INTEGER contains the lower bound and the second
@@ -100,6 +101,6 @@
             self.value = struct.unpack('>ii', value)
 
-        elif self.value_tag == IPPTags.TEXT_WITH_LANGUAGE or \
-                 self.value_tag == IPPTags.NAME_WITH_LANGUAGE:
+        elif self.value_tag == OctetStringTags.TEXT_WITH_LANGUAGE or \
+                 self.value_tag == OctetStringTags.NAME_WITH_LANGUAGE:
             a = struct.unpack('>h', value[:2])[0]
             b = struct.unpack('>%ss' % a, value[2:a+2])[0]
@@ -109,14 +110,14 @@
 
         # character string value tags
-        elif self.value_tag == IPPTags.TEXT_WITHOUT_LANGUAGE or \
-                 self.value_tag == IPPTags.NAME_WITHOUT_LANGUAGE:
+        elif self.value_tag == CharacterStringTags.TEXT_WITHOUT_LANGUAGE or \
+                 self.value_tag == CharacterStringTags.NAME_WITHOUT_LANGUAGE:
             self.value = str(value)
-        elif self.value_tag == IPPTags.GENERIC_CHAR_STRING or \
-                 self.value_tag == IPPTags.KEYWORD or \
-                 self.value_tag == IPPTags.URI or \
-                 self.value_tag == IPPTags.URI_SCHEME or \
-                 self.value_tag == IPPTags.CHARSET or \
-                 self.value_tag == IPPTags.NATURAL_LANGUAGE or \
-                 self.value_tag == IPPTags.MIME_MEDIA_TYPE:
+        elif self.value_tag == CharacterStringTags.GENERIC or \
+                 self.value_tag == CharacterStringTags.KEYWORD or \
+                 self.value_tag == CharacterStringTags.URI or \
+                 self.value_tag == CharacterStringTags.URI_SCHEME or \
+                 self.value_tag == CharacterStringTags.CHARSET or \
+                 self.value_tag == CharacterStringTags.NATURAL_LANGUAGE or \
+                 self.value_tag == CharacterStringTags.MIME_MEDIA_TYPE:
             self.value = str(value)
 
@@ -124,24 +125,24 @@
 
         # out-of-band value tags
-        if self.value_tag == IPPTags.UNSUPPORTED or \
-               self.value_tag == IPPTags.DEFAULT or \
-               self.value_tag == IPPTags.UNKNOWN or \
-               self.value_tag == IPPTags.NO_VALUE:
+        if self.value_tag == OutOfBandTags.UNSUPPORTED or \
+               self.value_tag == OutOfBandTags.DEFAULT or \
+               self.value_tag == OutOfBandTags.UNKNOWN or \
+               self.value_tag == OutOfBandTags.NO_VALUE:
             return (0, '')
 
         # integer value tags
-        elif self.value_tag == IPPTags.GENERIC_INTEGER:
+        elif self.value_tag == IntegerTags.GENERIC:
             pass
-        elif self.value_tag == IPPTags.INTEGER:
+        elif self.value_tag == IntegerTags.INTEGER:
             return (4, struct.pack('>i', self.value))
-        elif self.value_tag == IPPTags.BOOLEAN:
+        elif self.value_tag == IntegerTags.BOOLEAN:
             return (1, struct.pack('>?', self.value))
-        elif self.value_tag == IPPTags.ENUM:
+        elif self.value_tag == IntegerTags.ENUM:
             return (4, struct.pack('>i', self.value))
 
         # octet string value tags
-        elif self.value_tag == IPPTags.UNSPECIFIED_OCTETSTRING:
+        elif self.value_tag == OctetStringTags.UNSPECIFIED_OCTETSTRING:
             pass
-        elif self.value_tag == IPPTags.DATETIME:
+        elif self.value_tag == OctetStringTags.DATETIME:
             # field  octets  contents                  range
             # -----  ------  --------                  -----
@@ -160,5 +161,5 @@
             return (11, struct.pack('>hbbbbbbcbb', self.value))
             
-        elif self.value_tag == IPPTags.RESOLUTION:
+        elif self.value_tag == OctetStringTags.RESOLUTION:
             # OCTET-STRING consisting of nine octets of 2
             # SIGNED-INTEGERs followed by a SIGNED-BYTE. The first
@@ -170,5 +171,5 @@
             return (9, struct.pack('>iib', self.value))
             
-        elif self.value_tag == IPPTags.RANGE_OF_INTEGER:
+        elif self.value_tag == OctetStringTags.RANGE_OF_INTEGER:
             # Eight octets consisting of 2 SIGNED-INTEGERs.  The first
             # SIGNED-INTEGER contains the lower bound and the second
@@ -177,6 +178,6 @@
             return (8, struct.pack('>ii', self.value))
 
-        elif self.value_tag == IPPTags.TEXT_WITH_LANGUAGE or \
-                 self.value_tag == IPPTags.NAME_WITH_LANGUAGE:
+        elif self.value_tag == OctetStringTags.TEXT_WITH_LANGUAGE or \
+                 self.value_tag == OctetStringTags.NAME_WITH_LANGUAGE:
             a_bin = struct.pack('>h', self.value[0])
             b_bin = struct.pack('>%ss' % self.value[0], self.value[1])
@@ -187,14 +188,14 @@
 
         # character string value tags
-        elif self.value_tag == IPPTags.TEXT_WITHOUT_LANGUAGE or \
-                 self.value_tag == IPPTags.NAME_WITHOUT_LANGUAGE:
+        elif self.value_tag == CharacterStringTags.TEXT_WITHOUT_LANGUAGE or \
+                 self.value_tag == CharacterStringTags.NAME_WITHOUT_LANGUAGE:
             return (len(self.value), struct.pack('>%ss' % len(self.value), self.value))
-        elif self.value_tag == IPPTags.GENERIC_CHAR_STRING or \
-                 self.value_tag == IPPTags.KEYWORD or \
-                 self.value_tag == IPPTags.URI or \
-                 self.value_tag == IPPTags.URI_SCHEME or \
-                 self.value_tag == IPPTags.CHARSET or \
-                 self.value_tag == IPPTags.NATURAL_LANGUAGE or \
-                 self.value_tag == IPPTags.MIME_MEDIA_TYPE:
+        elif self.value_tag == CharacterStringTags.GENERIC or \
+                 self.value_tag == CharacterStringTags.KEYWORD or \
+                 self.value_tag == CharacterStringTags.URI or \
+                 self.value_tag == CharacterStringTags.URI_SCHEME or \
+                 self.value_tag == CharacterStringTags.CHARSET or \
+                 self.value_tag == CharacterStringTags.NATURAL_LANGUAGE or \
+                 self.value_tag == CharacterStringTags.MIME_MEDIA_TYPE:
             return (len(self.value), struct.pack('>%ss' % len(self.value), self.value))
 
