diff --git a/hakyll.cabal b/hakyll.cabal
--- a/hakyll.cabal
+++ b/hakyll.cabal
@@ -1,5 +1,5 @@
 Name:               hakyll
-Version:            3.1.1.0
+Version:            3.1.1.1
 
 Synopsis:           A simple static site generator library.
 Description:        A simple static site generator library, mainly aimed at
diff --git a/src/Hakyll/Core/DependencyAnalyzer.hs b/src/Hakyll/Core/DependencyAnalyzer.hs
--- a/src/Hakyll/Core/DependencyAnalyzer.hs
+++ b/src/Hakyll/Core/DependencyAnalyzer.hs
@@ -48,6 +48,7 @@
 data Signal a = Build a
               | Cycle [a]
               | Done
+              deriving (Show)
 
 instance (Ord a, Show a) => Monoid (DependencyAnalyzer a) where
     mempty = DependencyAnalyzer mempty mempty mempty mempty
diff --git a/src/Hakyll/Core/Rules.hs b/src/Hakyll/Core/Rules.hs
--- a/src/Hakyll/Core/Rules.hs
+++ b/src/Hakyll/Core/Rules.hs
@@ -23,6 +23,7 @@
     , compile
     , create
     , route
+    , resources
     , metaCompile
     , metaCompileWith
     ) where
@@ -72,8 +73,8 @@
 --
 tellResources :: [Resource]
               -> Rules
-tellResources resources = RulesM $ tell $
-    RuleSet mempty mempty $ S.fromList resources
+tellResources resources' = RulesM $ tell $
+    RuleSet mempty mempty $ S.fromList resources'
 
 -- | Only compile/route items satisfying the given predicate
 --
@@ -128,14 +129,11 @@
 --
 compile :: (Binary a, Typeable a, Writable a)
         => Compiler Resource a -> Rules
-compile compiler = RulesM $ do
-    pattern <- rulesPattern <$> ask
-    provider <- rulesResourceProvider <$> ask
-    let ids = filterMatches pattern $ map toIdentifier $ resourceList provider
-    unRulesM $ do
-        tellCompilers $ flip map ids $ \identifier ->
-            (identifier, constA (fromIdentifier identifier) >>> compiler)
-        tellResources $ map fromIdentifier ids
+compile compiler = do
+    ids <- resources
+    tellCompilers $ flip map ids $ \identifier ->
+        (identifier, constA (fromIdentifier identifier) >>> compiler)
+    tellResources $ map fromIdentifier ids
                    
 -- | Add a compilation rule
 --
@@ -159,6 +157,14 @@
     pattern <- rulesPattern <$> ask
     group' <- rulesGroup <$> ask
     unRulesM $ tellRoute $ matchRoute (pattern `mappend` inGroup group') route'
+
+-- | Get a list of resources matching the current pattern
+--
+resources :: RulesM [Identifier]
+resources = RulesM $ do
+    pattern <- rulesPattern <$> ask
+    provider <- rulesResourceProvider <$> ask
+    return $ filterMatches pattern $ map toIdentifier $ resourceList provider
 
 -- | Apart from regular compilers, one is also able to specify metacompilers.
 -- Metacompilers are a special class of compilers: they are compilers which
diff --git a/src/Hakyll/Core/Run.hs b/src/Hakyll/Core/Run.hs
--- a/src/Hakyll/Core/Run.hs
+++ b/src/Hakyll/Core/Run.hs
@@ -6,7 +6,7 @@
     ) where
 
 import Prelude hiding (reverse)
-import Control.Monad (filterM)
+import Control.Monad (filterM, forM_)
 import Control.Monad.Trans (liftIO)
 import Control.Applicative (Applicative, (<$>))
 import Control.Monad.Reader (ReaderT, runReaderT, ask)
@@ -147,8 +147,17 @@
     put $ state { hakyllAnalyzer = analyzer' }
 
     case signal of Done      -> return ()
-                   Cycle _   -> return ()
+                   Cycle c   -> unRuntime $ dumpCycle c
                    Build id' -> unRuntime $ build id'
+
+-- | Dump cyclic error and quit
+--
+dumpCycle :: [Identifier] -> Runtime ()
+dumpCycle cycle' = Runtime $ do
+    logger <- hakyllLogger <$> ask
+    section logger "Dependency cycle detected! Conflict:"
+    forM_ (zip cycle' $ drop 1 cycle') $ \(x, y) ->
+        report logger $ show x ++ " -> " ++ show y
 
 build :: Identifier -> Runtime ()
 build id' = Runtime $ do
diff --git a/src/Hakyll/Main.hs b/src/Hakyll/Main.hs
--- a/src/Hakyll/Main.hs
+++ b/src/Hakyll/Main.hs
@@ -87,11 +87,11 @@
     ruleSet <- run configuration rules
 
     -- Get the resource list and a callback for the preview poll
-    let resources = rulesResources ruleSet
+    let resources' = rulesResources ruleSet
         callback = build configuration rules
 
     -- Fork a thread polling for changes
-    _ <- forkIO $ previewPoll configuration resources callback
+    _ <- forkIO $ previewPoll configuration resources' callback
     
     -- Run the server in the main thread
     server configuration port
diff --git a/src/Hakyll/Web/Page.hs b/src/Hakyll/Web/Page.hs
--- a/src/Hakyll/Web/Page.hs
+++ b/src/Hakyll/Web/Page.hs
@@ -53,6 +53,7 @@
     , toMap
     , readPageCompiler
     , pageCompiler
+    , pageCompilerWith
     , addDefaultFields
     , sortByBaseName
     ) where
@@ -65,6 +66,8 @@
 import Data.List (sortBy)
 import Data.Ord (comparing)
 
+import Text.Pandoc (ParserState, WriterOptions)
+
 import Hakyll.Core.Identifier
 import Hakyll.Core.Compiler
 import Hakyll.Core.Resource
@@ -90,6 +93,14 @@
 pageCompiler :: Compiler Resource (Page String)
 pageCompiler = cached "Hakyll.Web.Page.pageCompiler" $
     readPageCompiler >>> addDefaultFields >>> arr applySelf >>> pageRenderPandoc
+
+-- | A version of 'pageCompiler' which allows you to specify your own pandoc
+-- options
+--
+pageCompilerWith :: ParserState -> WriterOptions -> Compiler Resource (Page String)
+pageCompilerWith state options = cached "pageCompilerWith" $
+    readPageCompiler >>> addDefaultFields >>> arr applySelf
+                     >>> pageRenderPandocWith state options
 
 -- | Add a number of default metadata fields to a page. These fields include:
 --
