diff --git a/hakyll-sass.cabal b/hakyll-sass.cabal
--- a/hakyll-sass.cabal
+++ b/hakyll-sass.cabal
@@ -1,9 +1,8 @@
 name: hakyll-sass
-version: 0.1.0
+version: 0.2.0
 synopsis: Hakyll SASS compiler over hsass
 license: MIT
 license-file: LICENSE
-homepage: https://github.com/meoblast001/hakyll-sass
 author: Braden Walters
 maintainer: vc@braden-walters.info
 category: Web
@@ -21,5 +20,6 @@
     , hakyll >= 4.7.0
     , data-default-class >= 0.0.1
     , hsass >= 0.2.0
+    , filepath >= 1.3.0
   hs-source-dirs: src
   default-language: Haskell2010
diff --git a/src/Hakyll/Web/Sass.hs b/src/Hakyll/Web/Sass.hs
--- a/src/Hakyll/Web/Sass.hs
+++ b/src/Hakyll/Web/Sass.hs
@@ -6,32 +6,62 @@
 -- Stability: experimental
 -- Portability: ghc
 
-module Hakyll.Web.Sass (sassCompiler) where
+module Hakyll.Web.Sass
+( sassCompiler
+, sassCompilerWith
+, renderSass
+, renderSassWith
+, selectFileType
+, sassDefConfig
+, module Text.Sass.Options
+) where
 
+import Control.Monad (join)
 import Data.Default.Class
 import Data.Functor
 import Hakyll.Core.Compiler
+import Hakyll.Core.Identifier
 import Hakyll.Core.Item
-import System.IO.Unsafe
+import System.FilePath (takeExtension)
 import Text.Sass.Compilation
 import Text.Sass.Options
 
--- | Compiles a SASS file into CSS.
+-- | Compiles a SASS file into CSS. Use the file extension to determine SCSS
+-- from SASS formatting.
 sassCompiler :: Compiler (Item String)
-sassCompiler = do
-  bodyStr <- itemBody <$> getResourceBody
-  extension <- getUnderlyingExtension
-  let mayOptions = selectFileType def extension
-  case mayOptions of
-    Just options -> do
-      resultOrErr <- unsafeCompiler (compileString bodyStr options)
-      case resultOrErr of
-        Left sassError -> fail (unsafePerformIO $ errorMessage sassError)
-        Right result -> makeItem result
-    Nothing -> fail "File type must be .scss or .sass."
+sassCompiler = getResourceBody >>= renderSass
 
+-- | Compiles a SASS file into CSS with options. The file extension will not
+-- be used to determine SCSS from SASS formatting.
+sassCompilerWith :: SassOptions -> Compiler (Item String)
+sassCompilerWith options = getResourceBody >>= renderSassWith options
+
+-- | Compiles a SASS file item into CSS. Use the file extension to determine
+-- SCSS from SASS formatting.
+renderSass :: Item String -> Compiler (Item String)
+renderSass item =
+  let extension = (takeExtension . toFilePath . itemIdentifier) item
+  in case selectFileType sassDefConfig extension of
+       Just options -> renderSassWith options item
+       Nothing -> fail "File type must be .scss or .sass."
+
+-- | Compiles a SASS file item into CSS with options. The file extension will
+-- not be used to determine SCSS from SASS formatting.
+renderSassWith :: SassOptions -> Item String -> Compiler (Item String)
+renderSassWith options item =
+  let bodyStr = itemBody item
+  in join $ unsafeCompiler $ do
+    resultOrErr <- compileString bodyStr options
+    case resultOrErr of
+      Left sassError -> errorMessage sassError >>= fail
+      Right result -> return (makeItem result)
+
 -- | Use the file extension to determine whether to use indented syntax.
 selectFileType :: SassOptions -> String -> Maybe SassOptions
 selectFileType options ".scss" = Just $ options { sassIsIndentedSyntax = False }
 selectFileType options ".sass" = Just $ options { sassIsIndentedSyntax = True }
 selectFileType _ _ = Nothing
+
+-- | Default sass configuration.
+sassDefConfig :: SassOptions
+sassDefConfig = def
