diff --git a/bbdb.cabal b/bbdb.cabal
--- a/bbdb.cabal
+++ b/bbdb.cabal
@@ -7,7 +7,7 @@
 -- The package version. See the Haskell package versioning policy
 -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for
 -- standards guiding when and how versions should be incremented.
-Version:             0.4
+Version:             0.5
 
 -- A short (one-line) description of the package.
 Synopsis:            Ability to read, write, and examine BBDB files
@@ -45,7 +45,7 @@
 
 -- Extra files to be distributed with the package, such as examples or
 -- a README.
--- Extra-source-files:  
+Extra-source-files:  changelog.md
 
 -- Constraint on the version of Cabal needed to build this package.
 Cabal-version:       >=1.4
diff --git a/changelog.md b/changelog.md
new file mode 100644
--- /dev/null
+++ b/changelog.md
@@ -0,0 +1,10 @@
+Changes for Database/BBDB
+=========================
+
+From 0.4 -> 0.5
+---------------
+
+The BBDB file format changed.  The current version of the format
+is 7.  Once field, called *Affixes* was added, and now the extension
+in a US phone field is required.
+
diff --git a/src/Database/BBDB.hs b/src/Database/BBDB.hs
--- a/src/Database/BBDB.hs
+++ b/src/Database/BBDB.hs
@@ -1,5 +1,4 @@
-{-# LANGUAGE FlexibleInstances, TypeSynonymInstances, PackageImports #-}
-
+{-# LANGUAGE FlexibleInstances #-}
 -- | 
 -- This module can read and write BBDB files, and provides a few handy
 -- functions for getting at fields inside of BBDB data.
@@ -21,8 +20,9 @@
 -- 
 -- > ["Henry"                                   The first name - a string
 -- > "Laxen"                                    The last name - a string
--- > ("Henry, Enrique")                         Also Known As - comma separated list
--- > "Elegant Solutions"                        Business name - a string
+-- > nil                                        Affixes - a comma separated list
+-- > ("Henry, Enrique")                         Also Known As - a comma separated list
+-- > ("Elegant Solutions")                      Organizations- a comma separated list
 -- > (
 -- >  ["reno" 775 624 1851 0]                   Phone number field - US style
 -- >  ["chapala" "011-52-376-765-3181"]         Phone number field - International style
@@ -51,7 +51,7 @@
 -- > ]
 -- 
 -- Inside the .bbdb file, this looks like:
--- \[\"Henry\" \"Laxen\" (\"Henry, Enrique\") \"Elegant Solutions\" 
+-- \[\"Henry\" \"Laxen\" nil (\"Henry, Enrique\") (\"Elegant Solutions\")
 -- (\[\"reno\" 775 624 1851 0] \[\"chapala\" \"011-52-376-765-3181\"]) 
 -- (\[\"mailing\" (\"10580 N. McCarran Blvd.\" 
 -- \"#115-396\") \"Reno\" \"Nevada\" \"89503\" \"USA\"] 
@@ -66,7 +66,8 @@
 --  
 -- >      BBDBEntry
 -- >        (BBDB{firstName = Just "Henry", lastName = Just "Laxen",
--- >              aka = Just ["Henry, Enrique"], company = Just "Elegant Solutions",
+-- >              affix = Nothing
+-- >              aka = Just ["Henry, Enrique"], company = Just ["Elegant Solutions"],
 -- >              phone =
 -- >                Just
 -- >                  [USStyle "reno" ["775", "624", "1851", "0"],
@@ -98,7 +99,7 @@
     Street,
     Symbol,
     Address(..), 
-    Alist(..), 
+    Alist, 
     Note(..), 
     Phone(..), 
     BBDB(..), 
@@ -120,13 +121,11 @@
 
 import Text.Parsec.Char
 import Text.Parsec.String (Parser) -- type Parser = Parsec String ()
-import Data.Char -- (chr)
-import "mtl" Control.Monad.Identity hiding (join)
 import Text.Parsec hiding ((<|>))
 import Control.Applicative hiding (many)
 import Data.Maybe
-import Data.List
 
+doubleQuoteChar :: Char
 doubleQuoteChar = '"'
 
 betweenParens :: Parser a -> Parser a
@@ -184,10 +183,10 @@
 
 -- | Given an Alist, return the key
 key :: (x,y) -> x
-key   (x,y) = x
+key   (x,_) = x
 -- | Given an Alist, return the value
 value :: (x,y) -> y
-value (x,y) = y
+value (_,y) = y
 
 -- | The Note field of a BBDB record is just a list of associations.
 -- If you don\'t provide a your own key, the BBDB will use the word \"note\"
@@ -206,9 +205,10 @@
 -- | aka = Also Known As.  Sometimes the same email address can match
 -- several users, so BBDB gives you the option of remembering
 -- different names for the same address
+                      affix     :: Maybe [String],
                       aka       :: Maybe [String],
 -- | The company if any                      
-                      company   :: Maybe String,
+                      company   :: Maybe [String],
 -- | A list of phone numbers, either in US Style or International Style
                       phone     :: Maybe [Phone],
 -- | A list of addresses, keyed by location
@@ -221,7 +221,8 @@
                   }             
                     deriving (Eq, Ord, Show)
 
-bbdbDefault = BBDB Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
+bbdbDefault :: BBDB
+bbdbDefault = BBDB Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
 
 -- | At the beginning of a BBDB file are a variable number of comments, which
 -- specify the encoding type and the version.  We just ignore them.
@@ -236,6 +237,7 @@
 nil :: Parser (Maybe a)
 nil = string "nil" >> return Nothing
 
+strings :: Parser [String]
 strings = betweenParens (sepBy quotedString space)
   
 
@@ -321,9 +323,11 @@
   space
   lastName    <- stringOrNil
   space
+  affix       <- stringsOrNil
+  space
   aka         <- stringsOrNil
   space
-  company     <- stringOrNil
+  company     <- stringsOrNil
   space
   phoneS      <- phonesParser
   space
@@ -335,15 +339,7 @@
   space
   string "nil"
   char ']'
-  return $ BBDB firstName lastName aka company phoneS addresseS net noteS
-
-{-
-bEntry :: Parser BBDB 
-bEntry = BBDB <$>
-  stringOrNil <*> stringOrNil <*> stringsOrNil <*> stringOrNil <*>
-  phonesParser <*> addressesParser <*> stringsOrNil <*> (notesParser <*
-  string "nil]")
--}
+  return $ BBDB firstName lastName affix aka company phoneS addresseS net noteS
 
 
 -- | The Parser for a BBDB file, as it is written on disk.  If you
@@ -374,22 +370,17 @@
 justEntries :: [BBDBFile] -> [BBDB]
 justEntries = mapMaybe justEntry
 
-join :: [a] -> [[a]] -> [a]
-join delim l = concat (intersperse delim l)
-
 -- | surround a string with the given two characters  
 surroundWith :: a -> a -> [a] -> [a]
-surroundWith before after string = before : string ++ [after]
+surroundWith before after str = before : str ++ [after]
 
 -- | convert a Haskell string to a string that Lisp likes
+escapeLisp :: String -> String
 escapeLisp [] = []
 escapeLisp (c:cs) = 
   case c of
     '"' -> '\\' : '"' : escapeLisp cs
---    '\\' -> '\\' : '\\' : escapeLisp cs
-    otherwise -> c : escapeLisp cs
-      -- let x = if isAscii c then [c] else '\\' : c : []
-      -- in x ++ escapeLisp cs
+    _ -> c : escapeLisp cs
 
 -- | LispAble is how we convert from our internal representation of a
 -- BBDB record, to one that will make Lisp and Emacs happy.  (Sans bugs)
@@ -415,23 +406,23 @@
 
 instance LispAble (Maybe [String]) where
   asLisp   Nothing = "nil"
-  asLisp   (Just x) = surroundWith '(' ')' . join " " .
+  asLisp   (Just x) = surroundWith '(' ')' . unwords .
                         map (surroundWith '"' '"' . asLisp) $ x
 
 instance LispAble Phone where
-  asLisp (USStyle location numbers) =
-    surroundWith '[' ']' $ surroundWith '"' '"' location ++ " " ++ 
-    join " " numbers
+  asLisp (USStyle loc numbers) =
+    surroundWith '[' ']' $ surroundWith '"' '"' loc ++ " " ++ 
+    unwords numbers
   asLisp (InternationalStyle location numbers) =  
     surroundWith '[' ']' $ surroundWith '"' '"' location ++ " " ++ 
     surroundWith '"' '"' numbers
 
 instance LispAble (Maybe [Phone]) where
   asLisp   Nothing = "nil"
-  asLisp   (Just x) = surroundWith '(' ')' . join " " . map asLisp $ x
+  asLisp   (Just x) = surroundWith '(' ')' . unwords . map asLisp $ x
 
 instance LispAble Address where
-  asLisp x = surroundWith '[' ']' $ join " " 
+  asLisp x = surroundWith '[' ']' $ unwords 
     [asLisp $ Just (location x),
      asLisp (streets x),
      asLisp (city x),
@@ -441,7 +432,7 @@
 
 instance LispAble (Maybe [Address]) where
   asLisp   Nothing = "nil"
-  asLisp   (Just x) = surroundWith '(' ')' . join " " .
+  asLisp   (Just x) = surroundWith '(' ')' . unwords .
                         map asLisp $ x
 
 instance LispAble Alist where
@@ -449,16 +440,16 @@
     key x ++ " . " ++ asLisp (Just (value x))
 
 instance LispAble Note where
-  asLisp (Note x)  = surroundWith '(' ')' . join " " .
+  asLisp (Note x)  = surroundWith '(' ')' . unwords .
                       map asLisp $ x
   
 instance LispAble (Maybe Note) where
   asLisp   Nothing = "nil"
-  asLisp   (Just x) = surroundWith '(' ')' . join " " . 
+  asLisp   (Just x) = surroundWith '(' ')' . unwords . 
                         map asLisp $ unnote x
                         
 instance LispAble BBDB where
-  asLisp x = surroundWith '[' ']' $ join " " 
+  asLisp x = surroundWith '[' ']' $ unwords 
    [asLisp (firstName x),
     asLisp (lastName x),
     asLisp (aka x),
@@ -482,7 +473,6 @@
 parseBBDB :: String -> Either ParseError [BBDBFile]
 parseBBDB  = parse bbdbFileParse "bbdb"
 
-
 -- | read the given file and call error if the parse failed,
 -- otherwise return the entire file as a list of BBDBFile records.
 readBBDB :: String -> IO [BBDBFile]
@@ -491,7 +481,6 @@
   let ls = parseBBDB b
   return . either (error . show)  id $ ls
 
-
 -- | Notes inside a BBDB record are awkward to get at.  This helper
 -- function digs into the record and applies a function to each
 -- Alist element of the record.  It returns true if it any of the
@@ -505,7 +494,7 @@
 wantNote :: (Alist -> Bool) -> BBDB -> Bool
 wantNote cond bbdb = maybe False alistTest (notes bbdb)
   where
-    alistTest = any id . map cond . unnote
+    alistTest = any cond . unnote
 
 -- | Lookup the value whose key is the given string.  If found returns 
 -- Just the value, otherwise Nothing  For example:
@@ -534,7 +523,7 @@
 -- field of a BBDB file and write the result
 -- out as a new bbdb file.
 mapBBDB :: (BBDB -> BBDB) -> [BBDBFile] -> [BBDBFile]
-mapBBDB f bbdbf = map g bbdbf
+mapBBDB f = map g
   where
     g (BBDBComment x) = BBDBComment x
     g (BBDBEntry x) = BBDBEntry (f x)
@@ -562,9 +551,9 @@
 -- print the name and all addresses of anyone in the BBDB file
 -- who live in Reno.  
 filterBBDB :: (BBDB -> Bool) -> [BBDBFile] -> [BBDBFile]
-filterBBDB f bbdbf = filter g bbdbf
+filterBBDB f = filter g
   where
-    g (BBDBComment x) = True
+    g (BBDBComment _) = False
     g (BBDBEntry x) = f x    
 
   
