diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,7 +1,21 @@
 * Hackage: (http://hackage.haskell.org/package/hArduino)
 * GitHub:  (http://leventerkok.github.com/hArduino)
 
-* Latest Hackage released version: 0.9
+* Latest Hackage released version: 1.0
+
+### Version 1.0, 2016-03-27
+ * Unfortunately the Firmata project moved on, and hArduino no longer
+   works with the latest release of StandardFirmata. This release mainly
+   makes a note of this fact, and points to an older version of StandardFirmata
+   that hArduino has been tested against. Volunteers encouraged to
+   contribute to bring hArduino up-to-date: Contact me if interested!
+
+ * Make the pin-capabilities code robust, by explicitly catching
+   (and ignoring) capabilities we do not know/care about. Previously
+   we were simply using toEnum, which choked with new versions
+   of Firmata as they added new options. Thanks to Can Akcura on
+   Github for pointing out the issue.
+
 
 ### Version 0.9, 2014-02-09
  * Added example program for Morse encoding.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,1 +1,1 @@
-Please see http://leventerkok.github.com/hArduino.
+Please see http://leventerkok.github.io/hArduino.
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,2 +1,18 @@
+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Main
+-- Copyright   :  (c) Levent Erkok
+-- License     :  BSD3
+-- Maintainer  :  erkokl@gmail.com
+-- Stability   :  experimental
+--
+-- Setup module for the hArduino library
+-----------------------------------------------------------------------------
+
+{-# OPTIONS_GHC -Wall #-}
+module Main(main) where
+
 import Distribution.Simple
+
+main :: IO ()
 main = defaultMain
diff --git a/System/Hardware/Arduino/Comm.hs b/System/Hardware/Arduino/Comm.hs
--- a/System/Hardware/Arduino/Comm.hs
+++ b/System/Hardware/Arduino/Comm.hs
@@ -37,7 +37,7 @@
 --
 --    * The file path argument should point to the device file that is
 --      associated with the board. ('COM1' on Windows,
---      '/dev/cu.usbmodemfd131' on Mac, etc.)
+--      '/dev/cu.usbmodemFD131' on Mac, etc.)
 --
 --    * The boolean argument controls verbosity. It should remain
 --      'False' unless you have communication issues. The print-out
diff --git a/System/Hardware/Arduino/Data.hs b/System/Hardware/Arduino/Data.hs
--- a/System/Hardware/Arduino/Data.hs
+++ b/System/Hardware/Arduino/Data.hs
@@ -14,7 +14,6 @@
 {-# LANGUAGE RankNTypes                  #-}
 module System.Hardware.Arduino.Data where
 
-import Control.Applicative        (Applicative)
 import Control.Concurrent         (Chan, MVar, modifyMVar, modifyMVar_, withMVar, ThreadId)
 import Control.Monad              (when)
 import Control.Monad.State        (StateT, MonadIO, MonadState, gets, liftIO)
@@ -34,6 +33,7 @@
                  }
                  deriving (Eq, Ord)
 
+-- | Show instance for Port
 instance Show Port where
   show p = "Port" ++ show (portNo p)
 
@@ -42,6 +42,7 @@
          | AnalogPin  {userPinNo :: Word8}
          | MixedPin   {userPinNo :: Word8}
 
+-- | Show instance for Pin
 instance Show Pin where
   show (DigitalPin w) = "DPin" ++ show w
   show (AnalogPin  w) = "APin" ++ show w
@@ -51,6 +52,7 @@
 data IPin = InternalPin { pinNo :: Word8 }
           deriving (Eq, Ord)
 
+-- | Show instance for IPin
 instance Show IPin where
   show (InternalPin w) = "IPin" ++ show w
 
@@ -92,13 +94,19 @@
 pinPortIndex p = pinNo p `rem` 8
 
 -- | The mode for a pin.
-data PinMode = INPUT    -- ^ Digital input
-             | OUTPUT   -- ^ Digital output
-             | ANALOG   -- ^ Analog input
-             | PWM      -- ^ PWM (Pulse-Width-Modulation) output 
-             | SERVO    -- ^ Servo Motor controller
-             | SHIFT    -- ^ Shift controller
-             | I2C      -- ^ I2C (Inter-Integrated-Circuit) connection
+data PinMode = INPUT        -- ^ Digital input
+             | OUTPUT       -- ^ Digital output
+             | ANALOG       -- ^ Analog input
+             | PWM          -- ^ PWM (Pulse-Width-Modulation) output 
+             | SERVO        -- ^ Servo Motor controller
+             | SHIFT        -- ^ Shift controller
+             | I2C          -- ^ I2C (Inter-Integrated-Circuit) connection
+             | ONEWIRE      -- ^ NB. No explicit support
+             | STEPPER      -- ^ NB. No explicit support
+             | ENCODER      -- ^ NB. No explicit support
+             | SERIAL       -- ^ NB. No explicit support
+             | PULLUP       -- ^ NB. No explicit support
+             | UNSUPPORTED  -- ^ A mode we do not understand or support
              deriving (Eq, Show, Enum)
 
 -- | A request, as sent to Arduino
@@ -124,6 +132,7 @@
               | PulseResponse  IPin Word32           -- ^ Repsonse to a PulseInCommand
               | Unimplemented (Maybe String) [Word8] -- ^ Represents messages currently unsupported
 
+-- | Show instance for Response
 instance Show Response where
   show (Firmware majV minV n)  = "Firmware v" ++ show majV ++ "." ++ show minV ++ " (" ++ n ++ ")"
   show (Capabilities b)        = "Capabilities:\n" ++ show b
@@ -146,6 +155,7 @@
 -- | What the board is capable of and current settings
 newtype BoardCapabilities = BoardCapabilities (M.Map IPin PinCapabilities)
 
+-- | Show instance for BoardCapabilities
 instance Show BoardCapabilities where
   show (BoardCapabilities m) = intercalate "\n" (map sh (M.toAscList m))
     where sh (p, PinCapabilities{analogPinNumber, allowedModes}) = show p ++ sep ++ unwords [show md | (md, _) <- allowedModes]
diff --git a/System/Hardware/Arduino/Protocol.hs b/System/Hardware/Arduino/Protocol.hs
--- a/System/Hardware/Arduino/Protocol.hs
+++ b/System/Hardware/Arduino/Protocol.hs
@@ -66,8 +66,24 @@
                      ([], [])         -> []
                      (cur, 0x7f:rest) -> cur : chunk rest
                      _                -> [xs]
-        pinCaps (x:y:rest) = (toEnum (fromIntegral x), y) : pinCaps rest
+        pinCaps (x:y:rest) = (findMode (fromIntegral x), y) : pinCaps rest
         pinCaps _          = []
+
+        -- Code defensively against capabilities we do not know
+        findMode :: Int -> PinMode
+        findMode 0  = INPUT
+        findMode 1  = OUTPUT
+        findMode 2  = ANALOG
+        findMode 3  = PWM
+        findMode 4  = SERVO
+        findMode 5  = SHIFT
+        findMode 6  = I2C
+        findMode 7  = ONEWIRE
+        findMode 8  = STEPPER
+        findMode 9  = ENCODER
+        findMode 10 = SERIAL
+        findMode 11 = PULLUP
+        findMode _  = UNSUPPORTED
 
 -- | Unpackage a Non-SysEx response
 unpackageNonSysEx :: (Int -> IO [Word8]) -> FirmataCmd -> IO Response
diff --git a/System/Hardware/Arduino/SamplePrograms/Analog.hs b/System/Hardware/Arduino/SamplePrograms/Analog.hs
--- a/System/Hardware/Arduino/SamplePrograms/Analog.hs
+++ b/System/Hardware/Arduino/SamplePrograms/Analog.hs
@@ -26,7 +26,7 @@
 --
 --  <<http://github.com/LeventErkok/hArduino/raw/master/System/Hardware/Arduino/SamplePrograms/Schematics/Analog.png>>
 analogVal :: IO ()
-analogVal = withArduino False "/dev/cu.usbmodemfd131" $ do
+analogVal = withArduino False "/dev/cu.usbmodemFD131" $ do
                setPinMode led OUTPUT
                setPinMode pot ANALOG
                cur <- analogRead pot
diff --git a/System/Hardware/Arduino/SamplePrograms/Blink.hs b/System/Hardware/Arduino/SamplePrograms/Blink.hs
--- a/System/Hardware/Arduino/SamplePrograms/Blink.hs
+++ b/System/Hardware/Arduino/SamplePrograms/Blink.hs
@@ -24,7 +24,7 @@
 --
 --  <<http://github.com/LeventErkok/hArduino/raw/master/System/Hardware/Arduino/SamplePrograms/Schematics/Blink.png>>
 blink :: IO ()
-blink = withArduino False "/dev/cu.usbmodemfd131" $ do
+blink = withArduino False "/dev/cu.usbmodemFD131" $ do
            let led = digital 13
            setPinMode led OUTPUT
            forever $ do digitalWrite led True
diff --git a/System/Hardware/Arduino/SamplePrograms/Button.hs b/System/Hardware/Arduino/SamplePrograms/Button.hs
--- a/System/Hardware/Arduino/SamplePrograms/Button.hs
+++ b/System/Hardware/Arduino/SamplePrograms/Button.hs
@@ -27,7 +27,7 @@
 --
 --  <<http://github.com/LeventErkok/hArduino/raw/master/System/Hardware/Arduino/SamplePrograms/Schematics/Button.png>>
 button :: IO ()
-button = withArduino False "/dev/cu.usbmodemfd131" $ do
+button = withArduino False "/dev/cu.usbmodemFD131" $ do
             setPinMode led OUTPUT
             setPinMode pb  INPUT
             go =<< digitalRead pb
diff --git a/System/Hardware/Arduino/SamplePrograms/Counter.hs b/System/Hardware/Arduino/SamplePrograms/Counter.hs
--- a/System/Hardware/Arduino/SamplePrograms/Counter.hs
+++ b/System/Hardware/Arduino/SamplePrograms/Counter.hs
@@ -26,7 +26,7 @@
 --
 --  <<http://github.com/LeventErkok/hArduino/raw/master/System/Hardware/Arduino/SamplePrograms/Schematics/Counter.png>>
 counter :: IO ()
-counter = withArduino False "/dev/cu.usbmodemfd131" $ do
+counter = withArduino False "/dev/cu.usbmodemFD131" $ do
             setPinMode led   OUTPUT
             setPinMode bUp   INPUT
             setPinMode bDown INPUT
diff --git a/System/Hardware/Arduino/SamplePrograms/Distance.hs b/System/Hardware/Arduino/SamplePrograms/Distance.hs
--- a/System/Hardware/Arduino/SamplePrograms/Distance.hs
+++ b/System/Hardware/Arduino/SamplePrograms/Distance.hs
@@ -28,7 +28,7 @@
 
 import System.Hardware.Arduino
 
--- | Sound travels 343.2 meters per seconds (<http://en.wikipedia.org/wiki/Speed_of_sound>).
+-- | Sound travels 343.2 meters per second (<http://en.wikipedia.org/wiki/Speed_of_sound>).
 -- The echo time is round-trip, from the sensor to the object and back. Thus, if echo is high
 -- for @d@ microseconds, then the distance in centimeters is:
 --
@@ -48,7 +48,7 @@
 --
 --  <<http://github.com/LeventErkok/hArduino/raw/master/System/Hardware/Arduino/SamplePrograms/Schematics/Distance.png>>
 distance :: IO ()
-distance = withArduino False "/dev/cu.usbmodemfd131" $ do
+distance = withArduino False "/dev/cu.usbmodemFD131" $ do
              setPinMode sensor INPUT
              setPinMode led    OUTPUT
              update
diff --git a/System/Hardware/Arduino/SamplePrograms/JingleBells.hs b/System/Hardware/Arduino/SamplePrograms/JingleBells.hs
--- a/System/Hardware/Arduino/SamplePrograms/JingleBells.hs
+++ b/System/Hardware/Arduino/SamplePrograms/JingleBells.hs
@@ -38,6 +38,6 @@
 --
 --  <<http://github.com/LeventErkok/hArduino/raw/master/System/Hardware/Arduino/SamplePrograms/Schematics/Piezo.png>>
 main :: IO ()
-main = withArduino False "/dev/cu.usbmodemfd131" $ do
+main = withArduino False "/dev/cu.usbmodemFD131" $ do
                 pz <- speaker 75 (pin 3)
                 playNotes pz jingleBells
diff --git a/System/Hardware/Arduino/SamplePrograms/LCD.hs b/System/Hardware/Arduino/SamplePrograms/LCD.hs
--- a/System/Hardware/Arduino/SamplePrograms/LCD.hs
+++ b/System/Hardware/Arduino/SamplePrograms/LCD.hs
@@ -91,7 +91,7 @@
 -- we read from the user and demonstrate other LCD control features offered
 -- by hArduino.
 lcdDemo :: IO ()
-lcdDemo = withArduino False "/dev/cu.usbmodemfd131" $ do
+lcdDemo = withArduino False "/dev/cu.usbmodemFD131" $ do
               lcd <- lcdRegister hitachi
               happySymbol <- lcdCreateSymbol lcd happy
               sadSymbol   <- lcdCreateSymbol lcd sad
diff --git a/System/Hardware/Arduino/SamplePrograms/Morse.hs b/System/Hardware/Arduino/SamplePrograms/Morse.hs
--- a/System/Hardware/Arduino/SamplePrograms/Morse.hs
+++ b/System/Hardware/Arduino/SamplePrograms/Morse.hs
@@ -69,7 +69,7 @@
 --
 --  <<http://github.com/LeventErkok/hArduino/raw/master/System/Hardware/Arduino/SamplePrograms/Schematics/Blink.png>>
 morseDemo :: IO ()
-morseDemo = withArduino False "/dev/cu.usbmodemfd131" $ do
+morseDemo = withArduino False "/dev/cu.usbmodemFD131" $ do
                 setPinMode led OUTPUT
                 forever send
  where  led  = digital 13
diff --git a/System/Hardware/Arduino/SamplePrograms/NumGuess.hs b/System/Hardware/Arduino/SamplePrograms/NumGuess.hs
--- a/System/Hardware/Arduino/SamplePrograms/NumGuess.hs
+++ b/System/Hardware/Arduino/SamplePrograms/NumGuess.hs
@@ -117,6 +117,6 @@
 -- | Entry to the classing number guessing game. Simply initialize the
 -- shield and call our game function.
 guessGame :: IO ()
-guessGame = withArduino False "/dev/cu.usbmodemfd131" $ do
+guessGame = withArduino False "/dev/cu.usbmodemFD131" $ do
                  (lcd, light, readButton) <- initOSepp
                  numGuess lcd light readButton
diff --git a/System/Hardware/Arduino/SamplePrograms/Pulse.hs b/System/Hardware/Arduino/SamplePrograms/Pulse.hs
--- a/System/Hardware/Arduino/SamplePrograms/Pulse.hs
+++ b/System/Hardware/Arduino/SamplePrograms/Pulse.hs
@@ -32,7 +32,7 @@
 --
 --  <<http://github.com/LeventErkok/hArduino/raw/master/System/Hardware/Arduino/SamplePrograms/Schematics/PulseIn.png>>
 pulseInDemo :: IO ()
-pulseInDemo = withArduino False "/dev/cu.usbmodemfd131" $ do
+pulseInDemo = withArduino False "/dev/cu.usbmodemFD131" $ do
                setPinMode pb INPUT
                go
  where pb = digital 2
@@ -55,7 +55,7 @@
 --
 --  <<http://github.com/LeventErkok/hArduino/raw/master/System/Hardware/Arduino/SamplePrograms/Schematics/Blink.png>>
 pulseOutDemo :: IO ()
-pulseOutDemo = withArduino False "/dev/cu.usbmodemfd131" $ do
+pulseOutDemo = withArduino False "/dev/cu.usbmodemFD131" $ do
               setPinMode led  OUTPUT
               digitalWrite led False
               forever trigger
diff --git a/System/Hardware/Arduino/SamplePrograms/Servo.hs b/System/Hardware/Arduino/SamplePrograms/Servo.hs
--- a/System/Hardware/Arduino/SamplePrograms/Servo.hs
+++ b/System/Hardware/Arduino/SamplePrograms/Servo.hs
@@ -35,7 +35,7 @@
 --
 --  <<http://github.com/LeventErkok/hArduino/raw/master/System/Hardware/Arduino/SamplePrograms/Schematics/Servo.png>>
 servo :: IO ()
-servo = withArduino False "/dev/cu.usbmodemfd131" $ do
+servo = withArduino False "/dev/cu.usbmodemFD131" $ do
             s <- attach (digital 9) (Just 600) (Just 2400)
             forever (demo s)
  where demo s = do liftIO $ putStr "Enter l, r or the desired servo angle: "
@@ -54,7 +54,7 @@
 --
 --  <<http://github.com/LeventErkok/hArduino/raw/master/System/Hardware/Arduino/SamplePrograms/Schematics/ServoAnalog.png>>
 servoAnalog :: IO ()
-servoAnalog = withArduino False "/dev/cu.usbmodemfd131" $ do
+servoAnalog = withArduino False "/dev/cu.usbmodemFD131" $ do
                  s <- attach (digital 9) (Just 600) (Just 2400)
                  setPinMode pot ANALOG
                  liftIO $ putStrLn "Adjust the potentiometer to control the servo!"
diff --git a/System/Hardware/Arduino/SamplePrograms/SevenSegment.hs b/System/Hardware/Arduino/SamplePrograms/SevenSegment.hs
--- a/System/Hardware/Arduino/SamplePrograms/SevenSegment.hs
+++ b/System/Hardware/Arduino/SamplePrograms/SevenSegment.hs
@@ -54,7 +54,7 @@
 --
 --  <<http://github.com/LeventErkok/hArduino/raw/master/System/Hardware/Arduino/SamplePrograms/Schematics/SevenSegment.png>>
 sevenSegment :: IO ()
-sevenSegment = withArduino False "/dev/cu.usbmodemfd131" $ do
+sevenSegment = withArduino False "/dev/cu.usbmodemFD131" $ do
                   initialize sr
                   liftIO $ do hSetBuffering stdin NoBuffering
                               putStrLn "Seven-Segment-Display demo."
diff --git a/hArduino.cabal b/hArduino.cabal
--- a/hArduino.cabal
+++ b/hArduino.cabal
@@ -1,5 +1,5 @@
 Name:          hArduino
-Version:       0.9
+Version:       1.0
 Category:      Hardware
 Synopsis:      Control your Arduino board from Haskell.
 Description:   hArduino allows Haskell programs to control Arduino boards (<http://www.arduino.cc>)
