diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,11 @@
 # Revision history for skylighting
 
+## 0.3.5 --- 2017-09-14
+
+  * Added ToJSON/FromJSON instances for all basic types.
+  * Added some background colors to 'kate' style, matching default.theme,
+    and made FromJSON for Style sensitive to background-color.
+
 ## 0.3.4.1 -- 2017-09-09
 
   * HTML formatting: do not use `div` elements for source
diff --git a/skylighting.cabal b/skylighting.cabal
--- a/skylighting.cabal
+++ b/skylighting.cabal
@@ -1,5 +1,5 @@
 name:                skylighting
-version:             0.3.4.1
+version:             0.3.5
 synopsis:            syntax highlighting library
 description:         Skylighting is a syntax highlighting library with
                      support for over one hundred languages.  It derives
@@ -239,6 +239,7 @@
                        utf8-string,
                        hxt,
                        safe,
+                       base64-bytestring,
                        blaze-html >= 0.5,
                        containers
   if flag(system-pcre)
@@ -271,6 +272,7 @@
   build-depends:       base >= 4.7 && < 5.0,
                        filepath,
                        bytestring,
+                       base64-bytestring,
                        text,
                        safe,
                        hxt,
diff --git a/src/Skylighting/Regex.hs b/src/Skylighting/Regex.hs
--- a/src/Skylighting/Regex.hs
+++ b/src/Skylighting/Regex.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE DeriveDataTypeable  #-}
 {-# LANGUAGE DeriveGeneric       #-}
 {-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE OverloadedStrings  #-}
 
 module Skylighting.Regex (
                 Regex
@@ -20,6 +21,10 @@
 import Text.Regex.PCRE.ByteString
 import Data.Data
 import Data.Binary (Binary)
+import Data.Aeson
+import qualified Data.Text as Text
+import qualified Data.Text.Encoding as TE
+import qualified Data.ByteString.Base64 as Base64
 
 -- | An exception in compiling or executing a regex.
 newtype RegexException = RegexException String
@@ -35,6 +40,14 @@
 
 instance Binary RE
 
+instance ToJSON RE where
+  toJSON re = object [ "reString"        .= encodeToText (reString re)
+                     , "reCaseSensitive" .= reCaseSensitive re ]
+instance FromJSON RE where
+  parseJSON = withObject "RE" $ \v ->
+    RE <$> ((v .: "reString") >>= decodeFromText)
+       <*> v .: "reCaseSensitive"
+
 -- | Compile a PCRE regex.  If the first parameter is True, the regex is
 -- case-sensitive, otherwise caseless.  The regex is compiled from
 -- a bytestring interpreted as UTF-8.  If the regex cannot be compiled,
@@ -83,3 +96,11 @@
                                        Just (mat : capts)
                       Right Nothing -> Nothing
                       Left (_rc, msg) -> E.throw $ RegexException msg
+
+-- functions to marshall bytestrings to text
+
+encodeToText :: BS.ByteString -> Text.Text
+encodeToText = TE.decodeUtf8 . Base64.encode
+
+decodeFromText :: (Monad m) => Text.Text -> m BS.ByteString
+decodeFromText = either fail return . Base64.decode . TE.encodeUtf8
diff --git a/src/Skylighting/Styles.hs b/src/Skylighting/Styles.hs
--- a/src/Skylighting/Styles.hs
+++ b/src/Skylighting/Styles.hs
@@ -49,10 +49,10 @@
         , ( ExtensionTok, defStyle { tokenColor = Just (RGB 0 149 255), tokenBold = True })
         , ( PreprocessorTok, defStyle { tokenColor = Just (RGB 0 110 40) })
         , ( AttributeTok, defStyle { tokenColor = Just (RGB 0 87 174) })
-        , ( RegionMarkerTok, defStyle { tokenColor = Just (RGB 0 87 174) })
+        , ( RegionMarkerTok, defStyle { tokenColor = Just (RGB 0 87 174), tokenBackground = Just (RGB 224 233 248)} )
         , ( InformationTok, defStyle { tokenColor = Just (RGB 176 128 0) })
         , ( WarningTok, defStyle { tokenColor = Just (RGB 191 3 3) })
-        , ( AlertTok, defStyle { tokenColor = Just (RGB 191 3 3), tokenBold = True })
+        , ( AlertTok, defStyle { tokenColor = Just (RGB 191 3 3), tokenBackground = Just (RGB 247 230 230), tokenBold = True })
         , ( ErrorTok, defStyle { tokenColor = Just (RGB 191 3 3), tokenUnderline = True })
         , ( NormalTok, defStyle { tokenColor = Just (RGB 31 28 27) })
         ]
diff --git a/src/Skylighting/Types.hs b/src/Skylighting/Types.hs
--- a/src/Skylighting/Types.hs
+++ b/src/Skylighting/Types.hs
@@ -66,6 +66,10 @@
 
 instance Binary KeywordAttr
 
+instance ToJSON KeywordAttr where
+  toEncoding = genericToEncoding defaultOptions
+instance FromJSON KeywordAttr
+
 -- | A set of "words," possibly case insensitive.
 data WordSet a = CaseSensitiveWords (Set.Set a)
                | CaseInsensitiveWords (Set.Set a)
@@ -73,6 +77,10 @@
 
 instance Binary a => Binary (WordSet a)
 
+instance ToJSON a => ToJSON (WordSet a) where
+  toEncoding = genericToEncoding defaultOptions
+instance (FromJSON a, Ord a) => FromJSON (WordSet a)
+
 -- | A set of words to match (either case-sensitive or case-insensitive).
 makeWordSet :: (FoldCase a, Ord a) => Bool -> [a] -> WordSet a
 makeWordSet True ws  = CaseSensitiveWords (Set.fromList ws)
@@ -105,6 +113,10 @@
   | DetectIdentifier
   deriving (Show, Read, Eq, Ord, Data, Typeable, Generic)
 
+instance ToJSON Matcher where
+  toEncoding = genericToEncoding defaultOptions
+instance FromJSON Matcher
+
 instance Binary Matcher
 
 -- | A context switch, either pops or pushes a context.
@@ -114,6 +126,10 @@
 
 instance Binary ContextSwitch
 
+instance ToJSON ContextSwitch where
+  toEncoding = genericToEncoding defaultOptions
+instance FromJSON ContextSwitch
+
 -- | A rule corresponds to one of the elements of a Kate syntax
 -- highlighting "context."
 data Rule = Rule{
@@ -131,6 +147,10 @@
 
 instance Binary Rule
 
+instance ToJSON Rule where
+  toEncoding = genericToEncoding defaultOptions
+instance FromJSON Rule
+
 -- | A syntax corresponds to a complete Kate syntax description.
 -- The 'sShortname' field is derived from the filename.
 data Syntax = Syntax{
@@ -147,6 +167,10 @@
 
 instance Binary Syntax
 
+instance ToJSON Syntax where
+  toEncoding = genericToEncoding defaultOptions
+instance FromJSON Syntax
+
 -- | A map of syntaxes, keyed by full name.
 type SyntaxMap = Map.Map Text Syntax
 
@@ -167,6 +191,10 @@
 
 instance Binary Context
 
+instance ToJSON Context where
+  toEncoding = genericToEncoding defaultOptions
+instance FromJSON Context
+
 -- | A pair consisting of a list of attributes and some text.
 type Token = (TokenType, Text)
 
@@ -207,6 +235,9 @@
 
 instance Binary TokenType
 
+instance ToJSON TokenType where
+  toEncoding t = toEncoding (Text.stripSuffix "Tok" $ Text.pack $ show t)
+
 -- | JSON @"Keyword"@ corresponds to 'KeywordTok', and so on.
 instance FromJSON TokenType where
   parseJSON (String t) =
@@ -237,16 +268,23 @@
 instance FromJSON TokenStyle where
   parseJSON (Object v) = do
     tcolor <- v .:? "text-color"
+    bg <- v .:? "background-color"
     tbold <- v .:? "bold" .!= False
     titalic <- v .:? "italic" .!= False
     tunderline <- v .:? "underline" .!= False
     return TokenStyle{
                tokenColor = tcolor
-             , tokenBackground = Nothing
+             , tokenBackground = bg
              , tokenBold = tbold
              , tokenItalic = titalic
              , tokenUnderline = tunderline }
   parseJSON _ = mempty
+instance ToJSON TokenStyle where
+  toJSON ts = object [ "text-color" .= tokenColor ts
+                     , "background-color" .= tokenBackground ts
+                     , "bold" .= tokenBold ts
+                     , "italic" .= tokenItalic ts
+                     , "underline" .= tokenUnderline ts ]
 
 -- | Default style.
 defStyle :: TokenStyle
@@ -296,6 +334,9 @@
   parseJSON (String t) = maybe mempty return $ toColor (Text.unpack t)
   parseJSON _          = mempty
 
+instance ToJSON Color where
+  toJSON color = String (Text.pack (fromColor color :: String))
+
 -- | Different representations of a 'Color'.
 class FromColor a where
   fromColor :: Color -> a
@@ -341,6 +382,13 @@
                      Map.mapKeys (\s -> maybe OtherTok id $
                                      readMay (Text.unpack s ++ "Tok")) tokstyles }
   parseJSON _ = mempty
+
+instance ToJSON Style where
+  toJSON s = object [ "text-styles" .= toJSON (tokenStyles s)
+                    , "background-color" .= toJSON (backgroundColor s)
+                    , "text-color" .= toJSON (defaultColor s)
+                    , "line-numbers" .= toJSON (lineNumberColor s)
+                    ]
 
 -- | Options for formatting source code.
 data FormatOptions = FormatOptions{
