@@ 8,7 8,7 @@ import Stylist.Tree (StyleTree(..))
 
 import Graphics.Layout.Box as B
 import Graphics.Layout
-import Graphics.Text.Font.Choose (Pattern(..))
+import Graphics.Text.Font.Choose (Pattern(..), unset)
 import Graphics.Layout.CSS.Internal
 import Graphics.Layout.Grid.CSS
 import Graphics.Layout.Inline.CSS
@@ 67,6 67,10 @@ instance PropertyParser a => PropertyParser (CSSBox a) where
         captionBelow = captionBelow parent
       }
 
+    -- Wasn't sure how to implement in FontConfig-Pure
+    longhand _ self "font-family" [Ident "initial"] =
+        Just self { font = unset "family" $ font self}
+
     longhand _ self "box-sizing" [Ident "content-box"] = Just self {boxSizing = ContentBox}
     longhand _ self "box-sizing" [Ident "border-box"] = Just self {boxSizing = BorderBox}
     longhand _ self "box-sizing" [Ident "initial"] = Just self {boxSizing = ContentBox}
 
@@ 11,7 11,8 @@ import Data.Maybe (fromMaybe)
 import Graphics.Layout.Box
 
 import Data.Text.Glyphize as HB
-import Graphics.Text.Font.Choose (Pattern(..), Value(..), normalizePattern, getValue', getValue0)
+import Graphics.Text.Font.Choose (Pattern(..), Value(..), normalizePattern,
+                                  getValue', getValue0, setValue, Binding(..))
 import qualified Data.ByteString as B
 import System.IO.Unsafe (unsafePerformIO)
 
@@ 61,10 62,13 @@ finalizeLength (x,"%") _ = Percent $ x/100
 finalizeLength (_,"auto") _ = Auto
 finalizeLength (_,"min-content") _ = Min
 finalizeLength (_,"max-content") _ = Preferred
+finalizeLength (x, " ") _ = Pixels x -- Internal constant value...
 finalizeLength (_,unit) _ = trace ("Invalid unit " ++ Txt.unpack unit) $ Pixels 0
+px2pt f x = x / scale f / 96 * 72
 
 data Font' = Font' {
     hbFont :: Maybe Font, -- Optional for sake of demo script, FIXME better solution?
+    pattern :: Pattern,
     fontHeight :: Char -> Double,
     fontAdvance :: Char -> Double,
     fontSize :: Double,
@@ 77,7 81,7 @@ data Font' = Font' {
     vmin :: Double,
     scale :: Double
 }
-placeholderFont = Font' Nothing (const 0) (const 0) 0 0 0 0  0 0 0 0  1
+placeholderFont = Font' Nothing [] (const 0) (const 0) 0 0 0 0  0 0 0 0  1
 hbScale f = fontSize f*hbUnit
 hbUnit = 64
 
@@ 96,8 100,11 @@ pattern2hbfont pat scale variations = createFontWithOptions options face
     value2opt opts _ = opts
 
 pattern2font :: Pattern -> CSSFont -> Font' -> Font' -> Font'
+pattern2font pat styles@CSSFont { cssFontSize = (x,"initial") } parent root =
+    pattern2font pat styles { cssFontSize = (x*fontSize root," ") } parent root
 pattern2font pat styles parent root = Font' {
         hbFont = Just font',
+        pattern = pat',
         fontHeight = height' . fontGlyphExtents font' . fontGlyph',
         fontAdvance = fromIntegral . fontGlyphHAdvance font' . fontGlyph',
         fontSize = fontSize',
@@ 119,7 126,10 @@ pattern2font pat styles parent root = Font' {
         fontSize' = lowerLength' (cssFontSize styles) parent
         lowerLength' a = lowerLength (fontSize parent) . finalizeLength a
         fontGlyph' ch = fromMaybe 0 $ fontGlyph font' ch Nothing
-        font' = pattern2hbfont pat (round scale') $ variations' fontSize' styles
+        pat' | Nothing <- lookup "family" pat, Just val <- lookup "family" $ pattern root =
+                ("family", val):setValue "size" Weak (px2pt root fontSize') pat
+            | otherwise = setValue "size" Weak (px2pt root fontSize') pat
+        font' = pattern2hbfont pat' (round scale') $ variations' fontSize' styles
         scale' = fontSize'*hbUnit
 
 data CSSFont = CSSFont {
@@ 129,8 139,7 @@ data CSSFont = CSSFont {
     weightVariation :: Variation,
     widthVariation :: Variation,
     slantVariation :: Variation,
-    opticalSize :: Bool,
-    defaultFontSize :: Unitted
+    opticalSize :: Bool
 }
 variations' :: Double -> CSSFont -> [Variation]
 variations' fontsize self =
@@ 139,7 148,7 @@ variations' fontsize self =
 
 fracDefault :: CSSFont -> Double -> Maybe CSSFont
 fracDefault self frac = Just self {
-    cssFontSize = (frac*fst (defaultFontSize self),snd $ defaultFontSize self)
+    cssFontSize = (frac,"initial")
 }
 instance PropertyParser CSSFont where
     temp = CSSFont {
@@ 149,8 158,7 @@ instance PropertyParser CSSFont where
         weightVariation = Variation wght 400,
         widthVariation = Variation wdth 100,
         slantVariation = Variation ital 0,
-        opticalSize = True,
-        defaultFontSize = (12,"pt") -- NOTE: Callers should load from system settings.
+        opticalSize = True
     }
     inherit parent = parent
 
@@ 158,6 166,7 @@ instance PropertyParser CSSFont where
     longhand _ self "font-size" [Ident "x-small"] = fracDefault self $ 3/4
     longhand _ self "font-size" [Ident "small"] = fracDefault self $ 8/9
     longhand _ self "font-size" [Ident "medium"] = fracDefault self 1
+    longhand _ self "font-size" [Ident "initial"] = fracDefault self 1
     longhand _ self "font-size" [Ident "large"] = fracDefault self $ 6/5
     longhand _ self "font-size" [Ident "x-large"] = fracDefault self $ 3/2
     longhand _ self "font-size" [Ident "xx-large"] = fracDefault self 2