diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,7 +1,11 @@
 * Hackage: (http://hackage.haskell.org/package/hArduino)
 * GitHub:  (http://leventerkok.github.com/hArduino)
 
-* Latest Hackage released version: 0.8
+* Latest Hackage released version: 0.9
+
+### Version 0.9, 2014-02-09
+ * Added example program for Morse encoding.
+   Original idea by Antoine Dumont. Thanks!
 
 ### Version 0.8, 2013-12-15
  * Add support for Piezo speakers
diff --git a/COPYRIGHT b/COPYRIGHT
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -1,4 +1,4 @@
-Copyright (c) 2013, Levent Erkok (erkokl@gmail.com)
+Copyright (c) 2013-2014, Levent Erkok (erkokl@gmail.com)
 All rights reserved.
 
 The usbArduino program is distributed with the BSD3 license. See the LICENSE file
diff --git a/System/Hardware/Arduino/SamplePrograms/Morse.hs b/System/Hardware/Arduino/SamplePrograms/Morse.hs
new file mode 100644
--- /dev/null
+++ b/System/Hardware/Arduino/SamplePrograms/Morse.hs
@@ -0,0 +1,78 @@
+-------------------------------------------------------------------------------
+-- |
+-- Module      :  System.Hardware.Arduino.SamplePrograms.Morse
+-- Copyright   :  (c) Antoine R. Dumont, Levent Erkok
+-- License     :  BSD3
+-- Maintainer  :  erkokl@gmail.com
+-- Stability   :  experimental
+--
+-- Morse code blinker. Original by Antoine R. Dumont, modified to simplify
+-- and fit into the existing examples structure.
+-------------------------------------------------------------------------------
+module System.Hardware.Arduino.SamplePrograms.Morse where
+
+import Control.Monad       (forever)
+import Control.Monad.Trans (liftIO)
+import Data.Char           (toUpper)
+import Data.List           (intercalate)
+import Data.Maybe          (fromMaybe)
+
+import System.Hardware.Arduino
+
+-- | A dit or a dah is all we need for Morse:
+-- A @dit@ is a dot; and a @dah@ is a dash in the Morsian world.
+-- We use 'LBreak' and 'WBreak' to indicate a letter and a word break
+-- so we can insert some delay between letters and words as we
+-- transmit.
+data Morse = Dit | Dah | LBreak | WBreak
+           deriving Show
+
+-- | Morse code dictionary
+dict :: [(Char, [Morse])]
+dict = map encode m
+  where encode (k, s) = (k, map (\c -> if c == '.' then Dit else Dah) s)
+        m = [ ('A', ".-"   ), ('B', "-..." ), ('C', "-.-." ), ('D', "-.."  ), ('E', "."    )
+            , ('F', "..-." ), ('G', "--."  ), ('H', "...." ), ('I', ".."   ), ('J', ".---" )
+            , ('K', "-.-"  ), ('L', ".-.." ), ('M', "--"   ), ('N', "-."   ), ('O', "---"  )
+            , ('P', ".--." ), ('Q', "--.-" ), ('R', ".-."  ), ('S', "..."  ), ('T', "-"    )
+            , ('U', "..-"  ), ('V', "...-" ), ('W', ".--"  ), ('X', "-..-" ), ('Y', "-.--" )
+            , ('Z', "--.." ), ('0', "-----"), ('1', ".----"), ('2', "..---"), ('3', "...--")
+            , ('4', "....-"), ('5', "....."), ('6', "-...."), ('7', "--..."), ('8', "---..")
+            , ('9', "----."), ('+', ".-.-."), ('/', "-..-."), ('=', "-...-")
+            ]
+
+-- | Given a sentence, decode it. We simply drop any letters that we
+-- do not have a mapping for.
+decode :: String -> [Morse]
+decode = intercalate [WBreak] . map (intercalate [LBreak] . map cvt) . words
+ where cvt c = fromMaybe [] $ toUpper c `lookup` dict
+
+-- | Given a morsified sentence, compute the delay times. A 'Left' value means
+-- turn the led on that long, a 'Right' value means turn it off that long.
+morsify :: [Morse] -> [Either Int Int]
+morsify = map t
+  where unit     = 300
+        t Dit    = Left  $ 1 * unit
+        t Dah    = Left  $ 3 * unit
+        t LBreak = Right $ 3 * unit
+        t WBreak = Right $ 7 * unit
+
+-- | Finally, turn a full sentence into a sequence of blink on/off codes
+transmit :: Pin -> String -> Arduino ()
+transmit p = sequence_ . concatMap code . morsify . decode
+  where code (Left i)  = [digitalWrite p True,  delay i, digitalWrite p False, delay i]
+        code (Right i) = [digitalWrite p False, delay i]
+
+-- | A simple demo driver. To run this example, you only need the Arduino connected to your
+-- computer, no other hardware is needed. We use the internal led on pin 13. Of course,
+-- you can attach a led to pin 13 as well, for artistic effect.
+--
+--  <<http://github.com/LeventErkok/hArduino/raw/master/System/Hardware/Arduino/SamplePrograms/Schematics/Blink.png>>
+morseDemo :: IO ()
+morseDemo = withArduino False "/dev/cu.usbmodemfd131" $ do
+                setPinMode led OUTPUT
+                forever send
+ where  led  = digital 13
+        send = do liftIO $ putStr "Message? "
+                  m <- liftIO getLine
+                  transmit led m
diff --git a/hArduino.cabal b/hArduino.cabal
--- a/hArduino.cabal
+++ b/hArduino.cabal
@@ -1,12 +1,12 @@
 Name:          hArduino
-Version:       0.8
+Version:       0.9
 Category:      Hardware
 Synopsis:      Control your Arduino board from Haskell.
 Description:   hArduino allows Haskell programs to control Arduino boards (<http://www.arduino.cc>)
                and peripherals, using the Firmata protocol (<http://firmata.org>).
                .
                For details, see: <http://leventerkok.github.com/hArduino>.
-Copyright:     Levent Erkok, 2013
+Copyright:     Levent Erkok, 2013-2014
 License:       BSD3
 License-file:  LICENSE
 Stability:     Experimental
@@ -39,6 +39,7 @@
                     , System.Hardware.Arduino.SamplePrograms.Counter
                     , System.Hardware.Arduino.SamplePrograms.Distance
                     , System.Hardware.Arduino.SamplePrograms.JingleBells
+                    , System.Hardware.Arduino.SamplePrograms.Morse
                     , System.Hardware.Arduino.SamplePrograms.LCD
                     , System.Hardware.Arduino.SamplePrograms.NumGuess
                     , System.Hardware.Arduino.SamplePrograms.Pulse
