diff --git a/Text/Css.hs b/Text/Css.hs
--- a/Text/Css.hs
+++ b/Text/Css.hs
@@ -41,7 +41,8 @@
     }
 data CssTop = AtBlock String Builder [Css'] | Css Css' | AtDecl String Builder
 
-type Css = [CssTop]
+data Css = CssWhitespace [CssTop]
+         | CssNoWhitespace [CssTop]
 
 data Content = ContentRaw String
              | ContentVar Deref
@@ -161,9 +162,9 @@
 cssRuntime parseBlocks fp cd render' = unsafePerformIO $ do
     s <- fmap TL.unpack $ qRunIO $ readUtf8File fp
     let a = either (error . show) id $ parse parseBlocks s s
-    return $ goTop [] a
+    return $ CssWhitespace $ goTop [] a
   where
-    goTop :: [(String, String)] -> [TopLevel] -> Css
+    goTop :: [(String, String)] -> [TopLevel] -> [CssTop]
     goTop _ [] = []
     goTop scope (TopAtDecl dec cs':rest) =
         AtDecl dec cs : goTop scope rest
@@ -287,7 +288,7 @@
 topLevelsToCassius :: [TopLevel] -> Q Exp
 topLevelsToCassius a = do
     r <- newName "_render"
-    lamE [varP r] $ appE [|foldr ($) []|] $ fmap ListE $ go r [] a
+    lamE [varP r] $ appE [|CssNoWhitespace . foldr ($) []|] $ fmap ListE $ go r [] a
   where
     go _ _ [] = return []
     go r scope (TopBlock b:rest) = do
@@ -310,25 +311,66 @@
     appE [|foldr ($) []|] $ listE $ map (blockToCss r scope) a
 
 renderCss :: Css -> TL.Text
-renderCss =
-    toLazyText . mconcat . map go -- FIXME use a foldr
+renderCss css =
+    toLazyText $ mconcat $ map go tops-- FIXME use a foldr
   where
-    go (Css x) = renderCss' x
+    (haveWhiteSpace, tops) =
+        case css of
+            CssWhitespace x -> (True, x)
+            CssNoWhitespace x -> (False, x)
+    go (Css x) = renderCss' haveWhiteSpace mempty x
     go (AtBlock name s x) =
         fromText (pack $ concat ["@", name, " "]) `mappend`
         s `mappend`
-        singleton '{' `mappend`
-        foldr mappend (singleton '}') (map renderCss' x)
+        startBlock `mappend`
+        foldr mappend endBlock (map (renderCss' haveWhiteSpace (fromString "    ")) x)
     go (AtDecl dec cs) = fromText (pack $ concat ["@", dec, " "]) `mappend`
                       cs `mappend`
-                      singleton ';'
+                      endDecl
 
-renderCss' :: Css' -> Builder
-renderCss' (Css' _x []) = mempty
-renderCss' (Css' x y) =
-    x
-    `mappend` singleton '{'
-    `mappend` mconcat (intersperse (singleton ';') $ map go' y)
-    `mappend` singleton '}'
+    startBlock
+        | haveWhiteSpace = fromString " {\n"
+        | otherwise = singleton '{'
+
+    endBlock
+        | haveWhiteSpace = fromString "}\n"
+        | otherwise = singleton '}'
+
+    endDecl
+        | haveWhiteSpace = fromString ";\n"
+        | otherwise = singleton ';'
+
+renderCss' :: Bool -> Builder -> Css' -> Builder
+renderCss' _ _ (Css' _x []) = mempty
+renderCss' haveWhiteSpace indent (Css' x y) =
+    startSelect
+    `mappend` x
+    `mappend` startBlock
+    `mappend` mconcat (intersperse endDecl $ map go' y)
+    `mappend` endBlock
   where
-    go' (k, v) = k `mappend` singleton ':' `mappend` v
+    go' (k, v) = startDecl `mappend` k `mappend` colon `mappend` v
+
+    colon
+        | haveWhiteSpace = fromString ": "
+        | otherwise = singleton ':'
+
+    startSelect
+        | haveWhiteSpace = indent
+        | otherwise = mempty
+
+    startBlock
+        | haveWhiteSpace = fromString " {\n"
+        | otherwise = singleton '{'
+
+    endBlock
+        | haveWhiteSpace = fromString ";\n" `mappend` indent `mappend` fromString "}\n"
+        | otherwise = singleton '}'
+
+    startDecl
+        | haveWhiteSpace = indent `mappend` fromString "    "
+        | otherwise = mempty
+
+    endDecl
+        | haveWhiteSpace = fromString ";\n"
+        | otherwise = singleton ';'
diff --git a/Text/Lucius.hs b/Text/Lucius.hs
--- a/Text/Lucius.hs
+++ b/Text/Lucius.hs
@@ -213,13 +213,13 @@
 stringCI [] = return ()
 stringCI (c:cs) = (char (toLower c) <|> char (toUpper c)) >> stringCI cs
 
-luciusRT' :: TL.Text -> Either String ([(Text, Text)] -> Either String Css)
+luciusRT' :: TL.Text -> Either String ([(Text, Text)] -> Either String [CssTop])
 luciusRT' tl =
     case parse parseTopLevels (TL.unpack tl) (TL.unpack tl) of
         Left s -> Left $ show s
         Right tops -> Right $ \scope -> go scope tops
   where
-    go :: [(Text, Text)] -> [TopLevel] -> Either String Css
+    go :: [(Text, Text)] -> [TopLevel] -> Either String [CssTop]
     go _ [] = Right []
     go scope (TopAtDecl dec cs':rest) = do
         let scope' = map goScope scope
@@ -249,4 +249,4 @@
     goScope (k, v) = (DerefIdent (Ident $ unpack k), CDPlain $ fromText v)
 
 luciusRT :: TL.Text -> [(Text, Text)] -> Either String TL.Text
-luciusRT tl scope = either Left (Right . renderCss) $ either Left ($ scope) (luciusRT' tl)
+luciusRT tl scope = either Left (Right . renderCss . CssWhitespace) $ either Left ($ scope) (luciusRT' tl)
diff --git a/shakespeare-css.cabal b/shakespeare-css.cabal
--- a/shakespeare-css.cabal
+++ b/shakespeare-css.cabal
@@ -1,6 +1,6 @@
 name:            shakespeare-css
-version:         1.0.0
-license:         BSD3
+version:         1.0.1
+license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
 maintainer:      Michael Snoyman <michael@snoyman.com>
diff --git a/test/ShakespeareCssTest.hs b/test/ShakespeareCssTest.hs
--- a/test/ShakespeareCssTest.hs
+++ b/test/ShakespeareCssTest.hs
@@ -27,11 +27,11 @@
     let selector = "foo"
     let urlp = (Home, [(pack "p", pack "q")])
     flip celper $(cassiusFileDebug "test/cassiuses/external1.cassius") $ concat
-        [ "foo{background:#000;bar:baz;color:#F00}"
-        , "bin{"
-        , "background-image:url(url);"
-        , "bar:bar;color:#7F6405;fvarx:someval;unicode-test:שלום;"
-        , "urlp:url(url?p=q)}"
+        [ "foo {\n    background: #000;\n    bar: baz;\n    color: #F00;\n}\n"
+        , "bin {\n"
+        , "    background-image: url(url);\n"
+        , "    bar: bar;\n    color: #7F6405;\n    fvarx: someval;\n    unicode-test: שלום;\n"
+        , "    urlp: url(url?p=q);\n}\n"
         ]
 
 {- TODO
@@ -199,16 +199,14 @@
           , "urlp:url(url?p=q)}"
           ]
 
-{-
   , it "lucius file debug" caseLuciusFileDebug
-  -}
 
 
 
 
   , it "lucius nested" $ do
       celper "foo bar{baz:bin}" $(luciusFile "test/cassiuses/external-nested.lucius")
-      celper "foo bar{baz:bin}" $(luciusFileDebug "test/cassiuses/external-nested.lucius")
+      celper "foo bar {\n    baz: bin;\n}\n" $(luciusFileDebug "test/cassiuses/external-nested.lucius")
       celper "foo bar{baz:bin}" [lucius|
         foo {
             bar {
@@ -253,7 +251,7 @@
 
   , it "lucius media" $ do
       celper "@media only screen{foo bar{baz:bin}}" $(luciusFile "test/cassiuses/external-media.lucius")
-      celper "@media only screen{foo bar{baz:bin}}" $(luciusFileDebug "test/cassiuses/external-media.lucius")
+      celper "@media only screen {\n    foo bar {\n        baz: bin;\n    }\n}\n" $(luciusFileDebug "test/cassiuses/external-media.lucius")
       celper "@media only screen{foo bar{baz:bin}}" [lucius|
         @media only screen{
             foo {
@@ -327,8 +325,10 @@
 c:d;
 }
 |]
-  , it "lucius runtime" $ Right (T.pack "foo{bar:baz}") @=? luciusRT (T.pack "foo { bar: #{myvar}}") [(TS.pack "myvar", TS.pack "baz")]
-  , it "lucius runtime variables" $ Right (T.pack "foo{bar:baz}") @=? luciusRT (T.pack "@dummy: dummy; @myvar: baz; @dummy2: dummy; foo { bar: #{myvar}}") []
+  , it "lucius runtime" $ Right (T.pack "foo {\n    bar: baz;\n}\n") @=? luciusRT (T.pack "foo { bar: #{myvar}}") [(TS.pack "myvar", TS.pack "baz")]
+  , it "lucius runtime variables" $ Right (T.pack "foo {\n    bar: baz;\n}\n") @=? luciusRT (T.pack "@dummy: dummy; @myvar: baz; @dummy2: dummy; foo { bar: #{myvar}}") []
+  , it "lucius whtiespace" $ Right (T.pack "@media foo {\n    bar {\n        baz: bin;\n        baz2: bin2;\n    }\n}\n")
+    @=? luciusRT (T.pack "@media foo{bar{baz:bin;baz2:bin2}}") []
   , it "variables inside value" $
         celper "foo{foo:XbarY}" [lucius|
 @bar: bar;
@@ -439,7 +439,7 @@
 caseLuciusFileDebug = do
     let var = "var"
     writeFile "test/cassiuses/external2.lucius" "foo{#{var}: 1}"
-    celper "foo{var:1}" $(luciusFileDebug "test/cassiuses/external2.lucius")
+    celper "foo {\n    var: 1;\n}\n" $(luciusFileDebug "test/cassiuses/external2.lucius")
     writeFile "test/cassiuses/external2.lucius" "foo{#{var}: 2}"
-    celper "foo{var:2}" $(luciusFileDebug "test/cassiuses/external2.lucius")
+    celper "foo {\n    var: 2;\n}\n" $(luciusFileDebug "test/cassiuses/external2.lucius")
     writeFile "test/cassiuses/external2.lucius" "foo{#{var}: 1}"
diff --git a/test/cassiuses/external2.lucius b/test/cassiuses/external2.lucius
--- a/test/cassiuses/external2.lucius
+++ b/test/cassiuses/external2.lucius
@@ -1,1 +1,1 @@
-foo{#{var}: 2}
+foo{#{var}: 1}
