M src/Stylish/Style/Selector.hs => src/Stylish/Style/Selector.hs +5 -4
@@ 5,13 5,14 @@ module Stylish.Style.Selector(
 import Stylish.Style.Selector.Index
 import Stylish.Style.Selector.Interpret
 import Stylish.Style.Selector.Specificity
+import Stylish.Style.Selector.Importance
 import Stylish.Style.Selector.Common
 
-ruleStore = OrderedRuleStore (InterpretedRuleStore styleIndex) 0
+ruleStore = ImportanceSplitter $ OrderedRuleStore (InterpretedRuleStore styleIndex) 0
 
-data QueryableStyleSheet = QueryableStyleSheet {
-    store :: RuleStore,
+data QueryableStyleSheet store = QueryableStyleSheet {
+    store :: store,
     priority :: Int -- author vs user agent vs user styles
 }
 
-queryableStyleSheet = QueryableStyleSheet {store = ruleStore, proirity = 0}
+queryableStyleSheet = QueryableStyleSheet {store = ruleStore, priority = 0}
 
A src/Stylish/Style/Selector/Importance.hs => src/Stylish/Style/Selector/Importance.hs +29 -0
@@ 0,0 1,29 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Stylish.Style.Selector.Importance (
+        splitProperties, ImportanceSplitter(..)
+    ) where
+
+import Data.CSS.Syntax.Tokens
+import Data.Text.Internal (Text(..))
+import Stylish.Parse (StyleRule(..))
+import Stylish.Style.Selector.Common
+
+type Property = (Text, [Token])
+splitProperties :: [Property] -> ([Property], [Property])
+splitProperties (prop@(name, value):rest)
+        | (Ident "important":Delim '!':value') <- reverse value =
+            (unimportant, (name, reverse value'):important)
+        | otherwise = (prop:unimportant, important)
+    where (unimportant, important) = splitProperties rest
+
+data ImportanceSplitter a = ImportanceSplitter a
+instance RuleStore inner => RuleStore (ImportanceSplitter inner) where
+    addStyleRule (ImportanceSplitter self) priority rule =
+            ImportanceSplitter $ addStyleRule (
+                addStyleRule self (negate priority) $ buildRule important
+            ) priority $ buildRule unimportant
+        where
+            (important, unimportant) = splitProperties properties
+            (StyleRule selector properties) = inner rule
+            buildRule properties = rule {inner = StyleRule selector properties}
+    lookupRules (ImportanceSplitter self) el = lookupRules self el
 
M src/Stylish/Style/Selector/Specificity.hs => src/Stylish/Style/Selector/Specificity.hs +1 -1
@@ 1,5 1,5 @@
 module Stylish.Style.Selector.Specificity(
-        OrderedRuleStore
+        OrderedRuleStore(..)
     ) where
 
 import Stylish.Parse.Selector
 
M test/Test.hs => test/Test.hs +1 -1
@@ 9,8 9,8 @@ import Stylish.Parse
 import Stylish.Style.Selector.Index
 import Stylish.Element
 import Stylish.Style.Selector.Interpret
-import Stylish.Style.Selector.Specificity
 import Stylish.Style.Selector.Common
+import Stylish.Style.Selector
 
 main = hspec spec