diff --git a/Language/Atom/Code.hs b/Language/Atom/Code.hs
--- a/Language/Atom/Code.hs
+++ b/Language/Atom/Code.hs
@@ -16,8 +16,6 @@
 
 import Data.Generics.Uniplate.Data
 
-import Data.Generics.Uniplate.Data
-
 import Language.Atom.Analysis
 import Language.Atom.Elaboration
 import Language.Atom.Expressions
@@ -45,7 +43,10 @@
                                  -- rules?
   }
 
--- | Data associated with sampling a hardware clock.
+-- | Data associated with sampling a hardware clock.  For the clock to work
+-- correctly, you MUST assign @__global_clock@ the current time (accoring to 
+-- @clockName@) the first time you enter the main Atom-generated function
+-- calling your rules.
 data Clock = Clock
 
   { clockName  :: String        -- ^ C function to sample the clock.  The
@@ -229,8 +230,7 @@
     case hardwareClock config of
       Nothing      -> unlines [codePeriodPhases, "  " ++ globalClk ++ " = " ++ globalClk ++ " + 1;"]
       Just clkData -> unlines 
-        [ "  " ++ setGlobalClk clkData
-        , ""
+        [ ""
         , codePeriodPhases
         , "  // In the following we sample the hardware clock, waiting for the next phase."
         , ""
@@ -249,32 +249,44 @@
         , "  else {"
         , "    " ++ delayFn ++ "(" ++ phaseConst ++ " - (" ++ currentTime ++ " + (" 
                  ++ maxConst ++ " - " ++ globalClk ++ ")));"
-                 
         , "  }"
+        , ""
+        , "  " ++ setGlobalClk clkData
         ]
-        where 
+        where
           delayFn = delay clkData
           maxVal :: Integer
-          maxVal  = 2 ^ (case clockType clkData of
-                           Word8  -> 8
-                           Word16 -> 16
-                           Word32 -> 32
-                           Word64 -> 64
-                           _      -> clkTypeErr) - 1
-          declareConst varName c = globalType ++ " const " ++ varName 
+          maxVal  = case clockType clkData of
+                      Word8  -> toInteger (maxBound :: Word8)
+                      Word16 -> toInteger (maxBound :: Word16)
+                      Word32 -> toInteger (maxBound :: Word32)
+                      Word64 -> toInteger (maxBound :: Word64)
+                      _      -> clkTypeErr
+          declareConst varName c = globalType ++ " const " ++ varName
                                    ++ " = " ++ showConst (constType c) ++ ";"
           setTime     = currentTime ++ " = " ++ clockName clkData ++ "();"
           maxConst    = "__max"
           phaseConst = "__phase_len"
           currentTime = "__curr_time"
-          clkDelta | d <= 0 || d > maxVal = 
-            error "The delta given for the number of ticks in a phase must be greater than 0."
-                   | otherwise = d
+          clkDelta | d <= 0
+                       = error $ "The delta "
+                                 ++ show d
+                                 ++ ", given for the number of ticks "
+                                 ++ "in a phase must be greater than 0."
+                   | d > maxVal
+                       = error $ "The delta "
+                         ++ show d
+                         ++ ", given for the number of ticks in a phase "
+                         ++ "must be smaller than "
+                         ++ show ( maxVal + 1 )
+                         ++ "."
+                   | otherwise
+                       = d
             where d = delta clkData
-          errCheck = 
+          errCheck =
             case err clkData of
               Nothing    -> ""
-              Just errF  -> unlines 
+              Just errF  -> unlines
                 [ "  // An error check for when the phase has already expired."
                 , "  // The first disjunct is for when the current time has not overflowed,"
                 , "  // and the second for when it has."
@@ -314,6 +326,7 @@
                                           Word64 -> Word64
                                           _      -> clkTypeErr)
 
+  clkTypeErr :: a
   clkTypeErr = error "Clock type must be one of Word8, Word16, Word32, Word64."
 
   funcName = if null (cFuncName config) then name else cFuncName config
diff --git a/Language/Atom/Compile.hs b/Language/Atom/Compile.hs
--- a/Language/Atom/Compile.hs
+++ b/Language/Atom/Compile.hs
@@ -6,6 +6,8 @@
   ) where
 
 import System.Exit
+import Control.Monad (when)
+import Data.Maybe (isJust)
 
 import Language.Atom.Code
 import Language.Atom.Scheduling
@@ -21,5 +23,14 @@
     Just (state, rules, assertionNames, coverageNames, probeNames) -> do
       let schedule' = schedule rules
       ruleCoverage <- writeC name config state rules schedule' assertionNames coverageNames probeNames
+      when (isJust $ hardwareClock config) (putStrLn hwClockWarning)
       return (schedule', ruleCoverage, assertionNames, coverageNames, probeNames)
 
+hwClockWarning :: String
+hwClockWarning = unlines
+ [ ""
+ , "*** Atom WARNING: you are configuring to use a harware clock.  Please remember to assign" 
+ , "    the current time (accoring to your clockName field in Clock) the first time you"
+ , "    enter the main Atom-generated function calling your rules."
+ , ""
+ ]
diff --git a/atom.cabal b/atom.cabal
--- a/atom.cabal
+++ b/atom.cabal
@@ -1,5 +1,5 @@
 name:    atom
-version: 1.0.7
+version: 1.0.8
 
 category: Language, Embedded
 
@@ -36,7 +36,7 @@
         base       >= 4.0     && < 5,
         mtl        >= 1.1.0.1 && < 1.2,
         process    >= 1.0.1.1 && < 1.2,
-        syb        >= 0.1.0.0 && < 0.2.0.0,
+        syb        >= 0.1.0.0,
         uniplate   >= 1.5.0   && < 2.0
 
     exposed-modules:
