diff --git a/Network/AMQP.hs b/Network/AMQP.hs
--- a/Network/AMQP.hs
+++ b/Network/AMQP.hs
@@ -170,6 +170,7 @@
                     exchangeAutoDelete :: Bool, -- ^ (default 'False'); If set, the exchange is deleted when all queues have finished using it.
                     exchangeInternal :: Bool -- ^ (default 'False'); If set, the exchange may not be used directly by publishers, but only when bound to other exchanges. Internal exchanges are used to construct wiring that is not visible to applications.
                 }
+    deriving (Eq, Ord, Read, Show)
 
 -- | an 'ExchangeOpts' with defaults set; you must override at least the 'exchangeName' and 'exchangeType' fields. 
 newExchange :: ExchangeOpts                
@@ -217,6 +218,7 @@
                 queueAutoDelete :: Bool, -- ^ (default 'False'); If set, the queue is deleted when all consumers have finished using it. Last consumer can be cancelled either explicitly or because its channel is closed. If there was no consumer ever on the queue, it won't be deleted.
                 queueHeaders :: FieldTable -- ^ (default empty): Headers to use when creating this queue, such as @x-message-ttl@ or @x-dead-letter-exchange@.
              }
+      deriving (Eq, Ord, Read, Show)
 
 -- | a 'QueueOpts' with defaults set; you should override at least 'queueName'.
 newQueue :: QueueOpts
@@ -289,6 +291,7 @@
 
 -- | specifies whether you have to acknowledge messages that you receive from 'consumeMsgs' or 'getMsg'. If you use 'Ack', you have to call 'ackMsg' or 'ackEnv' after you have processed a message, otherwise it might be delivered again in the future
 data Ack = Ack | NoAck
+  deriving (Eq, Ord, Read, Show)
 
 ackToBool :: Ack -> Bool
 ackToBool Ack = False
@@ -476,7 +479,7 @@
 
 data DeliveryMode = Persistent -- ^ the message will survive server restarts (if the queue is durable)
                   | NonPersistent -- ^ the message may be lost after server restarts
-    deriving Show
+    deriving (Eq, Ord, Read, Show)
 
 deliveryModeToInt NonPersistent = 1
 deliveryModeToInt Persistent = 2   
@@ -496,7 +499,7 @@
                 msgCorrelationID :: Maybe Text,
                 msgHeaders :: Maybe FieldTable
                 }
-    deriving Show
+    deriving (Eq, Ord, Read, Show)
 
 -- | a 'Msg' with defaults set; you should override at least 'msgBody'
 newMsg :: Message    
diff --git a/Network/AMQP/Types.hs b/Network/AMQP/Types.hs
--- a/Network/AMQP/Types.hs
+++ b/Network/AMQP/Types.hs
@@ -63,7 +63,7 @@
 
 
 newtype ShortString = ShortString Text
-    deriving (Show, Ord, Eq)
+    deriving (Eq, Ord, Read, Show)
 instance Binary ShortString where
     get = do
       len <- getWord8
@@ -78,7 +78,7 @@
                 putByteString s
     
 newtype LongString = LongString Text
-    deriving Show
+    deriving (Eq, Ord, Read, Show)
 instance Binary LongString where
     get = do
       len <- getWord32be
@@ -97,7 +97,7 @@
 
 -- | Keys must be shorter than 256 bytes when encoded as UTF-8
 data FieldTable = FieldTable (M.Map Text FieldValue)
-    deriving Show
+    deriving (Eq, Ord, Read, Show)
 instance Binary FieldTable where
     get = do
         len <- get :: Get LongInt --length of fieldValuePairs in bytes
@@ -133,7 +133,7 @@
                 | FVFieldTable FieldTable
                 | FVVoid
                 | FVByteArray BS.ByteString
-    deriving Show
+    deriving (Eq, Ord, Read, Show)
                 
 instance Binary FieldValue where
     get = do
@@ -193,7 +193,7 @@
     
     
 data DecimalValue = DecimalValue Decimals LongInt    
-    deriving Show
+    deriving (Eq, Ord, Read, Show)
 instance Binary DecimalValue where   
     get = do
       a <- getWord8
diff --git a/amqp.cabal b/amqp.cabal
--- a/amqp.cabal
+++ b/amqp.cabal
@@ -1,5 +1,5 @@
 Name:                amqp
-Version:             0.4.1
+Version:             0.4.2
 Synopsis:            Client library for AMQP servers (currently only RabbitMQ)
 Description:         Client library for AMQP servers (currently only RabbitMQ)
                      .
