diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,54 @@
 
+50200.12.0
+==========
+
+New features:
+ * Matterhorn now supports multiple teams! This includes a number of UI
+   changes:
+   * Matterhorn no longer prompts for a team on startup.
+   * If the configuration file sets `team`, Matterhorn will attempt to
+     honor that by selecting that as the active team on startup.
+     If the configuration does not specify the `team` setting, the
+     initially-selected team is chosen as the first team after sorting
+     the team list alphabetically.
+   * The window title now reflects the sum of all unread channels in all
+     teams, rather than the number of unread channels in the current
+     team.
+   * If the user is a member of more than one team, the list of teams
+     will be displayed at the top of the window with the active team
+     highlighted. Each team with unread channels will display the count
+     of unread channels next to the team name and teams with unread
+     channels will be highlighted. This change comes with a new theme
+     attribute, `currentTeam`, to style the selected team in the list.
+   * The current team selection can be changed with new keybindings:
+     * `next-team` (default binding: `C-Right`)
+     * `prev-team` (default binding: `C-Left`)
+   * The team list can be reordered manually. In the official web
+     client, the team list can be reordered by dragging and dropping
+     the team icons; in Matterhorn, this can be done by using two new
+     commands, `/move-team-left` and `/move-team-right`, respectively.
+     New keybindings to do the same thing were also added:
+     * `move-current-team-left` (unbound by default)
+     * `move-current-team-right` (unbound by default)
+ * The new `/rename-channel-url` command renames the current channel's
+   URL name. This differs from the server command `/rename`, which
+   renames the current channel's display name. Renaming the URL name
+   with this command is equivalent to changing the value of the "URL"
+   field in the "Rename Channel" dialog box in the official web client.
+   (thanks to Ajay Eeralla for this work)
+
+Other improvements:
+ * The channel list now takes up the full window height. Previously
+   the message editor and input preview were displayed across the entire
+   screen; now those areas stop at the channel list, so the channel list
+   gets a few more rows of space to display channels.
+ * Matterhorn now parses all incoming Markdown text with the Haskell
+   `commonmark` library. Migrating to `commonmark` improved our support
+   for many Markdown extensions and improved how Matterhorn handles some
+   Markdown syntax.
+ * The syntax highlighting XML files in `syntax/` were updated from
+   version 0.10.0.3 of the `skylighting` package.
+
 50200.11.0
 ==========
 
@@ -60,7 +110,7 @@
      (`~`)
    * Channel mute status (`(m)`)
    * Unread status and visual style
- * When composing replies, Mattehorn now displays the threat root
+ * When composing replies, Mattehorn now displays the thread root
    message of the thread being replied to, rather than the message
    the user selected for reply (#670). This is intended to be less
    surprising than the old behavior since showing the root post in the
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -49,6 +49,7 @@
 # Features
 
 * Channel creation, deletion, and membership management commands
+* Support for multiple teams
 * Optimized channel-switching modes: `M-a`, `M-s`, and `C-g`
 * Message posting, editing, replying, and deletion
 * Markdown rendering
diff --git a/docs/commands.md b/docs/commands.md
--- a/docs/commands.md
+++ b/docs/commands.md
@@ -25,6 +25,8 @@
 | `/log-stop` | Stop logging |
 | `/members` | Show the current channel's members |
 | `/message-preview` | Toggle preview of the current message |
+| `/move-team-left` | Move the currently-selected team to the left in the team list |
+| `/move-team-right` | Move the currently-selected team to the right in the team list |
 | `/msg` | Search for a user to enter a private chat |
 | `/msg <@user>` | Chat with the specified user |
 | `/msg <@user> <message or command>` | Go to a user's channel and send the specified message or command |
@@ -33,6 +35,7 @@
 | `/quit` | Exit Matterhorn |
 | `/reconnect` | Force a reconnection attempt to the server |
 | `/remove-user <@user>` | Remove a user from the current channel |
+| `/rename-channel-url <channel name>` | Rename the current channel's URL name |
 | `/right` | Focus on the next channel |
 | `/search <terms>` | Search for posts with given terms |
 | `/sh` | List the available shell scripts |
diff --git a/docs/keybindings.md b/docs/keybindings.md
--- a/docs/keybindings.md
+++ b/docs/keybindings.md
@@ -24,6 +24,10 @@
 | `M-p` | `toggle-message-preview` | Toggle message preview |
 | `F2` | `toggle-channel-list-visibility` | Toggle channel list visibility |
 | `F3` | `toggle-expanded-channel-topics` | Toggle display of expanded channel topics |
+| `C-Right` | `next-team` | Switch to the next available team |
+| `C-Left` | `prev-team` | Switch to the previous available team |
+| (unbound) | `move-current-team-left` | Move the current team to the left in the team list |
+| (unbound) | `move-current-team-right` | Move the current team to the right in the team list |
 | `M-k` | `invoke-editor` | Invoke `$EDITOR` to edit the current message |
 | `C-g` | `enter-fast-select` | Enter fast channel selection mode |
 | `C-q` | `quit` | Quit |
@@ -37,7 +41,7 @@
 | `C-p` | `focus-prev-channel` | Change to the previous channel in the channel list |
 | `M-a` | `focus-next-unread` | Change to the next channel with unread messages or return to the channel marked '~' |
 | `C-x` | `show-attachment-list` | Show the attachment list |
-| `(unbound)` | focus-next-unread-user-or-channel | Change to the next channel with unread messages preferring direct messages |
+| (unbound) | `focus-next-unread-user-or-channel` | Change to the next channel with unread messages preferring direct messages |
 | `M-s` | `focus-last-channel` | Change to the most recently-focused channel |
 | `Enter` | (non-customizable key) | Send the current message |
 | `C-o` | `enter-url-open` | Select and open a URL posted to the current channel |
diff --git a/matterhorn.cabal b/matterhorn.cabal
--- a/matterhorn.cabal
+++ b/matterhorn.cabal
@@ -1,5 +1,5 @@
 name:                matterhorn
-version:             50200.11.0
+version:             50200.12.0
 synopsis:            Terminal client for the Mattermost chat system
 description:         This is a terminal client for the Mattermost chat
                      system. Please see the README for a list of
@@ -63,6 +63,8 @@
                        Matterhorn.Draw.PostListOverlay
                        Matterhorn.Draw.ReactionEmojiListOverlay
                        Matterhorn.Draw.RichText
+                       Matterhorn.Draw.RichText.Wrap
+                       Matterhorn.Draw.RichText.Flatten
                        Matterhorn.Draw.ShowHelp
                        Matterhorn.Draw.TabbedWindow
                        Matterhorn.Draw.ThemeListOverlay
@@ -88,6 +90,7 @@
                        Matterhorn.Events.ThemeListOverlay
                        Matterhorn.Events.UrlSelect
                        Matterhorn.Events.UserListOverlay
+                       Matterhorn.Events.Websocket
                        Matterhorn.FilePaths
                        Matterhorn.HelpTopics
                        Matterhorn.IOUtil
@@ -101,6 +104,7 @@
                        Matterhorn.State.Async
                        Matterhorn.State.Attachments
                        Matterhorn.State.Autocomplete
+                       Matterhorn.State.ChannelList
                        Matterhorn.State.ChannelListOverlay
                        Matterhorn.State.ChannelSelect
                        Matterhorn.State.Channels
@@ -121,11 +125,11 @@
                        Matterhorn.State.Setup
                        Matterhorn.State.Setup.Threads
                        Matterhorn.State.Setup.Threads.Logging
+                       Matterhorn.State.Teams
                        Matterhorn.State.ThemeListOverlay
                        Matterhorn.State.UrlSelect
                        Matterhorn.State.UserListOverlay
                        Matterhorn.State.Users
-                       Matterhorn.TeamSelect
                        Matterhorn.Themes
                        Matterhorn.TimeUtils
                        Matterhorn.Types
@@ -150,7 +154,7 @@
     ghc-options: -fhide-source-paths
 
   build-depends:       base                 >=4.8      && <5
-                     , mattermost-api       == 50200.9.0
+                     , mattermost-api       == 50200.10.0
                      , base-compat          >= 0.9     && < 0.12
                      , unordered-containers >= 0.2     && < 0.3
                      , containers           >= 0.5.7   && < 0.7
@@ -164,9 +168,9 @@
                      , config-ini           >= 0.2.2.0 && < 0.3
                      , process              >= 1.4     && < 1.7
                      , microlens-platform   >= 0.3     && < 0.5
-                     , brick                >= 0.57    && < 0.58
+                     , brick                >= 0.59    && < 0.60
                      , brick-skylighting    >= 0.2     && < 0.4
-                     , vty                  >= 5.31    && < 5.32
+                     , vty                  >= 5.32    && < 5.33
                      , word-wrap            >= 0.4.0   && < 0.5
                      , transformers         >= 0.4     && < 0.6
                      , text-zipper          >= 0.10    && < 0.11
@@ -177,13 +181,15 @@
                      , vector               < 0.13
                      , strict               >= 0.3     && < 0.4
                      , hashable             >= 1.2     && < 1.4
-                     , cheapskate           >= 0.1     && < 0.2
+                     , commonmark           >= 0.1.1.3 && < 0.2
+                     , commonmark-extensions >= 0.2.0.4 && < 0.3
+                     , parsec               >= 3.1     && < 3.2
                      , utf8-string          >= 1.0     && < 1.1
                      , temporary            >= 1.2     && < 1.4
                      , gitrev               >= 1.3     && < 1.4
                      , Hclip                >= 3.0     && < 3.1
                      , mtl                  >= 2.2     && < 2.3
-                     , aspell-pipe          >= 0.4     && < 0.5
+                     , aspell-pipe          >= 0.6     && < 0.7
                      , stm-delay            >= 0.1     && < 0.2
                      , unix                 >= 2.7.1.0 && < 2.7.3.0
                      , skylighting-core     >= 0.8     && < 0.9
@@ -212,7 +218,7 @@
 test-suite test_messages
   type:               exitcode-stdio-1.0
   main-is:            test_messages.hs
-  other-modules:      Cheapskate_QCA
+  other-modules:      RichText_QCA
                     , Message_QCA
   default-language:   Haskell2010
   default-extensions: OverloadedStrings
@@ -229,7 +235,7 @@
                     , tasty-hunit          >= 0.9     && < 0.12
                     , tasty-quickcheck     >= 0.8     && < 0.12
                     , bytestring
-                    , cheapskate
+                    , commonmark
                     , containers
                     , matterhorn
                     , mattermost-api
diff --git a/src/Matterhorn/App.hs b/src/Matterhorn/App.hs
--- a/src/Matterhorn/App.hs
+++ b/src/Matterhorn/App.hs
@@ -9,6 +9,7 @@
 
 import           Brick
 import           Control.Monad.Trans.Except ( runExceptT )
+import qualified Data.HashMap.Strict as HM
 import qualified Graphics.Vty as Vty
 import           Text.Aspell ( stopAspell )
 import           GHC.Conc (getNumProcessors, setNumCapabilities)
@@ -31,7 +32,7 @@
 app :: App ChatState MHEvent Name
 app = App
   { appDraw         = draw
-  , appChooseCursor = \s cs -> case appMode s of
+  , appChooseCursor = \s cs -> case s^.csCurrentTeam.tsMode of
       Main                          -> showFirstCursor s cs
       ChannelSelect                 -> showFirstCursor s cs
       UserListOverlay               -> showFirstCursor s cs
@@ -39,7 +40,8 @@
       ChannelListOverlay            -> showFirstCursor s cs
       ManageAttachmentsBrowseFiles  -> showFirstCursor s cs
       ThemeListOverlay              -> showFirstCursor s cs
-      ChannelTopicWindow            -> showCursorNamed ChannelTopicEditor cs
+      ChannelTopicWindow            -> let tId = s^.csCurrentTeamId
+                                       in showCursorNamed (ChannelTopicEditor tId) cs
       LeaveChannelConfirm           -> Nothing
       DeleteChannelConfirm          -> Nothing
       MessageSelect                 -> Nothing
@@ -87,9 +89,10 @@
     (st, vty) <- setupState mkVty (optLogLocation opts) config
     finalSt <- customMain vty mkVty (Just $ st^.csResources.crEventQueue) app st
 
-    case finalSt^.csEditState.cedSpellChecker of
-        Nothing -> return ()
-        Just (s, _) -> stopAspell s
+    forM_ (HM.elems $ finalSt^.csTeams) $ \ts ->
+        case ts^.tsEditState.cedSpellChecker of
+            Nothing -> return ()
+            Just (s, _) -> stopAspell s
 
     return finalSt
 
@@ -99,11 +102,11 @@
   logIfError (mmCloseSession $ getResourceSession $ finalSt^.csResources)
       "Error in closing session"
 
-  logIfError (writeHistory (finalSt^.csEditState.cedInputHistory))
+  logIfError (writeHistory (finalSt^.csInputHistory))
       "Error in writing history"
 
-  logIfError (writeLastRunState finalSt)
-      "Error in writing last run state"
+  logIfError (writeLastRunStates finalSt)
+      "Error in writing last run states"
 
   shutdownLogManager $ finalSt^.csResources.crLogManager
 
diff --git a/src/Matterhorn/Command.hs b/src/Matterhorn/Command.hs
--- a/src/Matterhorn/Command.hs
+++ b/src/Matterhorn/Command.hs
@@ -27,6 +27,7 @@
 import           Matterhorn.Scripts
 import           Matterhorn.State.Help
 import           Matterhorn.State.Editing
+import           Matterhorn.State.ChannelList
 import           Matterhorn.State.Channels
 import           Matterhorn.State.ChannelTopicWindow
 import           Matterhorn.State.ChannelSelect
@@ -38,6 +39,7 @@
 import           Matterhorn.State.Messages
 import           Matterhorn.State.NotifyPrefs
 import           Matterhorn.State.Common ( postInfoMessage )
+import           Matterhorn.State.Teams
 import           Matterhorn.State.Users
 import           Matterhorn.Themes ( attrForUsername )
 import           Matterhorn.Types
@@ -97,58 +99,59 @@
   [ Cmd "quit" "Exit Matterhorn" NoArg $ \ () -> requestQuit
 
   , Cmd "right" "Focus on the next channel" NoArg $ \ () ->
-      nextChannel
+        nextChannel
 
   , Cmd "left" "Focus on the previous channel" NoArg $ \ () ->
-      prevChannel
+        prevChannel
 
   , Cmd "create-channel" "Create a new public channel"
     (LineArg "channel name") $ \ name ->
-      createOrdinaryChannel True name
+        createOrdinaryChannel True name
 
   , Cmd "create-private-channel" "Create a new private channel"
     (LineArg "channel name") $ \ name ->
-      createOrdinaryChannel False name
+        createOrdinaryChannel False name
 
   , Cmd "delete-channel" "Delete the current channel"
     NoArg $ \ () ->
-      beginCurrentChannelDeleteConfirm
+        beginCurrentChannelDeleteConfirm
 
   , Cmd "hide" "Hide the current DM or group channel from the channel list"
     NoArg $ \ () -> do
-      hideDMChannel =<< use csCurrentChannelId
+        tId <- use csCurrentTeamId
+        hideDMChannel =<< use (csCurrentChannelId tId)
 
   , Cmd "reconnect" "Force a reconnection attempt to the server"
     NoArg $ \ () ->
-      connectWebsockets
+        connectWebsockets
 
   , Cmd "members" "Show the current channel's members"
     NoArg $ \ () ->
-      enterChannelMembersUserList
+        enterChannelMembersUserList
 
   , Cmd "leave" "Leave a normal channel or hide a DM channel" NoArg $ \ () ->
-      startLeaveCurrentChannel
+        startLeaveCurrentChannel
 
   , Cmd "join" "Find a channel to join" NoArg $ \ () ->
-      enterChannelListOverlayMode
+        enterChannelListOverlayMode
 
   , Cmd "join" "Join the specified channel" (ChannelArg NoArg) $ \(n, ()) ->
-      joinChannelByName n
+        joinChannelByName n
 
   , Cmd "theme" "List the available themes" NoArg $ \ () ->
-      enterThemeListMode
+        enterThemeListMode
 
   , Cmd "theme" "Set the color theme"
     (TokenArg "theme" NoArg) $ \ (themeName, ()) ->
-      setTheme themeName
+        setTheme themeName
 
   , Cmd "topic" "Set the current channel's topic (header) interactively"
     NoArg $ \ () ->
-      openChannelTopicWindow
+        openChannelTopicWindow
 
   , Cmd "topic" "Set the current channel's topic (header)"
     (LineArg "topic") $ \ p ->
-      if not (T.null p) then setChannelTopic p else return ()
+        if not (T.null p) then setChannelTopic p else return ()
 
   , Cmd "add-user" "Search for a user to add to the current channel"
     NoArg $ \ () ->
@@ -170,8 +173,9 @@
     (UserArg $ LineArg "message or command") $ \ (name, msg) -> do
         withFetchedUserMaybe (UserFetchByUsername name) $ \foundUser -> do
             case foundUser of
-                Just user -> createOrFocusDMChannel user $ Just $ \cId ->
-                    handleInputSubmission cId msg
+                Just user -> createOrFocusDMChannel user $ Just $ \cId -> do
+                    tId <- use csCurrentTeamId
+                    handleInputSubmission tId cId msg
                 Nothing -> mhError $ NoSuchUser name
 
   , Cmd "log-start" "Begin logging debug information to the specified path"
@@ -240,28 +244,38 @@
               Just topic -> showHelpScreen topic
 
   , Cmd "sh" "List the available shell scripts" NoArg $ \ () ->
-      listScripts
+        listScripts
 
   , Cmd "group-msg" "Create a group chat"
-    (LineArg (userSigil <> "user [" <> userSigil <> "user ...]")) createGroupChannel
+    (LineArg (userSigil <> "user [" <> userSigil <> "user ...]"))
+        createGroupChannel
 
   , Cmd "sh" "Run a prewritten shell script"
     (TokenArg "script" (LineArg "message")) $ \ (script, text) -> do
-        cId <- use csCurrentChannelId
+        tId <- use csCurrentTeamId
+        cId <- use (csCurrentChannelId tId)
         findAndRunScript cId script text
 
   , Cmd "flags" "Open a window of your flagged posts" NoArg $ \ () ->
-      enterFlaggedPostListMode
+        enterFlaggedPostListMode
 
   , Cmd "pinned-posts" "Open a window of this channel's pinned posts" NoArg $ \ () ->
-      enterPinnedPostListMode
+        enterPinnedPostListMode
 
   , Cmd "search" "Search for posts with given terms" (LineArg "terms") $
-      enterSearchResultPostListMode
+        enterSearchResultPostListMode
 
   , Cmd "notify-prefs" "Edit the current channel's notification preferences" NoArg $ \_ ->
-          enterEditNotifyPrefsMode
+        enterEditNotifyPrefsMode
 
+  , Cmd "rename-channel-url" "Rename the current channel's URL name" (TokenArg "channel name" NoArg) $ \ (name, _) ->
+        renameChannelUrl name
+
+  , Cmd "move-team-left" "Move the currently-selected team to the left in the team list" NoArg $ \_ ->
+        moveCurrentTeamLeft
+
+  , Cmd "move-team-right" "Move the currently-selected team to the right in the team list" NoArg $ \_ ->
+        moveCurrentTeamRight
   ]
 
 displayUsernameAttribute :: Text -> MH ()
@@ -273,10 +287,10 @@
 
 execMMCommand :: Text -> Text -> MH ()
 execMMCommand name rest = do
-  cId      <- use csCurrentChannelId
+  tId      <- use csCurrentTeamId
+  cId      <- use (csCurrentChannelId tId)
   session  <- getSession
-  em       <- use (csEditState.cedEditMode)
-  tId      <- gets myTeamId
+  em       <- use (csCurrentTeam.tsEditState.cedEditMode)
   let mc = MM.MinCommand
              { MM.minComChannelId = cId
              , MM.minComCommand   = "/" <> name <> " " <> rest
@@ -335,4 +349,4 @@
 toggleMessagePreview :: MH ()
 toggleMessagePreview = do
     mh invalidateCache
-    csShowMessagePreview %= not
+    csResources.crConfiguration.configShowMessagePreviewL %= not
diff --git a/src/Matterhorn/Constants.hs b/src/Matterhorn/Constants.hs
--- a/src/Matterhorn/Constants.hs
+++ b/src/Matterhorn/Constants.hs
@@ -4,14 +4,19 @@
   , numScrollbackPosts
   , previewMaxHeight
   , normalChannelSigil
+  , normalChannelSigilChar
   , userSigil
+  , userSigilChar
+  , editMarking
   )
 where
 
 import Prelude ()
 import Matterhorn.Prelude
 
+import qualified Data.Text as T
 
+
 -- | The number of rows to consider a "page" when scrolling
 pageAmount :: Int
 pageAmount = 15
@@ -29,7 +34,16 @@
 
 -- Sigils
 normalChannelSigil :: Text
-normalChannelSigil = "~"
+normalChannelSigil = T.singleton normalChannelSigilChar
 
+normalChannelSigilChar :: Char
+normalChannelSigilChar = '~'
+
 userSigil :: Text
-userSigil = "@"
+userSigil = T.singleton userSigilChar
+
+userSigilChar :: Char
+userSigilChar = '@'
+
+editMarking :: Text
+editMarking = "(edited)"
diff --git a/src/Matterhorn/Draw.hs b/src/Matterhorn/Draw.hs
--- a/src/Matterhorn/Draw.hs
+++ b/src/Matterhorn/Draw.hs
@@ -27,7 +27,7 @@
 
 draw :: ChatState -> [Widget Name]
 draw st =
-    case appMode st of
+    case st^.csCurrentTeam.tsMode of
         Main                         -> mainLayers
         UrlSelect                    -> mainLayers
         ChannelSelect                -> mainLayers
@@ -49,4 +49,4 @@
     where
         mainLayers = drawMain True st
         mainLayersMonochrome = drawMain False st
-        messageViewWindow = st^.csViewedMessage.singular _Just._2
+        messageViewWindow = st^.csCurrentTeam.tsViewedMessage.singular _Just._2
diff --git a/src/Matterhorn/Draw/Autocomplete.hs b/src/Matterhorn/Draw/Autocomplete.hs
--- a/src/Matterhorn/Draw/Autocomplete.hs
+++ b/src/Matterhorn/Draw/Autocomplete.hs
@@ -24,7 +24,7 @@
 
 autocompleteLayer :: ChatState -> Widget Name
 autocompleteLayer st =
-    case st^.csEditState.cedAutocomplete of
+    case st^.csCurrentTeam.tsEditState.cedAutocomplete of
         Nothing ->
             emptyWidget
         Just ac ->
@@ -64,7 +64,7 @@
        else Widget Greedy Greedy $ do
            ctx <- getContext
            let rowOffset = ctx^.availHeightL - 3 - editorOffset - visibleHeight
-               editorOffset = if st^.csEditState.cedEphemeral.eesMultiline
+               editorOffset = if st^.csCurrentTeam.tsEditState.cedEphemeral.eesMultiline
                               then multilineHeightLimit
                               else 0
            render $ translateBy (Location (0, rowOffset)) $
diff --git a/src/Matterhorn/Draw/ChannelList.hs b/src/Matterhorn/Draw/ChannelList.hs
--- a/src/Matterhorn/Draw/ChannelList.hs
+++ b/src/Matterhorn/Draw/ChannelList.hs
@@ -66,21 +66,22 @@
         selfHeader = hCenter $
                      colorUsername myUsername_ myUsername_
                          (T.singleton statusSigil <> " " <> userSigil <> myUsername_)
-        teamNameStr = sanitizeUserText $ MM.teamDisplayName $ st^.csMyTeam
+        teamNameStr = T.strip $ sanitizeUserText $ MM.teamDisplayName $ st^.csCurrentTeam.tsTeam
         statusSigil = maybe ' ' userSigilFromInfo me
         me = userById (myUserId st) st
         unreadCountHeader = hCenter $ txt $ "Unread: " <> (T.pack $ show unreadCount)
-        unreadCount = sum $ (channelListGroupUnread . fst) <$> Z.toList (st^.csFocus)
+        unreadCount = sum $ (channelListGroupUnread . fst) <$> Z.toList (st^.csCurrentTeam.tsFocus)
 
 renderChannelList :: ChatState -> Widget Name
 renderChannelList st =
-    viewport ChannelList Vertical body
+    viewport (ChannelList tId) Vertical body
     where
         myUsername_ = myUsername st
         renderEntry s e = renderChannelListEntry myUsername_ $ mkChannelEntryData s e
-        body = case appMode st of
+        tId = st^.csCurrentTeamId
+        body = case st^.csCurrentTeam.tsMode of
             ChannelSelect ->
-                let zipper = st^.csChannelSelectState.channelSelectMatches
+                let zipper = st^.csCurrentTeam.tsChannelSelectState.channelSelectMatches
                     matches = if Z.isEmpty zipper
                               then [hCenter $ txt "No matches"]
                               else (renderChannelListGroup st
@@ -90,10 +91,10 @@
                    renderChannelListHeader st :
                    matches
             _ ->
-                cached ChannelSidebar $
+                cached (ChannelSidebar tId) $
                 vBox $
                 renderChannelListHeader st :
-                (renderChannelListGroup st renderEntry <$> Z.toList (st^.csFocus))
+                (renderChannelListGroup st renderEntry <$> Z.toList (st^.csCurrentTeam.tsFocus))
 
 renderChannelListGroupHeading :: ChannelListGroup -> Widget Name
 renderChannelListGroupHeading g =
diff --git a/src/Matterhorn/Draw/ChannelListOverlay.hs b/src/Matterhorn/Draw/ChannelListOverlay.hs
--- a/src/Matterhorn/Draw/ChannelListOverlay.hs
+++ b/src/Matterhorn/Draw/ChannelListOverlay.hs
@@ -21,7 +21,7 @@
 
 drawChannelListOverlay :: ChatState -> Widget Name
 drawChannelListOverlay st =
-    let overlay = drawListOverlay (st^.csChannelListOverlay) channelSearchScopeHeader
+    let overlay = drawListOverlay (st^.csCurrentTeam.tsChannelListOverlay) channelSearchScopeHeader
                                   channelSearchScopeNoResults channelSearchScopePrompt
                                   renderChannel
                                   Nothing
diff --git a/src/Matterhorn/Draw/ChannelTopicWindow.hs b/src/Matterhorn/Draw/ChannelTopicWindow.hs
--- a/src/Matterhorn/Draw/ChannelTopicWindow.hs
+++ b/src/Matterhorn/Draw/ChannelTopicWindow.hs
@@ -32,23 +32,24 @@
            withFocusRing foc (renderEditor drawTopicEditorTxt) ed
          , hBorderWithLabel (withDefAttr clientEmphAttr $ txt "Preview")
          , vLimit previewHeight $
-           viewport ChannelTopicEditorPreview Vertical $
+           viewport (ChannelTopicEditorPreview tId) Vertical $
            renderText' (Just baseUrl) "" hSet topicTxtWithCursor
          , hBorder
          , hBox [ padRight Max $
                   padLeft (Pad 1) $
-                  drawButton foc ChannelTopicSaveButton "Save"
+                  drawButton foc (ChannelTopicSaveButton tId) "Save"
                 , padRight (Pad 1) $
-                  drawButton foc ChannelTopicCancelButton "Cancel"
+                  drawButton foc (ChannelTopicCancelButton tId) "Cancel"
                 ]
          ]
     where
-        baseUrl = serverBaseUrl st
+        baseUrl = serverBaseUrl st tId
+        tId = st^.csCurrentTeamId
         editorHeight = 5
         previewHeight = 5
         maxWindowWidth = 70
-        foc = st^.csChannelTopicDialog.channelTopicDialogFocus
-        ed = st^.csChannelTopicDialog.channelTopicDialogEditor
+        foc = st^.csCurrentTeam.tsChannelTopicDialog.channelTopicDialogFocus
+        ed = st^.csCurrentTeam.tsChannelTopicDialog.channelTopicDialogEditor
         hSet = getHighlightSet st
         topicTxtWithCursor = T.unlines $
                              getEditContents $
diff --git a/src/Matterhorn/Draw/Main.hs b/src/Matterhorn/Draw/Main.hs
--- a/src/Matterhorn/Draw/Main.hs
+++ b/src/Matterhorn/Draw/Main.hs
@@ -12,6 +12,7 @@
 import           Brick.Widgets.Edit ( editContentsL, renderEditor, getEditContents )
 import           Control.Arrow ( (>>>) )
 import           Data.Char ( isSpace, isPunctuation )
+import qualified Data.Foldable as F
 import           Data.List ( intersperse )
 import qualified Data.Map as M
 import qualified Data.Sequence as Seq
@@ -24,7 +25,8 @@
 import           Lens.Micro.Platform ( (.~), (^?!), to, view, folding )
 
 import           Network.Mattermost.Types ( ChannelId, Type(Direct, Private, Group)
-                                          , ServerTime(..), UserId
+                                          , ServerTime(..), UserId, TeamId, teamDisplayName
+                                          , teamId
                                           )
 
 
@@ -41,8 +43,11 @@
 import           Matterhorn.Themes
 import           Matterhorn.TimeUtils ( justAfter, justBefore )
 import           Matterhorn.Types
+import           Matterhorn.Types.Common ( sanitizeUserText )
+import           Matterhorn.Types.DirectionalSeq ( emptyDirSeq )
 import           Matterhorn.Types.RichText ( parseMarkdown, TeamBaseURL )
 import           Matterhorn.Types.KeyEvents
+import qualified Matterhorn.Zipper as Z
 
 
 previewFromInput :: TeamBaseURL -> Maybe MessageType -> UserId -> Text -> Maybe Message
@@ -93,14 +98,14 @@
 drawEditorContents :: ChatState -> HighlightSet -> [Text] -> Widget Name
 drawEditorContents st hs =
     let noHighlight = txt . T.unlines
-    in case st^.csEditState.cedSpellChecker of
+    in case st^.csCurrentTeam.tsEditState.cedSpellChecker of
         Nothing -> noHighlight
         Just _ ->
-            case S.null (st^.csEditState.cedMisspellings) of
+            case S.null (st^.csCurrentTeam.tsEditState.cedMisspellings) of
                 True -> noHighlight
                 False -> doHighlightMisspellings
                            hs
-                           (st^.csEditState.cedMisspellings)
+                           (st^.csCurrentTeam.tsEditState.cedMisspellings)
 
 -- | This function takes a set of misspellings from the spell
 -- checker, the editor lines, and builds a rendering of the text with
@@ -224,24 +229,25 @@
 
 renderUserCommandBox :: ChatState -> HighlightSet -> Widget Name
 renderUserCommandBox st hs =
-    let prompt = txt $ case st^.csEditState.cedEditMode of
+    let prompt = txt $ case st^.csCurrentTeam.tsEditState.cedEditMode of
             Replying _ _ -> "reply> "
             Editing _ _  ->  "edit> "
             NewPost      ->      "> "
-        inputBox = renderEditor (drawEditorContents st hs) True (st^.csEditState.cedEditor)
-        curContents = getEditContents $ st^.csEditState.cedEditor
+        tId = st^.csCurrentTeamId
+        inputBox = renderEditor (drawEditorContents st hs) True (st^.csCurrentTeam.tsEditState.cedEditor)
+        curContents = getEditContents $ st^.csCurrentTeam.tsEditState.cedEditor
         multilineContent = length curContents > 1
         multilineHints =
             hBox [ borderElem bsHorizontal
                  , str $ "[" <> (show $ (+1) $ fst $ cursorPosition $
-                                        st^.csEditState.cedEditor.editContentsL) <>
+                                        st^.csCurrentTeam.tsEditState.cedEditor.editContentsL) <>
                          "/" <> (show $ length curContents) <> "]"
                  , hBorderWithLabel $ withDefAttr clientEmphAttr $
                    txt $ "In multi-line mode. Press " <> multiLineToggleKey <>
                          " to finish."
                  ]
 
-        replyDisplay = case st^.csEditState.cedEditMode of
+        replyDisplay = case st^.csCurrentTeam.tsEditState.cedEditMode of
             Replying msg _ ->
                 let msgWithoutParent = msg & mInReplyToMsg .~ NotAReply
                 in hBox [ replyArrow
@@ -266,7 +272,7 @@
 
         multiLineToggleKey = ppBinding $ getFirstDefaultBinding ToggleMultiLineEvent
 
-        commandBox = case st^.csEditState.cedEphemeral.eesMultiline of
+        commandBox = case st^.csCurrentTeam.tsEditState.cedEphemeral.eesMultiline of
             False ->
                 let linesStr = "line" <> if numLines == 1 then "" else "s"
                     numLines = length curContents
@@ -277,7 +283,7 @@
                                          "; Enter: send, " <> T.unpack multiLineToggleKey <>
                                          ": edit, Backspace: cancel] "
                                  , txt $ head curContents
-                                 , showCursor MessageInput (Location (0,0)) $ str " "
+                                 , showCursor (MessageInput tId) (Location (0,0)) $ str " "
                                  ]
                             else [inputBox]
             True -> vLimit multilineHeightLimit inputBox <=> multilineHints
@@ -310,7 +316,7 @@
             _ -> ""
         maybeTopic = if T.null topicStr
                      then ""
-                     else " - " <> if st^.csShowExpandedChannelTopics
+                     else " - " <> if st^.csResources.crConfiguration.configShowExpandedChannelTopicsL
                                    then topicStr
                                    else firstTopicLine
         channelNameString = case chnType of
@@ -326,7 +332,8 @@
                 channelNamePair
         channelNamePair = chanName <> " - " <> (chan^.ccInfo.cdDisplayName)
         chanName = mkChannelName st (chan^.ccInfo)
-        baseUrl = serverBaseUrl st
+        tId = st^.csCurrentTeamId
+        baseUrl = serverBaseUrl st tId
 
     in renderText' (Just baseUrl) (myUsername st)
          hs
@@ -336,7 +343,7 @@
 renderCurrentChannelDisplay st hs = header <=> hBorder <=> messages
     where
     header =
-        if st^.csShowChannelList
+        if st^.csResources.crConfiguration.configShowChannelListL
         then channelHeader
         else headerWithStatus
 
@@ -366,7 +373,7 @@
                 headerWidget = Widget Fixed Fixed $ return channelHeaderResult
                 borderWidget = vLimit maxHeight vBorder
 
-            render $ if appMode st == ChannelSelect
+            render $ if st^.csCurrentTeam.tsMode == ChannelSelect
                         then headerWidget
                         else hBox $ case st^.csChannelListOrientation of
                             ChannelListLeft ->
@@ -387,11 +394,11 @@
 
     messages = padTop Max chatText
 
-    chatText = case appMode st of
+    chatText = case st^.csCurrentTeam.tsMode of
         MessageSelect ->
-            renderMessagesWithSelect (st^.csMessageSelect) channelMessages
+            renderMessagesWithSelect (st^.csCurrentTeam.tsMessageSelect) channelMessages
         MessageSelectDeleteConfirm ->
-            renderMessagesWithSelect (st^.csMessageSelect) channelMessages
+            renderMessagesWithSelect (st^.csCurrentTeam.tsMessageSelect) channelMessages
         _ ->
             cached (ChannelMessages cId) $
             renderLastMessages st hs editCutoff $
@@ -422,15 +429,51 @@
 
     cutoff = getNewMessageCutoff cId st
     editCutoff = getEditedMessageCutoff cId st
+    messageListing = getMessageListing cId st
     channelMessages =
-        insertTransitions (getMessageListing cId st)
-                          cutoff
-                          (getDateFormat st)
-                          (st ^. timeZone)
+        -- If the channel is empty, add an informative message to the
+        -- message listing to make it explicit that this channel does
+        -- not yet have any messages.
+        if F.null messageListing
+        then addMessage (emptyChannelFillerMessage st cId) emptyDirSeq
+        else insertTransitions messageListing
+                               cutoff
+                               (getDateFormat st)
+                               (st ^. timeZone)
 
-    cId = st^.csCurrentChannelId
+    tId = st^.csCurrentTeamId
+    cId = st^.(csCurrentChannelId tId)
     chan = st^.csCurrentChannel
 
+-- | Construct a single message to be displayed in the specified channel
+-- when it does not yet have any user messages posted to it.
+emptyChannelFillerMessage :: ChatState -> ChannelId -> Message
+emptyChannelFillerMessage st cId =
+    newMessageOfType msg (C Informative) ts
+    where
+        -- This is a bogus timestamp, but its value does not matter
+        -- because it is only used to create a message that will be
+        -- shown in a channel with no date transitions (which would
+        -- otherwise include this bogus date) or other messages (which
+        -- would make for a broken message sorting).
+        ts = ServerTime $ UTCTime (toEnum 0) 0
+        Just chan = findChannelById cId (st^.csChannels)
+        chanName = mkChannelName st (chan^.ccInfo)
+        msg = case chan^.ccInfo.cdType of
+            Direct ->
+                let u = chan^.ccInfo.cdDMUserId >>= flip userById st
+                in case u of
+                    Nothing -> userMsg Nothing
+                    Just _ -> userMsg (Just chanName)
+            Group ->
+                groupMsg (chan^.ccInfo.cdDisplayName)
+            _ ->
+                chanMsg chanName
+        userMsg (Just cn) = "You have not yet sent any direct messages to " <> cn <> "."
+        userMsg Nothing   = "You have not yet sent any direct messages to this user."
+        groupMsg us = "There are not yet any direct messages in the group " <> us <> "."
+        chanMsg cn = "There are not yet any messages in the " <> cn <> " channel."
+
 getMessageListing :: ChannelId -> ChatState -> Messages
 getMessageListing cId st =
     st ^?! csChannels.folding (findChannelById cId) . ccContents . cdMessages . to (filterMessages isShown)
@@ -456,7 +499,7 @@
 
 renderChannelSelectPrompt :: ChatState -> Widget Name
 renderChannelSelectPrompt st =
-    let e = st^.csChannelSelectState.channelSelectInput
+    let e = st^.csCurrentTeam.tsChannelSelectState.channelSelectInput
     in withDefAttr channelSelectPromptAttr $
        (txt "Switch to channel [use ^ and $ to anchor]: ") <+>
        (renderEditor (txt . T.concat) True e)
@@ -470,6 +513,35 @@
            , joinBorders $ mainInterface st
            ]
 
+teamList :: ChatState -> Widget Name
+teamList st =
+    let curTid = st^.csCurrentTeamId
+        z = st^.csTeamZipper
+        teams = (\tId -> st^.csTeam(tId)) <$> (concat $ snd <$> Z.toList z)
+        entries = mkEntry <$> teams
+        mkEntry ts =
+            let tId = teamId $ _tsTeam ts
+                unread = uCount > 0
+                uCount = unreadCount tId
+            in (if tId == curTid
+                   then visible . withDefAttr currentTeamAttr
+                   else if unread
+                        then withDefAttr unreadChannelAttr
+                        else id) $
+               txt $
+               (T.strip $ sanitizeUserText $ teamDisplayName $ _tsTeam ts)
+        unreadCount tId = sum $ fmap (nonDMChannelListGroupUnread . fst) $
+                          Z.toList $ st^.csTeam(tId).tsFocus
+    in if length teams == 1
+       then emptyWidget
+       else vBox [ hBox [ padRight (Pad 1) $ txt "Teams:"
+                        , vLimit 1 $ viewport TeamList Horizontal $
+                          hBox $
+                          intersperse (txt " ") entries
+                        ]
+                 , hBorder
+                 ]
+
 connectionLayer :: ChatState -> Widget Name
 connectionLayer st =
     case st^.csConnectionStatus of
@@ -504,7 +576,7 @@
                 hasVerb = isJust (findVerbatimChunk (postMsg^.mText))
                 -- make sure these keybinding pieces are up-to-date!
                 ev e =
-                  let keyconf = st^.csResources.crConfiguration.to configUserKeys
+                  let keyconf = st^.csResources.crConfiguration.configUserKeysL
                       KeyHandlerMap keymap = messageSelectKeybindings keyconf
                   in T.intercalate ","
                        [ ppBinding (eventToBinding k)
@@ -575,21 +647,22 @@
                     , hBorder
                     ]
 
-maybePreviewViewport :: Widget Name -> Widget Name
-maybePreviewViewport w =
+maybePreviewViewport :: TeamId -> Widget Name -> Widget Name
+maybePreviewViewport tId w =
     Widget Greedy Fixed $ do
         result <- render w
         case (Vty.imageHeight $ result^.imageL) > previewMaxHeight of
             False -> return result
             True ->
-                render $ vLimit previewMaxHeight $ viewport MessagePreviewViewport Vertical $
+                render $ vLimit previewMaxHeight $ viewport (MessagePreviewViewport tId) Vertical $
                          (Widget Fixed Fixed $ return result)
 
 inputPreview :: ChatState -> HighlightSet -> Widget Name
-inputPreview st hs | not $ st^.csShowMessagePreview = emptyWidget
+inputPreview st hs | not $ st^.csResources.crConfiguration.configShowMessagePreviewL = emptyWidget
                    | otherwise = thePreview
     where
     uId = myUserId st
+    tId = st^.csCurrentTeamId
     -- Insert a cursor sentinel into the input text just before
     -- rendering the preview. We use the inserted sentinel (which is
     -- not rendered) to get brick to ensure that the line the cursor is
@@ -600,12 +673,12 @@
     -- end of whatever line the user is editing, that is very unlikely
     -- to be a problem.
     curContents = getText $ (gotoEOL >>> insertChar cursorSentinel) $
-                  st^.csEditState.cedEditor.editContentsL
+                  st^.csCurrentTeam.tsEditState.cedEditor.editContentsL
     curStr = T.intercalate "\n" curContents
-    overrideTy = case st^.csEditState.cedEditMode of
+    overrideTy = case st^.csCurrentTeam.tsEditState.cedEditMode of
         Editing _ ty -> Just ty
         _ -> Nothing
-    baseUrl = serverBaseUrl st
+    baseUrl = serverBaseUrl st tId
     previewMsg = previewFromInput baseUrl overrideTy uId curStr
     thePreview = let noPreview = str "(No preview)"
                      msgPreview = case previewMsg of
@@ -629,12 +702,12 @@
                                   , mdMyUsername        = myUsername st
                                   , mdWrapNonhighlightedCodeBlocks = True
                                   }
-                 in (maybePreviewViewport msgPreview) <=>
+                 in (maybePreviewViewport tId msgPreview) <=>
                     hBorderWithLabel (withDefAttr clientEmphAttr $ str "[Preview ↑]")
 
 userInputArea :: ChatState -> HighlightSet -> Widget Name
 userInputArea st hs =
-    case appMode st of
+    case st^.csCurrentTeam.tsMode of
         ChannelSelect -> renderChannelSelectPrompt st
         UrlSelect     -> hCenter $ hBox [ txt "Press "
                                         , withDefAttr clientEmphAttr $ txt "Enter"
@@ -651,13 +724,13 @@
 
 mainInterface :: ChatState -> Widget Name
 mainInterface st =
-    vBox [ body
-         , bottomBorder
-         , inputPreview st hs
-         , userInputArea st hs
+    vBox [ teamList st
+         , body
          ]
     where
-    body = if st^.csShowChannelList || appMode st == ChannelSelect
+    showChannelList = st^.csResources.crConfiguration.configShowChannelListL ||
+                      st^.csCurrentTeam.tsMode == ChannelSelect
+    body = if showChannelList
            then case st^.csChannelListOrientation of
                ChannelListLeft ->
                    hBox [channelList, vBorder, mainDisplay]
@@ -667,11 +740,17 @@
     channelList = hLimit channelListWidth (renderChannelList st)
     hs = getHighlightSet st
     channelListWidth = configChannelListWidth $ st^.csResources.crConfiguration
-    mainDisplay = case appMode st of
+    mainDisplay =
+        vBox [ channelContents
+             , bottomBorder
+             , inputPreview st hs
+             , userInputArea st hs
+             ]
+    channelContents = case st^.csCurrentTeam.tsMode of
         UrlSelect -> renderUrlList st
         _         -> maybeSubdue $ renderCurrentChannelDisplay st hs
 
-    bottomBorder = case appMode st of
+    bottomBorder = case st^.csCurrentTeam.tsMode of
         MessageSelect -> messageSelectBottomBar st
         _ -> maybeSubdue $ hBox
              [ showAttachmentCount
@@ -681,7 +760,7 @@
              ]
 
     showAttachmentCount =
-        let count = length $ listElements $ st^.csEditState.cedAttachmentList
+        let count = length $ listElements $ st^.csCurrentTeam.tsEditState.cedAttachmentList
         in if count == 0
            then emptyWidget
            else hBox [ borderElem bsHorizontal
@@ -709,7 +788,7 @@
                  Just Nothing -> hLimit 2 hBorder <+> txt "*"
                  Nothing -> emptyWidget
 
-    maybeSubdue = if appMode st == ChannelSelect
+    maybeSubdue = if st^.csCurrentTeam.tsMode == ChannelSelect
                   then forceAttr ""
                   else id
 
diff --git a/src/Matterhorn/Draw/ManageAttachments.hs b/src/Matterhorn/Draw/ManageAttachments.hs
--- a/src/Matterhorn/Draw/ManageAttachments.hs
+++ b/src/Matterhorn/Draw/ManageAttachments.hs
@@ -23,7 +23,7 @@
 drawManageAttachments st =
     topLayer
     where
-        topLayer = case appMode st of
+        topLayer = case st^.csCurrentTeam.tsMode of
             ManageAttachments -> drawAttachmentList st
             ManageAttachmentsBrowseFiles -> drawFileBrowser st
             _ -> error "BUG: drawManageAttachments called in invalid mode"
@@ -39,7 +39,7 @@
        vLimit 15 $
        joinBorders $
        borderWithLabel (withDefAttr clientEmphAttr $ txt "Attachments") $
-       vBox [ renderList renderAttachmentItem True (st^.csEditState.cedAttachmentList)
+       vBox [ renderList renderAttachmentItem True (st^.csCurrentTeam.tsEditState.cedAttachmentList)
             , hBorder
             , hCenter $ withDefAttr clientMessageAttr $
                         txt $ addBinding <> ":add " <>
@@ -61,4 +61,4 @@
     -- invariant: cedFileBrowser is not Nothing if appMode is
     -- ManageAttachmentsBrowseFiles, and that is the only way to reach
     -- this code, ergo the fromJust.
-    FB.renderFileBrowser True $ fromJust (st^.csEditState.cedFileBrowser)
+    FB.renderFileBrowser True $ fromJust (st^.csCurrentTeam.tsEditState.cedFileBrowser)
diff --git a/src/Matterhorn/Draw/Messages.hs b/src/Matterhorn/Draw/Messages.hs
--- a/src/Matterhorn/Draw/Messages.hs
+++ b/src/Matterhorn/Draw/Messages.hs
@@ -1,9 +1,14 @@
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE MultiWayIf #-}
 module Matterhorn.Draw.Messages
-  ( nameForUserRef
+  ( MessageData(..)
+  , renderMessage
+  , nameForUserRef
   , renderSingleMessage
   , unsafeRenderMessageSelection
   , renderLastMessages
+  , addEllipsis
   )
 where
 
@@ -11,8 +16,18 @@
 import           Brick.Widgets.Border
 import           Control.Monad.Trans.Reader ( withReaderT )
 import qualified Data.Foldable as F
-import qualified Graphics.Vty as Vty
+import qualified Data.Map.Strict as Map
+import qualified Data.Sequence as S
+import           Data.Sequence ( ViewL(..)
+                               , ViewR(..)
+                               , (|>)
+                               , viewl
+                               , viewr)
+import qualified Data.Set as Set
+import qualified Data.Text as T
+import qualified Graphics.Vty as V
 import           Lens.Micro.Platform ( (.~), to )
+import           Network.Mattermost.Lenses ( postEditAtL, postCreateAtL )
 import           Network.Mattermost.Types ( ServerTime(..), userUsername )
 import           Prelude ()
 import           Matterhorn.Prelude
@@ -21,6 +36,7 @@
 import           Matterhorn.Draw.RichText
 import           Matterhorn.Themes
 import           Matterhorn.Types
+import           Matterhorn.Types.RichText
 import           Matterhorn.Types.DirectionalSeq
 
 maxMessageHeight :: Int
@@ -124,23 +140,23 @@
         upperHeight = targetHeight `div` 2
         lowerHeight = targetHeight - upperHeight
 
-        lowerRender img (m, tState) = render1HLimit doMsgRender Vty.vertJoin targetHeight img tState m
-        upperRender img (m, tState) = render1HLimit doMsgRender (flip Vty.vertJoin) targetHeight img tState m
+        lowerRender img (m, tState) = render1HLimit doMsgRender V.vertJoin targetHeight img tState m
+        upperRender img (m, tState) = render1HLimit doMsgRender (flip V.vertJoin) targetHeight img tState m
 
-    lowerHalf <- foldM lowerRender Vty.emptyImage after
-    upperHalf <- foldM upperRender Vty.emptyImage before
+    lowerHalf <- foldM lowerRender V.emptyImage after
+    upperHalf <- foldM upperRender V.emptyImage before
 
-    let curHeight = Vty.imageHeight $ curMsgResult^.imageL
-        uncropped = upperHalf Vty.<-> curMsgResult^.imageL Vty.<-> lowerHalf
-        img = if | Vty.imageHeight lowerHalf < (lowerHeight - curHeight) ->
-                     Vty.cropTop targetHeight uncropped
-                 | Vty.imageHeight upperHalf < upperHeight ->
-                     Vty.cropBottom targetHeight uncropped
+    let curHeight = V.imageHeight $ curMsgResult^.imageL
+        uncropped = upperHalf V.<-> curMsgResult^.imageL V.<-> lowerHalf
+        img = if | V.imageHeight lowerHalf < (lowerHeight - curHeight) ->
+                     V.cropTop targetHeight uncropped
+                 | V.imageHeight upperHalf < upperHeight ->
+                     V.cropBottom targetHeight uncropped
                  | otherwise ->
-                     Vty.cropTop upperHeight upperHalf Vty.<-> curMsgResult^.imageL Vty.<->
+                     V.cropTop upperHeight upperHalf V.<-> curMsgResult^.imageL V.<->
                         (if curHeight < lowerHeight
-                          then Vty.cropBottom (lowerHeight - curHeight) lowerHalf
-                          else Vty.cropBottom lowerHeight lowerHalf)
+                          then V.cropBottom (lowerHeight - curHeight) lowerHalf
+                          else V.cropBottom lowerHeight lowerHalf)
     return $ emptyResult & imageL .~ img
 
 renderLastMessages :: ChatState
@@ -159,51 +175,253 @@
 
             isBelow m transition = m^.mDate > transition^.mDate
 
-            go :: Vty.Image -> DirectionalSeq Retrograde (Message, ThreadState) -> RenderM Name Vty.Image
+            go :: V.Image -> DirectionalSeq Retrograde (Message, ThreadState) -> RenderM Name V.Image
             go img ms | messagesLength ms == 0 = return img
             go img ms = do
                 let Just (m, threadState) = messagesHead ms
                     newMessagesAbove = maybe False (isBelow m) newMessageTransition
-                newImg <- render1HLimit doMsgRender (flip Vty.vertJoin) targetHeight img threadState m
+                newImg <- render1HLimit doMsgRender (flip V.vertJoin) targetHeight img threadState m
                 -- If the new message fills the window, check whether
                 -- there is still a "New Messages" transition that is
                 -- not displayed. If there is, then we need to replace
                 -- the top line of the new image with a "New Messages"
                 -- indicator.
-                if Vty.imageHeight newImg >= targetHeight && newMessagesAbove
+                if V.imageHeight newImg >= targetHeight && newMessagesAbove
                 then do
                     transitionResult <- render $ withDefAttr newMessageTransitionAttr $
                                                  hBorderWithLabel (txt "New Messages ↑")
-                    let newImg2 = Vty.vertJoin (transitionResult^.imageL)
-                                               (Vty.cropTop (targetHeight - 1) newImg)
+                    let newImg2 = V.vertJoin (transitionResult^.imageL)
+                                               (V.cropTop (targetHeight - 1) newImg)
                     return newImg2
                 else go newImg $ messagesDrop 1 ms
 
-        img <- go Vty.emptyImage msgs
-        return $ emptyResult & imageL .~ (Vty.cropTop targetHeight img)
+        img <- go V.emptyImage msgs
+        return $ emptyResult & imageL .~ (V.cropTop targetHeight img)
 
 relaxHeight :: Context -> Context
 relaxHeight c = c & availHeightL .~ (max maxMessageHeight (c^.availHeightL))
 
 render1HLimit :: (Message -> ThreadState -> Widget Name)
-              -> (Vty.Image -> Vty.Image -> Vty.Image)
+              -> (V.Image -> V.Image -> V.Image)
               -> Int
-              -> Vty.Image
+              -> V.Image
               -> ThreadState
               -> Message
-              -> RenderM Name Vty.Image
+              -> RenderM Name V.Image
 render1HLimit doMsgRender fjoin lim img threadState msg
-  | Vty.imageHeight img >= lim = return img
+  | V.imageHeight img >= lim = return img
   | otherwise = fjoin img <$> render1 doMsgRender threadState msg
 
 render1 :: (Message -> ThreadState -> Widget Name)
         -> ThreadState
         -> Message
-        -> RenderM Name Vty.Image
+        -> RenderM Name V.Image
 render1 doMsgRender threadState msg = case msg^.mDeleted of
-    True -> return Vty.emptyImage
+    True -> return V.emptyImage
     False -> do
         r <- withReaderT relaxHeight $
              render $ padRight Max $
              doMsgRender msg threadState
         return $ r^.imageL
+
+-- | A bundled structure that includes all the information necessary
+-- to render a given message
+data MessageData =
+    MessageData { mdEditThreshold :: Maybe ServerTime
+                -- ^ If specified, any messages edited before this point
+                -- in time are not indicated as edited.
+                , mdShowOlderEdits :: Bool
+                -- ^ Indicates whether "edited" markers should be shown
+                -- for old messages (i.e., ignore the mdEditThreshold
+                -- value).
+                , mdShowReactions :: Bool
+                -- ^ Whether to render reactions.
+                , mdMessage :: Message
+                -- ^ The message to render.
+                , mdUserName :: Maybe Text
+                -- ^ The username of the message's author, if any. This
+                -- is passed here rather than obtaining from the message
+                -- because we need to do lookups in the ChatState to
+                -- compute this, and we don't pass the ChatState into
+                -- renderMessage.
+                , mdParentMessage :: Maybe Message
+                -- ^ The parent message of this message, if any.
+                , mdParentUserName :: Maybe Text
+                -- ^ The author of the parent message, if any.
+                , mdThreadState :: ThreadState
+                -- ^ The thread state of this message.
+                , mdRenderReplyParent :: Bool
+                -- ^ Whether to render the parent message.
+                , mdHighlightSet :: HighlightSet
+                -- ^ The highlight set to use to highlight usernames,
+                -- channel names, etc.
+                , mdIndentBlocks :: Bool
+                -- ^ Whether to indent the message underneath the
+                -- author's name (True) or just display it to the right
+                -- of the author's name (False).
+                , mdMessageWidthLimit :: Maybe Int
+                -- ^ A width override to use to wrap non-code blocks
+                -- and code blocks without syntax highlighting. If
+                -- unspecified, all blocks in the message will be
+                -- wrapped and truncated at the width specified by the
+                -- rendering context. If specified, all non-code blocks
+                -- will be wrapped at this width and highlighted code
+                -- blocks will be rendered using the context's width.
+                , mdMyUsername :: Text
+                -- ^ The username of the user running Matterhorn.
+                , mdWrapNonhighlightedCodeBlocks :: Bool
+                -- ^ Whether to wrap text in non-highlighted code
+                -- blocks.
+                }
+
+-- | renderMessage performs markdown rendering of the specified message.
+renderMessage :: MessageData -> Widget Name
+renderMessage md@MessageData { mdMessage = msg, .. } =
+    let msgUsr = case mdUserName of
+          Just u -> if omittedUsernameType (msg^.mType) then Nothing else Just u
+          Nothing -> Nothing
+        botElem = if isBotMessage msg then txt "[BOT]" else emptyWidget
+        nameElems = case msgUsr of
+          Just un
+            | isEmote msg ->
+                [ withDefAttr pinnedMessageIndicatorAttr $ txt $ if msg^.mPinned then "[PIN]" else ""
+                , txt $ (if msg^.mFlagged then "[!] " else "") <> "*"
+                , colorUsername mdMyUsername un un
+                , botElem
+                , txt " "
+                ]
+            | otherwise ->
+                [ withDefAttr pinnedMessageIndicatorAttr $ txt $ if msg^.mPinned then "[PIN] " else ""
+                , colorUsername mdMyUsername un un
+                , botElem
+                , txt $ (if msg^.mFlagged then "[!]" else "") <> ": "
+                ]
+          Nothing -> []
+
+        -- Use the editing threshold to determine whether to append an
+        -- editing indication to this message.
+        maybeAugment bs = case msg^.mOriginalPost of
+            Nothing -> bs
+            Just p ->
+                if p^.postEditAtL > p^.postCreateAtL
+                then case mdEditThreshold of
+                    Just cutoff | p^.postEditAtL >= cutoff ->
+                        addEditSentinel (EEditSentinel True) bs
+                    _ -> if mdShowOlderEdits
+                         then addEditSentinel (EEditSentinel False) bs
+                         else bs
+                else bs
+
+        augmentedText = unBlocks $ maybeAugment $ msg^.mText
+        msgWidget =
+            vBox $ (layout mdHighlightSet mdMessageWidthLimit nameElems augmentedText . viewl) augmentedText :
+                   catMaybes [msgAtch, msgReac]
+        replyIndent = Widget Fixed Fixed $ do
+            ctx <- getContext
+            -- NB: The amount subtracted here must be the total padding
+            -- added below (pad 1 + vBorder)
+            w <- render $ hLimit (ctx^.availWidthL - 2) msgWidget
+            render $ vLimit (V.imageHeight $ w^.imageL) $
+                padRight (Pad 1) vBorder <+> (Widget Fixed Fixed $ return w)
+        msgAtch = if S.null (msg^.mAttachments)
+          then Nothing
+          else Just $ withDefAttr clientMessageAttr $ vBox
+                 [ txt ("  [attached: `" <> a^.attachmentName <> "`]")
+                 | a <- toList (msg^.mAttachments)
+                 ]
+        msgReac = if Map.null (msg^.mReactions) || (not mdShowReactions)
+          then Nothing
+          else let renderR e us =
+                       let n = Set.size us
+                       in if | n == 1    -> " [" <> e <> "]"
+                             | n > 1     -> " [" <> e <> " " <> T.pack (show n) <> "]"
+                             | otherwise -> ""
+                   reactionMsg = Map.foldMapWithKey renderR (msg^.mReactions)
+               in Just $ withDefAttr emojiAttr $ txt ("   " <> reactionMsg)
+        withParent p =
+            case mdThreadState of
+                NoThread -> msgWidget
+                InThreadShowParent -> p <=> replyIndent
+                InThread -> replyIndent
+    in if not mdRenderReplyParent
+       then msgWidget
+       else case msg^.mInReplyToMsg of
+          NotAReply -> msgWidget
+          InReplyTo _ ->
+              case mdParentMessage of
+                  Nothing -> withParent (str "[loading...]")
+                  Just pm ->
+                      let parentMsg = renderMessage md
+                            { mdShowOlderEdits    = False
+                            , mdMessage           = pm
+                            , mdUserName          = mdParentUserName
+                            , mdParentMessage     = Nothing
+                            , mdRenderReplyParent = False
+                            , mdIndentBlocks      = False
+                            }
+                      in withParent (addEllipsis $ forceAttr replyParentAttr parentMsg)
+
+    where
+        layout :: HighlightSet -> Maybe Int -> [Widget Name] -> Seq Block
+               -> ViewL Block -> Widget Name
+        layout hs w nameElems bs xs | length xs > 1     = multiLnLayout hs w nameElems bs
+        layout hs w nameElems bs (Blockquote {} :< _) = multiLnLayout hs w nameElems bs
+        layout hs w nameElems bs (CodeBlock {} :< _)  = multiLnLayout hs w nameElems bs
+        layout hs w nameElems bs (HTMLBlock {} :< _)  = multiLnLayout hs w nameElems bs
+        layout hs w nameElems bs (List {} :< _)       = multiLnLayout hs w nameElems bs
+        layout hs w nameElems bs (Para inlns :< _)
+            | F.any breakCheck (unInlines inlns)      = multiLnLayout hs w nameElems bs
+        layout hs w nameElems bs _                    = nameNextToMessage hs w nameElems bs
+
+        multiLnLayout hs w nameElems bs =
+            if mdIndentBlocks
+               then vBox [ hBox nameElems
+                         , hBox [txt "  ", renderRichText mdMyUsername hs ((subtract 2) <$> w)
+                                                 mdWrapNonhighlightedCodeBlocks (Blocks bs)]
+                         ]
+               else nameNextToMessage hs w nameElems bs
+
+        nameNextToMessage hs w nameElems bs =
+            Widget Fixed Fixed $ do
+                nameResult <- render $ hBox nameElems
+                let newW = subtract (V.imageWidth (nameResult^.imageL)) <$> w
+                render $ hBox [ raw (nameResult^.imageL)
+                              , renderRichText mdMyUsername hs newW mdWrapNonhighlightedCodeBlocks (Blocks bs)
+                              ]
+
+        breakCheck i = i `elem` [ELineBreak, ESoftBreak]
+
+-- Add the edit sentinel to the end of the last block in the sequence.
+-- If the last block is a paragraph, append it to that paragraph.
+-- Otherwise, append a new block so it appears beneath the last
+-- block-level element.
+addEditSentinel :: Inline -> Blocks -> Blocks
+addEditSentinel d (Blocks bs) =
+    case viewr bs of
+        EmptyR -> Blocks bs
+        (rest :> b) -> Blocks rest <> appendEditSentinel d b
+
+appendEditSentinel :: Inline -> Block -> Blocks
+appendEditSentinel sentinel b =
+    let s = Para (Inlines $ S.singleton sentinel)
+    in Blocks $ case b of
+        Para is -> S.singleton $ Para (Inlines $ unInlines is |> ESpace |> sentinel)
+        _ -> S.fromList [b, s]
+
+omittedUsernameType :: MessageType -> Bool
+omittedUsernameType = \case
+    CP Join -> True
+    CP Leave -> True
+    CP TopicChange -> True
+    _ -> False
+
+addEllipsis :: Widget a -> Widget a
+addEllipsis w = Widget (hSize w) (vSize w) $ do
+    ctx <- getContext
+    let aw = ctx^.availWidthL
+    result <- render w
+    let withEllipsis = (hLimit (aw - 3) $ vLimit 1 $ (Widget Fixed Fixed $ return result)) <+>
+                       str "..."
+    if (V.imageHeight (result^.imageL) > 1) || (V.imageWidth (result^.imageL) == aw) then
+        render withEllipsis else
+        return result
diff --git a/src/Matterhorn/Draw/NotifyPrefs.hs b/src/Matterhorn/Draw/NotifyPrefs.hs
--- a/src/Matterhorn/Draw/NotifyPrefs.hs
+++ b/src/Matterhorn/Draw/NotifyPrefs.hs
@@ -19,7 +19,7 @@
 
 drawNotifyPrefs :: ChatState -> Widget Name
 drawNotifyPrefs st =
-    let Just form = st^.csNotifyPrefs
+    let Just form = st^.csCurrentTeam.tsNotifyPrefs
         label = forceAttr clientEmphAttr $ str "Notification Preferences"
         formKeys = withDefAttr clientEmphAttr <$> txt <$> ["Tab", "BackTab"]
         bindings = vBox $ hCenter <$> [ renderKeybindingHelp "Save" [FormSubmitEvent] <+> txt "  " <+>
diff --git a/src/Matterhorn/Draw/PostListOverlay.hs b/src/Matterhorn/Draw/PostListOverlay.hs
--- a/src/Matterhorn/Draw/PostListOverlay.hs
+++ b/src/Matterhorn/Draw/PostListOverlay.hs
@@ -54,7 +54,7 @@
             else " (" <> (T.pack . show . length) messages <> "): " <> terms
 
         messages = insertDateMarkers
-                     (filterMessages knownChannel $ st^.csPostListOverlay.postListPosts)
+                     (filterMessages knownChannel $ st^.csCurrentTeam.tsPostListOverlay.postListPosts)
                      (getDateFormat st)
                      (st^.timeZone)
 
@@ -100,7 +100,7 @@
         -- The full message list, rendered with the current selection
         renderedMessageList =
           let (s, (before, after)) = splitDirSeqOn matchesMessage messagesWithStates
-              matchesMessage (m, _) = m^.mMessageId == (MessagePostId <$> st^.csPostListOverlay.postListSelected)
+              matchesMessage (m, _) = m^.mMessageId == (MessagePostId <$> st^.csCurrentTeam.tsPostListOverlay.postListSelected)
               messagesWithStates = (, InThreadShowParent) <$> messages
           in case s of
             Nothing ->
diff --git a/src/Matterhorn/Draw/ReactionEmojiListOverlay.hs b/src/Matterhorn/Draw/ReactionEmojiListOverlay.hs
--- a/src/Matterhorn/Draw/ReactionEmojiListOverlay.hs
+++ b/src/Matterhorn/Draw/ReactionEmojiListOverlay.hs
@@ -17,7 +17,7 @@
 
 drawReactionEmojiListOverlay :: ChatState -> Widget Name
 drawReactionEmojiListOverlay st =
-    let overlay = drawListOverlay (st^.csReactionEmojiListOverlay)
+    let overlay = drawListOverlay (st^.csCurrentTeam.tsReactionEmojiListOverlay)
                                   (const $ txt "Search Emoji")
                                   (const $ txt "No matching emoji found.")
                                   (const $ txt "Search emoji:")
diff --git a/src/Matterhorn/Draw/RichText.hs b/src/Matterhorn/Draw/RichText.hs
--- a/src/Matterhorn/Draw/RichText.hs
+++ b/src/Matterhorn/Draw/RichText.hs
@@ -1,17 +1,11 @@
-{-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE MultiWayIf #-}
 {-# LANGUAGE ViewPatterns #-}
 {-# LANGUAGE ParallelListComp #-}
-{-# LANGUAGE RecordWildCards #-}
 module Matterhorn.Draw.RichText
-  ( MessageData(..)
-  , renderRichText
-  , renderMessage
+  ( renderRichText
   , renderText
   , renderText'
-  , renderElementSeq
   , cursorSentinel
-  , addEllipsis
   , findVerbatimChunk
   )
 where
@@ -20,286 +14,67 @@
 import           Matterhorn.Prelude
 
 import           Brick ( (<+>), Widget, hLimit, imageL
-                       , raw, render, Size(..), Widget(..)
+                       , render, Size(..), Widget(..)
                        )
 import qualified Brick as B
 import qualified Brick.Widgets.Border as B
 import qualified Brick.Widgets.Skylighting as BS
 import           Control.Monad.Reader
 import qualified Data.Foldable as F
-import qualified Data.Map.Strict as Map
-import qualified Data.Sequence as Seq
+import qualified Data.Sequence as S
 import           Data.Sequence ( ViewL(..)
-                               , ViewR(..)
                                , (<|)
-                               , (|>)
                                , viewl
-                               , viewr)
-import qualified Data.Sequence as S
-import qualified Data.Set as Set
+                               )
 import qualified Data.Text as T
 import qualified Graphics.Vty as V
 import qualified Skylighting.Core as Sky
 
-import           Network.Mattermost.Lenses ( postEditAtL, postCreateAtL )
-import           Network.Mattermost.Types ( ServerTime(..), PostId )
-
-import           Matterhorn.Constants ( normalChannelSigil, userSigil )
+import           Matterhorn.Constants ( normalChannelSigil, userSigil, editMarking )
+import           Matterhorn.Draw.RichText.Flatten
+import           Matterhorn.Draw.RichText.Wrap
 import           Matterhorn.Themes
-import           Matterhorn.Types ( Name, HighlightSet(..) )
-import           Matterhorn.Types.Messages
-import           Matterhorn.Types.Posts
+import           Matterhorn.Types ( HighlightSet(..), emptyHSet )
 import           Matterhorn.Types.RichText
 
 
-emptyHSet :: HighlightSet
-emptyHSet = HighlightSet Set.empty Set.empty mempty
-
-omittedUsernameType :: MessageType -> Bool
-omittedUsernameType = \case
-  CP Join -> True
-  CP Leave -> True
-  CP TopicChange -> True
-  _ -> False
-
--- Add the edit sentinel to the end of the last block in the sequence.
--- If the last block is a paragraph, append it to that paragraph.
--- Otherwise, append a new block so it appears beneath the last
--- block-level element.
-addEditSentinel :: ElementData -> Seq RichTextBlock -> Seq RichTextBlock
-addEditSentinel d bs =
-    case viewr bs of
-        EmptyR -> bs
-        (rest :> b) -> rest <> appendEditSentinel d b
-
-appendEditSentinel :: ElementData -> RichTextBlock -> Seq RichTextBlock
-appendEditSentinel sentinel b =
-    let s = Para (S.singleton m)
-        m = Element Normal sentinel
-    in case b of
-        Para is -> S.singleton $ Para (is |> Element Normal ESpace |> m)
-        _ -> S.fromList [b, s]
-
--- | A bundled structure that includes all the information necessary
--- to render a given message
-data MessageData =
-    MessageData { mdEditThreshold :: Maybe ServerTime
-                -- ^ If specified, any messages edited before this point
-                -- in time are not indicated as edited.
-                , mdShowOlderEdits :: Bool
-                -- ^ Indicates whether "edited" markers should be shown
-                -- for old messages (i.e., ignore the mdEditThreshold
-                -- value).
-                , mdShowReactions :: Bool
-                -- ^ Whether to render reactions.
-                , mdMessage :: Message
-                -- ^ The message to render.
-                , mdUserName :: Maybe Text
-                -- ^ The username of the message's author, if any. This
-                -- is passed here rather than obtaining from the message
-                -- because we need to do lookups in the ChatState to
-                -- compute this, and we don't pass the ChatState into
-                -- renderMessage.
-                , mdParentMessage :: Maybe Message
-                -- ^ The parent message of this message, if any.
-                , mdParentUserName :: Maybe Text
-                -- ^ The author of the parent message, if any.
-                , mdThreadState :: ThreadState
-                -- ^ The thread state of this message.
-                , mdRenderReplyParent :: Bool
-                -- ^ Whether to render the parent message.
-                , mdHighlightSet :: HighlightSet
-                -- ^ The highlight set to use to highlight usernames,
-                -- channel names, etc.
-                , mdIndentBlocks :: Bool
-                -- ^ Whether to indent the message underneath the
-                -- author's name (True) or just display it to the right
-                -- of the author's name (False).
-                , mdMessageWidthLimit :: Maybe Int
-                -- ^ A width override to use to wrap non-code blocks
-                -- and code blocks without syntax highlighting. If
-                -- unspecified, all blocks in the message will be
-                -- wrapped and truncated at the width specified by the
-                -- rendering context. If specified, all non-code blocks
-                -- will be wrapped at this width and highlighted code
-                -- blocks will be rendered using the context's width.
-                , mdMyUsername :: Text
-                -- ^ The username of the user running Matterhorn.
-                , mdWrapNonhighlightedCodeBlocks :: Bool
-                -- ^ Whether to wrap text in non-highlighted code
-                -- blocks.
-                }
-
--- | renderMessage performs markdown rendering of the specified message.
-renderMessage :: MessageData -> Widget Name
-renderMessage md@MessageData { mdMessage = msg, .. } =
-    let msgUsr = case mdUserName of
-          Just u -> if omittedUsernameType (msg^.mType) then Nothing else Just u
-          Nothing -> Nothing
-        botElem = if isBotMessage msg then B.txt "[BOT]" else B.emptyWidget
-        nameElems = case msgUsr of
-          Just un
-            | isEmote msg ->
-                [ B.withDefAttr pinnedMessageIndicatorAttr $ B.txt $ if msg^.mPinned then "[PIN]" else ""
-                , B.txt $ (if msg^.mFlagged then "[!] " else "") <> "*"
-                , colorUsername mdMyUsername un un
-                , botElem
-                , B.txt " "
-                ]
-            | otherwise ->
-                [ B.withDefAttr pinnedMessageIndicatorAttr $ B.txt $ if msg^.mPinned then "[PIN] " else ""
-                , colorUsername mdMyUsername un un
-                , botElem
-                , B.txt $ (if msg^.mFlagged then "[!]" else "") <> ": "
-                ]
-          Nothing -> []
-
-        -- Use the editing threshold to determine whether to append an
-        -- editing indication to this message.
-        maybeAugment bs = case msg^.mOriginalPost of
-            Nothing -> bs
-            Just p ->
-                if p^.postEditAtL > p^.postCreateAtL
-                then case mdEditThreshold of
-                    Just cutoff | p^.postEditAtL >= cutoff ->
-                        addEditSentinel (EEditSentinel True) bs
-                    _ -> if mdShowOlderEdits
-                         then addEditSentinel (EEditSentinel False) bs
-                         else bs
-                else bs
-
-        augmentedText = maybeAugment $ msg^.mText
-        msgWidget =
-            vBox $ (layout mdHighlightSet mdMessageWidthLimit nameElems augmentedText . viewl) augmentedText :
-                   catMaybes [msgAtch, msgReac]
-        replyIndent = B.Widget B.Fixed B.Fixed $ do
-            ctx <- B.getContext
-            -- NB: The amount subtracted here must be the total padding
-            -- added below (pad 1 + vBorder)
-            w <- B.render $ B.hLimit (ctx^.B.availWidthL - 2) msgWidget
-            B.render $ B.vLimit (V.imageHeight $ w^.B.imageL) $
-                B.padRight (B.Pad 1) B.vBorder B.<+> (B.Widget B.Fixed B.Fixed $ return w)
-        msgAtch = if Seq.null (msg^.mAttachments)
-          then Nothing
-          else Just $ B.withDefAttr clientMessageAttr $ vBox
-                 [ B.txt ("  [attached: `" <> a^.attachmentName <> "`]")
-                 | a <- toList (msg^.mAttachments)
-                 ]
-        msgReac = if Map.null (msg^.mReactions) || (not mdShowReactions)
-          then Nothing
-          else let renderR e us =
-                       let n = Set.size us
-                       in if | n == 1    -> " [" <> e <> "]"
-                             | n > 1     -> " [" <> e <> " " <> T.pack (show n) <> "]"
-                             | otherwise -> ""
-                   reactionMsg = Map.foldMapWithKey renderR (msg^.mReactions)
-               in Just $ B.withDefAttr emojiAttr $ B.txt ("   " <> reactionMsg)
-        withParent p =
-            case mdThreadState of
-                NoThread -> msgWidget
-                InThreadShowParent -> p B.<=> replyIndent
-                InThread -> replyIndent
-    in if not mdRenderReplyParent
-       then msgWidget
-       else case msg^.mInReplyToMsg of
-          NotAReply -> msgWidget
-          InReplyTo _ ->
-              case mdParentMessage of
-                  Nothing -> withParent (B.str "[loading...]")
-                  Just pm ->
-                      let parentMsg = renderMessage md
-                            { mdShowOlderEdits    = False
-                            , mdMessage           = pm
-                            , mdUserName          = mdParentUserName
-                            , mdParentMessage     = Nothing
-                            , mdRenderReplyParent = False
-                            , mdIndentBlocks      = False
-                            }
-                      in withParent (addEllipsis $ B.forceAttr replyParentAttr parentMsg)
-
-    where
-        layout :: HighlightSet -> Maybe Int -> [Widget Name] -> Seq RichTextBlock
-               -> ViewL RichTextBlock -> Widget Name
-        layout hs w nameElems bs xs | length xs > 1     = multiLnLayout hs w nameElems bs
-        layout hs w nameElems bs (Blockquote {} :< _) = multiLnLayout hs w nameElems bs
-        layout hs w nameElems bs (CodeBlock {} :< _)  = multiLnLayout hs w nameElems bs
-        layout hs w nameElems bs (HTMLBlock {} :< _)  = multiLnLayout hs w nameElems bs
-        layout hs w nameElems bs (List {} :< _)       = multiLnLayout hs w nameElems bs
-        layout hs w nameElems bs (Para inlns :< _)
-            | F.any breakCheck inlns                    = multiLnLayout hs w nameElems bs
-        layout hs w nameElems bs _                      = nameNextToMessage hs w nameElems bs
-
-        multiLnLayout hs w nameElems bs =
-            if mdIndentBlocks
-               then vBox [ hBox nameElems
-                         , hBox [B.txt "  ", renderRichText mdMyUsername hs ((subtract 2) <$> w) mdWrapNonhighlightedCodeBlocks bs]
-                         ]
-               else nameNextToMessage hs w nameElems bs
-
-        nameNextToMessage hs w nameElems bs =
-            Widget Fixed Fixed $ do
-                nameResult <- render $ hBox nameElems
-                let newW = subtract (V.imageWidth (nameResult^.imageL)) <$> w
-                render $ hBox [raw (nameResult^.imageL), renderRichText mdMyUsername hs newW mdWrapNonhighlightedCodeBlocks bs]
-
-        breakCheck e = eData e `elem` [ELineBreak, ESoftBreak]
-
-addEllipsis :: Widget a -> Widget a
-addEllipsis w = B.Widget (B.hSize w) (B.vSize w) $ do
-    ctx <- B.getContext
-    let aw = ctx^.B.availWidthL
-    result <- B.render w
-    let withEllipsis = (B.hLimit (aw - 3) $ B.vLimit 1 $ (B.Widget B.Fixed B.Fixed $ return result)) <+>
-                       B.str "..."
-    if (V.imageHeight (result^.B.imageL) > 1) || (V.imageWidth (result^.B.imageL) == aw) then
-        B.render withEllipsis else
-        return result
-
 -- Cursor sentinel for tracking the user's cursor position in previews.
 cursorSentinel :: Char
 cursorSentinel = '‸'
 
 -- Render markdown with username highlighting
-renderRichText :: Text -> HighlightSet -> Maybe Int -> Bool -> Seq RichTextBlock -> Widget a
-renderRichText curUser hSet w wrap bs =
+renderRichText :: Text -> HighlightSet -> Maybe Int -> Bool -> Blocks -> Widget a
+renderRichText curUser hSet w doWrap (Blocks bs) =
     runReader (do
-              blocks <- mapM blockToWidget (addBlankLines bs)
+              blocks <- mapM renderBlock (addBlankLines bs)
               return $ B.vBox $ toList blocks)
               (DrawCfg { drawCurUser = curUser
                        , drawHighlightSet = hSet
                        , drawLineWidth = w
-                       , drawDoLineWrapping = wrap
+                       , drawDoLineWrapping = doWrap
                        })
 
 -- Add blank lines only between adjacent elements of the same type, to
 -- save space
-addBlankLines :: Seq RichTextBlock -> Seq RichTextBlock
+addBlankLines :: Seq Block -> Seq Block
 addBlankLines = go' . viewl
   where go' EmptyL = S.empty
         go' (x :< xs) = go x (viewl xs)
-        go a@Para {} (b@Para {} :< rs) =
-             a <| blank <| go b (viewl rs)
-        go a@Header {} (b@Header {} :< rs) =
-             a <| blank <| go b (viewl rs)
-        go a@Blockquote {} (b@Blockquote {} :< rs) =
-             a <| blank <| go b (viewl rs)
-        go a@List {} (b@List {} :< rs) =
-             a <| blank <| go b (viewl rs)
-        go a@CodeBlock {} (b@CodeBlock {} :< rs) =
-             a <| blank <| go b (viewl rs)
-        go a@HTMLBlock {} (b@HTMLBlock {} :< rs) =
-             a <| blank <| go b (viewl rs)
-        go x (y :< rs) = x <| go y (viewl rs)
-        go x (EmptyL) = S.singleton x
-        blank = Para (S.singleton (Element Normal ESpace))
+        go a (b :< rs)
+            | sameBlockType a b = a <| blank <| go b (viewl rs)
+            | otherwise         = a <| go b (viewl rs)
+        go x EmptyL = S.singleton x
+        blank = Para (Inlines $ S.singleton ESpace)
 
--- Render text to markdown without username highlighting or permalink detection
+-- Render text to markdown without username highlighting or permalink
+-- detection
 renderText :: Text -> Widget a
 renderText txt = renderText' Nothing "" emptyHSet txt
 
 renderText' :: Maybe TeamBaseURL -> Text -> HighlightSet -> Text -> Widget a
-renderText' baseUrl curUser hSet t = renderRichText curUser hSet Nothing True rtBs
-  where rtBs = parseMarkdown baseUrl t
+renderText' baseUrl curUser hSet t =
+    renderRichText curUser hSet Nothing True $
+        parseMarkdown baseUrl t
 
 vBox :: F.Foldable f => f (Widget a) -> Widget a
 vBox = B.vBox . toList
@@ -323,38 +98,38 @@
             , drawDoLineWrapping :: Bool
             }
 
-blockToWidget :: RichTextBlock -> M (Widget a)
-blockToWidget (Para is) =
-    toElementChunk is
-blockToWidget (Header n is) = do
+renderBlock :: Block -> M (Widget a)
+renderBlock (Para is) =
+    renderInlines is
+renderBlock (Header n is) = do
     headerTxt <- withReader (\c -> c { drawLineWidth = subtract 1 <$> drawLineWidth c }) $
-                 toElementChunk is
+                 renderInlines is
     return $ B.withDefAttr clientHeaderAttr $
         hBox [ B.padRight (B.Pad 1) $ header n
              , headerTxt
              ]
-blockToWidget (Blockquote is) = do
+renderBlock (Blockquote bs) = do
     w <- asks drawLineWidth
-    bs <- mapM blockToWidget is
-    return $ maybeHLimit w $ addQuoting $ vBox bs
-blockToWidget (List _ l bs) = do
+    bws <- mapM renderBlock (unBlocks bs)
+    return $ maybeHLimit w $ addQuoting $ vBox bws
+renderBlock (List ty spacing bs) = do
     w <- asks drawLineWidth
-    lst <- blocksToList l bs
+    lst <- renderList ty spacing bs
     return $ maybeHLimit w lst
-blockToWidget (CodeBlock ci tx) = do
+renderBlock (CodeBlock ci tx) = do
     hSet <- asks drawHighlightSet
 
-    let f = maybe rawCodeBlockToWidget
-                  (codeBlockToWidget (hSyntaxMap hSet))
+    let f = maybe renderRawCodeBlock
+                  (renderCodeBlock (hSyntaxMap hSet))
                   mSyntax
         mSyntax = do
             lang <- codeBlockLanguage ci
             Sky.lookupSyntax lang (hSyntaxMap hSet)
     f tx
-blockToWidget (HTMLBlock t) = do
+renderBlock (HTMLBlock t) = do
     w <- asks drawLineWidth
     return $ maybeHLimit w $ textWithCursor t
-blockToWidget (HRule) = do
+renderBlock (HRule) = do
     w <- asks drawLineWidth
     return $ maybeHLimit w $ B.vLimit 1 (B.fill '*')
 
@@ -374,30 +149,30 @@
                           , B.Widget B.Fixed B.Fixed $ return childResult
                           ]
 
-codeBlockToWidget :: Sky.SyntaxMap -> Sky.Syntax -> Text -> M (Widget a)
-codeBlockToWidget syntaxMap syntax tx = do
+renderCodeBlock :: Sky.SyntaxMap -> Sky.Syntax -> Text -> M (Widget a)
+renderCodeBlock syntaxMap syntax tx = do
     let result = Sky.tokenize cfg syntax tx
         cfg = Sky.TokenizerConfig syntaxMap False
     case result of
-        Left _ -> rawCodeBlockToWidget tx
+        Left _ -> renderRawCodeBlock tx
         Right tokLines -> do
             let padding = B.padLeftRight 1 (B.vLimit (length tokLines) B.vBorder)
             return $ (B.txt $ "[" <> Sky.sName syntax <> "]") B.<=>
                      (padding <+> BS.renderRawSource textWithCursor tokLines)
 
-rawCodeBlockToWidget :: Text -> M (Widget a)
-rawCodeBlockToWidget tx = do
-    wrap <- asks drawDoLineWrapping
+renderRawCodeBlock :: Text -> M (Widget a)
+renderRawCodeBlock tx = do
+    doWrap <- asks drawDoLineWrapping
 
-    let hPolicy = if wrap then Greedy else Fixed
+    let hPolicy = if doWrap then Greedy else Fixed
     return $ B.withDefAttr codeAttr $
         Widget hPolicy Fixed $ do
             c <- B.getContext
             let theLines = expandEmpty <$> T.lines tx
                 expandEmpty "" = " "
                 expandEmpty s  = s
-                wrapFunc = if wrap then wrappedTextWithCursor
-                                   else textWithCursor
+                wrapFunc = if doWrap then wrappedTextWithCursor
+                                     else textWithCursor
             renderedText <- render (B.hLimit (c^.B.availWidthL - 3) $ B.vBox $
                                     wrapFunc <$> theLines)
 
@@ -406,8 +181,8 @@
 
             render $ padding <+> (Widget Fixed Fixed $ return renderedText)
 
-toElementChunk :: Seq Element -> M (Widget a)
-toElementChunk es = do
+renderInlines :: Inlines -> M (Widget a)
+renderInlines es = do
     w <- asks drawLineWidth
     hSet <- asks drawHighlightSet
     curUser <- asks drawCurUser
@@ -415,172 +190,68 @@
     return $ B.Widget B.Fixed B.Fixed $ do
         ctx <- B.getContext
         let width = fromMaybe (ctx^.B.availWidthL) w
-            ws    = fmap (renderElementSeq curUser) (wrapLine width hSet es)
-        B.render (vBox (fmap hBox ws))
+            ws    = fmap (renderWrappedLine curUser) $
+                    mconcat $
+                    (doLineWrapping width <$> (F.toList $ flattenInlineSeq hSet es))
+        B.render (vBox ws)
 
-blocksToList :: ListType -> Seq (Seq RichTextBlock) -> M (Widget a)
-blocksToList lt bs = do
-    let is = case lt of
-          Bullet _ -> repeat ("• ")
-          Numbered Period s ->
+renderList :: ListType -> ListSpacing -> Seq Blocks -> M (Widget a)
+renderList ty _spacing bs = do
+    let is = case ty of
+          BulletList _ -> repeat ("• ")
+          OrderedList s _ Period ->
             [ T.pack (show (n :: Int)) <> ". " | n <- [s..] ]
-          Numbered Paren s ->
+          OrderedList s _ OneParen ->
             [ T.pack (show (n :: Int)) <> ") " | n <- [s..] ]
+          OrderedList s _ TwoParens ->
+            [ T.pack (show (n :: Int)) <> ")) " | n <- [s..] ]
 
-    results <- forM (zip is $ F.toList bs) $ \(i, b) -> do
-        blocks <- mapM blockToWidget b
+    results <- forM (zip is $ unBlocks <$> (F.toList bs)) $ \(i, b) -> do
+        blocks <- mapM renderBlock b
         return $ B.txt i <+> vBox blocks
 
     return $ vBox results
 
-data SplitState = SplitState
-  { splitChunks  :: Seq (Seq Element)
-  , splitCurrCol :: Int
-  }
-
-wrapLine :: Int -> HighlightSet -> Seq Element -> Seq (Seq Element)
-wrapLine maxCols hSet = splitChunks . go (SplitState (S.singleton S.empty) 0)
-  where go st (viewl-> e :< es) = go st' es
-          where
-              HighlightSet { hUserSet = uSet, hChannelSet = cSet } = hSet
-
-              -- Right before we check the width of the token, we see
-              -- if the token is a user or channel reference. If so, we
-              -- check if it is valid. If it is valid, we leave it in
-              -- place; otherwise we translate it into an ordinary text
-              -- element so that it does not render highlighted as a
-              -- valid user or channel reference.
-              newElement = e { eData = newEData }
-              newEData = case eData e of
-                  EUser u ->
-                      if u `Set.member` uSet
-                      then EUser u
-                      else EText $ userSigil <> u
-                  EChannel c ->
-                      if c `Set.member` cSet
-                      then EChannel c
-                      else EText $ normalChannelSigil <> c
-                  d -> d
-
-              addHyperlink url el = setElementStyle (Hyperlink url (eStyle el)) el
-
-              linkOpenBracket = Element Normal (EText "<")
-              linkCloseBracket = Element Normal (EText ">")
-              addOpenBracket l =
-                  case Seq.viewl l of
-                      EmptyL -> l
-                      h :< t ->
-                          let h' = Element Normal
-                                           (ENonBreaking $ Seq.fromList [linkOpenBracket, h])
-                          in h' <| t
-              addCloseBracket l =
-                  case Seq.viewr l of
-                      EmptyR -> l
-                      h :> t ->
-                          let t' = Element Normal
-                                           (ENonBreaking $ Seq.fromList [t, linkCloseBracket])
-                          in h |> t'
-              decorateLinkLabel = addOpenBracket .  addCloseBracket
-
-              st' =
-                  case newEData of
-                      EHyperlink url (Just labelEs) ->
-                          go st $ addHyperlink url <$> decorateLinkLabel labelEs
-                      EHyperlink url Nothing ->
-                          go st $ addHyperlink url <$> decorateLinkLabel (Seq.fromList [Element Normal $ EText $ unURL url])
-                      EPermalink _tName _pId (Just labelEs) ->
-                          go st $ setElementStyle Permalink <$> decorateLinkLabel labelEs
-                      EImage url (Just labelEs) ->
-                          go st $ addHyperlink url <$> decorateLinkLabel labelEs
-                      _ ->
-                          if | newEData == ESoftBreak || newEData == ELineBreak ->
-                                 st { splitChunks = splitChunks st |> S.empty
-                                    , splitCurrCol = 0
-                                    }
-                             | available >= eWidth ->
-                                 st { splitChunks  = addElement newElement (splitChunks st)
-                                    , splitCurrCol = splitCurrCol st + eWidth
-                                    }
-                             | newEData == ESpace ->
-                                 st { splitChunks = splitChunks st |> S.empty
-                                    , splitCurrCol = 0
-                                    }
-                             | otherwise ->
-                                 st { splitChunks  = splitChunks st |> S.singleton newElement
-                                    , splitCurrCol = eWidth
-                                    }
-              available = maxCols - splitCurrCol st
-              eWidth = elementWidth newElement
-              addElement x (viewr-> ls :> l) = ( ls |> (l |> x))
-              addElement _ _ = error "[unreachable]"
-        go st _                 = st
-
-renderElementSeq :: Text -> Seq Element -> Seq (Widget a)
-renderElementSeq curUser es = renderElement curUser <$> es
+renderWrappedLine :: Text -> WrappedLine -> Widget a
+renderWrappedLine curUser l = hBox $ F.toList $ renderFlattenedValue curUser <$> l
 
-renderElement :: Text -> Element -> Widget a
-renderElement curUser e = addStyle sty widget
+renderFlattenedValue :: Text -> FlattenedValue -> Widget a
+renderFlattenedValue curUser (NonBreaking rs) =
+    let renderLine = hBox . F.toList . fmap (renderFlattenedValue curUser)
+    in vBox (F.toList $ renderLine <$> F.toList rs)
+renderFlattenedValue curUser (SingleInline fi) = addHyperlink $ addStyles widget
     where
-        sty = eStyle e
-        dat = eData e
-        addStyle s = case s of
-                Normal                  -> id
-                Emph                    -> B.withDefAttr clientEmphAttr
-                Strikethrough           -> B.withDefAttr strikeThroughAttr
-                Strong                  -> B.withDefAttr clientStrongAttr
-                Code                    -> B.withDefAttr codeAttr
-                Permalink               -> B.withDefAttr permalinkAttr
-                Hyperlink (URL url) innerSty ->
-                    B.hyperlink url . B.withDefAttr urlAttr .  addStyle innerSty
-        rawText = B.txt . removeCursor
-        widget = case dat of
-            -- Cursor sentinels get parsed as individual text nodes by
-            -- Cheapskate, meaning that we get a text node with exactly
-            -- one character in it. That's why we compare accordingly
-            -- above. In addition, since that character has no width, we
-            -- have to replace it with something that has a size (such
-            -- as a space) to get Brick's visibility logic to scroll the
-            -- viewport to get it into view.
-            EText t                      -> if t == T.singleton (cursorSentinel)
-                                            then B.visible $ B.txt " "
-                                            else textWithCursor t
-
-            ESpace                       -> B.txt " "
-            EPermalink _ pId mLabel      -> drawPermalink curUser pId mLabel
-            ENonBreaking es              -> hBox $ renderElement curUser <$> es
-            ERawHtml t                   -> textWithCursor t
-            EEditSentinel recent         -> let attr = if recent
-                                                       then editedRecentlyMarkingAttr
-                                                       else editedMarkingAttr
-                                            in B.withDefAttr attr $ B.txt editMarking
-            EUser u                      -> colorUsername curUser u $ userSigil <> u
-            EChannel c                   -> B.withDefAttr channelNameAttr $
-                                            B.txt $ normalChannelSigil <> c
-            EHyperlink (URL url) Nothing -> rawText url
-            EImage (URL url) Nothing     -> rawText url
-            EEmoji em                    -> B.withDefAttr emojiAttr $
-                                            B.txt $ ":" <> em <> ":"
-
-            -- Hyperlink and image nodes with labels should not appear
-            -- at this point because line-wrapping should break them up
-            -- into normal text node sequences with hyperlink styles
-            -- attached.
-            EHyperlink {}                -> rawText "(Report renderElement bug #1)"
-            EImage {}                    -> rawText "(Report renderElement bug #2)"
+        val = fiValue fi
+        mUrl = fiURL fi
+        styles = fiStyles fi
 
-            -- Line breaks should never need to get rendered since the
-            -- line-wrapping algorithm removes them.
-            ESoftBreak                   -> B.emptyWidget
-            ELineBreak                   -> B.emptyWidget
+        addStyles w = foldr addStyle w styles
+        addStyle s =
+            B.withDefAttr $ case s of
+                Strong        -> clientStrongAttr
+                Code          -> codeAttr
+                Permalink     -> permalinkAttr
+                Strikethrough -> strikeThroughAttr
+                Emph          -> clientEmphAttr
 
-drawPermalink :: Text -> PostId -> Maybe (Seq Element) -> Widget a
-drawPermalink _ _ Nothing =
-    B.txt permalinkPlaceholder
-drawPermalink curUser _ (Just label) =
-    hBox $ F.toList $ B.txt "<" <| (renderElementSeq curUser label |> B.txt ">")
+        addHyperlink = case mUrl of
+            Nothing -> id
+            Just u -> B.withDefAttr urlAttr . B.hyperlink (unURL u)
 
-permalinkPlaceholder :: Text
-permalinkPlaceholder = "<post link>"
+        widget = case val of
+            FSpace               -> B.txt " "
+            FUser u              -> colorUsername curUser u $ userSigil <> u
+            FChannel c           -> B.withDefAttr channelNameAttr $
+                                    B.txt $ normalChannelSigil <> c
+            FEmoji em            -> B.withDefAttr emojiAttr $
+                                    B.txt $ ":" <> em <> ":"
+            FText t              -> if t == T.singleton (cursorSentinel)
+                                    then B.visible $ B.txt " "
+                                    else textWithCursor t
+            FEditSentinel recent -> let attr = if recent
+                                               then editedRecentlyMarkingAttr
+                                               else editedMarkingAttr
+                                    in B.withDefAttr attr $ B.txt editMarking
 
 textWithCursor :: Text -> Widget a
 textWithCursor t
@@ -594,26 +265,3 @@
 
 removeCursor :: Text -> Text
 removeCursor = T.filter (/= cursorSentinel)
-
-editMarking :: Text
-editMarking = "(edited)"
-
-elementWidth :: Element -> Int
-elementWidth e =
-    case eData e of
-        ENonBreaking es              -> sum $ elementWidth <$> es
-        EText t                      -> B.textWidth t
-        ERawHtml t                   -> B.textWidth t
-        EUser t                      -> T.length userSigil + B.textWidth t
-        EChannel t                   -> T.length normalChannelSigil + B.textWidth t
-        EEditSentinel _              -> B.textWidth editMarking
-        EImage (URL url) Nothing     -> B.textWidth url
-        EImage _ (Just is)           -> sum $ elementWidth <$> is
-        EHyperlink (URL url) Nothing -> B.textWidth url
-        EHyperlink _ (Just is)       -> sum $ elementWidth <$> is
-        EEmoji t                     -> B.textWidth t + 2
-        EPermalink _ _ Nothing       -> T.length permalinkPlaceholder
-        EPermalink _ _ (Just label)  -> 2 + (sum $ elementWidth <$> label)
-        ESpace                       -> 1
-        ELineBreak                   -> 0
-        ESoftBreak                   -> 0
diff --git a/src/Matterhorn/Draw/RichText/Flatten.hs b/src/Matterhorn/Draw/RichText/Flatten.hs
new file mode 100644
--- /dev/null
+++ b/src/Matterhorn/Draw/RichText/Flatten.hs
@@ -0,0 +1,302 @@
+-- | This module implements a "flattening" pass over RichText 'Inline'
+-- values. This means that a tree structure such as
+--
+-- @
+--   EStrong
+--     [ EStrikethrough
+--       [ EText "inside"
+--       ]
+--     , EText "outside"
+--     ]
+-- @
+--
+-- will be converted into a "flat" representation without a tree
+-- structure so that the style information encoded in the tree is
+-- available at each node:
+--
+-- @
+--   [
+--     [ SingleInline (FlattenedInline (FText "inside") [Strong, Strikethrough] Nothing
+--     , SingleInline (FlattenedInline (FText "outside") [Strong] Nothing
+--     ]
+--   ]
+-- @
+--
+-- The outer sequence is a sequence of lines (since inline lists can
+-- introduce line breaks). Each inner sequence is a single line.
+-- Each 'SingleInline' can be rendered as-is; if a 'NonBreaking' is
+-- encountered, that group of inlines should be treated as a unit for
+-- the purposes of line-wrapping (to happen in the Wrap module). The
+-- above representation example shows how the tree path including the
+-- 'EStrong' and 'EStrikethrough' nodes is flattened into a list of
+-- styles to accompany each inline value. This makes it trivial to carry
+-- that style information along with each node during line-wrapping
+-- rather than needing to deal with the tree structure.
+module Matterhorn.Draw.RichText.Flatten
+  ( FlattenedContent(..)
+  , FlattenedInline(..)
+  , InlineStyle(..)
+  , FlattenedValue(..)
+  , flattenInlineSeq
+  )
+where
+
+import           Prelude ()
+import           Matterhorn.Prelude
+
+import           Control.Monad.Reader
+import           Control.Monad.State
+import           Data.List ( nub )
+import qualified Data.Sequence as Seq
+import           Data.Sequence ( ViewL(..)
+                               , ViewR(..)
+                               , (<|)
+                               , (|>)
+                               )
+import qualified Data.Set as Set
+import qualified Data.Text as T
+
+import           Matterhorn.Constants ( normalChannelSigil, userSigil )
+import           Matterhorn.Types ( HighlightSet(..) )
+import           Matterhorn.Types.RichText
+
+
+-- | A piece of text in a sequence of flattened RichText elements. This
+-- type represents the lowest-level kind of data that we can get from a
+-- rich text document.
+data FlattenedContent =
+    FText Text
+    -- ^ Some text
+    | FSpace
+    -- ^ A space
+    | FUser Text
+    -- ^ A user reference
+    | FChannel Text
+    -- ^ A channel reference
+    | FEmoji Text
+    -- ^ An emoji
+    | FEditSentinel Bool
+    -- ^ An "edited" marking
+    deriving (Eq, Show)
+
+-- | A flattened inline value.
+data FlattenedInline =
+    FlattenedInline { fiValue :: FlattenedContent
+                    -- ^ The content of the value.
+                    , fiStyles :: [InlineStyle]
+                    -- ^ The styles that should be applied to this
+                    -- value.
+                    , fiURL :: Maybe URL
+                    -- ^ If present, the URL to which we should
+                    -- hyperlink this value.
+                    }
+                    deriving (Show)
+
+-- | A flattened value.
+data FlattenedValue =
+    SingleInline FlattenedInline
+    -- ^ A single flattened value
+    | NonBreaking (Seq (Seq FlattenedValue))
+    -- ^ A sequence of flattened values that MUST be kept together and
+    -- never broken up by line-wrapping
+    deriving (Show)
+
+-- | The visual styles of inline values.
+data InlineStyle =
+    Strong
+    | Emph
+    | Strikethrough
+    | Code
+    | Permalink
+    deriving (Eq, Show)
+
+type FlattenM a = ReaderT FlattenEnv (State FlattenState) a
+
+-- | The flatten monad state
+data FlattenState =
+    FlattenState { fsCompletedLines :: Seq (Seq FlattenedValue)
+                 -- ^ The lines that we have accumulated so far in the
+                 -- flattening process
+                 , fsCurLine :: Seq FlattenedValue
+                 -- ^ The current line we are accumulating in the
+                 -- flattening process
+                 }
+
+-- | The flatten monad environment
+data FlattenEnv =
+    FlattenEnv { flattenStyles :: [InlineStyle]
+               -- ^ The styles that should apply to the current value
+               -- being flattened
+               , flattenURL :: Maybe URL
+               -- ^ The hyperlink URL, if any, that should be applied to
+               -- the current value being flattened
+               , flattenHighlightSet :: HighlightSet
+               -- ^ The highlight set to use to check for valid user or
+               -- channel references
+               }
+
+-- | Given a sequence of inlines, flatten it into a list of lines of
+-- flattened values.
+--
+-- The flattening process also validates user and channel references
+-- against a 'HighlightSet'. For example, if an 'EUser' node is found,
+-- its username argument is looked up in the 'HighlightSet'. If the
+-- username is found, the 'EUser' node is preserved as an 'FUser' node.
+-- Otherwise it is rewritten as an 'FText' node so that the username
+-- does not get highlighted. Channel references ('EChannel') are handled
+-- similarly.
+flattenInlineSeq :: HighlightSet -> Inlines -> Seq (Seq FlattenedValue)
+flattenInlineSeq hs is =
+    flattenInlineSeq' initialEnv is
+    where
+        initialEnv = FlattenEnv { flattenStyles = []
+                                , flattenURL = Nothing
+                                , flattenHighlightSet = hs
+                                }
+
+flattenInlineSeq' :: FlattenEnv -> Inlines -> Seq (Seq FlattenedValue)
+flattenInlineSeq' env is =
+    fsCompletedLines $ execState stBody initialState
+    where
+        initialState = FlattenState mempty mempty
+        stBody = runReaderT body env
+        body = do
+            mapM_ flatten $ unInlines is
+            pushFLine
+
+withInlineStyle :: InlineStyle -> FlattenM () -> FlattenM ()
+withInlineStyle s =
+    withReaderT (\e -> e { flattenStyles = nub (s : flattenStyles e) })
+
+withHyperlink :: URL -> FlattenM () -> FlattenM ()
+withHyperlink u = withReaderT (\e -> e { flattenURL = Just u })
+
+-- | Push a FlattenedContent value onto the current line.
+pushFC :: FlattenedContent -> FlattenM ()
+pushFC v = do
+    env <- ask
+    let styles = flattenStyles env
+        mUrl = flattenURL env
+        fi = FlattenedInline { fiValue = v
+                             , fiStyles = styles
+                             , fiURL = mUrl
+                             }
+    pushFV $ SingleInline fi
+
+-- | Push a FlattenedValue onto the current line.
+pushFV :: FlattenedValue -> FlattenM ()
+pushFV fv = lift $ modify $ \s -> s { fsCurLine = appendFV fv (fsCurLine s) }
+
+-- | Append the value to the sequence.
+--
+-- If the both the value to append AND the sequence's last value are
+-- both text nodes, AND if those nodes both have the same style and URL
+-- metadata, then merge them into one text node. This keeps adjacent
+-- non-whitespace text together as one logical token (e.g. "(foo" rather
+-- than "(" followed by "foo") to avoid undesirable line break points in
+-- the wrapping process.
+appendFV :: FlattenedValue -> Seq FlattenedValue -> Seq FlattenedValue
+appendFV v line =
+    case (Seq.viewr line, v) of
+        (h :> SingleInline a, SingleInline b) ->
+            case (fiValue a, fiValue b) of
+                (FText aT, FText bT) ->
+                    if fiStyles a == fiStyles b && fiURL a == fiURL b
+                    then h |> SingleInline (FlattenedInline (FText $ aT <> bT)
+                                                            (fiStyles a)
+                                                            (fiURL a))
+                    else line |> v
+                _ -> line |> v
+        _ -> line |> v
+
+-- | Push the current line onto the finished lines list and start a new
+-- line.
+pushFLine :: FlattenM ()
+pushFLine =
+    lift $ modify $ \s -> s { fsCompletedLines = fsCompletedLines s |> fsCurLine s
+                            , fsCurLine = mempty
+                            }
+
+isKnownUser :: T.Text -> FlattenM Bool
+isKnownUser u = do
+    hSet <- asks flattenHighlightSet
+    let uSet = hUserSet hSet
+    return $ u `Set.member` uSet
+
+isKnownChannel :: T.Text -> FlattenM Bool
+isKnownChannel c = do
+    hSet <- asks flattenHighlightSet
+    let cSet = hChannelSet hSet
+    return $ c `Set.member` cSet
+
+flatten :: Inline -> FlattenM ()
+flatten i =
+    case i of
+        EUser u -> do
+            known <- isKnownUser u
+            if known then pushFC (FUser u)
+                     else pushFC (FText $ userSigil <> u)
+        EChannel c -> do
+            known <- isKnownChannel c
+            if known then pushFC (FChannel c)
+                     else pushFC (FText $ normalChannelSigil <> c)
+
+        ENonBreaking is -> do
+            env <- ask
+            pushFV $ (NonBreaking $ flattenInlineSeq' env is)
+
+        ESoftBreak                  -> pushFLine
+        ELineBreak                  -> pushFLine
+
+        EText t                     -> pushFC $ FText t
+        ESpace                      -> pushFC FSpace
+        ERawHtml h                  -> pushFC $ FText h
+        EEmoji e                    -> pushFC $ FEmoji e
+        EEditSentinel r             -> pushFC $ FEditSentinel r
+
+        EEmph es                    -> withInlineStyle Emph $ mapM_ flatten $ unInlines es
+        EStrikethrough es           -> withInlineStyle Strikethrough $ mapM_ flatten $ unInlines es
+        EStrong es                  -> withInlineStyle Strong $ mapM_ flatten $ unInlines es
+        ECode es                    -> withInlineStyle Code $ mapM_ flatten $ unInlines es
+
+        EPermalink _ _ mLabel ->
+            let label' = fromMaybe (Inlines $ Seq.fromList [EText "post", ESpace, EText "link"])
+                                   mLabel
+            in withInlineStyle Permalink $ mapM_ flatten $ unInlines $ decorateLinkLabel label'
+
+        EHyperlink u label@(Inlines ls) ->
+            let label' = if Seq.null ls
+                         then Inlines $ Seq.singleton $ EText $ unURL u
+                         else label
+            in withHyperlink u $ mapM_ flatten $ unInlines $ decorateLinkLabel label'
+
+        EImage u label@(Inlines ls) ->
+            let label' = if Seq.null ls
+                         then Inlines $ Seq.singleton $ EText $ unURL u
+                         else label
+            in withHyperlink u $ mapM_ flatten $ unInlines $ decorateLinkLabel label'
+
+linkOpenBracket :: Inline
+linkOpenBracket = EText "<"
+
+linkCloseBracket :: Inline
+linkCloseBracket = EText ">"
+
+addOpenBracket :: Inlines -> Inlines
+addOpenBracket (Inlines l) =
+    case Seq.viewl l of
+        EmptyL -> Inlines l
+        h :< t ->
+            let h' = ENonBreaking $ Inlines $ Seq.fromList [linkOpenBracket, h]
+            in Inlines $ h' <| t
+
+addCloseBracket :: Inlines -> Inlines
+addCloseBracket (Inlines l) =
+    case Seq.viewr l of
+        EmptyR -> Inlines l
+        h :> t ->
+            let t' = ENonBreaking $ Inlines $ Seq.fromList [t, linkCloseBracket]
+            in Inlines $ h |> t'
+
+decorateLinkLabel :: Inlines -> Inlines
+decorateLinkLabel = addOpenBracket .  addCloseBracket
diff --git a/src/Matterhorn/Draw/RichText/Wrap.hs b/src/Matterhorn/Draw/RichText/Wrap.hs
new file mode 100644
--- /dev/null
+++ b/src/Matterhorn/Draw/RichText/Wrap.hs
@@ -0,0 +1,116 @@
+-- | This module performs line-wrapping of sequences of flattend inline
+-- values produced by 'flattenInlineSeq'.
+--
+-- This process works by maintaining a 'WrapState' in the 'WrapM'
+-- monad, where inline values are pushed onto the current line, and
+-- line breaks are introduced as inlines exceed the available width.
+-- The most important caveat of this module is that wrapping depends
+-- on knowing the width of each 'FlattenedValue', which is provided
+-- by the 'fvWidth' function. But 'fvWidth' must return values that
+-- are consistent with the how the inlines actually get rendered by
+-- 'renderFlattenedValue'. This is because there are visual aspects to
+-- how some inlines get rendered that are implicit, such as user or
+-- channel sigils that get added at drawing time, that have an impact on
+-- their visible width.
+module Matterhorn.Draw.RichText.Wrap
+  ( WrappedLine
+  , doLineWrapping
+  )
+where
+
+import           Prelude ()
+import           Matterhorn.Prelude
+
+import qualified Brick as B
+import           Control.Monad.State
+import qualified Data.Sequence as Seq
+import           Data.Sequence ( ViewL(..)
+                               , (|>)
+                               )
+import qualified Data.Text as T
+
+import           Matterhorn.Constants ( normalChannelSigil, userSigil )
+import           Matterhorn.Draw.RichText.Flatten
+import           Matterhorn.Constants ( editMarking )
+
+
+type WrappedLine = Seq FlattenedValue
+
+data WrapState =
+    WrapState { wrapCompletedLines :: Seq WrappedLine
+              -- ^ The completed lines so far
+              , wrapCurLine :: WrappedLine
+              -- ^ The current line we are accumulating
+              , wrapCurCol :: Int
+              -- ^ The width of wrapCurLine, in columns
+              , wrapWidth :: Int
+              -- ^ The maximum allowable width
+              }
+
+type WrapM a = State WrapState a
+
+-- | Push a flattened value onto the current line if possible, or add a
+-- line break and add the inline value to a new line if it would cause
+-- the current line width to exceed the maximum.
+pushValue :: FlattenedValue -> WrapM ()
+pushValue i = do
+    let iw = fvWidth i
+        pushThisInline =
+            modify $ \st -> st { wrapCurLine = wrapCurLine st |> i
+                               , wrapCurCol = wrapCurCol st + iw
+                               }
+    maxWidth <- gets wrapWidth
+    curWidth <- gets wrapCurCol
+    let remaining = maxWidth - curWidth
+
+    when (iw > remaining) pushLine
+
+    pushThisInline
+
+-- | Insert a new line break by moving the current accumulating line
+-- onto the completed lines list and resetting it to empty.
+pushLine :: WrapM ()
+pushLine = do
+    let trimLeadingWhitespace s =
+            case Seq.viewl s of
+                SingleInline i :< t | fiValue i == FSpace -> trimLeadingWhitespace t
+                _ -> s
+
+    modify $ \st ->
+        st { wrapCurLine = mempty
+           , wrapCompletedLines = wrapCompletedLines st |> trimLeadingWhitespace (wrapCurLine st)
+           , wrapCurCol = 0
+           }
+
+-- | Given a maximum width and an inline sequence, produce a sequence of
+-- lines wrapped at the specified column. This only returns lines longer
+-- than the maximum width when those lines have a single inline value
+-- that cannot be broken down further (such as a long URL).
+doLineWrapping :: Int -> Seq FlattenedValue -> Seq WrappedLine
+doLineWrapping maxCols i =
+    result
+    where
+        result = wrapCompletedLines $ execState (mapM_ pushValue i >> pushLine) initialState
+        initialState = WrapState { wrapCurLine = mempty
+                                 , wrapCompletedLines = mempty
+                                 , wrapCurCol = 0
+                                 , wrapWidth = maxCols
+                                 }
+
+-- The widths returned by this function must match the content widths
+-- rendered by renderFlattenedValue.
+fvWidth :: FlattenedValue -> Int
+fvWidth (SingleInline fi) = fiWidth fi
+fvWidth (NonBreaking rs) = sum $ (sum . fmap fvWidth) <$> rs
+
+-- The widths returned by this function must match the content widths
+-- rendered by renderFlattenedValue.
+fiWidth :: FlattenedInline -> Int
+fiWidth fi =
+    case fiValue fi of
+        FText t                      -> B.textWidth t
+        FSpace                       -> 1
+        FUser t                      -> T.length userSigil + B.textWidth t
+        FChannel t                   -> T.length normalChannelSigil + B.textWidth t
+        FEmoji t                     -> B.textWidth t + 2
+        FEditSentinel _              -> B.textWidth editMarking
diff --git a/src/Matterhorn/Draw/ShowHelp.hs b/src/Matterhorn/Draw/ShowHelp.hs
--- a/src/Matterhorn/Draw/ShowHelp.hs
+++ b/src/Matterhorn/Draw/ShowHelp.hs
@@ -443,14 +443,14 @@
     [ ("Global Keybindings", globalKeyHandlers)
     , ("Help Page", helpKeyHandlers)
     , ("Main Interface", mainKeyHandlers)
-    , ("Text Editing", editingKeyHandlers (csEditState.cedEditor))
+    , ("Text Editing", editingKeyHandlers (csCurrentTeam.tsEditState.cedEditor))
     , ("Channel Select Mode", channelSelectKeyHandlers)
     , ("Message Select Mode", messageSelectKeyHandlers)
     , ("User Listings", userListOverlayKeyHandlers)
     , ("URL Select Mode", urlSelectKeyHandlers)
     , ("Theme List Window", themeListOverlayKeyHandlers)
     , ("Channel Search Window", channelListOverlayKeyHandlers)
-    , ("Message Viewer: Common", tabbedWindowKeyHandlers (csViewedMessage.singular _Just._2))
+    , ("Message Viewer: Common", tabbedWindowKeyHandlers (csCurrentTeam.tsViewedMessage.singular _Just._2))
     , ("Message Viewer: Message tab", viewMessageKeyHandlers)
     , ("Message Viewer: Reactions tab", viewMessageReactionsKeyHandlers)
     , ("Attachment List", attachmentListKeyHandlers)
@@ -502,7 +502,7 @@
     in (label, rendering)
 
 mkKeybindEventSectionHelp :: KeyConfig
-                          -> ((Either Text Text, Text, [Text]) -> a)
+                          -> ((TextHunk, Text, [TextHunk]) -> a)
                           -> ([a] -> a)
                           -> (Text -> a)
                           -> (Text, [KeyEventHandler])
@@ -511,53 +511,59 @@
   vertCat $ (mkHeading sectionName) :
             (mkKeybindHelpFunc <$> (mkKeybindEventHelp kc <$> kbs))
 
-keybindEventHelpWidget :: (Either Text Text, Text, [Text]) -> Widget Name
+data TextHunk = Verbatim Text
+              | Comment Text
+
+keybindEventHelpWidget :: (TextHunk, Text, [TextHunk]) -> Widget Name
 keybindEventHelpWidget (evName, desc, evs) =
-    let evText = T.intercalate ", " evs
+    let evText = T.intercalate ", " (getText <$> evs)
+        getText (Comment s) = s
+        getText (Verbatim s) = s
         label = case evName of
-            Left s -> txt $ "; " <> s
-            Right s -> emph $ txt s
+            Comment s -> txt $ "; " <> s
+            Verbatim s -> emph $ txt s
     in padBottom (Pad 1) $
        vBox [ txtWrap ("; " <> desc)
             , label <+> txt (" = " <> evText)
             ]
 
-keybindEventHelpMarkdown :: (Either Text Text, Text, [Text]) -> Text
+keybindEventHelpMarkdown :: (TextHunk, Text, [TextHunk]) -> Text
 keybindEventHelpMarkdown (evName, desc, evs) =
     let quote s = "`" <> s <> "`"
+        format (Comment s) = s
+        format (Verbatim s) = quote s
         name = case evName of
-            Left s -> s
-            Right s -> quote s
-    in "| " <> (T.intercalate ", " $ quote <$> evs) <>
+            Comment s -> s
+            Verbatim s -> quote s
+    in "| " <> (T.intercalate ", " $ format <$> evs) <>
        " | " <> name <>
        " | " <> desc <>
        " |"
 
-keybindEventHelpText :: Int -> Int -> (Either Text Text, Text, [Text]) -> Text
+keybindEventHelpText :: Int -> Int -> (TextHunk, Text, [TextHunk]) -> Text
 keybindEventHelpText width eventNameWidth (evName, desc, evs) =
-    let name = case evName of
-            Left s -> s
-            Right s -> s
-    in padTo width (T.intercalate ", " evs) <> " " <>
-       padTo eventNameWidth name <> " " <>
+    let getText (Comment s) = s
+        getText (Verbatim s) = s
+    in padTo width (T.intercalate ", " $ getText <$> evs) <> " " <>
+       padTo eventNameWidth (getText evName) <> " " <>
        desc
 
-mkKeybindEventHelp :: KeyConfig -> KeyEventHandler -> (Either Text Text, Text, [Text])
+mkKeybindEventHelp :: KeyConfig -> KeyEventHandler -> (TextHunk, Text, [TextHunk])
 mkKeybindEventHelp kc h =
   let trig = kehEventTrigger h
-      unbound = ["(unbound)"]
+      unbound = [Comment "(unbound)"]
       (label, evText) = case trig of
-          Static key -> (Left "(non-customizable key)", [ppBinding $ eventToBinding key])
+          Static key -> (Comment "(non-customizable key)", [Verbatim $ ppBinding $ eventToBinding key])
           ByEvent ev -> case M.lookup ev kc of
               Nothing ->
                   let name = keyEventName ev
                   in if not (null (defaultBindings ev))
-                     then (Right name, ppBinding <$> defaultBindings ev)
-                     else (Left name, unbound)
-              Just Unbound -> (Right $ keyEventName ev, unbound)
-              Just (BindingList bs) -> (Right $ keyEventName ev,
+                     then (Verbatim name, Verbatim <$> ppBinding <$> defaultBindings ev)
+                     else (Verbatim name, unbound)
+              Just Unbound -> (Verbatim $ keyEventName ev, unbound)
+              Just (BindingList bs) -> (Verbatim $ keyEventName ev,
                                         if not (null bs)
-                                        then ppBinding <$> bs
+                                        then Verbatim <$> ppBinding <$> bs
                                         else unbound
                                         )
   in (label, ehDescription $ kehHandler h, evText)
diff --git a/src/Matterhorn/Draw/TabbedWindow.hs b/src/Matterhorn/Draw/TabbedWindow.hs
--- a/src/Matterhorn/Draw/TabbedWindow.hs
+++ b/src/Matterhorn/Draw/TabbedWindow.hs
@@ -12,6 +12,8 @@
 import           Data.List ( intersperse )
 import qualified Graphics.Vty as Vty
 
+import           Network.Mattermost.Types ( TeamId )
+
 import           Matterhorn.Draw.Util ( renderKeybindingHelp )
 import           Matterhorn.Types
 import           Matterhorn.Themes
@@ -26,12 +28,13 @@
     let cur = getCurrentTabbedWindowEntry w
         tabBody = tweRender cur (twValue w) cs
         title = forceAttr clientEmphAttr $ twtTitle (twTemplate w) (tweValue cur)
+        tId = cs^.csCurrentTeamId
     in centerLayer $
        vLimit (twWindowHeight w) $
        hLimit (twWindowWidth w) $
        joinBorders $
        borderWithLabel title $
-       (tabBar w <=> tabBody <=> hBorder <=> hCenter keybindingHelp)
+       (tabBar tId w <=> tabBody <=> hBorder <=> hCenter keybindingHelp)
 
 -- | Keybinding help to show at the bottom of a tabbed window.
 keybindingHelp :: Widget Name
@@ -43,9 +46,10 @@
 
 -- | The scrollable tab bar to show at the top of a tabbed window.
 tabBar :: (Eq a, Show a)
-       => TabbedWindow a
+       => TeamId
+       -> TabbedWindow a
        -> Widget Name
-tabBar w =
+tabBar tId w =
     let cur = getCurrentTabbedWindowEntry w
         entries = twtEntries (twTemplate w)
         renderEntry e =
@@ -74,4 +78,4 @@
             render $ hBox $ (intersperse divider $ renderEntry <$> entries) <>
                             [divider, padTop (Pad 1) $ hLimit width hBorder]
         divider = vLimit 1 vBorder <=> joinableBorder (Edges True False False False)
-    in vLimit 2 $ viewport TabbedWindowTabBar Horizontal contents
+    in vLimit 2 $ viewport (TabbedWindowTabBar tId) Horizontal contents
diff --git a/src/Matterhorn/Draw/ThemeListOverlay.hs b/src/Matterhorn/Draw/ThemeListOverlay.hs
--- a/src/Matterhorn/Draw/ThemeListOverlay.hs
+++ b/src/Matterhorn/Draw/ThemeListOverlay.hs
@@ -23,7 +23,7 @@
 
 drawThemeListOverlay :: ChatState -> Widget Name
 drawThemeListOverlay st =
-    let overlay = drawListOverlay (st^.csThemeListOverlay)
+    let overlay = drawListOverlay (st^.csCurrentTeam.tsThemeListOverlay)
                                   (const $ txt "Themes")
                                   (const $ txt "No matching themes found.")
                                   (const $ txt "Search built-in themes:")
diff --git a/src/Matterhorn/Draw/URLList.hs b/src/Matterhorn/Draw/URLList.hs
--- a/src/Matterhorn/Draw/URLList.hs
+++ b/src/Matterhorn/Draw/URLList.hs
@@ -9,6 +9,7 @@
 import           Brick
 import           Brick.Widgets.Border ( hBorder )
 import           Brick.Widgets.List ( renderList )
+import qualified Data.Sequence as Seq
 import qualified Data.Foldable as F
 import           Lens.Micro.Platform ( to )
 
@@ -19,7 +20,7 @@
 import           Matterhorn.Draw.RichText
 import           Matterhorn.Themes
 import           Matterhorn.Types
-import           Matterhorn.Types.RichText ( unURL, TeamURLName(..) )
+import           Matterhorn.Types.RichText
 
 
 renderUrlList :: ChatState -> Widget Name
@@ -35,10 +36,12 @@
                      then str "No URLs found in this channel."
                      else renderList renderItem True urls
 
-        urls = st^.csUrlList
+        urls = st^.csCurrentTeam.tsUrlList
 
         me = myUsername st
 
+        hSet = getHighlightSet st
+
         renderItem sel link =
           let time = link^.linkTime
           in attr sel $ vLimit 2 $
@@ -47,7 +50,11 @@
                     in colorUsername me u u
                   , case link^.linkLabel of
                       Nothing -> emptyWidget
-                      Just label -> txt ": " <+> hBox (F.toList $ renderElementSeq me label)
+                      Just label ->
+                          case Seq.null (unInlines label) of
+                              True -> emptyWidget
+                              False -> txt ": " <+> renderRichText me hSet Nothing False
+                                                    (Blocks $ Seq.singleton $ Para label)
                   , fill ' '
                   , renderDate st $ withServerTime time
                   , str " "
diff --git a/src/Matterhorn/Draw/UserListOverlay.hs b/src/Matterhorn/Draw/UserListOverlay.hs
--- a/src/Matterhorn/Draw/UserListOverlay.hs
+++ b/src/Matterhorn/Draw/UserListOverlay.hs
@@ -22,7 +22,7 @@
 
 drawUserListOverlay :: ChatState -> Widget Name
 drawUserListOverlay st =
-    let overlay = drawListOverlay (st^.csUserListOverlay) userSearchScopeHeader
+    let overlay = drawListOverlay (st^.csCurrentTeam.tsUserListOverlay) userSearchScopeHeader
                                   userSearchScopeNoResults userSearchScopePrompt
                                   (renderUser (myUsername st))
                                   Nothing
diff --git a/src/Matterhorn/Draw/Util.hs b/src/Matterhorn/Draw/Util.hs
--- a/src/Matterhorn/Draw/Util.hs
+++ b/src/Matterhorn/Draw/Util.hs
@@ -18,7 +18,6 @@
 import           Data.List ( intersperse )
 import qualified Data.Set as Set
 import qualified Data.Text as T
-import           Lens.Micro.Platform ( to )
 import           Network.Mattermost.Types
 
 import           Matterhorn.Constants ( userSigil, normalChannelSigil )
@@ -40,11 +39,11 @@
 
 getTimeFormat :: ChatState -> Text
 getTimeFormat st =
-    maybe defaultTimeFormat id (st^.csResources.crConfiguration.to configTimeFormat)
+    maybe defaultTimeFormat id (st^.csResources.crConfiguration.configTimeFormatL)
 
 getDateFormat :: ChatState -> Text
 getDateFormat st =
-    maybe defaultDateFormat id (st^.csResources.crConfiguration.to configDateFormat)
+    maybe defaultDateFormat id (st^.csResources.crConfiguration.configDateFormatL)
 
 renderTime :: ChatState -> UTCTime -> Widget Name
 renderTime st = renderUTCTime (getTimeFormat st) (st^.timeZone)
diff --git a/src/Matterhorn/Events.hs b/src/Matterhorn/Events.hs
--- a/src/Matterhorn/Events.hs
+++ b/src/Matterhorn/Events.hs
@@ -9,30 +9,22 @@
 import           Matterhorn.Prelude
 
 import           Brick
-import qualified Data.Sequence as Seq
-import qualified Data.Set as Set
 import qualified Data.Text as T
 import qualified Graphics.Vty as Vty
-import           Lens.Micro.Platform ( (.=), preuse, _2, singular, _Just )
+import           Lens.Micro.Platform ( (.=), _2, singular, _Just )
 
 import qualified Network.Mattermost.Endpoints as MM
 import           Network.Mattermost.Exceptions ( mattermostErrorMessage )
-import           Network.Mattermost.Lenses
-import           Network.Mattermost.Types
-import           Network.Mattermost.WebSocket
 
 import           Matterhorn.Connection
 import           Matterhorn.Constants ( userSigil, normalChannelSigil )
 import           Matterhorn.HelpTopics
+import           Matterhorn.State.ChannelList
 import           Matterhorn.State.Channels
 import           Matterhorn.State.Common
-import           Matterhorn.State.Flagging
 import           Matterhorn.State.Help
 import           Matterhorn.State.Messages
-import           Matterhorn.State.Reactions
-import           Matterhorn.State.Users
 import           Matterhorn.Types
-import           Matterhorn.Types.Common
 
 import           Matterhorn.Events.ChannelSelect
 import           Matterhorn.Events.ChannelTopicWindow
@@ -51,6 +43,7 @@
 import           Matterhorn.Events.TabbedWindow
 import           Matterhorn.Events.ManageAttachments
 import           Matterhorn.Events.EditNotifyPrefs
+import           Matterhorn.Events.Websocket
 
 
 onEvent :: ChatState -> BrickEvent Name MHEvent -> EventM Name (Next ChatState)
@@ -102,9 +95,9 @@
 onAppEvent (BGBusy n) =
     csWorkerIsBusy .= Just n
 onAppEvent (WSEvent we) =
-    handleWSEvent we
+    handleWebsocketEvent we
 onAppEvent (WSActionResponse r) =
-    handleWSActionResponse r
+    handleWebsocketActionResponse r
 onAppEvent (RespEvent f) = f
 onAppEvent (WebsocketParseError e) = do
     let msg = "A websocket message could not be parsed:\n  " <>
@@ -185,26 +178,31 @@
 
 handleGlobalEvent :: Vty.Event -> MH ()
 handleGlobalEvent e = do
-    mode <- gets appMode
+    mode <- use (csCurrentTeam.tsMode)
+    globalHandlerByMode mode e
+
+globalHandlerByMode :: Mode -> Vty.Event -> MH ()
+globalHandlerByMode mode =
     case mode of
-        Main                       -> onEventMain e
-        ShowHelp _ _               -> void $ onEventShowHelp e
-        ChannelSelect              -> void $ onEventChannelSelect e
-        UrlSelect                  -> void $ onEventUrlSelect e
-        LeaveChannelConfirm        -> onEventLeaveChannelConfirm e
-        MessageSelect              -> onEventMessageSelect e
-        MessageSelectDeleteConfirm -> onEventMessageSelectDeleteConfirm e
-        DeleteChannelConfirm       -> onEventDeleteChannelConfirm e
-        ThemeListOverlay           -> onEventThemeListOverlay e
-        PostListOverlay _          -> onEventPostListOverlay e
-        UserListOverlay            -> onEventUserListOverlay e
-        ChannelListOverlay         -> onEventChannelListOverlay e
-        ReactionEmojiListOverlay   -> onEventReactionEmojiListOverlay e
-        ViewMessage                -> void $ handleTabbedWindowEvent (csViewedMessage.singular _Just._2) e
-        ManageAttachments          -> onEventManageAttachments e
-        ManageAttachmentsBrowseFiles -> onEventManageAttachments e
-        EditNotifyPrefs            -> void $ onEventEditNotifyPrefs e
-        ChannelTopicWindow         -> onEventChannelTopicWindow e
+        Main                       -> onEventMain
+        ShowHelp _ _               -> void . onEventShowHelp
+        ChannelSelect              -> void . onEventChannelSelect
+        UrlSelect                  -> void . onEventUrlSelect
+        LeaveChannelConfirm        -> onEventLeaveChannelConfirm
+        MessageSelect              -> onEventMessageSelect
+        MessageSelectDeleteConfirm -> onEventMessageSelectDeleteConfirm
+        DeleteChannelConfirm       -> onEventDeleteChannelConfirm
+        ThemeListOverlay           -> onEventThemeListOverlay
+        PostListOverlay _          -> onEventPostListOverlay
+        UserListOverlay            -> onEventUserListOverlay
+        ChannelListOverlay         -> onEventChannelListOverlay
+        ReactionEmojiListOverlay   -> onEventReactionEmojiListOverlay
+        ViewMessage                -> void . handleTabbedWindowEvent
+                                             (csCurrentTeam.tsViewedMessage.singular _Just._2)
+        ManageAttachments          -> onEventManageAttachments
+        ManageAttachmentsBrowseFiles -> onEventManageAttachments
+        EditNotifyPrefs            -> void . onEventEditNotifyPrefs
+        ChannelTopicWindow         -> onEventChannelTopicWindow
 
 globalKeybindings :: KeyConfig -> KeyHandlerMap
 globalKeybindings = mkKeybindings globalKeyHandlers
@@ -216,164 +214,6 @@
         (showHelpScreen mainHelpTopic)
     ]
 
-handleWSActionResponse :: WebsocketActionResponse -> MH ()
-handleWSActionResponse r =
-    case warStatus r of
-        WebsocketActionStatusOK -> return ()
-
-handleWSEvent :: WebsocketEvent -> MH ()
-handleWSEvent we = do
-    myId <- gets myUserId
-    myTId <- gets myTeamId
-    case weEvent we of
-        WMPosted
-            | Just p <- wepPost (weData we) ->
-                when (wepTeamId (weData we) == Just myTId ||
-                      wepTeamId (weData we) == Nothing) $ do
-                    let wasMentioned = maybe False (Set.member myId) $ wepMentions (weData we)
-                    addNewPostedMessage $ RecentPost p wasMentioned
-                    cId <- use csCurrentChannelId
-                    when (postChannelId p /= cId) $
-                        showChannelInSidebar (p^.postChannelIdL) False
-            | otherwise -> return ()
-
-        WMPostEdited
-            | Just p <- wepPost (weData we) -> do
-                editMessage p
-                cId <- use csCurrentChannelId
-                when (postChannelId p == cId) (updateViewed False)
-                when (postChannelId p /= cId) $
-                    showChannelInSidebar (p^.postChannelIdL) False
-            | otherwise -> return ()
-
-        WMPostDeleted
-            | Just p <- wepPost (weData we) -> do
-                deleteMessage p
-                cId <- use csCurrentChannelId
-                when (postChannelId p == cId) (updateViewed False)
-                when (postChannelId p /= cId) $
-                    showChannelInSidebar (p^.postChannelIdL) False
-            | otherwise -> return ()
-
-        WMStatusChange
-            | Just status <- wepStatus (weData we)
-            , Just uId <- wepUserId (weData we) ->
-                setUserStatus uId status
-            | otherwise -> return ()
-
-        WMUserAdded
-            | Just cId <- webChannelId (weBroadcast we) ->
-                when (wepUserId (weData we) == Just myId &&
-                      wepTeamId (weData we) == Just myTId) $
-                    handleChannelInvite cId
-            | otherwise -> return ()
-
-        WMNewUser
-            | Just uId <- wepUserId $ weData we ->
-                handleNewUsers (Seq.singleton uId) (return ())
-            | otherwise -> return ()
-
-        WMUserRemoved
-            | Just cId <- wepChannelId (weData we) ->
-                when (webUserId (weBroadcast we) == Just myId) $
-                    removeChannelFromState cId
-            | otherwise -> return ()
-
-        WMTyping
-            | Just uId <- wepUserId $ weData we
-            , Just cId <- webChannelId (weBroadcast we) -> handleTypingUser uId cId
-            | otherwise -> return ()
-
-        WMChannelDeleted
-            | Just cId <- wepChannelId (weData we) ->
-                when (webTeamId (weBroadcast we) == Just myTId) $
-                    removeChannelFromState cId
-            | otherwise -> return ()
-
-        WMDirectAdded
-            | Just cId <- webChannelId (weBroadcast we) -> handleChannelInvite cId
-            | otherwise -> return ()
-
-        -- An 'ephemeral message' is just Mattermost's version of our
-        -- 'client message'. This can be a little bit wacky, e.g.
-        -- if the user types '/shortcuts' in the browser, we'll get
-        -- an ephemeral message even in MatterHorn with the browser
-        -- shortcuts, but it's probably a good idea to handle these
-        -- messages anyway.
-        WMEphemeralMessage
-            | Just p <- wepPost $ weData we -> postInfoMessage (sanitizeUserText $ p^.postMessageL)
-            | otherwise -> return ()
-
-        WMPreferenceChanged
-            | Just prefs <- wepPreferences (weData we) ->
-                mapM_ applyPreferenceChange prefs
-            | otherwise -> return ()
-
-        WMPreferenceDeleted
-            | Just pref <- wepPreferences (weData we)
-            , Just fps <- mapM preferenceToFlaggedPost pref ->
-              forM_ fps $ \f ->
-                  updateMessageFlag (flaggedPostId f) False
-            | otherwise -> return ()
-
-        WMReactionAdded
-            | Just r <- wepReaction (weData we)
-            , Just cId <- webChannelId (weBroadcast we) -> addReactions cId [r]
-            | otherwise -> return ()
-
-        WMReactionRemoved
-            | Just r <- wepReaction (weData we)
-            , Just cId <- webChannelId (weBroadcast we) -> removeReaction r cId
-            | otherwise -> return ()
-
-        WMChannelViewed
-            | Just cId <- wepChannelId $ weData we -> refreshChannelById cId
-            | otherwise -> return ()
-
-        WMChannelUpdated
-            | Just cId <- webChannelId $ weBroadcast we -> do
-                mChan <- preuse (csChannel(cId))
-                when (isJust mChan) $ do
-                    refreshChannelById cId
-                    updateSidebar
-            | otherwise -> return ()
-
-        WMGroupAdded
-            | Just cId <- webChannelId (weBroadcast we) -> handleChannelInvite cId
-            | otherwise -> return ()
-
-        WMChannelMemberUpdated
-            | Just channelMember <- wepChannelMember $ weData we ->
-                  when (channelMemberUserId channelMember == myId) $
-                      updateChannelNotifyProps
-                      (channelMemberChannelId channelMember)
-                      (channelMemberNotifyProps channelMember)
-            | otherwise -> return ()
-
-        -- We are pretty sure we should do something about these:
-        WMAddedToTeam -> return ()
-
-        -- We aren't sure whether there is anything we should do about
-        -- these yet:
-        WMUpdateTeam -> return ()
-        WMTeamDeleted -> return ()
-        WMUserUpdated -> return ()
-        WMLeaveTeam -> return ()
-
-        -- We deliberately ignore these events:
-        WMChannelCreated -> return ()
-        WMEmojiAdded -> return ()
-        WMWebRTC -> return ()
-        WMHello -> return ()
-        WMAuthenticationChallenge -> return ()
-        WMUserRoleUpdated -> return ()
-        WMPluginStatusesChanged -> return ()
-        WMPluginEnabled -> return ()
-        WMPluginDisabled -> return ()
-        WMUnknownEvent {} ->
-            mhLog LogWebsocket $ T.pack $
-                "Websocket event not handled due to unknown event type: " <> show we
-
 -- | Refresh client-accessible server configuration information. This
 -- is usually triggered when a reconnect event for the WebSocket to the
 -- server occurs.
@@ -384,4 +224,4 @@
         cfg <- MM.mmGetClientConfiguration (Just "old") session
         return $ Just $ do
             csClientConfig .= Just cfg
-            updateSidebar
+            updateSidebar Nothing
diff --git a/src/Matterhorn/Events/ChannelListOverlay.hs b/src/Matterhorn/Events/ChannelListOverlay.hs
--- a/src/Matterhorn/Events/ChannelListOverlay.hs
+++ b/src/Matterhorn/Events/ChannelListOverlay.hs
@@ -18,7 +18,7 @@
 
 onEventChannelListOverlay :: Vty.Event -> MH ()
 onEventChannelListOverlay =
-    void . onEventListOverlay csChannelListOverlay channelListOverlayKeybindings
+    void . onEventListOverlay (csCurrentTeam.tsChannelListOverlay) channelListOverlayKeybindings
 
 -- | The keybindings we want to use while viewing a channel list overlay
 channelListOverlayKeybindings :: KeyConfig -> KeyHandlerMap
@@ -26,10 +26,10 @@
 
 channelListOverlayKeyHandlers :: [KeyEventHandler]
 channelListOverlayKeyHandlers =
-    [ mkKb CancelEvent "Close the channel search list" (exitListOverlay csChannelListOverlay)
+    [ mkKb CancelEvent "Close the channel search list" (exitListOverlay (csCurrentTeam.tsChannelListOverlay))
     , mkKb SearchSelectUpEvent "Select the previous channel" channelListSelectUp
     , mkKb SearchSelectDownEvent "Select the next channel" channelListSelectDown
     , mkKb PageDownEvent "Page down in the channel list" channelListPageDown
     , mkKb PageUpEvent "Page up in the channel list" channelListPageUp
-    , mkKb ActivateListItemEvent "Join the selected channel" (listOverlayActivateCurrent csChannelListOverlay)
+    , mkKb ActivateListItemEvent "Join the selected channel" (listOverlayActivateCurrent (csCurrentTeam.tsChannelListOverlay))
     ]
diff --git a/src/Matterhorn/Events/ChannelSelect.hs b/src/Matterhorn/Events/ChannelSelect.hs
--- a/src/Matterhorn/Events/ChannelSelect.hs
+++ b/src/Matterhorn/Events/ChannelSelect.hs
@@ -17,9 +17,9 @@
 onEventChannelSelect :: Vty.Event -> MH Bool
 onEventChannelSelect =
   handleKeyboardEvent channelSelectKeybindings $ \e -> do
-      handled <- handleKeyboardEvent (editingKeybindings (csChannelSelectState.channelSelectInput)) (const $ return ()) e
+      handled <- handleKeyboardEvent (editingKeybindings (csCurrentTeam.tsChannelSelectState.channelSelectInput)) (const $ return ()) e
       when (not handled) $
-          mhHandleEventLensed (csChannelSelectState.channelSelectInput) handleEditorEvent e
+          mhHandleEventLensed (csCurrentTeam.tsChannelSelectState.channelSelectInput) handleEditorEvent e
 
       updateChannelSelectMatches
 
@@ -30,7 +30,7 @@
 channelSelectKeyHandlers =
     [ staticKb "Switch to selected channel"
          (Vty.EvKey Vty.KEnter []) $ do
-             matches <- use (csChannelSelectState.channelSelectMatches)
+             matches <- use (csCurrentTeam.tsChannelSelectState.channelSelectMatches)
              case Z.focus matches of
                  Nothing -> return ()
                  Just match -> do
diff --git a/src/Matterhorn/Events/ChannelTopicWindow.hs b/src/Matterhorn/Events/ChannelTopicWindow.hs
--- a/src/Matterhorn/Events/ChannelTopicWindow.hs
+++ b/src/Matterhorn/Events/ChannelTopicWindow.hs
@@ -18,31 +18,31 @@
 
 onEventChannelTopicWindow :: Vty.Event -> MH ()
 onEventChannelTopicWindow (Vty.EvKey (Vty.KChar '\t') []) =
-    csChannelTopicDialog.channelTopicDialogFocus %= focusNext
+    csCurrentTeam.tsChannelTopicDialog.channelTopicDialogFocus %= focusNext
 onEventChannelTopicWindow (Vty.EvKey Vty.KBackTab []) =
-    csChannelTopicDialog.channelTopicDialogFocus %= focusPrev
+    csCurrentTeam.tsChannelTopicDialog.channelTopicDialogFocus %= focusPrev
 onEventChannelTopicWindow e@(Vty.EvKey Vty.KEnter []) = do
-    f <- use (csChannelTopicDialog.channelTopicDialogFocus)
+    f <- use (csCurrentTeam.tsChannelTopicDialog.channelTopicDialogFocus)
     case focusGetCurrent f of
-        Just ChannelTopicSaveButton -> do
-            ed <- use (csChannelTopicDialog.channelTopicDialogEditor)
+        Just (ChannelTopicSaveButton {}) -> do
+            ed <- use (csCurrentTeam.tsChannelTopicDialog.channelTopicDialogEditor)
             let topic = T.unlines $ getEditContents ed
             setChannelTopic topic
             setMode Main
-        Just ChannelTopicEditor ->
-            mhHandleEventLensed (csChannelTopicDialog.channelTopicDialogEditor)
+        Just (ChannelTopicEditor {}) ->
+            mhHandleEventLensed (csCurrentTeam.tsChannelTopicDialog.channelTopicDialogEditor)
                                 handleEditorEvent e
-        Just ChannelTopicCancelButton ->
+        Just (ChannelTopicCancelButton {}) ->
             setMode Main
         _ ->
             setMode Main
 onEventChannelTopicWindow (Vty.EvKey Vty.KEsc []) = do
     setMode Main
 onEventChannelTopicWindow e = do
-    f <- use (csChannelTopicDialog.channelTopicDialogFocus)
+    f <- use (csCurrentTeam.tsChannelTopicDialog.channelTopicDialogFocus)
     case focusGetCurrent f of
-        Just ChannelTopicEditor ->
-            mhHandleEventLensed (csChannelTopicDialog.channelTopicDialogEditor)
+        Just (ChannelTopicEditor {}) ->
+            mhHandleEventLensed (csCurrentTeam.tsChannelTopicDialog.channelTopicDialogEditor)
                                 handleEditorEvent e
         _ ->
             return ()
diff --git a/src/Matterhorn/Events/EditNotifyPrefs.hs b/src/Matterhorn/Events/EditNotifyPrefs.hs
--- a/src/Matterhorn/Events/EditNotifyPrefs.hs
+++ b/src/Matterhorn/Events/EditNotifyPrefs.hs
@@ -25,9 +25,9 @@
 onEventEditNotifyPrefs :: V.Event -> MH Bool
 onEventEditNotifyPrefs =
     let fallback e = do
-            form <- use (csNotifyPrefs.singular _Just)
+            form <- use (csCurrentTeam.tsNotifyPrefs.singular _Just)
             updatedForm <- mh $ handleFormEvent (VtyEvent e) form
-            csNotifyPrefs .= Just updatedForm
+            csCurrentTeam.tsNotifyPrefs .= Just updatedForm
     in handleKeyboardEvent editNotifyPrefsKeybindings fallback
 
 editNotifyPrefsKeybindings :: KeyConfig -> KeyHandlerMap
@@ -38,8 +38,8 @@
     [ mkKb CancelEvent "Close channel notification preferences" exitEditNotifyPrefsMode
     , mkKb FormSubmitEvent "Save channel notification preferences" $ do
         st <- use id
-        let form = fromJust $ st^.csNotifyPrefs
-            cId = st^.csCurrentChannelId
+        let form = fromJust $ st^.csCurrentTeam.tsNotifyPrefs
+            cId = st^.csCurrentChannelId(st^.csCurrentTeamId)
 
         doAsyncChannelMM Preempt cId
           (\s _ -> MM.mmUpdateChannelNotifications cId (myUserId st) (formState form) s)
diff --git a/src/Matterhorn/Events/Keybindings.hs b/src/Matterhorn/Events/Keybindings.hs
--- a/src/Matterhorn/Events/Keybindings.hs
+++ b/src/Matterhorn/Events/Keybindings.hs
@@ -226,6 +226,10 @@
         EditorEndEvent                -> [ kb Vty.KEnd ]
         EditorYankEvent               -> [ ctrl (key 'y') ]
         FormSubmitEvent               -> [ kb Vty.KEnter ]
+        NextTeamEvent                 -> [ ctrl (kb Vty.KRight) ]
+        PrevTeamEvent                 -> [ ctrl (kb Vty.KLeft) ]
+        MoveCurrentTeamLeftEvent      -> [ ]
+        MoveCurrentTeamRightEvent     -> [ ]
 
 -- | Given a configuration, we want to check it for internal consistency
 -- (i.e. that a given keybinding isn't associated with multiple events
diff --git a/src/Matterhorn/Events/Main.hs b/src/Matterhorn/Events/Main.hs
--- a/src/Matterhorn/Events/Main.hs
+++ b/src/Matterhorn/Events/Main.hs
@@ -11,10 +11,12 @@
 import           Matterhorn.Events.Keybindings
 import           Matterhorn.State.Attachments
 import           Matterhorn.State.ChannelSelect
+import           Matterhorn.State.ChannelList
 import           Matterhorn.State.Channels
 import           Matterhorn.State.Editing
 import           Matterhorn.State.MessageSelect
 import           Matterhorn.State.PostListOverlay ( enterFlaggedPostListMode )
+import           Matterhorn.State.Teams
 import           Matterhorn.State.UrlSelect
 import           Matterhorn.Types
 
@@ -50,6 +52,18 @@
     , mkKb ToggleExpandedChannelTopicsEvent "Toggle display of expanded channel topics"
         toggleExpandedChannelTopics
 
+    , mkKb NextTeamEvent "Switch to the next available team"
+        nextTeam
+
+    , mkKb PrevTeamEvent "Switch to the previous available team"
+        prevTeam
+
+    , mkKb MoveCurrentTeamLeftEvent "Move the current team to the left in the team list"
+        moveCurrentTeamLeft
+
+    , mkKb MoveCurrentTeamRightEvent "Move the current team to the right in the team list"
+        moveCurrentTeamRight
+
     , mkKb
         InvokeEditorEvent
         "Invoke `$EDITOR` to edit the current message"
@@ -78,9 +92,9 @@
         "Scroll up in the channel input history" $ do
              -- Up in multiline mode does the usual thing; otherwise we
              -- navigate the history.
-             isMultiline <- use (csEditState.cedEphemeral.eesMultiline)
+             isMultiline <- use (csCurrentTeam.tsEditState.cedEphemeral.eesMultiline)
              case isMultiline of
-                 True -> mhHandleEventLensed (csEditState.cedEditor) handleEditorEvent
+                 True -> mhHandleEventLensed (csCurrentTeam.tsEditState.cedEditor) handleEditorEvent
                                            (Vty.EvKey Vty.KUp [])
                  False -> channelHistoryBackward
 
@@ -89,9 +103,9 @@
         "Scroll down in the channel input history" $ do
              -- Down in multiline mode does the usual thing; otherwise
              -- we navigate the history.
-             isMultiline <- use (csEditState.cedEphemeral.eesMultiline)
+             isMultiline <- use (csCurrentTeam.tsEditState.cedEphemeral.eesMultiline)
              case isMultiline of
-                 True -> mhHandleEventLensed (csEditState.cedEditor) handleEditorEvent
+                 True -> mhHandleEventLensed (csCurrentTeam.tsEditState.cedEditor) handleEditorEvent
                                            (Vty.EvKey Vty.KDown [])
                  False -> channelHistoryForward
 
@@ -123,22 +137,24 @@
 
     , staticKb "Send the current message"
          (Vty.EvKey Vty.KEnter []) $ do
-             isMultiline <- use (csEditState.cedEphemeral.eesMultiline)
+             isMultiline <- use (csCurrentTeam.tsEditState.cedEphemeral.eesMultiline)
              case isMultiline of
                  -- Normally, this event causes the current message to
                  -- be sent. But in multiline mode we want to insert a
                  -- newline instead.
                  True -> handleEditingInput (Vty.EvKey Vty.KEnter [])
                  False -> do
-                     cId <- use csCurrentChannelId
+                     tId <- use csCurrentTeamId
+                     cId <- use (csCurrentChannelId tId)
                      content <- getEditorContent
-                     handleInputSubmission cId content
+                     handleInputSubmission tId cId content
 
     , mkKb EnterOpenURLModeEvent "Select and open a URL posted to the current channel"
            startUrlSelect
 
-    , mkKb ClearUnreadEvent "Clear the current channel's unread / edited indicators" $
-           clearChannelUnreadStatus =<< use csCurrentChannelId
+    , mkKb ClearUnreadEvent "Clear the current channel's unread / edited indicators" $ do
+           tId <- use csCurrentTeamId
+           clearChannelUnreadStatus =<< use (csCurrentChannelId tId)
 
     , mkKb ToggleMultiLineEvent "Toggle multi-line message compose mode"
            toggleMultilineEditing
diff --git a/src/Matterhorn/Events/ManageAttachments.hs b/src/Matterhorn/Events/ManageAttachments.hs
--- a/src/Matterhorn/Events/ManageAttachments.hs
+++ b/src/Matterhorn/Events/ManageAttachments.hs
@@ -30,7 +30,7 @@
 
 onEventManageAttachments :: V.Event -> MH ()
 onEventManageAttachments e = do
-    mode <- gets appMode
+    mode <- use (csCurrentTeam.tsMode)
     case mode of
         ManageAttachments -> void $ onEventAttachmentList e
         ManageAttachmentsBrowseFiles -> onEventBrowseFile e
@@ -39,7 +39,7 @@
 onEventAttachmentList :: V.Event -> MH Bool
 onEventAttachmentList =
     handleKeyboardEvent attachmentListKeybindings $
-        mhHandleEventLensed (csEditState.cedAttachmentList) L.handleListEvent
+        mhHandleEventLensed (csCurrentTeam.tsEditState.cedAttachmentList) L.handleListEvent
 
 attachmentListKeybindings :: KeyConfig -> KeyHandlerMap
 attachmentListKeybindings = mkKeybindings attachmentListKeyHandlers
@@ -49,9 +49,9 @@
     [ mkKb CancelEvent "Close attachment list"
           (setMode Main)
     , mkKb SelectUpEvent "Move cursor up" $
-          mhHandleEventLensed (csEditState.cedAttachmentList) L.handleListEvent (V.EvKey V.KUp [])
+          mhHandleEventLensed (csCurrentTeam.tsEditState.cedAttachmentList) L.handleListEvent (V.EvKey V.KUp [])
     , mkKb SelectDownEvent "Move cursor down" $
-          mhHandleEventLensed (csEditState.cedAttachmentList) L.handleListEvent (V.EvKey V.KDown [])
+          mhHandleEventLensed (csCurrentTeam.tsEditState.cedAttachmentList) L.handleListEvent (V.EvKey V.KDown [])
     , mkKb AttachmentListAddEvent "Add a new attachment to the attachment list"
           showAttachmentFileBrowser
     , mkKb AttachmentOpenEvent "Open the selected attachment using the URL open command"
@@ -68,12 +68,12 @@
     [ mkKb CancelEvent "Cancel attachment file browse"
       cancelAttachmentBrowse
     , mkKb AttachmentOpenEvent "Open the selected file using the URL open command"
-          openSelectedBrowserEntry
+      openSelectedBrowserEntry
     ]
 
 withFileBrowser :: ((FB.FileBrowser Name) -> MH ()) -> MH ()
 withFileBrowser f = do
-    use (csEditState.cedFileBrowser) >>= \case
+    use (csCurrentTeam.tsEditState.cedFileBrowser) >>= \case
         Nothing -> do
             -- The widget has not been created yet.  This should
             -- normally not occur, because the ManageAttachments
@@ -82,14 +82,15 @@
             -- This could therefore be implemented as an `error "BUG:
             -- ..."` handler, but the more benign approach is to
             -- simply create an available FileBrowser at this stage.
-            new_b <- liftIO $ FB.newFileBrowser FB.selectNonDirectories AttachmentFileBrowser Nothing
-            csEditState.cedFileBrowser ?= new_b
+            tId <- use csCurrentTeamId
+            new_b <- liftIO $ FB.newFileBrowser FB.selectNonDirectories (AttachmentFileBrowser tId) Nothing
+            csCurrentTeam.tsEditState.cedFileBrowser ?= new_b
             f new_b
         Just b -> f b
 
 openSelectedAttachment :: MH ()
 openSelectedAttachment = do
-    cur <- use (csEditState.cedAttachmentList.to L.listSelectedElement)
+    cur <- use (csCurrentTeam.tsEditState.cedAttachmentList.to L.listSelectedElement)
     case cur of
         Nothing -> return ()
         Just (_, entry) -> void $ openFilePath (FB.fileInfoFilePath $
@@ -119,7 +120,7 @@
 
 cancelAttachmentBrowse :: MH ()
 cancelAttachmentBrowse = do
-    es <- use (csEditState.cedAttachmentList.L.listElementsL)
+    es <- use (csCurrentTeam.tsEditState.cedAttachmentList.L.listElementsL)
     case length es of
         0 -> setMode Main
         _ -> setMode ManageAttachments
@@ -127,14 +128,14 @@
 handleFileBrowserEvent :: V.Event -> MH ()
 handleFileBrowserEvent e = do
   let fbHandle ev = sequence . (fmap (FB.handleFileBrowserEvent ev))
-  mhHandleEventLensed (csEditState.cedFileBrowser) fbHandle e
+  mhHandleEventLensed (csCurrentTeam.tsEditState.cedFileBrowser) fbHandle e
 
   withFileBrowser $ \b -> do
     -- TODO: Check file browser exception state
     let entries = FB.fileBrowserSelection b
     forM_ entries $ \entry -> do
         -- Is the entry already present? If so, ignore the selection.
-        es <- use (csEditState.cedAttachmentList.L.listElementsL)
+        es <- use (csCurrentTeam.tsEditState.cedAttachmentList.L.listElementsL)
         let matches = (== (FB.fileInfoFilePath entry)) .
                       FB.fileInfoFilePath .
                       attachmentDataFileInfo
@@ -151,23 +152,23 @@
                         let a = AttachmentData { attachmentDataFileInfo = entry
                                                , attachmentDataBytes = bytes
                                                }
-                        oldIdx <- use (csEditState.cedAttachmentList.L.listSelectedL)
+                        oldIdx <- use (csCurrentTeam.tsEditState.cedAttachmentList.L.listSelectedL)
                         let newIdx = if Vector.null es
                                      then Just 0
                                      else oldIdx
-                        csEditState.cedAttachmentList %= L.listReplace (Vector.snoc es a) newIdx
+                        csCurrentTeam.tsEditState.cedAttachmentList %= L.listReplace (Vector.snoc es a) newIdx
 
     when (not $ null entries) $ setMode Main
 
 deleteSelectedAttachment :: MH ()
 deleteSelectedAttachment = do
-    es <- use (csEditState.cedAttachmentList.L.listElementsL)
-    mSel <- use (csEditState.cedAttachmentList.to L.listSelectedElement)
+    es <- use (csCurrentTeam.tsEditState.cedAttachmentList.L.listElementsL)
+    mSel <- use (csCurrentTeam.tsEditState.cedAttachmentList.to L.listSelectedElement)
     case mSel of
         Nothing ->
             return ()
         Just (pos, _) -> do
-            oldIdx <- use (csEditState.cedAttachmentList.L.listSelectedL)
+            oldIdx <- use (csCurrentTeam.tsEditState.cedAttachmentList.L.listSelectedL)
             let idx = if Vector.length es == 1
                       then Nothing
                       else case oldIdx of
@@ -175,7 +176,7 @@
                           Just old -> if pos >= old
                                       then Just $ pos - 1
                                       else Just pos
-            csEditState.cedAttachmentList %= L.listReplace (deleteAt pos es) idx
+            csCurrentTeam.tsEditState.cedAttachmentList %= L.listReplace (deleteAt pos es) idx
 
 deleteAt :: Int -> Vector.Vector a -> Vector.Vector a
 deleteAt p as | p < 0 || p >= length as = as
diff --git a/src/Matterhorn/Events/ReactionEmojiListOverlay.hs b/src/Matterhorn/Events/ReactionEmojiListOverlay.hs
--- a/src/Matterhorn/Events/ReactionEmojiListOverlay.hs
+++ b/src/Matterhorn/Events/ReactionEmojiListOverlay.hs
@@ -18,7 +18,8 @@
 
 onEventReactionEmojiListOverlay :: Vty.Event -> MH ()
 onEventReactionEmojiListOverlay =
-    void . onEventListOverlay csReactionEmojiListOverlay reactionEmojiListOverlayKeybindings
+    void . onEventListOverlay (csCurrentTeam.tsReactionEmojiListOverlay)
+           reactionEmojiListOverlayKeybindings
 
 -- | The keybindings we want to use while viewing an emoji list overlay
 reactionEmojiListOverlayKeybindings :: KeyConfig -> KeyHandlerMap
@@ -26,10 +27,16 @@
 
 reactionEmojiListOverlayKeyHandlers :: [KeyEventHandler]
 reactionEmojiListOverlayKeyHandlers =
-    [ mkKb CancelEvent "Close the emoji search window" (exitListOverlay csReactionEmojiListOverlay)
-    , mkKb SearchSelectUpEvent "Select the previous emoji" reactionEmojiListSelectUp
-    , mkKb SearchSelectDownEvent "Select the next emoji" reactionEmojiListSelectDown
-    , mkKb PageDownEvent "Page down in the emoji list" reactionEmojiListPageDown
-    , mkKb PageUpEvent "Page up in the emoji list" reactionEmojiListPageUp
-    , mkKb ActivateListItemEvent "Post the selected emoji reaction" (listOverlayActivateCurrent csReactionEmojiListOverlay)
+    [ mkKb CancelEvent "Close the emoji search window"
+      (exitListOverlay (csCurrentTeam.tsReactionEmojiListOverlay))
+    , mkKb SearchSelectUpEvent "Select the previous emoji"
+      reactionEmojiListSelectUp
+    , mkKb SearchSelectDownEvent "Select the next emoji"
+      reactionEmojiListSelectDown
+    , mkKb PageDownEvent "Page down in the emoji list"
+      reactionEmojiListPageDown
+    , mkKb PageUpEvent "Page up in the emoji list"
+      reactionEmojiListPageUp
+    , mkKb ActivateListItemEvent "Post the selected emoji reaction"
+      (listOverlayActivateCurrent (csCurrentTeam.tsReactionEmojiListOverlay))
     ]
diff --git a/src/Matterhorn/Events/ShowHelp.hs b/src/Matterhorn/Events/ShowHelp.hs
--- a/src/Matterhorn/Events/ShowHelp.hs
+++ b/src/Matterhorn/Events/ShowHelp.hs
@@ -40,5 +40,5 @@
 
 popMode :: MH ()
 popMode = do
-    ShowHelp _ prevMode <- gets appMode
+    ShowHelp _ prevMode <- use (csCurrentTeam.tsMode)
     setMode prevMode
diff --git a/src/Matterhorn/Events/ThemeListOverlay.hs b/src/Matterhorn/Events/ThemeListOverlay.hs
--- a/src/Matterhorn/Events/ThemeListOverlay.hs
+++ b/src/Matterhorn/Events/ThemeListOverlay.hs
@@ -13,7 +13,8 @@
 
 onEventThemeListOverlay :: Vty.Event -> MH ()
 onEventThemeListOverlay =
-    void . onEventListOverlay csThemeListOverlay themeListOverlayKeybindings
+    void . onEventListOverlay (csCurrentTeam.tsThemeListOverlay)
+        themeListOverlayKeybindings
 
 -- | The keybindings we want to use while viewing a user list overlay
 themeListOverlayKeybindings :: KeyConfig -> KeyHandlerMap
@@ -21,10 +22,16 @@
 
 themeListOverlayKeyHandlers :: [KeyEventHandler]
 themeListOverlayKeyHandlers =
-    [ mkKb CancelEvent "Close the theme list" (exitListOverlay csThemeListOverlay)
-    , mkKb SearchSelectUpEvent "Select the previous theme" themeListSelectUp
-    , mkKb SearchSelectDownEvent "Select the next theme" themeListSelectDown
-    , mkKb PageDownEvent "Page down in the theme list" themeListPageDown
-    , mkKb PageUpEvent "Page up in the theme list" themeListPageUp
-    , mkKb ActivateListItemEvent "Switch to the selected color theme" (listOverlayActivateCurrent csThemeListOverlay)
+    [ mkKb CancelEvent "Close the theme list"
+      (exitListOverlay (csCurrentTeam.tsThemeListOverlay))
+    , mkKb SearchSelectUpEvent "Select the previous theme"
+      themeListSelectUp
+    , mkKb SearchSelectDownEvent "Select the next theme"
+      themeListSelectDown
+    , mkKb PageDownEvent "Page down in the theme list"
+      themeListPageDown
+    , mkKb PageUpEvent "Page up in the theme list"
+      themeListPageUp
+    , mkKb ActivateListItemEvent "Switch to the selected color theme"
+      (listOverlayActivateCurrent (csCurrentTeam.tsThemeListOverlay))
     ]
diff --git a/src/Matterhorn/Events/UrlSelect.hs b/src/Matterhorn/Events/UrlSelect.hs
--- a/src/Matterhorn/Events/UrlSelect.hs
+++ b/src/Matterhorn/Events/UrlSelect.hs
@@ -14,7 +14,7 @@
 onEventUrlSelect :: Vty.Event -> MH Bool
 onEventUrlSelect =
   handleKeyboardEvent urlSelectKeybindings $ \ ev ->
-    mhHandleEventLensed csUrlList handleListEvent ev
+    mhHandleEventLensed (csCurrentTeam.tsUrlList) handleListEvent ev
 
 urlSelectKeybindings :: KeyConfig -> KeyHandlerMap
 urlSelectKeybindings = mkKeybindings urlSelectKeyHandlers
@@ -28,10 +28,10 @@
     , mkKb CancelEvent "Cancel URL selection" stopUrlSelect
 
     , mkKb SelectUpEvent "Move cursor up" $
-        mhHandleEventLensed csUrlList handleListEvent (Vty.EvKey Vty.KUp [])
+        mhHandleEventLensed (csCurrentTeam.tsUrlList) handleListEvent (Vty.EvKey Vty.KUp [])
 
     , mkKb SelectDownEvent "Move cursor down" $
-        mhHandleEventLensed csUrlList handleListEvent (Vty.EvKey Vty.KDown [])
+        mhHandleEventLensed (csCurrentTeam.tsUrlList) handleListEvent (Vty.EvKey Vty.KDown [])
 
     , staticKb "Cancel URL selection"
          (Vty.EvKey (Vty.KChar 'q') []) $ stopUrlSelect
diff --git a/src/Matterhorn/Events/UserListOverlay.hs b/src/Matterhorn/Events/UserListOverlay.hs
--- a/src/Matterhorn/Events/UserListOverlay.hs
+++ b/src/Matterhorn/Events/UserListOverlay.hs
@@ -13,7 +13,7 @@
 
 onEventUserListOverlay :: Vty.Event -> MH ()
 onEventUserListOverlay =
-    void . onEventListOverlay csUserListOverlay userListOverlayKeybindings
+    void . onEventListOverlay (csCurrentTeam.tsUserListOverlay) userListOverlayKeybindings
 
 -- | The keybindings we want to use while viewing a user list overlay
 userListOverlayKeybindings :: KeyConfig -> KeyHandlerMap
@@ -21,10 +21,10 @@
 
 userListOverlayKeyHandlers :: [KeyEventHandler]
 userListOverlayKeyHandlers =
-    [ mkKb CancelEvent "Close the user search list" (exitListOverlay csUserListOverlay)
+    [ mkKb CancelEvent "Close the user search list" (exitListOverlay (csCurrentTeam.tsUserListOverlay))
     , mkKb SearchSelectUpEvent "Select the previous user" userListSelectUp
     , mkKb SearchSelectDownEvent "Select the next user" userListSelectDown
     , mkKb PageDownEvent "Page down in the user list" userListPageDown
     , mkKb PageUpEvent "Page up in the user list" userListPageUp
-    , mkKb ActivateListItemEvent "Interact with the selected user" (listOverlayActivateCurrent csUserListOverlay)
+    , mkKb ActivateListItemEvent "Interact with the selected user" (listOverlayActivateCurrent (csCurrentTeam.tsUserListOverlay))
     ]
diff --git a/src/Matterhorn/Events/Websocket.hs b/src/Matterhorn/Events/Websocket.hs
new file mode 100644
--- /dev/null
+++ b/src/Matterhorn/Events/Websocket.hs
@@ -0,0 +1,236 @@
+module Matterhorn.Events.Websocket
+  ( handleWebsocketEvent
+  , handleWebsocketActionResponse
+  )
+where
+
+import           Prelude ()
+import           Matterhorn.Prelude
+
+import qualified Data.HashMap.Strict as HM
+import qualified Data.Sequence as Seq
+import qualified Data.Set as Set
+import qualified Data.Text as T
+import           Lens.Micro.Platform ( preuse )
+
+import           Network.Mattermost.Lenses
+import           Network.Mattermost.Types
+import           Network.Mattermost.WebSocket
+
+import           Matterhorn.State.ChannelList
+import           Matterhorn.State.Channels
+import           Matterhorn.State.Common
+import           Matterhorn.State.Flagging
+import           Matterhorn.State.Messages
+import           Matterhorn.State.Reactions
+import           Matterhorn.State.Teams
+import           Matterhorn.State.Users
+import           Matterhorn.Types
+import           Matterhorn.Types.Common
+
+
+foreachTeam :: (TeamId -> MH ()) -> MH ()
+foreachTeam act = do
+    ts <- use csTeams
+    let myTIds = HM.keys ts
+    mapM_ act myTIds
+
+handleWebsocketEvent :: WebsocketEvent -> MH ()
+handleWebsocketEvent we = do
+    myId <- gets myUserId
+    ts <- use csTeams
+    let memberOf tId = HM.member tId ts
+
+        -- The team ID is one of the teams we're in, or the team ID is
+        -- absent, which typically indicates a DM channel event since DM
+        -- channels are not associated with teams.
+        inMyTeamOrDM (Just i) = memberOf i
+        inMyTeamOrDM Nothing = True
+
+        -- The team ID is one of the teams we're in. A missing team ID
+        -- yields False.
+        inMyTeam (Just i) = memberOf i
+        inMyTeam Nothing = False
+
+    case weEvent we of
+        WMPosted
+            | Just p <- wepPost (weData we) ->
+                when (inMyTeamOrDM (wepTeamId (weData we))) $ do
+                    let wasMentioned = maybe False (Set.member myId) $ wepMentions (weData we)
+                    addNewPostedMessage $ RecentPost p wasMentioned
+                    tId <- use csCurrentTeamId
+                    cId <- use (csCurrentChannelId tId)
+                    when (postChannelId p /= cId) $
+                        showChannelInSidebar (p^.postChannelIdL) False
+            | otherwise -> return ()
+
+        WMPostEdited
+            | Just p <- wepPost (weData we) -> do
+                editMessage p
+
+                currTid <- use csCurrentTeamId
+                foreachTeam $ \tId -> do
+                    cId <- use (csCurrentChannelId tId)
+                    when (postChannelId p == cId && tId == currTid) $
+                        updateViewed False
+                    when (postChannelId p /= cId) $
+                        showChannelInSidebar (p^.postChannelIdL) False
+            | otherwise -> return ()
+
+        WMPostDeleted
+            | Just p <- wepPost (weData we) -> do
+                deleteMessage p
+
+                currTid <- use csCurrentTeamId
+                foreachTeam $ \tId -> do
+                    cId <- use (csCurrentChannelId tId)
+                    when (postChannelId p == cId && tId == currTid) $
+                        updateViewed False
+                    when (postChannelId p /= cId) $
+                        showChannelInSidebar (p^.postChannelIdL) False
+            | otherwise -> return ()
+
+        WMStatusChange
+            | Just status <- wepStatus (weData we)
+            , Just uId <- wepUserId (weData we) ->
+                setUserStatus uId status
+            | otherwise -> return ()
+
+        -- Despite this event's name, it means "a user was added to a
+        -- channel". The event that occurs when a new user is added to
+        -- the server, see WMNewUser.
+        WMUserAdded
+            | Just cId <- webChannelId (weBroadcast we) ->
+                when (wepUserId (weData we) == Just myId &&
+                      inMyTeam (wepTeamId (weData we))) $
+                    handleChannelInvite cId
+            | otherwise -> return ()
+
+        WMNewUser
+            | Just uId <- wepUserId $ weData we ->
+                handleNewUsers (Seq.singleton uId) (return ())
+            | otherwise -> return ()
+
+        WMUserRemoved
+            | Just cId <- wepChannelId (weData we) ->
+                when (webUserId (weBroadcast we) == Just myId) $
+                    removeChannelFromState cId
+            | otherwise -> return ()
+
+        WMTyping
+            | Just uId <- wepUserId $ weData we
+            , Just cId <- webChannelId (weBroadcast we) -> handleTypingUser uId cId
+            | otherwise -> return ()
+
+        WMChannelDeleted
+            | Just cId <- wepChannelId (weData we) ->
+                when (inMyTeamOrDM (webTeamId (weBroadcast we))) $
+                    removeChannelFromState cId
+            | otherwise -> return ()
+
+        WMDirectAdded
+            | Just cId <- webChannelId (weBroadcast we) -> handleChannelInvite cId
+            | otherwise -> return ()
+
+        -- An 'ephemeral message' is just Mattermost's version of our
+        -- 'client message'. This can be a little bit wacky, e.g.
+        -- if the user types '/shortcuts' in the browser, we'll get
+        -- an ephemeral message even in MatterHorn with the browser
+        -- shortcuts, but it's probably a good idea to handle these
+        -- messages anyway.
+        WMEphemeralMessage
+            | Just p <- wepPost $ weData we -> postInfoMessage (sanitizeUserText $ p^.postMessageL)
+            | otherwise -> return ()
+
+        WMPreferenceChanged
+            | Just prefs <- wepPreferences (weData we) ->
+                mapM_ applyPreferenceChange prefs
+            | otherwise -> return ()
+
+        WMPreferenceDeleted
+            | Just pref <- wepPreferences (weData we)
+            , Just fps <- mapM preferenceToFlaggedPost pref ->
+              forM_ fps $ \f ->
+                  updateMessageFlag (flaggedPostId f) False
+            | otherwise -> return ()
+
+        WMReactionAdded
+            | Just r <- wepReaction (weData we)
+            , Just cId <- webChannelId (weBroadcast we) -> addReactions cId [r]
+            | otherwise -> return ()
+
+        WMReactionRemoved
+            | Just r <- wepReaction (weData we)
+            , Just cId <- webChannelId (weBroadcast we) -> removeReaction r cId
+            | otherwise -> return ()
+
+        WMChannelViewed
+            | Just cId <- wepChannelId $ weData we -> refreshChannelById cId
+            | otherwise -> return ()
+
+        WMChannelUpdated
+            | Just cId <- webChannelId $ weBroadcast we -> do
+                mChan <- preuse (csChannel(cId))
+                case mChan of
+                    Just chan -> do
+                        refreshChannelById cId
+                        updateSidebar (chan^.ccInfo.cdTeamId)
+                    Nothing -> return ()
+            | otherwise -> return ()
+
+        WMGroupAdded
+            | Just cId <- webChannelId (weBroadcast we) -> handleChannelInvite cId
+            | otherwise -> return ()
+
+        WMChannelMemberUpdated
+            | Just channelMember <- wepChannelMember $ weData we ->
+                  when (channelMemberUserId channelMember == myId) $
+                      updateChannelNotifyProps
+                      (channelMemberChannelId channelMember)
+                      (channelMemberNotifyProps channelMember)
+            | otherwise -> return ()
+
+        WMAddedToTeam
+            | Just tId <- wepTeamId $ weData we
+            , Just uId <- wepUserId $ weData we -> do
+                when (uId == myId && not (memberOf tId)) $ do
+                    handleJoinTeam tId
+            | otherwise -> return ()
+
+        WMUpdateTeam
+            | Just tId <- webTeamId $ weBroadcast we -> do
+                when (memberOf tId) $ do
+                    handleUpdateTeam tId
+            | otherwise -> return ()
+
+        WMLeaveTeam
+            | Just tId <- wepTeamId $ weData we
+            , Just uId <- wepUserId $ weData we -> do
+                when (uId == myId && memberOf tId) $ do
+                    handleLeaveTeam tId
+            | otherwise -> return ()
+
+        WMTeamDeleted -> do
+            mhLog LogGeneral $ T.pack $
+                "WMTeamDeleted event: " <> show we
+
+        WMUserUpdated -> return ()
+
+        -- We deliberately ignore these events:
+        WMChannelCreated -> return ()
+        WMEmojiAdded -> return ()
+        WMWebRTC -> return ()
+        WMHello -> return ()
+        WMAuthenticationChallenge -> return ()
+        WMUserRoleUpdated -> return ()
+        WMPluginStatusesChanged -> return ()
+        WMPluginEnabled -> return ()
+        WMPluginDisabled -> return ()
+        WMUnknownEvent {} ->
+            mhLog LogWebsocket $ T.pack $
+                "Websocket event not handled due to unknown event type: " <> show we
+
+handleWebsocketActionResponse :: WebsocketActionResponse -> MH ()
+handleWebsocketActionResponse r =
+    case warStatus r of
+        WebsocketActionStatusOK -> return ()
diff --git a/src/Matterhorn/LastRunState.hs b/src/Matterhorn/LastRunState.hs
--- a/src/Matterhorn/LastRunState.hs
+++ b/src/Matterhorn/LastRunState.hs
@@ -5,7 +5,7 @@
   , lrsPort
   , lrsUserId
   , lrsSelectedChannelId
-  , writeLastRunState
+  , writeLastRunStates
   , readLastRunState
   , isValidLastRunState
   )
@@ -18,6 +18,7 @@
 import qualified Data.Aeson as A
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Lazy as LBS
+import qualified Data.HashMap.Strict as HM
 import           Lens.Micro.Platform ( makeLenses )
 import           System.Directory ( createDirectoryIfMissing )
 import           System.FilePath ( dropFileName )
@@ -63,7 +64,7 @@
   { _lrsHost              = cs^.csResources.crConn.cdHostnameL
   , _lrsPort              = cs^.csResources.crConn.cdPortL
   , _lrsUserId            = myUserId cs
-  , _lrsSelectedChannelId = cs^.csCurrentChannelId
+  , _lrsSelectedChannelId = cs^.csCurrentChannelId(cs^.csCurrentTeamId)
   }
 
 lastRunStateFileMode :: P.FileMode
@@ -71,16 +72,20 @@
 
 -- | Writes the run state to a file. The file is specific to the current team.
 -- | Writes only if the current channel is an ordrinary or a private channel.
-writeLastRunState :: ChatState -> IO ()
-writeLastRunState cs =
-  when (cs^.csCurrentChannel.ccInfo.cdType `elem` [Ordinary, Private]) $ do
-    let runState = toLastRunState cs
-        tId      = myTeamId cs
+writeLastRunStates :: ChatState -> IO ()
+writeLastRunStates cs =
+    forM_ (HM.keys $ cs^.csTeams) $ \tId ->
+        writeLastRunState cs tId
 
-    lastRunStateFile <- lastRunStateFilePath $ unId $ toId tId
-    createDirectoryIfMissing True $ dropFileName lastRunStateFile
-    BS.writeFile lastRunStateFile $ LBS.toStrict $ A.encode runState
-    P.setFileMode lastRunStateFile lastRunStateFileMode
+writeLastRunState :: ChatState -> TeamId -> IO ()
+writeLastRunState cs tId = do
+    when (cs^.csCurrentChannel.ccInfo.cdType `elem` [Ordinary, Private]) $ do
+        let runState = toLastRunState cs
+
+        lastRunStateFile <- lastRunStateFilePath $ unId $ toId tId
+        createDirectoryIfMissing True $ dropFileName lastRunStateFile
+        BS.writeFile lastRunStateFile $ LBS.toStrict $ A.encode runState
+        P.setFileMode lastRunStateFile lastRunStateFileMode
 
 -- | Reads the last run state from a file given the current team ID.
 readLastRunState :: TeamId -> IO (Either String LastRunState)
diff --git a/src/Matterhorn/Scripts.hs b/src/Matterhorn/Scripts.hs
--- a/src/Matterhorn/Scripts.hs
+++ b/src/Matterhorn/Scripts.hs
@@ -47,8 +47,11 @@
     ExitSuccess -> do
         case null $ programStderr po of
             True -> Just $ do
-                mode <- use (csEditState.cedEditMode)
-                sendMessage cId mode (T.pack $ programStdout po) []
+                withChannel cId $ \chan -> do
+                    mode <- case chan^.ccInfo.cdTeamId of
+                        Nothing -> use (csCurrentTeam.tsEditState.cedEditMode)
+                        Just tId -> use (csTeam(tId).tsEditState.cedEditMode)
+                    sendMessage cId mode (T.pack $ programStdout po) []
             False -> Nothing
     ExitFailure _ -> Nothing
 
diff --git a/src/Matterhorn/State/Attachments.hs b/src/Matterhorn/State/Attachments.hs
--- a/src/Matterhorn/State/Attachments.hs
+++ b/src/Matterhorn/State/Attachments.hs
@@ -34,20 +34,23 @@
 
 showAttachmentList :: MH ()
 showAttachmentList = do
-    lst <- use (csEditState.cedAttachmentList)
+    lst <- use (csCurrentTeam.tsEditState.cedAttachmentList)
     case length (L.listElements lst) of
         0 -> showAttachmentFileBrowser
         _ -> setMode ManageAttachments
 
 resetAttachmentList :: MH ()
 resetAttachmentList = do
-    csEditState.cedAttachmentList .= L.list AttachmentList mempty 1
-    mh $ vScrollToBeginning $ viewportScroll AttachmentList
+    tId <- use csCurrentTeamId
+    let listName = AttachmentList tId
+    csCurrentTeam.tsEditState.cedAttachmentList .= L.list listName mempty 1
+    mh $ vScrollToBeginning $ viewportScroll listName
 
 showAttachmentFileBrowser :: MH ()
 showAttachmentFileBrowser = do
     config <- use (csResources.crConfiguration)
+    tId <- use csCurrentTeamId
     filePath <- liftIO $ defaultAttachmentsPath config
-    browser <- liftIO $ Just <$> FB.newFileBrowser FB.selectNonDirectories AttachmentFileBrowser filePath
-    csEditState.cedFileBrowser .= browser
+    browser <- liftIO $ Just <$> FB.newFileBrowser FB.selectNonDirectories (AttachmentFileBrowser tId) filePath
+    csCurrentTeam.tsEditState.cedFileBrowser .= browser
     setMode ManageAttachmentsBrowseFiles
diff --git a/src/Matterhorn/State/Autocomplete.hs b/src/Matterhorn/State/Autocomplete.hs
--- a/src/Matterhorn/State/Autocomplete.hs
+++ b/src/Matterhorn/State/Autocomplete.hs
@@ -22,7 +22,7 @@
 import           Lens.Micro.Platform ( (%=), (.=), (.~), _Just, preuse )
 import qualified Skylighting.Types as Sky
 
-import           Network.Mattermost.Types (userId, channelId, Command(..))
+import           Network.Mattermost.Types (userId, channelId, Command(..), TeamId)
 import qualified Network.Mattermost.Endpoints as MM
 
 import           Matterhorn.Constants ( userSigil, normalChannelSigil )
@@ -61,7 +61,7 @@
     case result of
         Nothing -> resetAutocomplete
         Just (ty, runUpdater, searchString) -> do
-            prevResult <- use (csEditState.cedAutocomplete)
+            prevResult <- use (csCurrentTeam.tsEditState.cedAutocomplete)
             -- We should update the completion state if EITHER:
             --
             -- 1) The type changed
@@ -74,13 +74,13 @@
                                 (maybe True ((== ty) . _acType) prevResult)) ||
                                (maybe False ((/= ty) . _acType) prevResult)
             when shouldUpdate $ do
-                csEditState.cedAutocompletePending .= Just searchString
+                csCurrentTeam.tsEditState.cedAutocompletePending .= Just searchString
                 runUpdater ty ctx searchString
 
 getCompleterForInput :: AutocompleteContext
                      -> MH (Maybe (AutocompletionType, AutocompletionType -> AutocompleteContext -> Text -> MH (), Text))
 getCompleterForInput ctx = do
-    z <- use (csEditState.cedEditor.editContentsL)
+    z <- use (csCurrentTeam.tsEditState.cedEditor.editContentsL)
 
     let col = snd $ Z.cursorPosition z
         curLine = Z.currentLine z
@@ -105,21 +105,23 @@
 doEmojiAutoCompletion ty ctx searchString = do
     session <- getSession
     em <- use (csResources.crEmoji)
-    withCachedAutocompleteResults ctx ty searchString $
+    tId <- use csCurrentTeamId
+    withCachedAutocompleteResults tId ctx ty searchString $
         doAsyncWith Preempt $ do
             results <- getMatchingEmoji session em searchString
             let alts = EmojiCompletion <$> results
-            return $ Just $ setCompletionAlternatives ctx searchString alts ty
+            return $ Just $ setCompletionAlternatives tId ctx searchString alts ty
 
 doSyntaxAutoCompletion :: AutocompletionType -> AutocompleteContext -> Text -> MH ()
 doSyntaxAutoCompletion ty ctx searchString = do
     mapping <- use (csResources.crSyntaxMap)
+    tId <- use csCurrentTeamId
     let allNames = Sky.sShortname <$> M.elems mapping
         (prefixed, notPrefixed) = partition isPrefixed $ filter match allNames
         match = (((T.toLower searchString) `T.isInfixOf`) . T.toLower)
         isPrefixed = (((T.toLower searchString) `T.isPrefixOf`) . T.toLower)
         alts = SyntaxCompletion <$> (sort prefixed <> sort notPrefixed)
-    setCompletionAlternatives ctx searchString alts ty
+    setCompletionAlternatives tId ctx searchString alts ty
 
 -- | This list of server commands should be hidden because they make
 -- assumptions about a web-based client or otherwise just don't make
@@ -165,10 +167,10 @@
 doCommandAutoCompletion :: AutocompletionType -> AutocompleteContext -> Text -> MH ()
 doCommandAutoCompletion ty ctx searchString = do
     session <- getSession
-    myTid <- gets myTeamId
+    myTid <- use csCurrentTeamId
 
-    mCache <- preuse (csEditState.cedAutocomplete._Just.acCachedResponses)
-    mActiveTy <- preuse (csEditState.cedAutocomplete._Just.acType)
+    mCache <- preuse (csTeam(myTid).tsEditState.cedAutocomplete._Just.acCachedResponses)
+    mActiveTy <- preuse (csTeam(myTid).tsEditState.cedAutocomplete._Just.acType)
 
     -- Command completion works a little differently than the other
     -- modes. To do command autocompletion, we want to query the server
@@ -222,19 +224,19 @@
 
                 return $ Just $ do
                     -- Store the complete list of alterantives in the cache
-                    setCompletionAlternatives ctx serverResponseKey alts ty
+                    setCompletionAlternatives myTid ctx serverResponseKey alts ty
 
                     -- Also store the list of alternatives specific to
                     -- this search string
                     let newAlts = sortBy (compareCommandAlts searchString) $
                                   filter matches alts
-                    setCompletionAlternatives ctx searchString newAlts ty
+                    setCompletionAlternatives myTid ctx searchString newAlts ty
 
        else case entry of
            Just alts | mActiveTy == Just ACCommands ->
                let newAlts = sortBy (compareCommandAlts searchString) $
                              filter matches alts
-               in setCompletionAlternatives ctx searchString newAlts ty
+               in setCompletionAlternatives myTid ctx searchString newAlts ty
            _ -> return ()
 
 compareCommandAlts :: Text -> AutocompleteAlternative -> AutocompleteAlternative -> Ordering
@@ -252,13 +254,13 @@
 doUserAutoCompletion :: AutocompletionType -> AutocompleteContext -> Text -> MH ()
 doUserAutoCompletion ty ctx searchString = do
     session <- getSession
-    myTid <- gets myTeamId
+    tId <- use csCurrentTeamId
     myUid <- gets myUserId
-    cId <- use csCurrentChannelId
+    cId <- use (csCurrentChannelId(tId))
 
-    withCachedAutocompleteResults ctx ty searchString $
+    withCachedAutocompleteResults tId ctx ty searchString $
         doAsyncWith Preempt $ do
-            ac <- MM.mmAutocompleteUsers (Just myTid) (Just cId) searchString session
+            ac <- MM.mmAutocompleteUsers (Just tId) (Just cId) searchString session
 
             let active = Seq.filter (\u -> userId u /= myUid && (not $ userDeleted u))
                 alts = F.toList $
@@ -273,22 +275,22 @@
                          , (T.toLower searchString) `T.isPrefixOf` specialMentionName m
                          ]
 
-            return $ Just $ setCompletionAlternatives ctx searchString (alts <> extras) ty
+            return $ Just $ setCompletionAlternatives tId ctx searchString (alts <> extras) ty
 
 doChannelAutoCompletion :: AutocompletionType -> AutocompleteContext -> Text -> MH ()
 doChannelAutoCompletion ty ctx searchString = do
     session <- getSession
-    tId <- gets myTeamId
+    tId <- use csCurrentTeamId
     cs <- use csChannels
 
-    withCachedAutocompleteResults ctx ty searchString $ do
+    withCachedAutocompleteResults tId ctx ty searchString $ do
         doAsyncWith Preempt $ do
             results <- MM.mmAutocompleteChannels tId searchString session
             let alts = F.toList $ (ChannelCompletion True <$> inChannels) <>
                                   (ChannelCompletion False <$> notInChannels)
                 (inChannels, notInChannels) = Seq.partition isMember results
                 isMember c = isJust $ findChannelById (channelId c) cs
-            return $ Just $ setCompletionAlternatives ctx searchString alts ty
+            return $ Just $ setCompletionAlternatives tId ctx searchString alts ty
 
 -- Utility functions
 
@@ -296,7 +298,8 @@
 -- a given search string. If the cache contains no such entry (keyed
 -- on search string), run the specified action, which is assumed to be
 -- responsible for fetching the completion results from the server.
-withCachedAutocompleteResults :: AutocompleteContext
+withCachedAutocompleteResults :: TeamId
+                              -> AutocompleteContext
                               -- ^ The autocomplete context
                               -> AutocompletionType
                               -- ^ The type of autocompletion we're
@@ -307,26 +310,27 @@
                               -> MH ()
                               -- ^ The action to execute on a cache miss
                               -> MH ()
-withCachedAutocompleteResults ctx ty searchString act = do
-    mCache <- preuse (csEditState.cedAutocomplete._Just.acCachedResponses)
-    mActiveTy <- preuse (csEditState.cedAutocomplete._Just.acType)
+withCachedAutocompleteResults tId ctx ty searchString act = do
+    mCache <- preuse (csTeam(tId).tsEditState.cedAutocomplete._Just.acCachedResponses)
+    mActiveTy <- preuse (csTeam(tId).tsEditState.cedAutocomplete._Just.acType)
 
     case Just ty == mActiveTy of
         True ->
             -- Does the cache have results for this search string? If
             -- so, use them; otherwise invoke the specified action.
             case HM.lookup searchString =<< mCache of
-                Just alts -> setCompletionAlternatives ctx searchString alts ty
+                Just alts -> setCompletionAlternatives tId ctx searchString alts ty
                 Nothing -> act
         False -> act
 
-setCompletionAlternatives :: AutocompleteContext
+setCompletionAlternatives :: TeamId
+                          -> AutocompleteContext
                           -> Text
                           -> [AutocompleteAlternative]
                           -> AutocompletionType
                           -> MH ()
-setCompletionAlternatives ctx searchString alts ty = do
-    let list = L.list CompletionList (V.fromList $ F.toList alts) 1
+setCompletionAlternatives tId ctx searchString alts ty = do
+    let list = L.list (CompletionList tId) (V.fromList $ F.toList alts) 1
         state = AutocompleteState { _acPreviousSearchString = searchString
                                   , _acCompletionList =
                                       list & L.listSelectedL .~ Nothing
@@ -334,13 +338,13 @@
                                   , _acType = ty
                                   }
 
-    pending <- use (csEditState.cedAutocompletePending)
+    pending <- use (csTeam(tId).tsEditState.cedAutocompletePending)
     case pending of
         Just val | val == searchString -> do
 
             -- If there is already state, update it, but also cache the
             -- search results.
-            csEditState.cedAutocomplete %= \prev ->
+            csTeam(tId).tsEditState.cedAutocomplete %= \prev ->
                 let newState = case prev of
                         Nothing ->
                             state
@@ -349,7 +353,7 @@
                                 HM.insert searchString alts (oldState^.acCachedResponses)
                 in Just newState
 
-            mh $ vScrollToBeginning $ viewportScroll CompletionList
+            mh $ vScrollToBeginning $ viewportScroll $ CompletionList tId
 
             when (autocompleteFirstMatch ctx) $
                 tabComplete Forwards
diff --git a/src/Matterhorn/State/ChannelList.hs b/src/Matterhorn/State/ChannelList.hs
new file mode 100644
--- /dev/null
+++ b/src/Matterhorn/State/ChannelList.hs
@@ -0,0 +1,164 @@
+module Matterhorn.State.ChannelList
+  ( updateSidebar
+  , updateWindowTitle
+  , toggleChannelListVisibility
+  , showChannelInSidebar
+  )
+where
+
+import           Prelude ()
+import           Matterhorn.Prelude
+
+import           Brick.Main ( getVtyHandle, invalidateCache, invalidateCacheEntry )
+import qualified Data.HashMap.Strict as HM
+import qualified Data.Sequence as Seq
+import           Data.Time.Clock ( getCurrentTime )
+import qualified Graphics.Vty as Vty
+import           Lens.Micro.Platform
+
+import           Network.Mattermost.Types
+import           Network.Mattermost.Lenses
+import qualified Network.Mattermost.Endpoints as MM
+
+import {-# SOURCE #-} Matterhorn.State.Messages ( fetchVisibleIfNeeded )
+import           Matterhorn.Types
+import           Matterhorn.State.Async
+import qualified Matterhorn.Zipper as Z
+
+
+-- | Update the sidebar for the specified team state only, or all team
+-- states if not given a specific team ID.
+--
+-- In either case, schedule user status fetches for all users mentioned
+-- in the current team's sidebar. (This should be safe because all
+-- sidebars should contain the same user list.)
+updateSidebar :: Maybe TeamId -> MH ()
+updateSidebar mTid = do
+    case mTid of
+        Nothing -> do
+            ts <- use csTeams
+            forM_ (HM.keys ts) updateTeamSidebar
+        Just tId -> do
+            updateTeamSidebar tId
+
+    -- Schedule the current team's sidebar for user status updates at
+    -- the end of this MH action. This is okay because all team sidebars
+    -- should include the same set of DM channels.
+    z <- use (csCurrentTeam.tsFocus)
+    myId <- gets myUserId
+    scheduleUserStatusFetches $ myId : userIdsFromZipper z
+
+    updateWindowTitle
+
+updateWindowTitle :: MH ()
+updateWindowTitle = do
+    -- Update the window title based on the unread status of the
+    -- channels in all teams.
+    ts <- use csTeams
+    unreadCounts <- forM (HM.keys ts) $ \tId -> do
+        z <- use (csTeam(tId).tsFocus)
+        return $ sum $ (channelListGroupUnread . fst) <$> Z.toList z
+
+    let title = "matterhorn" <> if unread > 0 then "(" <> show unread <> ")" else ""
+        unread = sum unreadCounts
+
+    vty <- mh getVtyHandle
+    liftIO $ Vty.setWindowTitle vty title
+
+updateTeamSidebar :: TeamId -> MH ()
+updateTeamSidebar tId = do
+    -- Invalidate the cached sidebar rendering since we are about to
+    -- change the underlying state
+    mh $ invalidateCacheEntry $ ChannelSidebar tId
+
+    -- Get the currently-focused channel ID so we can compare after the
+    -- zipper is rebuilt
+    cconfig <- use csClientConfig
+    oldCid <- use (csCurrentChannelId tId)
+
+    -- Update the zipper
+    cs <- use csChannels
+    us <- getUsers
+    prefs <- use (csResources.crUserPreferences)
+    now <- liftIO getCurrentTime
+    config <- use (csResources.crConfiguration)
+
+    let zl = mkChannelZipperList now config tId cconfig prefs cs us
+    csTeam(tId).tsFocus %= Z.updateList zl
+
+    -- If the zipper rebuild caused the current channel to change, such
+    -- as when the previously-focused channel was removed, we need to
+    -- call fetchVisibleIfNeeded on the newly-focused channel to ensure
+    -- that it gets loaded.
+    newCid <- use (csCurrentChannelId tId)
+    when (newCid /= oldCid) $
+        fetchVisibleIfNeeded
+
+toggleChannelListVisibility :: MH ()
+toggleChannelListVisibility = do
+    mh invalidateCache
+    csResources.crConfiguration.configShowChannelListL %= not
+
+showChannelInSidebar :: ChannelId -> Bool -> MH ()
+showChannelInSidebar cId setPending = do
+    mChan <- preuse $ csChannel cId
+    me <- gets myUser
+    prefs <- use (csResources.crUserPreferences)
+    session <- getSession
+
+    case mChan of
+        Nothing ->
+          -- The requested channel doesn't actually exist yet, so no
+          -- action can be taken.  It's likely that this is a
+          -- pendingChannel situation and not all of the operations to
+          -- locally define the channel have completed, in which case
+          -- this code will be re-entered later and the mChan will be
+          -- known.
+          return ()
+        Just ch -> do
+
+            -- Able to successfully switch to a known channel.  This
+            -- should clear any pending channel intention.  If the
+            -- intention was for this channel, then: done.  If the
+            -- intention was for a different channel, reaching this
+            -- point means that the pending is still outstanding but
+            -- that the user identified a new channel which *was*
+            -- displayable, and the UI should always prefer to SATISFY
+            -- the user's latest request over any pending/background
+            -- task.
+            csCurrentTeam.tsPendingChannelChange .= Nothing
+
+            now <- liftIO getCurrentTime
+            csChannel(cId).ccInfo.cdSidebarShowOverride .= Just now
+            updateSidebar (ch^.ccInfo.cdTeamId)
+
+            curTid <- use csCurrentTeamId
+            let tId = fromMaybe curTid (ch^.ccInfo.cdTeamId)
+
+            case ch^.ccInfo.cdType of
+                Direct -> do
+                    let Just uId = ch^.ccInfo.cdDMUserId
+                    case dmChannelShowPreference prefs uId of
+                        Just False -> do
+                            let pref = showDirectChannelPref (me^.userIdL) uId True
+                            when setPending $
+                                csCurrentTeam.tsPendingChannelChange .=
+                                    Just (ChangeByChannelId tId (ch^.ccInfo.cdChannelId) Nothing)
+                            doAsyncWith Preempt $ do
+                                MM.mmSaveUsersPreferences UserMe (Seq.singleton pref) session
+                                return Nothing
+                        _ -> return ()
+
+                Group ->
+                    case groupChannelShowPreference prefs cId of
+                        Just False -> do
+                            let pref = showGroupChannelPref cId (me^.userIdL)
+                            when setPending $
+                                csCurrentTeam.tsPendingChannelChange .=
+                                    Just (ChangeByChannelId tId (ch^.ccInfo.cdChannelId) Nothing)
+                            doAsyncWith Preempt $ do
+                                MM.mmSaveUsersPreferences UserMe (Seq.singleton pref) session
+                                return Nothing
+                        _ -> return ()
+
+                _ -> return ()
diff --git a/src/Matterhorn/State/ChannelListOverlay.hs b/src/Matterhorn/State/ChannelListOverlay.hs
--- a/src/Matterhorn/State/ChannelListOverlay.hs
+++ b/src/Matterhorn/State/ChannelListOverlay.hs
@@ -27,9 +27,9 @@
 
 enterChannelListOverlayMode :: MH ()
 enterChannelListOverlayMode = do
-    myTId <- gets myTeamId
+    myTId <- use csCurrentTeamId
     myChannels <- use (csChannels.to (filteredChannelIds (const True)))
-    enterListOverlayMode csChannelListOverlay ChannelListOverlay
+    enterListOverlayMode (csTeam(myTId).tsChannelListOverlay) ChannelListOverlay
         AllChannels enterHandler (fetchResults myTId myChannels)
 
 enterHandler :: Channel -> MH Bool
@@ -75,7 +75,7 @@
 -- cursor, and then check to see whether the modification warrants a
 -- prefetch of more search results.
 channelListMove :: (L.List Name Channel -> L.List Name Channel) -> MH ()
-channelListMove = listOverlayMove csChannelListOverlay
+channelListMove = listOverlayMove (csCurrentTeam.tsChannelListOverlay)
 
 -- | The number of channels in a "page" for cursor movement purposes.
 channelListPageSize :: Int
diff --git a/src/Matterhorn/State/ChannelSelect.hs b/src/Matterhorn/State/ChannelSelect.hs
--- a/src/Matterhorn/State/ChannelSelect.hs
+++ b/src/Matterhorn/State/ChannelSelect.hs
@@ -24,14 +24,15 @@
 beginChannelSelect :: MH ()
 beginChannelSelect = do
     setMode ChannelSelect
-    csChannelSelectState .= emptyChannelSelectState
+    tId <- use csCurrentTeamId
+    csCurrentTeam.tsChannelSelectState .= emptyChannelSelectState tId
     updateChannelSelectMatches
 
     -- Preserve the current channel selection when initializing channel
     -- selection mode
-    zipper <- use csFocus
+    zipper <- use (csCurrentTeam.tsFocus)
     let isCurrentFocus m = Just (matchEntry m) == Z.focus zipper
-    csChannelSelectState.channelSelectMatches %= Z.findRight isCurrentFocus
+    csCurrentTeam.tsChannelSelectState.channelSelectMatches %= Z.findRight isCurrentFocus
 
 -- Select the next match in channel selection mode.
 channelSelectNext :: MH ()
@@ -45,7 +46,7 @@
 updateChannelSelectMatches = do
     st <- use id
 
-    input <- use (csChannelSelectState.channelSelectInput)
+    input <- use (csCurrentTeam.tsChannelSelectState.channelSelectInput)
     cconfig <- use csClientConfig
     prefs <- use (csResources.crUserPreferences)
 
@@ -82,7 +83,8 @@
         preserveFocus Nothing _ = False
         preserveFocus (Just m) m2 = matchEntry m == matchEntry m2
 
-    csChannelSelectState.channelSelectMatches %= (Z.updateListBy preserveFocus $ Z.toList $ Z.maybeMapZipper matches (st^.csFocus))
+    csCurrentTeam.tsChannelSelectState.channelSelectMatches %=
+        (Z.updateListBy preserveFocus $ Z.toList $ Z.maybeMapZipper matches (st^.csCurrentTeam.tsFocus))
 
 applySelectPattern :: ChannelSelectPattern -> ChannelListEntry -> Text -> Maybe ChannelSelectMatch
 applySelectPattern CSPAny entry chanName = do
@@ -152,4 +154,4 @@
 updateSelectedMatch :: (Z.Zipper ChannelListGroup ChannelSelectMatch -> Z.Zipper ChannelListGroup ChannelSelectMatch)
                     -> MH ()
 updateSelectedMatch nextItem =
-    csChannelSelectState.channelSelectMatches %= nextItem
+    csCurrentTeam.tsChannelSelectState.channelSelectMatches %= nextItem
diff --git a/src/Matterhorn/State/ChannelTopicWindow.hs b/src/Matterhorn/State/ChannelTopicWindow.hs
--- a/src/Matterhorn/State/ChannelTopicWindow.hs
+++ b/src/Matterhorn/State/ChannelTopicWindow.hs
@@ -3,6 +3,9 @@
   )
 where
 
+import           Prelude ()
+import           Matterhorn.Prelude
+
 import           Lens.Micro.Platform ( (.=) )
 
 import           Matterhorn.Types
@@ -12,5 +15,6 @@
 openChannelTopicWindow :: MH ()
 openChannelTopicWindow = do
     t <- getCurrentChannelTopic
-    csChannelTopicDialog .= newChannelTopicDialog t
+    tId <- use csCurrentTeamId
+    csCurrentTeam.tsChannelTopicDialog .= newChannelTopicDialog tId t
     setMode ChannelTopicWindow
diff --git a/src/Matterhorn/State/Channels.hs b/src/Matterhorn/State/Channels.hs
--- a/src/Matterhorn/State/Channels.hs
+++ b/src/Matterhorn/State/Channels.hs
@@ -1,9 +1,7 @@
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE MultiWayIf #-}
 module Matterhorn.State.Channels
-  ( updateSidebar
-  , updateViewed
-  , updateViewedChan
+  ( updateViewed
   , refreshChannel
   , refreshChannelsAndUsers
   , setFocus
@@ -16,7 +14,6 @@
   , nextUnreadChannel
   , nextUnreadUserOrChannel
   , createOrFocusDMChannel
-  , clearChannelUnreadStatus
   , prevChannel
   , nextChannel
   , recentChannel
@@ -46,17 +43,16 @@
   , setChannelTopic
   , getCurrentChannelTopic
   , beginCurrentChannelDeleteConfirm
-  , toggleChannelListVisibility
   , toggleExpandedChannelTopics
-  , showChannelInSidebar
   , updateChannelNotifyProps
+  , renameChannelUrl
   )
 where
 
 import           Prelude ()
 import           Matterhorn.Prelude
 
-import           Brick.Main ( getVtyHandle, viewportScroll, vScrollToBeginning
+import           Brick.Main ( viewportScroll, vScrollToBeginning
                             , invalidateCache, invalidateCacheEntry )
 import           Brick.Widgets.Edit ( applyEdit, getEditContents, editContentsL )
 import           Control.Concurrent.Async ( runConcurrently, Concurrently(..) )
@@ -71,7 +67,6 @@
 import qualified Data.Text as T
 import           Data.Text.Zipper ( textZipper, clearZipper, insertMany, gotoEOL )
 import           Data.Time.Clock ( getCurrentTime )
-import qualified Graphics.Vty as Vty
 import           Lens.Micro.Platform
 
 import qualified Network.Mattermost.Endpoints as MM
@@ -82,6 +77,7 @@
 import           Matterhorn.InputHistory
 import           Matterhorn.State.Common
 import {-# SOURCE #-} Matterhorn.State.Messages ( fetchVisibleIfNeeded )
+import           Matterhorn.State.ChannelList
 import           Matterhorn.State.Users
 import           Matterhorn.State.Flagging
 import           Matterhorn.Types
@@ -90,53 +86,11 @@
 import qualified Matterhorn.Zipper as Z
 
 
-updateSidebar :: MH ()
-updateSidebar = do
-    -- Invalidate the cached sidebar rendering since we are about to
-    -- change the underlying state
-    mh $ invalidateCacheEntry ChannelSidebar
-
-    -- Get the currently-focused channel ID so we can compare after the
-    -- zipper is rebuilt
-    cconfig <- use csClientConfig
-    oldCid <- use csCurrentChannelId
-
-    -- Update the zipper
-    cs <- use csChannels
-    us <- getUsers
-    prefs <- use (csResources.crUserPreferences)
-    now <- liftIO getCurrentTime
-    config <- use (csResources.crConfiguration)
-
-    let zl = mkChannelZipperList now config cconfig prefs cs us
-    csFocus %= Z.updateList zl
-
-    -- Schedule the current sidebar for user status updates at the end
-    -- of this MH action.
-    newZ <- use csFocus
-    myId <- gets myUserId
-    scheduleUserStatusFetches $ myId : userIdsFromZipper newZ
-
-    -- Update the window title based on the unread status of the
-    -- channels.
-    let unread = sum $ (channelListGroupUnread . fst) <$> zl
-        title = "matterhorn" <> if unread > 0 then "(" <> show unread <> ")" else ""
-
-    vty <- mh getVtyHandle
-    liftIO $ Vty.setWindowTitle vty title
-
-    -- If the zipper rebuild caused the current channel to change, such
-    -- as when the previously-focused channel was removed, we need to
-    -- call fetchVisibleIfNeeded on the newly-focused channel to ensure
-    -- that it gets loaded.
-    newCid <- use csCurrentChannelId
-    when (newCid /= oldCid) $
-        fetchVisibleIfNeeded
-
 updateViewed :: Bool -> MH ()
 updateViewed updatePrev = do
     csCurrentChannel.ccInfo.cdMentionCount .= 0
-    updateViewedChan updatePrev =<< use csCurrentChannelId
+    tId <- use csCurrentTeamId
+    updateViewedChan updatePrev =<< use (csCurrentChannelId tId)
 
 -- | When a new channel has been selected for viewing, this will
 -- notify the server of the change, and also update the local channel
@@ -149,15 +103,19 @@
 -- of the specified channel, False should be provided.
 updateViewedChan :: Bool -> ChannelId -> MH ()
 updateViewedChan updatePrev cId = use csConnectionStatus >>= \case
+    -- Only do this if we're connected to avoid triggering noisy
+    -- exceptions.
     Connected -> do
-        -- Only do this if we're connected to avoid triggering noisy
-        -- exceptions.
-        pId <- if updatePrev
-               then use csRecentChannel
-               else return Nothing
-        doAsyncChannelMM Preempt cId
-          (\s c -> MM.mmViewChannel UserMe c pId s)
-          (\c () -> Just $ setLastViewedFor pId c)
+        withChannel cId $ \chan -> do
+            pId <- if updatePrev
+                   then do
+                       case chan^.ccInfo.cdTeamId of
+                           Just tId -> use (csTeam(tId).tsRecentChannel)
+                           Nothing -> use (csCurrentTeam.tsRecentChannel)
+                   else return Nothing
+            doAsyncChannelMM Preempt cId
+              (\s c -> MM.mmViewChannel UserMe c pId s)
+              (\c () -> Just $ setLastViewedFor pId c)
     Disconnected ->
         -- Cannot update server; make no local updates to avoid getting
         -- out of sync with the server. Assumes that this is a temporary
@@ -167,19 +125,17 @@
         -- this state is irrelevant.
         return ()
 
-toggleChannelListVisibility :: MH ()
-toggleChannelListVisibility = do
-    mh invalidateCache
-    csShowChannelList %= not
-
 toggleExpandedChannelTopics :: MH ()
 toggleExpandedChannelTopics = do
     mh invalidateCache
-    csShowExpandedChannelTopics %= not
+    csResources.crConfiguration.configShowExpandedChannelTopicsL %= not
 
 -- | If the current channel is a DM channel with a single user or a
 -- group of users, hide it from the sidebar and adjust the server-side
--- preference to hide it persistently.
+-- preference to hide it persistently. Note that this does not actually
+-- hide the channel in our UI; we hide it in response to the preference
+-- change websocket event triggered by this function's API interaction
+-- with the server.
 --
 -- If the current channel is any other kind of channel, complain with a
 -- usage error.
@@ -261,14 +217,17 @@
 refreshChannelsAndUsers :: MH ()
 refreshChannelsAndUsers = do
     session <- getSession
-    myTId <- gets myTeamId
     me <- gets myUser
     knownUsers <- gets allUserIds
+    ts <- use csTeams
     doAsyncWith Preempt $ do
-      (chans, datas) <- runConcurrently $ (,)
-                       <$> Concurrently (MM.mmGetChannelsForUser UserMe myTId session)
-                       <*> Concurrently (MM.mmGetChannelMembersForUser UserMe myTId session)
+      pairs <- forM (HM.keys ts) $ \tId -> do
+          runConcurrently $ (,)
+              <$> Concurrently (MM.mmGetChannelsForUser UserMe tId session)
+              <*> Concurrently (MM.mmGetChannelMembersForUser UserMe tId session)
 
+      let (chans, datas) = (mconcat $ fst <$> pairs, mconcat $ snd <$> pairs)
+
       -- Collect all user IDs associated with DM channels so we can
       -- bulk-fetch their user records.
       let dmUsers = catMaybes $ flip map (F.toList chans) $ \chan ->
@@ -288,7 +247,7 @@
           handleNewUsers (Seq.fromList uIdsToFetch) $ do
               -- Then refresh all loaded channels
               forM_ chansWithData $ uncurry (refreshChannel SidebarUpdateDeferred)
-              updateSidebar
+              updateSidebar Nothing
 
 -- | Refresh information about a specific channel.  The channel
 -- metadata is refreshed, and if this is a loaded channel, the
@@ -305,14 +264,16 @@
 -- immediate setting is passed here.
 refreshChannel :: SidebarUpdate -> Channel -> ChannelMember -> MH ()
 refreshChannel upd chan member = do
-    let cId = getId chan
-    myTId <- gets myTeamId
-    let ourTeam = channelTeamId chan == Nothing ||
-                  Just myTId == channelTeamId chan
+    ts <- use csTeams
+    let ourTeams = HM.keys ts
+        isOurTeam = case channelTeamId chan of
+            Nothing -> True
+            Just tId -> tId `elem` ourTeams
 
-    case not ourTeam of
-        True -> return ()
-        False -> do
+    case isOurTeam of
+        False -> return ()
+        True -> do
+            let cId = getId chan
             -- If this channel is unknown, register it first.
             mChan <- preuse (csChannel(cId))
             when (isNothing mChan) $
@@ -402,7 +363,7 @@
                     -- switch to this channel when doing a sidebar
                     -- update, since that's the only case where it's
                     -- possible to do so.
-                    updateSidebar
+                    updateSidebar (cChannel^.ccInfo.cdTeamId)
 
                     -- Finally, set our focus to the newly created
                     -- channel if the caller requested a change of
@@ -431,10 +392,11 @@
 -- specified channel.
 checkPendingChannelChange :: ChannelId -> MH (Maybe (Maybe (MH ())))
 checkPendingChannelChange cId = do
-    ch <- use csPendingChannelChange
+    ch <- use (csCurrentTeam.tsPendingChannelChange)
+    curTid <- use csCurrentTeamId
     return $ case ch of
-        Just (ChangeByChannelId i act) ->
-            if i == cId then Just act else Nothing
+        Just (ChangeByChannelId tId i act) ->
+            if i == cId && curTid == tId then Just act else Nothing
         _ -> Nothing
 
 -- | Check to see whether the specified channel has been queued up to
@@ -448,7 +410,7 @@
 -- specified channel.
 checkPendingChannelChangeByUserId :: UserId -> MH Bool
 checkPendingChannelChangeByUserId uId = do
-    ch <- use csPendingChannelChange
+    ch <- use (csCurrentTeam.tsPendingChannelChange)
     return $ case ch of
         Just (ChangeByUserId i) ->
             i == uId
@@ -461,94 +423,37 @@
 updateChannelInfo cid new member = do
     mh $ invalidateCacheEntry $ ChannelMessages cid
     csChannel(cid).ccInfo %= channelInfoFromChannelWithData new member
-    updateSidebar
+    withChannel cid $ \chan ->
+        updateSidebar (chan^.ccInfo.cdTeamId)
 
 setFocus :: ChannelId -> MH ()
 setFocus cId = do
     showChannelInSidebar cId True
     setFocusWith True (Z.findRight ((== cId) . channelListEntryChannelId)) (return ())
 
-showChannelInSidebar :: ChannelId -> Bool -> MH ()
-showChannelInSidebar cId setPending = do
-    mChan <- preuse $ csChannel cId
-    me <- gets myUser
-    prefs <- use (csResources.crUserPreferences)
-    session <- getSession
-
-    case mChan of
-        Nothing ->
-          -- The requested channel doesn't actually exist yet, so no
-          -- action can be taken.  It's likely that this is a
-          -- pendingChannel situation and not all of the operations to
-          -- locally define the channel have completed, in which case
-          -- this code will be re-entered later and the mChan will be
-          -- known.
-          return ()
-        Just ch -> do
-
-            -- Able to successfully switch to a known channel.  This
-            -- should clear any pending channel intention.  If the
-            -- intention was for this channel, then: done.  If the
-            -- intention was for a different channel, reaching this
-            -- point means that the pending is still outstanding but
-            -- that the user identified a new channel which *was*
-            -- displayable, and the UI should always prefer to SATISFY
-            -- the user's latest request over any pending/background
-            -- task.
-            csPendingChannelChange .= Nothing
-
-            now <- liftIO getCurrentTime
-            csChannel(cId).ccInfo.cdSidebarShowOverride .= Just now
-            updateSidebar
-
-            case ch^.ccInfo.cdType of
-                Direct -> do
-                    let Just uId = ch^.ccInfo.cdDMUserId
-                    case dmChannelShowPreference prefs uId of
-                        Just False -> do
-                            let pref = showDirectChannelPref (me^.userIdL) uId True
-                            when setPending $
-                                csPendingChannelChange .= Just (ChangeByChannelId (ch^.ccInfo.cdChannelId) Nothing)
-                            doAsyncWith Preempt $ do
-                                MM.mmSaveUsersPreferences UserMe (Seq.singleton pref) session
-                                return Nothing
-                        _ -> return ()
-
-                Group ->
-                    case groupChannelShowPreference prefs cId of
-                        Just False -> do
-                            let pref = showGroupChannelPref cId (me^.userIdL)
-                            when setPending $
-                                csPendingChannelChange .= Just (ChangeByChannelId (ch^.ccInfo.cdChannelId) Nothing)
-                            doAsyncWith Preempt $ do
-                                MM.mmSaveUsersPreferences UserMe (Seq.singleton pref) session
-                                return Nothing
-                        _ -> return ()
-
-                _ -> return ()
-
 setFocusWith :: Bool
              -> (Zipper ChannelListGroup ChannelListEntry
              -> Zipper ChannelListGroup ChannelListEntry)
              -> MH ()
              -> MH ()
 setFocusWith updatePrev f onNoChange = do
-    oldZipper <- use csFocus
+    tId <- use csCurrentTeamId
+    oldZipper <- use (csCurrentTeam.tsFocus)
     let newZipper = f oldZipper
         newFocus = Z.focus newZipper
         oldFocus = Z.focus oldZipper
 
     -- If we aren't changing anything, skip all the book-keeping because
-    -- we'll end up clobbering things like csRecentChannel.
+    -- we'll end up clobbering things like tsRecentChannel.
     if newFocus /= oldFocus
        then do
-          mh $ invalidateCacheEntry ChannelSidebar
+          mh $ invalidateCacheEntry $ ChannelSidebar tId
           resetAutocomplete
           preChangeChannelCommon
-          csFocus .= newZipper
+          csCurrentTeam.tsFocus .= newZipper
 
           now <- liftIO getCurrentTime
-          newCid <- use csCurrentChannelId
+          newCid <- use (csCurrentChannelId tId)
           csChannel(newCid).ccInfo.cdSidebarShowOverride .= Just now
 
           updateViewed updatePrev
@@ -564,90 +469,70 @@
 
 loadLastEdit :: MH ()
 loadLastEdit = do
-    cId <- use csCurrentChannelId
+    tId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId tId)
 
     oldEphemeral <- preuse (csChannel(cId).ccEditState)
     case oldEphemeral of
         Nothing -> return ()
-        Just e -> csEditState.cedEphemeral .= e
+        Just e -> csCurrentTeam.tsEditState.cedEphemeral .= e
 
     loadLastChannelInput
 
 loadLastChannelInput :: MH ()
 loadLastChannelInput = do
-    cId <- use csCurrentChannelId
-    inputHistoryPos <- use (csEditState.cedEphemeral.eesInputHistoryPosition)
+    tId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId tId)
+    inputHistoryPos <- use (csCurrentTeam.tsEditState.cedEphemeral.eesInputHistoryPosition)
     case inputHistoryPos of
         Just i -> loadHistoryEntryToEditor cId i
         Nothing -> do
-            (lastEdit, lastEditMode) <- use (csEditState.cedEphemeral.eesLastInput)
-            csEditState.cedEditor %= (applyEdit $ insertMany lastEdit . clearZipper)
-            csEditState.cedEditMode .= lastEditMode
+            (lastEdit, lastEditMode) <- use (csCurrentTeam.tsEditState.cedEphemeral.eesLastInput)
+            csCurrentTeam.tsEditState.cedEditor %= (applyEdit $ insertMany lastEdit . clearZipper)
+            csCurrentTeam.tsEditState.cedEditMode .= lastEditMode
 
 updateChannelListScroll :: MH ()
 updateChannelListScroll = do
-    mh $ vScrollToBeginning (viewportScroll ChannelList)
+    tId <- use csCurrentTeamId
+    mh $ vScrollToBeginning (viewportScroll $ ChannelList tId)
 
 preChangeChannelCommon :: MH ()
 preChangeChannelCommon = do
-    cId <- use csCurrentChannelId
-    csRecentChannel .= Just cId
+    tId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId tId)
+    csCurrentTeam.tsRecentChannel .= Just cId
     saveCurrentEdit
 
 resetEditorState :: MH ()
 resetEditorState = do
-    csEditState.cedEditMode .= NewPost
+    csCurrentTeam.tsEditState.cedEditMode .= NewPost
     clearEditor
 
 clearEditor :: MH ()
-clearEditor = csEditState.cedEditor %= applyEdit clearZipper
+clearEditor = csCurrentTeam.tsEditState.cedEditor %= applyEdit clearZipper
 
 saveCurrentEdit :: MH ()
 saveCurrentEdit = do
     saveCurrentChannelInput
 
-    oldEphemeral <- use (csEditState.cedEphemeral)
-    cId <- use csCurrentChannelId
+    oldEphemeral <- use (csCurrentTeam.tsEditState.cedEphemeral)
+    tId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId tId)
     csChannel(cId).ccEditState .= oldEphemeral
 
 saveCurrentChannelInput :: MH ()
 saveCurrentChannelInput = do
-    cmdLine <- use (csEditState.cedEditor)
-    mode <- use (csEditState.cedEditMode)
+    cmdLine <- use (csCurrentTeam.tsEditState.cedEditor)
+    mode <- use (csCurrentTeam.tsEditState.cedEditMode)
 
     -- Only save the editor contents if the user is not navigating the
     -- history.
-    inputHistoryPos <- use (csEditState.cedEphemeral.eesInputHistoryPosition)
+    inputHistoryPos <- use (csCurrentTeam.tsEditState.cedEphemeral.eesInputHistoryPosition)
 
     when (isNothing inputHistoryPos) $
-        csEditState.cedEphemeral.eesLastInput .=
+        csCurrentTeam.tsEditState.cedEphemeral.eesLastInput .=
            (T.intercalate "\n" $ getEditContents $ cmdLine, mode)
 
-hideGroupChannelPref :: ChannelId -> UserId -> Preference
-hideGroupChannelPref cId uId =
-    Preference { preferenceCategory = PreferenceCategoryGroupChannelShow
-               , preferenceValue = PreferenceValue "false"
-               , preferenceName = PreferenceName $ idString cId
-               , preferenceUserId = uId
-               }
-
-showGroupChannelPref :: ChannelId -> UserId -> Preference
-showGroupChannelPref cId uId =
-    Preference { preferenceCategory = PreferenceCategoryGroupChannelShow
-               , preferenceValue = PreferenceValue "true"
-               , preferenceName = PreferenceName $ idString cId
-               , preferenceUserId = uId
-               }
-
-showDirectChannelPref :: UserId -> UserId -> Bool -> Preference
-showDirectChannelPref myId otherId s =
-    Preference { preferenceCategory = PreferenceCategoryDirectChannelShow
-               , preferenceValue = if s then PreferenceValue "true"
-                                        else PreferenceValue "false"
-               , preferenceName = PreferenceName $ idString otherId
-               , preferenceUserId = myId
-               }
-
 applyPreferenceChange :: Preference -> MH ()
 applyPreferenceChange pref = do
     -- always update our user preferences accordingly
@@ -661,8 +546,11 @@
       | Just f <- preferenceToFlaggedPost pref -> do
           updateMessageFlag (flaggedPostId f) (flaggedPostStatus f)
 
+      | Just tIds <- preferenceToTeamOrder pref ->
+          applyTeamOrder tIds
+
       | Just d <- preferenceToDirectChannelShowStatus pref -> do
-          updateSidebar
+          updateSidebar Nothing
 
           cs <- use csChannels
 
@@ -683,7 +571,7 @@
                   csChannel(cId).ccInfo.cdSidebarShowOverride .= Nothing
 
       | Just g <- preferenceToGroupChannelPreference pref -> do
-          updateSidebar
+          updateSidebar Nothing
 
           -- We need to check on whether this preference was to show a
           -- channel and, if so, whether it was the one we attempted to
@@ -716,16 +604,27 @@
 removeChannelFromState cId = do
     withChannel cId $ \ chan -> do
         when (chan^.ccInfo.cdType /= Direct) $ do
-            origFocus <- use csCurrentChannelId
-            when (origFocus == cId) nextChannelSkipPrevView
+            case chan^.ccInfo.cdTeamId of
+                Nothing -> return ()
+                Just tId -> do
+                    origFocus <- use (csCurrentChannelId tId)
+                    when (origFocus == cId) nextChannelSkipPrevView
+
             -- Update input history
-            csEditState.cedInputHistory         %= removeChannelHistory cId
+            csInputHistory %= removeChannelHistory cId
             -- Update msgMap
-            csChannels                          %= removeChannel cId
-            -- Remove from focus zipper
-            csFocus %= Z.filterZipper ((/= cId) . channelListEntryChannelId)
-            updateSidebar
+            csChannels %= removeChannel cId
 
+            case chan^.ccInfo.cdTeamId of
+                Nothing -> do
+                    ts <- use csTeams
+                    forM_ (HM.keys ts) $ \tId ->
+                        csTeam(tId).tsFocus %= Z.filterZipper ((/= cId) . channelListEntryChannelId)
+                Just tId -> do
+                    csTeam(tId).tsFocus %= Z.filterZipper ((/= cId) . channelListEntryChannelId)
+
+            updateSidebar $ chan^.ccInfo.cdTeamId
+
 nextChannel :: MH ()
 nextChannel = do
     resetReturnChannel
@@ -743,26 +642,27 @@
 
 recentChannel :: MH ()
 recentChannel = do
-  recent <- use csRecentChannel
+  recent <- use (csCurrentTeam.tsRecentChannel)
   case recent of
     Nothing  -> return ()
     Just cId -> do
-        ret <- use csReturnChannel
+        ret <- use (csCurrentTeam.tsReturnChannel)
         when (ret == Just cId) resetReturnChannel
         setFocus cId
 
 resetReturnChannel :: MH ()
 resetReturnChannel = do
-  val <- use csReturnChannel
+  val <- use (csCurrentTeam.tsReturnChannel)
   case val of
       Nothing -> return ()
       Just _ -> do
-          mh $ invalidateCacheEntry ChannelSidebar
-          csReturnChannel .= Nothing
+          tId <- use csCurrentTeamId
+          mh $ invalidateCacheEntry $ ChannelSidebar tId
+          csCurrentTeam.tsReturnChannel .= Nothing
 
 gotoReturnChannel :: MH ()
 gotoReturnChannel = do
-  ret <- use csReturnChannel
+  ret <- use (csCurrentTeam.tsReturnChannel)
   case ret of
     Nothing  -> return ()
     Just cId -> do
@@ -771,12 +671,13 @@
 
 setReturnChannel :: MH ()
 setReturnChannel = do
-  ret <- use csReturnChannel
+  ret <- use (csCurrentTeam.tsReturnChannel)
   case ret of
     Nothing  -> do
-        cId <- use csCurrentChannelId
-        csReturnChannel .= Just cId
-        mh $ invalidateCacheEntry ChannelSidebar
+        tId <- use csCurrentTeamId
+        cId <- use (csCurrentChannelId tId)
+        csCurrentTeam.tsReturnChannel .= Just cId
+        mh $ invalidateCacheEntry $ ChannelSidebar tId
     Just _ -> return ()
 
 nextUnreadChannel :: MH ()
@@ -854,21 +755,23 @@
     -- for the next candidate channel.
     Z.findRight (\e ->
                 let cId = channelListEntryChannelId e
-                in hasUnread st cId && (cId /= st^.csCurrentChannelId))
+                in hasUnread st cId && (cId /= st^.csCurrentChannelId(st^.csCurrentTeamId)))
 
 getNextUnreadUserOrChannel :: ChatState
                            -> Zipper a ChannelListEntry
                            -> Zipper a ChannelListEntry
 getNextUnreadUserOrChannel st z =
     -- Find the next unread channel, prefering direct messages
-    let cur = st^.csCurrentChannelId
+    let cur = st^.csCurrentChannelId(st^.csCurrentTeamId)
         matches e = entryIsDMEntry e && isFresh (channelListEntryChannelId e)
         isFresh c = hasUnread st c && (c /= cur)
     in fromMaybe (Z.findRight (isFresh . channelListEntryChannelId) z)
                  (Z.maybeFindRight matches z)
 
 leaveCurrentChannel :: MH ()
-leaveCurrentChannel = use csCurrentChannelId >>= leaveChannel
+leaveCurrentChannel = do
+    tId <- use csCurrentTeamId
+    use (csCurrentChannelId tId) >>= leaveChannel
 
 createGroupChannel :: Text -> MH ()
 createGroupChannel usernameList = do
@@ -893,7 +796,9 @@
                           -- we can just switch to it.
                           setFocus (channelId chan)
                       Nothing -> do
-                          csPendingChannelChange .= (Just $ ChangeByChannelId (channelId chan) Nothing)
+                          tId <- use csCurrentTeamId
+                          csCurrentTeam.tsPendingChannelChange .=
+                              (Just $ ChangeByChannelId tId (channelId chan) Nothing)
                           let pref = showGroupChannelPref (channelId chan) (me^.userIdL)
                           doAsyncWith Normal $ do
                             MM.mmSaveUsersPreferences UserMe (Seq.singleton pref) session
@@ -910,46 +815,48 @@
 channelHistoryForward = do
     resetAutocomplete
 
-    cId <- use csCurrentChannelId
-    inputHistoryPos <- use (csEditState.cedEphemeral.eesInputHistoryPosition)
+    tId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId tId)
+    inputHistoryPos <- use (csCurrentTeam.tsEditState.cedEphemeral.eesInputHistoryPosition)
     case inputHistoryPos of
         Just i
           | i == 0 -> do
             -- Transition out of history navigation
-            csEditState.cedEphemeral.eesInputHistoryPosition .= Nothing
+            csCurrentTeam.tsEditState.cedEphemeral.eesInputHistoryPosition .= Nothing
             loadLastChannelInput
           | otherwise -> do
             let newI = i - 1
             loadHistoryEntryToEditor cId newI
-            csEditState.cedEphemeral.eesInputHistoryPosition .= (Just newI)
+            csCurrentTeam.tsEditState.cedEphemeral.eesInputHistoryPosition .= (Just newI)
         _ -> return ()
 
 loadHistoryEntryToEditor :: ChannelId -> Int -> MH ()
 loadHistoryEntryToEditor cId idx = do
-    inputHistory <- use (csEditState.cedInputHistory)
+    inputHistory <- use csInputHistory
     case getHistoryEntry cId idx inputHistory of
         Nothing -> return ()
         Just entry -> do
             let eLines = T.lines entry
                 mv = if length eLines == 1 then gotoEOL else id
-            csEditState.cedEditor.editContentsL .= (mv $ textZipper eLines Nothing)
+            csCurrentTeam.tsEditState.cedEditor.editContentsL .= (mv $ textZipper eLines Nothing)
 
 channelHistoryBackward :: MH ()
 channelHistoryBackward = do
     resetAutocomplete
 
-    cId <- use csCurrentChannelId
-    inputHistoryPos <- use (csEditState.cedEphemeral.eesInputHistoryPosition)
+    tId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId tId)
+    inputHistoryPos <- use (csCurrentTeam.tsEditState.cedEphemeral.eesInputHistoryPosition)
     saveCurrentChannelInput
 
     let newI = maybe 0 (+ 1) inputHistoryPos
     loadHistoryEntryToEditor cId newI
-    csEditState.cedEphemeral.eesInputHistoryPosition .= (Just newI)
+    csCurrentTeam.tsEditState.cedEphemeral.eesInputHistoryPosition .= (Just newI)
 
 createOrdinaryChannel :: Bool -> Text -> MH ()
 createOrdinaryChannel public name = do
     session <- getSession
-    myTId <- gets myTeamId
+    myTId <- use csCurrentTeamId
     doAsyncWith Preempt $ do
         -- create a new chat channel
         let slug = T.map (\ c -> if isAlphaNum c then c else '-') (T.toLower name)
@@ -986,7 +893,8 @@
 
 addUserToCurrentChannel :: UserInfo -> MH ()
 addUserToCurrentChannel u = do
-    cId <- use csCurrentChannelId
+    tId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId tId)
     session <- getSession
     let channelMember = MinChannelMember (u^.uiId) cId
     doAsyncWith Normal $ do
@@ -996,7 +904,8 @@
 removeUserFromCurrentChannel :: Text -> MH ()
 removeUserFromCurrentChannel uname =
     withFetchedUser (UserFetchByUsername uname) $ \u -> do
-        cId <- use csCurrentChannelId
+        tId <- use csCurrentTeamId
+        cId <- use (csCurrentChannelId tId)
         session <- getSession
         doAsyncWith Normal $ do
             tryMM (void $ MM.mmRemoveUserFromChannel cId (UserById $ u^.uiId) session)
@@ -1013,22 +922,23 @@
 deleteCurrentChannel :: MH ()
 deleteCurrentChannel = do
     setMode Main
-    cId <- use csCurrentChannelId
+    tId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId tId)
     leaveChannelIfPossible cId True
 
 isCurrentChannel :: ChatState -> ChannelId -> Bool
-isCurrentChannel st cId = st^.csCurrentChannelId == cId
+isCurrentChannel st cId = st^.csCurrentChannelId(st^.csCurrentTeamId) == cId
 
 isRecentChannel :: ChatState -> ChannelId -> Bool
-isRecentChannel st cId = st^.csRecentChannel == Just cId
+isRecentChannel st cId = st^.csCurrentTeam.tsRecentChannel == Just cId
 
 isReturnChannel :: ChatState -> ChannelId -> Bool
-isReturnChannel st cId = st^.csReturnChannel == Just cId
+isReturnChannel st cId = st^.csCurrentTeam.tsReturnChannel == Just cId
 
 joinChannelByName :: Text -> MH ()
 joinChannelByName rawName = do
     session <- getSession
-    tId <- gets myTeamId
+    tId <- use csCurrentTeamId
     doAsyncWith Preempt $ do
         result <- try $ MM.mmGetChannelByName tId (trimChannelSigil rawName) session
         return $ Just $ case result of
@@ -1050,8 +960,9 @@
             fromMaybe (return ()) act
         Nothing -> do
             myId <- gets myUserId
+            tId <- use csCurrentTeamId
             let member = MinChannelMember myId chanId
-            csPendingChannelChange .= (Just $ ChangeByChannelId chanId act)
+            csCurrentTeam.tsPendingChannelChange .= (Just $ ChangeByChannelId tId chanId act)
             doAsyncChannelMM Preempt chanId (\ s c -> MM.mmAddUser c member s) (const $ return act)
 
 createOrFocusDMChannel :: UserInfo -> Maybe (ChannelId -> MH ()) -> MH ()
@@ -1067,7 +978,7 @@
             -- We have a user of that name but no channel. Time to make one!
             myId <- gets myUserId
             session <- getSession
-            csPendingChannelChange .= (Just $ ChangeByUserId $ user^.uiId)
+            csCurrentTeam.tsPendingChannelChange .= (Just $ ChangeByUserId $ user^.uiId)
             doAsyncWith Normal $ do
                 -- create a new channel
                 chan <- MM.mmCreateDirectMessageChannel (user^.uiId, myId) session
@@ -1108,12 +1019,27 @@
 
 setChannelTopic :: Text -> MH ()
 setChannelTopic msg = do
-    cId <- use csCurrentChannelId
+    tId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId tId)
     let patch = defaultChannelPatch { channelPatchHeader = Just msg }
     doAsyncChannelMM Preempt cId
         (\s _ -> MM.mmPatchChannel cId patch s)
         (\_ _ -> Nothing)
 
+-- | This renames the current channel's url name. It makes a request
+-- to the server to change the name, but does not actually change the
+-- name in Matterhorn yet; that is handled by a websocket event handled
+-- asynchronously.
+renameChannelUrl :: Text -> MH ()
+renameChannelUrl name = do
+    tId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId tId)
+    s <- getSession
+    let patch = defaultChannelPatch { channelPatchName = Just name }
+    doAsyncWith Normal $ do
+        _ <- MM.mmPatchChannel cId patch s
+        return Nothing
+
 getCurrentChannelTopic :: MH Text
 getCurrentChannelTopic = do
     ch <- use csCurrentChannel
@@ -1121,7 +1047,8 @@
 
 beginCurrentChannelDeleteConfirm :: MH ()
 beginCurrentChannelDeleteConfirm = do
-    cId <- use csCurrentChannelId
+    tId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId tId)
     withChannel cId $ \chan -> do
         let chType = chan^.ccInfo.cdType
         if chType /= Direct
@@ -1130,5 +1057,11 @@
 
 updateChannelNotifyProps :: ChannelId -> ChannelNotifyProps -> MH ()
 updateChannelNotifyProps cId notifyProps = do
-    mh $ invalidateCacheEntry ChannelSidebar
-    csChannel(cId).ccInfo.cdNotifyProps .= notifyProps
+    withChannel cId $ \chan -> do
+        case chan^.ccInfo.cdTeamId of
+            Nothing -> do
+                ts <- use csTeams
+                forM_ (HM.keys ts) (mh . invalidateCacheEntry . ChannelSidebar)
+            Just tId -> mh $ invalidateCacheEntry $ ChannelSidebar tId
+
+        csChannel(cId).ccInfo.cdNotifyProps .= notifyProps
diff --git a/src/Matterhorn/State/Common.hs b/src/Matterhorn/State/Common.hs
--- a/src/Matterhorn/State/Common.hs
+++ b/src/Matterhorn/State/Common.hs
@@ -67,19 +67,21 @@
 -- This also sets the mFlagged field of each message based on whether
 -- its post ID is a flagged post according to crFlaggedPosts at the time
 -- of this call.
-installMessagesFromPosts :: Posts -> MH Messages
-installMessagesFromPosts postCollection = do
+installMessagesFromPosts :: Maybe TeamId -> Posts -> MH Messages
+installMessagesFromPosts mTId postCollection = do
   flags <- use (csResources.crFlaggedPosts)
 
   -- Add all posts in this collection to the global post cache
-  updatePostMap postCollection
+  updatePostMap mTId postCollection
 
-  baseUrl <- getServerBaseUrl
+  mBaseUrl <- case mTId of
+      Nothing -> return Nothing
+      Just tId -> Just <$> getServerBaseUrl tId
 
   -- Build the ordered list of posts. Note that postsOrder lists the
   -- posts most recent first, but we want most recent last.
   let postsInOrder = findPost <$> (Seq.reverse $ postsOrder postCollection)
-      mkClientPost p = toClientPost baseUrl p (postId <$> parent p)
+      mkClientPost p = toClientPost mBaseUrl p (postId <$> parent p)
       clientPosts = mkClientPost <$> postsInOrder
 
       addNext cp (msgs, us) =
@@ -102,18 +104,21 @@
             Just post -> post
 
 -- Add all posts in this collection to the global post cache
-updatePostMap :: Posts -> MH ()
-updatePostMap postCollection = do
+updatePostMap :: Maybe TeamId -> Posts -> MH ()
+updatePostMap mTId postCollection = do
   -- Build a map from post ID to Matterhorn message, then add the new
   -- messages to the global post map. We use the "postsPosts" field for
   -- this because that might contain more messages than the "postsOrder"
   -- list, since the former can contain other messages in threads that
   -- the server sent us, even if those messages are not part of the
   -- ordered post listing of "postsOrder."
-  baseUrl <- getServerBaseUrl
+  mBaseUrl <- case mTId of
+      Nothing -> return Nothing
+      Just tId -> Just <$> getServerBaseUrl tId
+
   let postMap = HM.fromList
           [ ( pId
-            , fst $ clientPostToMessage (toClientPost baseUrl x Nothing)
+            , fst $ clientPostToMessage (toClientPost mBaseUrl x Nothing)
             )
           | (pId, x) <- HM.toList (postCollection^.postsPostsL)
           ]
@@ -122,13 +127,15 @@
 -- | Add a 'ClientMessage' to the current channel's message list
 addClientMessage :: ClientMessage -> MH ()
 addClientMessage msg = do
-  cid <- use csCurrentChannelId
+  tId <- use csCurrentTeamId
+  cid <- use (csCurrentChannelId(tId))
   uuid <- generateUUID
   let addCMsg = ccContents.cdMessages %~
           (addMessage $ clientMessageToMessage msg & mMessageId .~ Just (MessageUUID uuid))
   csChannels %= modifyChannelById cid addCMsg
+
   mh $ invalidateCacheEntry $ ChannelMessages cid
-  mh $ invalidateCacheEntry ChannelSidebar
+  mh $ invalidateCacheEntry $ ChannelSidebar tId
 
   let msgTy = case msg^.cmType of
         Error -> LogError
@@ -152,7 +159,7 @@
 postErrorMessageIO err st = do
   msg <- newClientMessage Error err
   uuid <- generateUUID_IO
-  let cId = st ^. csCurrentChannelId
+  let cId = st ^. csCurrentChannelId (st^.csCurrentTeamId)
       addEMsg = ccContents.cdMessages %~
           (addMessage $ clientMessageToMessage msg & mMessageId .~ Just (MessageUUID uuid))
   return $ st & csChannels %~ modifyChannelById cId addEMsg
diff --git a/src/Matterhorn/State/Editing.hs b/src/Matterhorn/State/Editing.hs
--- a/src/Matterhorn/State/Editing.hs
+++ b/src/Matterhorn/State/Editing.hs
@@ -49,7 +49,7 @@
 import qualified System.Process as Sys
 import           Text.Aspell ( AspellResponse(..), mistakeWord, askAspell )
 
-import           Network.Mattermost.Types ( Post(..), ChannelId )
+import           Network.Mattermost.Types ( Post(..), ChannelId, TeamId )
 
 import           Matterhorn.Config
 import {-# SOURCE #-} Matterhorn.Command ( dispatchCommand )
@@ -66,20 +66,20 @@
 startMultilineEditing :: MH ()
 startMultilineEditing = do
     mh invalidateCache
-    csEditState.cedEphemeral.eesMultiline .= True
+    csCurrentTeam.tsEditState.cedEphemeral.eesMultiline .= True
 
 toggleMultilineEditing :: MH ()
 toggleMultilineEditing = do
     mh invalidateCache
-    csEditState.cedEphemeral.eesMultiline %= not
+    csCurrentTeam.tsEditState.cedEphemeral.eesMultiline %= not
 
     -- If multiline is now disabled and there is more than one line in
     -- the editor, that means we're showing the multiline message status
     -- (see Draw.Main.renderUserCommandBox.commandBox) so we want to be
     -- sure no autocomplete UI is present in case the cursor was left on
     -- a word that would otherwise show completion alternatives.
-    multiline <- use (csEditState.cedEphemeral.eesMultiline)
-    numLines <- use (csEditState.cedEditor.to getEditContents.to length)
+    multiline <- use (csCurrentTeam.tsEditState.cedEphemeral.eesMultiline)
+    numLines <- use (csCurrentTeam.tsEditState.cedEditor.to getEditContents.to length)
     when (not multiline && numLines > 1) resetAutocomplete
 
 invokeExternalEditor :: MH ()
@@ -96,7 +96,7 @@
       Sys.withSystemTempFile "matterhorn_editor.md" $ \tmpFileName tmpFileHandle -> do
         -- Write the current message to the temp file
         Sys.hPutStr tmpFileHandle $ T.unpack $ T.intercalate "\n" $
-            getEditContents $ st^.csEditState.cedEditor
+            getEditContents $ st^.csCurrentTeam.tsEditState.cedEditor
         Sys.hClose tmpFileHandle
 
         -- Run the editor
@@ -112,26 +112,26 @@
                         postErrorMessageIO "Failed to decode file contents as UTF-8" st
                     Right t -> do
                         let tmpLines = T.lines $ sanitizeUserText' t
-                        return $ st & csEditState.cedEditor.editContentsL .~ (Z.textZipper tmpLines Nothing)
+                        return $ st & csCurrentTeam.tsEditState.cedEditor.editContentsL .~ (Z.textZipper tmpLines Nothing)
             Sys.ExitFailure _ -> return st
 
 handlePaste :: BS.ByteString -> MH ()
 handlePaste bytes = do
   let pasteStr = T.pack (UTF8.toString bytes)
-  csEditState.cedEditor %= applyEdit (Z.insertMany (sanitizeUserText' pasteStr))
-  contents <- use (csEditState.cedEditor.to getEditContents)
+  csCurrentTeam.tsEditState.cedEditor %= applyEdit (Z.insertMany (sanitizeUserText' pasteStr))
+  contents <- use (csCurrentTeam.tsEditState.cedEditor.to getEditContents)
   case length contents > 1 of
       True -> startMultilineEditing
       False -> return ()
 
 editingPermitted :: ChatState -> Bool
 editingPermitted st =
-    (length (getEditContents $ st^.csEditState.cedEditor) == 1) ||
-    st^.csEditState.cedEphemeral.eesMultiline
+    (length (getEditContents $ st^.csCurrentTeam.tsEditState.cedEditor) == 1) ||
+    st^.csCurrentTeam.tsEditState.cedEphemeral.eesMultiline
 
 messageEditingKeybindings :: KeyConfig -> KeyHandlerMap
 messageEditingKeybindings kc =
-    let KeyHandlerMap m = editingKeybindings (csEditState.cedEditor) kc
+    let KeyHandlerMap m = editingKeybindings (csCurrentTeam.tsEditState.cedEditor) kc
     in KeyHandlerMap $ M.map withUserTypingAction m
 
 withUserTypingAction :: KeyHandler -> KeyHandler
@@ -167,7 +167,7 @@
     "Kill the line to the right of the current position and copy it" $ do
       z <- use (editor.editContentsL)
       let restOfLine = Z.currentLine (Z.killToBOL z)
-      csEditState.cedYankBuffer .= restOfLine
+      csCurrentTeam.tsEditState.cedYankBuffer .= restOfLine
       editor %= applyEdit Z.killToEOL
   , mkKb EditorNextCharEvent
     "Move one character to the right"
@@ -195,13 +195,13 @@
     editor %= applyEdit gotoEnd
   , mkKb EditorYankEvent
     "Paste the current buffer contents at the cursor" $ do
-      buf <- use (csEditState.cedYankBuffer)
+      buf <- use (csCurrentTeam.tsEditState.cedYankBuffer)
       editor %= applyEdit (Z.insertMany buf)
   ]
 
 getEditorContent :: MH Text
 getEditorContent = do
-    cmdLine <- use (csEditState.cedEditor)
+    cmdLine <- use (csCurrentTeam.tsEditState.cedEditor)
     let (line:rest) = getEditContents cmdLine
     return $ T.intercalate "\n" $ line : rest
 
@@ -216,21 +216,22 @@
 -- *source* of the text, so it also takes care of clearing the editor,
 -- resetting the edit mode, updating the input history for the specified
 -- channel, etc.
-handleInputSubmission :: ChannelId -> Text -> MH ()
-handleInputSubmission cId content = do
+handleInputSubmission :: TeamId -> ChannelId -> Text -> MH ()
+handleInputSubmission tId cId content = do
     -- We clean up before dispatching the command or sending the message
     -- since otherwise the command could change the state and then doing
     -- cleanup afterwards could clean up the wrong things.
-    csEditState.cedEditor %= applyEdit Z.clearZipper
-    csEditState.cedInputHistory %= addHistoryEntry content cId
-    csEditState.cedEphemeral.eesInputHistoryPosition .= Nothing
+    csTeam(tId).tsEditState.cedEditor %= applyEdit Z.clearZipper
+    csTeam(tId).tsEditState.cedEphemeral.eesInputHistoryPosition .= Nothing
 
+    csInputHistory %= addHistoryEntry content cId
+
     case T.uncons content of
       Just ('/', cmd) ->
           dispatchCommand cmd
       _ -> do
-          attachments <- use (csEditState.cedAttachmentList.L.listElementsL)
-          mode <- use (csEditState.cedEditMode)
+          attachments <- use (csTeam(tId).tsEditState.cedAttachmentList.L.listElementsL)
+          mode <- use (csTeam(tId).tsEditState.cedEditMode)
           sendMessage cId mode content $ F.toList attachments
 
     -- Reset the autocomplete UI
@@ -241,7 +242,7 @@
 
     -- Reset the edit mode *after* handling the input so that the input
     -- handler can tell whether we're editing, replying, etc.
-    csEditState.cedEditMode .= NewPost
+    csTeam(tId).tsEditState.cedEditMode .= NewPost
 
 closingPunctuationMarks :: String
 closingPunctuationMarks = ".,'\";:)]!?"
@@ -262,18 +263,18 @@
     -- Record the input line count before handling the editing event
     -- so we can tell whether the editing event changes the line count
     -- later.
-    beforeLineCount <- use (csEditState.cedEditor.to getEditContents.to length)
+    beforeLineCount <- use (csCurrentTeam.tsEditState.cedEditor.to getEditContents.to length)
 
-    smartBacktick <- use (csResources.crConfiguration.to configSmartBacktick)
+    smartBacktick <- use (csResources.crConfiguration.configSmartBacktickL)
     let smartChars = "*`_"
     st <- use id
-    csEditState.cedEphemeral.eesInputHistoryPosition .= Nothing
+    csCurrentTeam.tsEditState.cedEphemeral.eesInputHistoryPosition .= Nothing
 
-    smartEditing <- use (csResources.crConfiguration.to configSmartEditing)
-    justCompleted <- use (csEditState.cedJustCompleted)
+    smartEditing <- use (csResources.crConfiguration.configSmartEditingL)
+    justCompleted <- use (csCurrentTeam.tsEditState.cedJustCompleted)
 
     conf <- use (csResources.crConfiguration)
-    let keyMap = editingKeybindings (csEditState.cedEditor) (configUserKeys conf)
+    let keyMap = editingKeybindings (csCurrentTeam.tsEditState.cedEditor) (configUserKeys conf)
     case lookupKeybinding e keyMap of
       Just kb | editingPermitted st -> (ehAction $ kehHandler $ khHandler kb)
       _ -> do
@@ -281,52 +282,52 @@
           -- Not editing; backspace here means cancel multi-line message
           -- composition
           EvKey KBS [] | (not $ editingPermitted st) ->
-            csEditState.cedEditor %= applyEdit Z.clearZipper
+            csCurrentTeam.tsEditState.cedEditor %= applyEdit Z.clearZipper
 
           -- Backspace in editing mode with smart pair insertion means
           -- smart pair removal when possible
           EvKey KBS [] | editingPermitted st && smartBacktick ->
-              let backspace = csEditState.cedEditor %= applyEdit Z.deletePrevChar
-              in case cursorAtOneOf smartChars (st^.csEditState.cedEditor) of
+              let backspace = csCurrentTeam.tsEditState.cedEditor %= applyEdit Z.deletePrevChar
+              in case cursorAtOneOf smartChars (st^.csCurrentTeam.tsEditState.cedEditor) of
                   Nothing -> backspace
                   Just ch ->
                       -- Smart char removal:
-                      if | (cursorAtChar ch $ applyEdit Z.moveLeft $ st^.csEditState.cedEditor) &&
-                           (cursorIsAtEnd $ applyEdit Z.moveRight $ st^.csEditState.cedEditor) ->
-                             csEditState.cedEditor %= applyEdit (Z.deleteChar >>> Z.deletePrevChar)
+                      if | (cursorAtChar ch $ applyEdit Z.moveLeft $ st^.csCurrentTeam.tsEditState.cedEditor) &&
+                           (cursorIsAtEnd $ applyEdit Z.moveRight $ st^.csCurrentTeam.tsEditState.cedEditor) ->
+                             csCurrentTeam.tsEditState.cedEditor %= applyEdit (Z.deleteChar >>> Z.deletePrevChar)
                          | otherwise -> backspace
 
           EvKey (KChar ch) []
             | editingPermitted st && smartBacktick && ch `elem` smartChars ->
               -- Smart char insertion:
               let doInsertChar = do
-                    csEditState.cedEditor %= applyEdit (Z.insertChar ch)
+                    csCurrentTeam.tsEditState.cedEditor %= applyEdit (Z.insertChar ch)
                     sendUserTypingAction
-                  curLine = Z.currentLine $ st^.csEditState.cedEditor.editContentsL
+                  curLine = Z.currentLine $ st^.csCurrentTeam.tsEditState.cedEditor.editContentsL
               -- First case: if the cursor is at the end of the current
               -- line and it contains "``" and the user entered a third
               -- "`", enable multi-line mode since they're likely typing
               -- a code block.
-              in if | (cursorIsAtEnd $ st^.csEditState.cedEditor) &&
+              in if | (cursorIsAtEnd $ st^.csCurrentTeam.tsEditState.cedEditor) &&
                          curLine == "``" &&
                          ch == '`' -> do
-                        csEditState.cedEditor %= applyEdit (Z.insertMany (T.singleton ch))
-                        csEditState.cedEphemeral.eesMultiline .= True
+                        csCurrentTeam.tsEditState.cedEditor %= applyEdit (Z.insertMany (T.singleton ch))
+                        csCurrentTeam.tsEditState.cedEphemeral.eesMultiline .= True
                     -- Second case: user entered some smart character
                     -- (don't care which) on an empty line or at the end
                     -- of the line after whitespace, so enter a pair of
                     -- the smart chars and put the cursor between them.
-                    | (editorEmpty $ st^.csEditState.cedEditor) ||
-                         ((cursorAtChar ' ' (applyEdit Z.moveLeft $ st^.csEditState.cedEditor)) &&
-                          (cursorIsAtEnd $ st^.csEditState.cedEditor)) ->
-                        csEditState.cedEditor %= applyEdit (Z.insertMany (T.pack $ ch:ch:[]) >>> Z.moveLeft)
+                    | (editorEmpty $ st^.csCurrentTeam.tsEditState.cedEditor) ||
+                         ((cursorAtChar ' ' (applyEdit Z.moveLeft $ st^.csCurrentTeam.tsEditState.cedEditor)) &&
+                          (cursorIsAtEnd $ st^.csCurrentTeam.tsEditState.cedEditor)) ->
+                        csCurrentTeam.tsEditState.cedEditor %= applyEdit (Z.insertMany (T.pack $ ch:ch:[]) >>> Z.moveLeft)
                     -- Third case: the cursor is already on a smart
                     -- character and that character is the last one
                     -- on the line, so instead of inserting a new
                     -- character, just move past it.
-                    | (cursorAtChar ch $ st^.csEditState.cedEditor) &&
-                      (cursorIsAtEnd $ applyEdit Z.moveRight $ st^.csEditState.cedEditor) ->
-                        csEditState.cedEditor %= applyEdit Z.moveRight
+                    | (cursorAtChar ch $ st^.csCurrentTeam.tsEditState.cedEditor) &&
+                      (cursorIsAtEnd $ applyEdit Z.moveRight $ st^.csCurrentTeam.tsEditState.cedEditor) ->
+                        csCurrentTeam.tsEditState.cedEditor %= applyEdit Z.moveRight
                     -- Fall-through case: just insert one of the chars
                     -- without doing anything smart.
                     | otherwise -> doInsertChar
@@ -336,12 +337,12 @@
               -- there is a trailing space that we want to remove if the
               -- next input character is punctuation.
               when (smartEditing && justCompleted && isSmartClosingPunctuation e) $
-                  csEditState.cedEditor %= applyEdit Z.deletePrevChar
+                  csCurrentTeam.tsEditState.cedEditor %= applyEdit Z.deletePrevChar
 
-              csEditState.cedEditor %= applyEdit (Z.insertMany (sanitizeUserText' $ T.singleton ch))
+              csCurrentTeam.tsEditState.cedEditor %= applyEdit (Z.insertMany (sanitizeUserText' $ T.singleton ch))
               sendUserTypingAction
           _ | editingPermitted st -> do
-              mhHandleEventLensed (csEditState.cedEditor) handleEditorEvent e
+              mhHandleEventLensed (csCurrentTeam.tsEditState.cedEditor) handleEditorEvent e
               sendUserTypingAction
             | otherwise -> return ()
 
@@ -349,23 +350,24 @@
                                   , autocompleteFirstMatch = False
                                   }
     checkForAutocompletion ctx
-    liftIO $ resetSpellCheckTimer $ st^.csEditState
+    liftIO $ resetSpellCheckTimer $ st^.csCurrentTeam.tsEditState
 
     -- If the preview is enabled and multi-line editing is enabled and
     -- the line count changed, we need to invalidate the rendering cache
     -- entry for the channel messages because we want to redraw them to
     -- fit in the space just changed by the size of the preview area.
-    afterLineCount <- use (csEditState.cedEditor.to getEditContents.to length)
-    isMultiline <- use (csEditState.cedEphemeral.eesMultiline)
-    isPreviewing <- use csShowMessagePreview
+    afterLineCount <- use (csCurrentTeam.tsEditState.cedEditor.to getEditContents.to length)
+    isMultiline <- use (csCurrentTeam.tsEditState.cedEphemeral.eesMultiline)
+    isPreviewing <- use (csResources.crConfiguration.configShowMessagePreviewL)
     when (beforeLineCount /= afterLineCount && isMultiline && isPreviewing) $ do
-        cId <- use csCurrentChannelId
+        tId <- use csCurrentTeamId
+        cId <- use (csCurrentChannelId tId)
         mh $ invalidateCacheEntry $ ChannelMessages cId
 
     -- Reset the recent autocompletion flag to stop smart punctuation
     -- handling.
     when justCompleted $
-        csEditState.cedJustCompleted .= False
+        csCurrentTeam.tsEditState.cedJustCompleted .= False
 
 -- | Send the user_typing action to the server asynchronously, over the
 -- connected websocket. If the websocket is not connected, drop the
@@ -376,12 +378,13 @@
   when (configShowTypingIndicator (st^.csResources.crConfiguration)) $
     case st^.csConnectionStatus of
       Connected -> do
-        let pId = case st^.csEditState.cedEditMode of
+        let pId = case st^.csCurrentTeam.tsEditState.cedEditMode of
                     Replying _ post -> Just $ postId post
                     _               -> Nothing
+        tId <- use csCurrentTeamId
         liftIO $ do
           now <- getCurrentTime
-          let action = UserTyping now (st^.csCurrentChannelId) pId
+          let action = UserTyping now (st^.csCurrentChannelId(tId)) pId
           STM.atomically $ STM.writeTChan (st^.csResources.crWebsocketActionChan) action
       Disconnected -> return ()
 
@@ -390,11 +393,12 @@
 requestSpellCheck :: MH ()
 requestSpellCheck = do
     st <- use id
-    case st^.csEditState.cedSpellChecker of
+    case st^.csCurrentTeam.tsEditState.cedSpellChecker of
         Nothing -> return ()
         Just (checker, _) -> do
             -- Get the editor contents.
-            contents <- getEditContents <$> use (csEditState.cedEditor)
+            tId <- use csCurrentTeamId
+            contents <- getEditContents <$> use (csTeam(tId).tsEditState.cedEditor)
             doAsyncWith Preempt $ do
                 -- For each line in the editor, submit an aspell request.
                 let query = concat <$> mapM (askAspell checker) contents
@@ -403,7 +407,7 @@
                         let getMistakes AllCorrect = []
                             getMistakes (Mistakes ms) = mistakeWord <$> ms
                             allMistakes = S.fromList $ concat $ getMistakes <$> responses
-                        csEditState.cedMisspellings .= allMistakes
+                        csTeam(tId).tsEditState.cedMisspellings .= allMistakes
 
                 tryMM query (return . Just . postMistakes)
 
@@ -452,19 +456,20 @@
 
 cancelAutocompleteOrReplyOrEdit :: MH ()
 cancelAutocompleteOrReplyOrEdit = do
-    cId <- use csCurrentChannelId
+    tId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId tId)
     mh $ invalidateCacheEntry $ ChannelMessages cId
-    ac <- use (csEditState.cedAutocomplete)
+    ac <- use (csCurrentTeam.tsEditState.cedAutocomplete)
     case ac of
         Just _ -> do
             resetAutocomplete
         Nothing -> do
-            mode <- use (csEditState.cedEditMode)
+            mode <- use (csCurrentTeam.tsEditState.cedEditMode)
             case mode of
                 NewPost -> return ()
                 _ -> do
-                    csEditState.cedEditMode .= NewPost
-                    csEditState.cedEditor %= applyEdit Z.clearZipper
+                    csCurrentTeam.tsEditState.cedEditMode .= NewPost
+                    csCurrentTeam.tsEditState.cedEditor %= applyEdit Z.clearZipper
                     resetAttachmentList
 
 replyToLatestMessage :: MH ()
@@ -474,9 +479,10 @@
     Just msg | isReplyable msg ->
         do rootMsg <- getReplyRootMessage msg
            setMode Main
-           cId <- use csCurrentChannelId
+           tId <- use csCurrentTeamId
+           cId <- use (csCurrentChannelId tId)
            mh $ invalidateCacheEntry $ ChannelMessages cId
-           csEditState.cedEditMode .= Replying rootMsg (fromJust $ rootMsg^.mOriginalPost)
+           csCurrentTeam.tsEditState.cedEditMode .= Replying rootMsg (fromJust $ rootMsg^.mOriginalPost)
     _ -> return ()
 
 data Direction = Forwards | Backwards
@@ -496,9 +502,9 @@
                        (L.listSelected list == Nothing && len > 0)
                     then L.listMoveTo (len - 1) list
                     else L.listMoveBy (-1) list
-    csEditState.cedAutocomplete._Just.acCompletionList %= transform
+    csCurrentTeam.tsEditState.cedAutocomplete._Just.acCompletionList %= transform
 
-    mac <- use (csEditState.cedAutocomplete)
+    mac <- use (csCurrentTeam.tsEditState.cedAutocomplete)
     case mac of
         Nothing -> do
             let ctx = AutocompleteContext { autocompleteManual = True
@@ -514,10 +520,10 @@
                             if maybe True isSpace (Z.currentChar z)
                             then z
                             else Z.moveWordRight z
-                    csEditState.cedEditor %=
+                    csCurrentTeam.tsEditState.cedEditor %=
                         applyEdit (Z.insertChar ' ' . Z.insertMany replacement . Z.deletePrevWord .
                                    maybeEndOfWord)
-                    csEditState.cedJustCompleted .= True
+                    csCurrentTeam.tsEditState.cedJustCompleted .= True
 
                     -- If there was only one completion alternative,
                     -- hide the autocomplete listing now that we've
diff --git a/src/Matterhorn/State/Flagging.hs b/src/Matterhorn/State/Flagging.hs
--- a/src/Matterhorn/State/Flagging.hs
+++ b/src/Matterhorn/State/Flagging.hs
@@ -9,6 +9,7 @@
 
 import           Data.Function ( on )
 import qualified Data.Set as Set
+import qualified Data.HashMap.Strict as HM
 import           Lens.Micro.Platform
 
 import           Network.Mattermost.Types
@@ -38,29 +39,42 @@
   msgMb <- use (csPostMap.at(pId))
   case msgMb of
     Just msg
-      | Just cId <- msg^.mChannelId -> do
+      | Just cId <- msg^.mChannelId -> withChannel cId $ \chan -> do
       let isTargetMessage m = m^.mMessageId == Just (MessagePostId pId)
       csChannel(cId).ccContents.cdMessages.traversed.filtered isTargetMessage.mFlagged .= f
       csPostMap.ix(pId).mFlagged .= f
-      -- We also want to update the post overlay if this happens while
-      -- we're we're observing it
-      mode <- gets appMode
-      case mode of
-        PostListOverlay PostListFlagged
-          | f ->
-              csPostListOverlay.postListPosts %=
-                addMessage (msg & mFlagged .~ True)
-          -- deleting here is tricky, because it means that we need to
-          -- move the focus somewhere: we'll try moving it _up_ unless
-          -- we can't, in which case we'll try moving it down.
-          | otherwise -> do
-              selId <- use (csPostListOverlay.postListSelected)
-              posts <- use (csPostListOverlay.postListPosts)
-              let nextId = case getNextPostId selId posts of
-                    Nothing -> getPrevPostId selId posts
-                    Just x  -> Just x
-              csPostListOverlay.postListSelected .= nextId
-              csPostListOverlay.postListPosts %=
-                filterMessages (((/=) `on` _mMessageId) msg)
-        _ -> return ()
+
+      let mTId = chan^.ccInfo.cdTeamId
+          updatePostOverlay :: TeamId -> MH ()
+          updatePostOverlay tId = do
+              -- We also want to update the post overlay if this happens
+              -- while we're we're observing it
+              mode <- use (csTeam tId.tsMode)
+              case mode of
+                PostListOverlay PostListFlagged
+                  | f ->
+                      csTeam tId.tsPostListOverlay.postListPosts %=
+                        addMessage (msg & mFlagged .~ True)
+
+                  -- deleting here is tricky, because it means that we
+                  -- need to move the focus somewhere: we'll try moving
+                  -- it _up_ unless we can't, in which case we'll try
+                  -- moving it down.
+                  | otherwise -> do
+                      selId <- use (csTeam tId.tsPostListOverlay.postListSelected)
+                      posts <- use (csTeam tId.tsPostListOverlay.postListPosts)
+                      let nextId = case getNextPostId selId posts of
+                            Nothing -> getPrevPostId selId posts
+                            Just x  -> Just x
+                      csTeam tId.tsPostListOverlay.postListSelected .= nextId
+                      csTeam tId.tsPostListOverlay.postListPosts %=
+                        filterMessages (((/=) `on` _mMessageId) msg)
+                _ -> return ()
+
+      case mTId of
+          Nothing -> do
+              ts <- use csTeams
+              forM_ (HM.keys ts) updatePostOverlay
+          Just tId -> updatePostOverlay tId
+
     _ -> return ()
diff --git a/src/Matterhorn/State/Help.hs b/src/Matterhorn/State/Help.hs
--- a/src/Matterhorn/State/Help.hs
+++ b/src/Matterhorn/State/Help.hs
@@ -13,7 +13,7 @@
 
 showHelpScreen :: HelpTopic -> MH ()
 showHelpScreen topic = do
-    curMode <- gets appMode
+    curMode <- use (csCurrentTeam.tsMode)
     case curMode of
         ShowHelp {} -> return ()
         _ -> do
diff --git a/src/Matterhorn/State/MessageSelect.hs b/src/Matterhorn/State/MessageSelect.hs
--- a/src/Matterhorn/State/MessageSelect.hs
+++ b/src/Matterhorn/State/MessageSelect.hs
@@ -54,9 +54,9 @@
 
 getSelectedMessage :: ChatState -> Maybe Message
 getSelectedMessage st
-    | not (appMode st `elem` messageSelectCompatibleModes) = Nothing
+    | not (st^.csCurrentTeam.tsMode `elem` messageSelectCompatibleModes) = Nothing
     | otherwise = do
-        selMsgId <- selectMessageId $ st^.csMessageSelect
+        selMsgId <- selectMessageId $ st^.csCurrentTeam.tsMessageSelect
         let chanMsgs = st ^. csCurrentChannel . ccContents . cdMessages
         findMessage selMsgId chanMsgs
 
@@ -74,7 +74,7 @@
 
     when (isJust recentMsg) $ do
         setMode MessageSelect
-        csMessageSelect .= MessageSelectState (recentMsg >>= _mMessageId)
+        csCurrentTeam.tsMessageSelect .= MessageSelectState (recentMsg >>= _mMessageId)
 
 -- | Tell the server that the message we currently have selected
 -- should have its flagged state toggled.
@@ -111,14 +111,16 @@
   selected <- use (to getSelectedMessage)
   case selected of
     Just msg
-      | isGap msg -> do cId <- use csCurrentChannelId
+      | isGap msg -> do tId <- use csCurrentTeamId
+                        cId <- use (csCurrentChannelId tId)
                         asyncFetchMessagesForGap cId msg
     _        -> return ()
 
 viewMessage :: Message -> MH ()
 viewMessage m = do
-    let w = tabbedWindow VMTabMessage viewMessageWindowTemplate MessageSelect (78, 25)
-    csViewedMessage .= Just (m, w)
+    tId <- use csCurrentTeamId
+    let w = tabbedWindow VMTabMessage (viewMessageWindowTemplate tId) MessageSelect (78, 25)
+    csCurrentTeam.tsViewedMessage .= Just (m, w)
     runTabShowHandlerFor (twValue w) w
     setMode ViewMessage
 
@@ -168,23 +170,23 @@
 
 messageSelectUp :: MH ()
 messageSelectUp = do
-    mode <- gets appMode
-    selected <- use (csMessageSelect.to selectMessageId)
+    mode <- use (csCurrentTeam.tsMode)
+    selected <- use (csCurrentTeam.tsMessageSelect.to selectMessageId)
     case selected of
         Just _ | mode == MessageSelect -> do
             chanMsgs <- use (csCurrentChannel.ccContents.cdMessages)
             let nextMsgId = getPrevMessageId selected chanMsgs
-            csMessageSelect .= MessageSelectState (nextMsgId <|> selected)
+            csCurrentTeam.tsMessageSelect .= MessageSelectState (nextMsgId <|> selected)
         _ -> return ()
 
 messageSelectDown :: MH ()
 messageSelectDown = do
-    selected <- use (csMessageSelect.to selectMessageId)
+    selected <- use (csCurrentTeam.tsMessageSelect.to selectMessageId)
     case selected of
         Just _ -> whenMode MessageSelect $ do
             chanMsgs <- use (csCurrentChannel.ccContents.cdMessages)
             let nextMsgId = getNextMessageId selected chanMsgs
-            csMessageSelect .= MessageSelectState (nextMsgId <|> selected)
+            csCurrentTeam.tsMessageSelect .= MessageSelectState (nextMsgId <|> selected)
         _ -> return ()
 
 messageSelectDownBy :: Int -> MH ()
@@ -201,25 +203,25 @@
 
 messageSelectFirst :: MH ()
 messageSelectFirst = do
-    selected <- use (csMessageSelect.to selectMessageId)
+    selected <- use (csCurrentTeam.tsMessageSelect.to selectMessageId)
     case selected of
         Just _ -> whenMode MessageSelect $ do
             chanMsgs <- use (csCurrentChannel.ccContents.cdMessages)
             case getEarliestSelectableMessage chanMsgs of
               Just firstMsg ->
-                csMessageSelect .= MessageSelectState (firstMsg^.mMessageId <|> selected)
+                csCurrentTeam.tsMessageSelect .= MessageSelectState (firstMsg^.mMessageId <|> selected)
               Nothing -> mhLog LogError "No first message found from current message?!"
         _ -> return ()
 
 messageSelectLast :: MH ()
 messageSelectLast = do
-    selected <- use (csMessageSelect.to selectMessageId)
+    selected <- use (csCurrentTeam.tsMessageSelect.to selectMessageId)
     case selected of
         Just _ -> whenMode MessageSelect $ do
             chanMsgs <- use (csCurrentChannel.ccContents.cdMessages)
             case getLatestSelectableMessage chanMsgs of
               Just lastSelMsg ->
-                csMessageSelect .= MessageSelectState (lastSelMsg^.mMessageId <|> selected)
+                csCurrentTeam.tsMessageSelect .= MessageSelectState (lastSelMsg^.mMessageId <|> selected)
               Nothing -> mhLog LogError "No last message found from current message?!"
         _ -> return ()
 
@@ -227,7 +229,8 @@
 deleteSelectedMessage = do
     selectedMessage <- use (to getSelectedMessage)
     st <- use id
-    cId <- use csCurrentChannelId
+    tId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId tId)
     case selectedMessage of
         Just msg | isMine st msg && isDeletable msg ->
             case msg^.mOriginalPost of
@@ -235,7 +238,7 @@
                   doAsyncChannelMM Preempt cId
                       (\s _ -> MM.mmDeletePost (postId p) s)
                       (\_ _ -> Just $ do
-                          csEditState.cedEditMode .= NewPost
+                          csCurrentTeam.tsEditState.cedEditMode .= NewPost
                           setMode Main)
               Nothing -> return ()
         _ -> return ()
@@ -248,7 +251,7 @@
             rootMsg <- getReplyRootMessage msg
             let Just p = rootMsg^.mOriginalPost
             setMode Main
-            csEditState.cedEditMode .= Replying rootMsg p
+            csCurrentTeam.tsEditState.cedEditMode .= Replying rootMsg p
         _ -> return ()
 
 beginEditMessage :: MH ()
@@ -259,7 +262,7 @@
         Just msg | isMine st msg && isEditable msg -> do
             let Just p = msg^.mOriginalPost
             setMode Main
-            csEditState.cedEditMode .= Editing p (msg^.mType)
+            csCurrentTeam.tsEditState.cedEditMode .= Editing p (msg^.mType)
             -- If the post that we're editing is an emote, we need
             -- to strip the formatting because that's only there to
             -- indicate that the post is an emote. This is annoying and
@@ -271,7 +274,7 @@
             let toEdit = if isEmote msg
                          then removeEmoteFormatting sanitized
                          else sanitized
-            csEditState.cedEditor %= applyEdit (insertMany toEdit . clearZipper)
+            csCurrentTeam.tsEditState.cedEditor %= applyEdit (insertMany toEdit . clearZipper)
         _ -> return ()
 
 -- | Tell the server that we have flagged or unflagged a message.
diff --git a/src/Matterhorn/State/Messages.hs b/src/Matterhorn/State/Messages.hs
--- a/src/Matterhorn/State/Messages.hs
+++ b/src/Matterhorn/State/Messages.hs
@@ -151,22 +151,27 @@
 editMessage :: Post -> MH ()
 editMessage new = do
     myId <- gets myUserId
-    baseUrl <- getServerBaseUrl
-    let isEditedMessage m = m^.mMessageId == Just (MessagePostId $ new^.postIdL)
-        (msg, mentionedUsers) = clientPostToMessage (toClientPost baseUrl new (new^.postRootIdL))
-        chan = csChannel (new^.postChannelIdL)
-    chan . ccContents . cdMessages . traversed . filtered isEditedMessage .= msg
-    mh $ invalidateCacheEntry (ChannelMessages $ new^.postChannelIdL)
+    withChannel (new^.postChannelIdL) $ \chan -> do
+        let mTId = chan^.ccInfo.cdTeamId
+        mBaseUrl <- case mTId of
+            Nothing -> return Nothing
+            Just tId -> Just <$> getServerBaseUrl tId
 
-    fetchMentionedUsers mentionedUsers
+        let (msg, mentionedUsers) = clientPostToMessage (toClientPost mBaseUrl new (new^.postRootIdL))
+            isEditedMessage m = m^.mMessageId == Just (MessagePostId $ new^.postIdL)
 
-    when (postUserId new /= Just myId) $
-        chan %= adjustEditedThreshold new
+        csChannel (new^.postChannelIdL) . ccContents . cdMessages . traversed . filtered isEditedMessage .= msg
+        mh $ invalidateCacheEntry (ChannelMessages $ new^.postChannelIdL)
 
-    csPostMap.ix(postId new) .= msg
-    asyncFetchReactionsForPost (postChannelId new) new
-    asyncFetchAttachments new
+        fetchMentionedUsers mentionedUsers
 
+        when (postUserId new /= Just myId) $
+            csChannel (new^.postChannelIdL) %= adjustEditedThreshold new
+
+        csPostMap.ix(postId new) .= msg
+        asyncFetchReactionsForPost (postChannelId new) new
+        asyncFetchAttachments new
+
 deleteMessage :: Post -> MH ()
 deleteMessage new = do
     let isDeletedMessage m = m^.mMessageId == Just (MessagePostId $ new^.postIdL) ||
@@ -210,6 +215,7 @@
     -- case the new block should be surrounded by UnknownGaps.
     withChannelOrDefault cId NoAction $ \chan -> do
         let pIdList = toList (posts^.postsOrderL)
+            mTId = chan^.ccInfo.cdTeamId
             -- the first and list PostId in the batch to be added
             earliestPId = last pIdList
             latestPId = head pIdList
@@ -300,7 +306,7 @@
         -- usernames in the text of the messages which we need to use to
         -- submit a single batch request for user metadata so we don't
         -- submit one request per mention.
-        void $ installMessagesFromPosts posts
+        void $ installMessagesFromPosts mTId posts
 
         -- Add all the new *unique* posts into the existing channel
         -- corpus, generating needed fetches of data associated with
@@ -338,82 +344,88 @@
           csChannels %= modifyChannelById cId
             (ccContents.cdMessages .~ resultMessages)
 
-          -- Determine if the current selected message was one of the
-          -- removed messages.
+          let processTeam tId = do
+                -- Determine if the current selected message was one of the
+                -- removed messages.
+                selMsgId <- use (csTeam(tId).tsMessageSelect.to selectMessageId)
+                let rmvdSel = do
+                      i <- selMsgId -- :: Maybe MessageId
+                      findMessage i removedMessages
+                    rmvdSelType = _mType <$> rmvdSel
 
-          selMsgId <- use (csMessageSelect.to selectMessageId)
-          let rmvdSel = do
-                i <- selMsgId -- :: Maybe MessageId
-                findMessage i removedMessages
-              rmvdSelType = _mType <$> rmvdSel
+                case rmvdSel of
+                  Nothing -> return ()
+                  Just rm ->
+                    if isGap rm
+                    then return ()  -- handled during gap insertion below
+                    else do
+                      -- Replaced a selected message that wasn't a gap.
+                      -- This is unlikely, but may occur if the previously
+                      -- selected message was just deleted by another user
+                      -- and is in the fetched region.  The choices here are
+                      -- to move the selection, or cancel the selection.
+                      -- Both will be unpleasant surprises for the user, but
+                      -- cancelling the selection is probably the better
+                      -- choice than allowing the user to perform select
+                      -- actions on a message that isn't the one they just
+                      -- selected.
+                      setMode Main
+                      csTeam(tId).tsMessageSelect .= MessageSelectState Nothing
 
-          case rmvdSel of
-            Nothing -> return ()
-            Just rm ->
-              if isGap rm
-              then return ()  -- handled during gap insertion below
-              else do
-                -- Replaced a selected message that wasn't a gap.
-                -- This is unlikely, but may occur if the previously
-                -- selected message was just deleted by another user
-                -- and is in the fetched region.  The choices here are
-                -- to move the selection, or cancel the selection.
-                -- Both will be unpleasant surprises for the user, but
-                -- cancelling the selection is probably the better
-                -- choice than allowing the user to perform select
-                -- actions on a message that isn't the one they just
-                -- selected.
-                setMode Main
-                csMessageSelect .= MessageSelectState Nothing
+                -- Add a gap at each end of the newly fetched data, unless:
+                --   1. there is an overlap
+                --   2. there is no more in the indicated direction
+                --      a. indicated by adding messages later than any currently
+                --         held messages (see note above re 'addingAtEnd').
+                --      b. the amount returned was less than the amount requested
 
-          -- Add a gap at each end of the newly fetched data, unless:
-          --   1. there is an overlap
-          --   2. there is no more in the indicated direction
-          --      a. indicated by adding messages later than any currently
-          --         held messages (see note above re 'addingAtEnd').
-          --      b. the amount returned was less than the amount requested
+                if reAddGapBefore
+                  then
+                    -- No more gaps.  If the selected gap was removed, move
+                    -- select to first (earliest) message)
+                    case rmvdSelType of
+                      Just (C UnknownGapBefore) ->
+                        csTeam(tId).tsMessageSelect .= MessageSelectState (pure $ MessagePostId earliestPId)
+                      _ -> return ()
+                  else do
+                    -- add a gap at the start of the newly fetched block and
+                    -- make that the active selection if this fetch removed
+                    -- the previously selected gap in this direction.
+                    gapMsg <- newGapMessage (justBefore earliestDate) True
+                    csChannels %= modifyChannelById cId
+                      (ccContents.cdMessages %~ addMessage gapMsg)
+                    -- Move selection from old gap to new gap
+                    case rmvdSelType of
+                      Just (C UnknownGapBefore) -> do
+                        csTeam(tId).tsMessageSelect .= MessageSelectState (gapMsg^.mMessageId)
+                      _ -> return ()
 
-          if reAddGapBefore
-            then
-              -- No more gaps.  If the selected gap was removed, move
-              -- select to first (earliest) message)
-              case rmvdSelType of
-                Just (C UnknownGapBefore) ->
-                  csMessageSelect .= MessageSelectState (pure $ MessagePostId earliestPId)
-                _ -> return ()
-            else do
-              -- add a gap at the start of the newly fetched block and
-              -- make that the active selection if this fetch removed
-              -- the previously selected gap in this direction.
-              gapMsg <- newGapMessage (justBefore earliestDate) True
-              csChannels %= modifyChannelById cId
-                (ccContents.cdMessages %~ addMessage gapMsg)
-              -- Move selection from old gap to new gap
-              case rmvdSelType of
-                Just (C UnknownGapBefore) -> do
-                  csMessageSelect .= MessageSelectState (gapMsg^.mMessageId)
-                _ -> return ()
+                if reAddGapAfter
+                  then
+                    -- No more gaps.  If the selected gap was removed, move
+                    -- select to last (latest) message.
+                    case rmvdSelType of
+                      Just (C UnknownGapAfter) ->
+                        csTeam(tId).tsMessageSelect .= MessageSelectState (pure $ MessagePostId latestPId)
+                      _ -> return ()
+                  else do
+                    -- add a gap at the end of the newly fetched block and
+                    -- make that the active selection if this fetch removed
+                    -- the previously selected gap in this direction.
+                    gapMsg <- newGapMessage (justAfter latestDate) False
+                    csChannels %= modifyChannelById cId
+                      (ccContents.cdMessages %~ addMessage gapMsg)
+                    -- Move selection from old gap to new gap
+                    case rmvdSelType of
+                      Just (C UnknownGapAfter) ->
+                        csTeam(tId).tsMessageSelect .= MessageSelectState (gapMsg^.mMessageId)
+                      _ -> return ()
 
-          if reAddGapAfter
-            then
-              -- No more gaps.  If the selected gap was removed, move
-              -- select to last (latest) message.
-              case rmvdSelType of
-                Just (C UnknownGapAfter) ->
-                  csMessageSelect .= MessageSelectState (pure $ MessagePostId latestPId)
-                _ -> return ()
-            else do
-              -- add a gap at the end of the newly fetched block and
-              -- make that the active selection if this fetch removed
-              -- the previously selected gap in this direction.
-              gapMsg <- newGapMessage (justAfter latestDate) False
-              csChannels %= modifyChannelById cId
-                (ccContents.cdMessages %~ addMessage gapMsg)
-              -- Move selection from old gap to new gap
-              case rmvdSelType of
-                Just (C UnknownGapAfter) ->
-                  csMessageSelect .= MessageSelectState (gapMsg^.mMessageId)
-                _ -> return ()
+          case mTId of
+              Nothing -> do
+                  ts <- use csTeams
+                  forM_ (HM.keys ts) processTeam
+              Just tId -> processTeam tId
 
         -- Now initiate fetches for use information for any
         -- as-yet-unknown users related to this new set of messages
@@ -498,9 +510,13 @@
                             postProcessMessageAdd
 
             return NoAction
-        Just _ -> do
-            baseUrl <- getServerBaseUrl
-            let cp = toClientPost baseUrl new (new^.postRootIdL)
+        Just ch -> do
+            let mTId = ch^.ccInfo.cdTeamId
+            mBaseUrl <- case mTId of
+                Nothing -> return Nothing
+                Just tId -> Just <$> getServerBaseUrl tId
+
+            let cp = toClientPost mBaseUrl new (new^.postRootIdL)
                 fromMe = (cp^.cpUser == (Just $ myUserId st)) &&
                          (isNothing $ cp^.cpUserOverride)
                 userPrefs = st^.csResources.crUserPreferences
@@ -521,7 +537,8 @@
                             when (isNothing authorResult) $
                                 handleNewUsers (Seq.singleton authorId) (return ())
 
-                    currCId <- use csCurrentChannelId
+                    curTId <- use csCurrentTeamId
+                    currCId <- use (csCurrentChannelId curTId)
                     flags <- use (csResources.crFlaggedPosts)
                     let (msg', mentionedUsers) = clientPostToMessage cp
                                  & _1.mFlagged .~ ((cp^.cpPostId) `Set.member` flags)
@@ -560,7 +577,7 @@
                                 Nothing -> do
                                     doAsyncChannelMM Preempt cId
                                         (\s _ -> MM.mmGetThread parentId s)
-                                        (\_ p -> Just $ updatePostMap p)
+                                        (\_ p -> Just $ updatePostMap mTId p)
                                 _ -> return ()
                         _ -> return ()
 
@@ -568,7 +585,8 @@
 
                 postedChanMessage =
                   withChannelOrDefault (postChannelId new) NoAction $ \chan -> do
-                      currCId <- use csCurrentChannelId
+                      currTid <- use csCurrentTeamId
+                      currCId <- use (csCurrentChannelId currTid)
 
                       let notifyPref = notifyPreference (myUser st) chan
                           curChannelAction = if postChannelId new == currCId
@@ -627,7 +645,7 @@
 
 maybeRingBell :: MH ()
 maybeRingBell = do
-    doBell <- use (csResources.crConfiguration.to configActivityBell)
+    doBell <- use (csResources.crConfiguration.configActivityBellL)
     when doBell $ do
         vty <- mh getVtyHandle
         liftIO $ ringTerminalBell $ outputIface vty
@@ -651,7 +669,7 @@
 runNotifyCommand post mentioned = do
     outputChan <- use (csResources.crSubprocessLog)
     st <- use id
-    notifyCommand <- use (csResources.crConfiguration.to configActivityNotifyCommand)
+    notifyCommand <- use (csResources.crConfiguration.configActivityNotifyCommandL)
     case notifyCommand of
         Nothing -> return ()
         Just cmd ->
@@ -704,7 +722,8 @@
 -- channels and empty channels.
 asyncFetchMoreMessages :: MH ()
 asyncFetchMoreMessages = do
-    cId  <- use csCurrentChannelId
+    tId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId tId)
     withChannel cId $ \chan ->
         let offset = max 0 $ length (chan^.ccContents.cdMessages) - 2
             page = offset `div` pageAmount
@@ -829,7 +848,8 @@
 fetchVisibleIfNeeded = do
     sts <- use csConnectionStatus
     when (sts == Connected) $ do
-        cId <- use csCurrentChannelId
+        tId <- use csCurrentTeamId
+        cId <- use (csCurrentChannelId tId)
         withChannel cId $ \chan ->
             let msgs = chan^.ccContents.cdMessages.to reverseMessages
                 (numRemaining, gapInDisplayable, _, rel'pId, overlap) =
@@ -904,7 +924,7 @@
                   Just _ -> do
                       setFocus cId
                       setMode MessageSelect
-                      csMessageSelect .= MessageSelectState (msg^.mMessageId)
+                      csCurrentTeam.tsMessageSelect .= MessageSelectState (msg^.mMessageId)
           Nothing ->
             error "INTERNAL: selected Post ID not associated with a channel"
       Nothing -> do
diff --git a/src/Matterhorn/State/NotifyPrefs.hs b/src/Matterhorn/State/NotifyPrefs.hs
--- a/src/Matterhorn/State/NotifyPrefs.hs
+++ b/src/Matterhorn/State/NotifyPrefs.hs
@@ -10,6 +10,7 @@
 import Matterhorn.Prelude
 
 import Network.Mattermost.Types ( ChannelNotifyProps
+                                , TeamId
                                 , User(..)
                                 , UserNotifyProps(..)
                                 , Type(..)
@@ -61,14 +62,14 @@
                                   ]
     in radioField l (defaultField : nonDefault)
 
-notifyPrefsForm :: UserNotifyProps -> ChannelNotifyProps -> Form ChannelNotifyProps e Name
-notifyPrefsForm globalDefaults =
-    newForm [ checkboxField muteLens MuteToggleField "Mute channel"
-            , (padTop $ Pad 1) @@= checkboxField channelMentionLens ChannelMentionsField "Ignore channel mentions"
+notifyPrefsForm :: TeamId -> UserNotifyProps -> ChannelNotifyProps -> Form ChannelNotifyProps e Name
+notifyPrefsForm tId globalDefaults =
+    newForm [ checkboxField muteLens (MuteToggleField tId) "Mute channel"
+            , (padTop $ Pad 1) @@= checkboxField channelMentionLens (ChannelMentionsField tId) "Ignore channel mentions"
             , radioStyle "Desktop notifications" @@=
-                mkNotifyButtons DesktopNotificationsField channelNotifyPropsDesktopL (userNotifyPropsDesktop globalDefaults)
+                mkNotifyButtons (DesktopNotificationsField tId) channelNotifyPropsDesktopL (userNotifyPropsDesktop globalDefaults)
             , radioStyle "Push notifications" @@=
-                mkNotifyButtons PushNotificationsField channelNotifyPropsPushL (userNotifyPropsPush globalDefaults)
+                mkNotifyButtons (PushNotificationsField tId) channelNotifyPropsPushL (userNotifyPropsPush globalDefaults)
             ]
     where radioStyle label = (padTop $ Pad 1 ) . (str label <=>) . (padLeft $ Pad 1)
 
@@ -80,7 +81,8 @@
       _ -> do
         let props = chanInfo^.cdNotifyProps
         user <- use csMe
-        csNotifyPrefs .= (Just (notifyPrefsForm (userNotifyProps user) props))
+        tId <- use csCurrentTeamId
+        csCurrentTeam.tsNotifyPrefs .= (Just (notifyPrefsForm tId (userNotifyProps user) props))
         setMode EditNotifyPrefs
 
 exitEditNotifyPrefsMode :: MH ()
diff --git a/src/Matterhorn/State/PostListOverlay.hs b/src/Matterhorn/State/PostListOverlay.hs
--- a/src/Matterhorn/State/PostListOverlay.hs
+++ b/src/Matterhorn/State/PostListOverlay.hs
@@ -33,11 +33,11 @@
 -- with a specified list of messages.
 enterPostListMode ::  PostListContents -> Messages -> MH ()
 enterPostListMode contents msgs = do
-  csPostListOverlay.postListPosts .= msgs
+  csCurrentTeam.tsPostListOverlay.postListPosts .= msgs
   let mlatest = getLatestPostMsg msgs
       pId = mlatest >>= messagePostId
       cId = mlatest >>= \m -> m^.mChannelId
-  csPostListOverlay.postListSelected .= pId
+  csCurrentTeam.tsPostListOverlay.postListSelected .= pId
   setMode $ PostListOverlay contents
   case (pId, cId) of
     (Just p, Just c) -> asyncFetchMessagesSurrounding c p
@@ -46,18 +46,18 @@
 -- | Clear out the state of a PostListOverlay
 exitPostListMode :: MH ()
 exitPostListMode = do
-  csPostListOverlay.postListPosts .= emptyDirSeq
-  csPostListOverlay.postListSelected .= Nothing
+  csCurrentTeam.tsPostListOverlay.postListPosts .= emptyDirSeq
+  csCurrentTeam.tsPostListOverlay.postListSelected .= Nothing
   setMode Main
 
 
-createPostList :: PostListContents -> (Session -> IO Posts) -> MH ()
-createPostList contentsType fetchOp = do
+createPostList :: TeamId -> PostListContents -> (Session -> IO Posts) -> MH ()
+createPostList tId contentsType fetchOp = do
   session <- getSession
   doAsyncWith Preempt $ do
     posts <- fetchOp session
     return $ Just $ do
-      messages <- installMessagesFromPosts posts
+      messages <- installMessagesFromPosts (Just tId) posts
       -- n.b. do not use addNewPostedMessage because these messages
       -- are not new, and so no notifications or channel highlighting
       -- or other post-processing should be performed.
@@ -71,15 +71,18 @@
 
 -- | Create a PostListOverlay with flagged messages from the server.
 enterFlaggedPostListMode :: MH ()
-enterFlaggedPostListMode = createPostList PostListFlagged $
-                           mmGetListOfFlaggedPosts UserMe defaultFlaggedPostsQuery
+enterFlaggedPostListMode = do
+    tId <- use csCurrentTeamId
+    createPostList tId PostListFlagged $
+        mmGetListOfFlaggedPosts UserMe defaultFlaggedPostsQuery
 
 -- | Create a PostListOverlay with pinned messages from the server for
 -- the current channel.
 enterPinnedPostListMode :: MH ()
 enterPinnedPostListMode = do
-    cId <- use csCurrentChannelId
-    createPostList (PostListPinned cId) $ mmGetChannelPinnedPosts cId
+    tId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId tId)
+    createPostList tId (PostListPinned cId) $ mmGetChannelPinnedPosts cId
 
 -- | Create a PostListOverlay with post search result messages from the
 -- server.
@@ -88,8 +91,8 @@
   | T.null (T.strip terms) = postInfoMessage "Search command requires at least one search term."
   | otherwise = do
       enterPostListMode (PostListSearch terms True) noMessages
-      tId <- gets myTeamId
-      createPostList (PostListSearch terms False) $
+      tId <- use csCurrentTeamId
+      createPostList tId (PostListSearch terms False) $
         mmSearchForTeamPosts tId (SearchPosts terms False)
 
 
@@ -97,14 +100,14 @@
 -- to finding a chronologically /newer/ message.
 postListSelectUp :: MH ()
 postListSelectUp = do
-  selId <- use (csPostListOverlay.postListSelected)
-  posts <- use (csPostListOverlay.postListPosts)
+  selId <- use (csCurrentTeam.tsPostListOverlay.postListSelected)
+  posts <- use (csCurrentTeam.tsPostListOverlay.postListPosts)
   let nextMsg = getNextMessage (MessagePostId <$> selId) posts
   case nextMsg of
     Nothing -> return ()
     Just m -> do
       let pId = m^.mMessageId >>= messageIdPostId
-      csPostListOverlay.postListSelected .= pId
+      csCurrentTeam.tsPostListOverlay.postListSelected .= pId
       case (m^.mChannelId, pId) of
         (Just c, Just p) -> asyncFetchMessagesSurrounding c p
         o -> mhLog LogError
@@ -115,14 +118,14 @@
 -- to finding a chronologically /old/ message.
 postListSelectDown :: MH ()
 postListSelectDown = do
-  selId <- use (csPostListOverlay.postListSelected)
-  posts <- use (csPostListOverlay.postListPosts)
+  selId <- use (csCurrentTeam.tsPostListOverlay.postListSelected)
+  posts <- use (csCurrentTeam.tsPostListOverlay.postListPosts)
   let prevMsg = getPrevMessage (MessagePostId <$> selId) posts
   case prevMsg of
     Nothing -> return ()
     Just m -> do
       let pId = m^.mMessageId >>= messageIdPostId
-      csPostListOverlay.postListSelected .= pId
+      csCurrentTeam.tsPostListOverlay.postListSelected .= pId
       case (m^.mChannelId, pId) of
         (Just c, Just p) -> asyncFetchMessagesSurrounding c p
         o -> mhLog LogError
@@ -132,7 +135,7 @@
 -- | Unflag the post currently selected in the PostListOverlay, if any
 postListUnflagSelected :: MH ()
 postListUnflagSelected = do
-  msgId <- use (csPostListOverlay.postListSelected)
+  msgId <- use (csCurrentTeam.tsPostListOverlay.postListSelected)
   case msgId of
     Nothing  -> return ()
     Just pId -> flagMessage pId False
@@ -142,7 +145,7 @@
 -- display and changes to MessageSelectState.
 postListJumpToCurrent :: MH ()
 postListJumpToCurrent = do
-  msgId <- use (csPostListOverlay.postListSelected)
+  msgId <- use (csCurrentTeam.tsPostListOverlay.postListSelected)
   case msgId of
     Nothing  -> return ()
     Just pId -> jumpToPost pId
diff --git a/src/Matterhorn/State/ReactionEmojiListOverlay.hs b/src/Matterhorn/State/ReactionEmojiListOverlay.hs
--- a/src/Matterhorn/State/ReactionEmojiListOverlay.hs
+++ b/src/Matterhorn/State/ReactionEmojiListOverlay.hs
@@ -37,9 +37,10 @@
     case selectedMessage of
         Nothing -> return ()
         Just msg -> do
+            tId <- use csCurrentTeamId
             em <- use (csResources.crEmoji)
             myId <- gets myUserId
-            enterListOverlayMode csReactionEmojiListOverlay ReactionEmojiListOverlay
+            enterListOverlayMode (csTeam(tId).tsReactionEmojiListOverlay) ReactionEmojiListOverlay
                 () enterHandler (fetchResults myId msg em)
 
 enterHandler :: (Bool, T.Text) -> MH Bool
@@ -118,7 +119,7 @@
 -- cursor, and then check to see whether the modification warrants a
 -- prefetch of more search results.
 reactionEmojiListMove :: (L.List Name (Bool, T.Text) -> L.List Name (Bool, T.Text)) -> MH ()
-reactionEmojiListMove = listOverlayMove csReactionEmojiListOverlay
+reactionEmojiListMove = listOverlayMove (csCurrentTeam.tsReactionEmojiListOverlay)
 
 -- | The number of emoji in a "page" for cursor movement purposes.
 reactionEmojiListPageSize :: Int
diff --git a/src/Matterhorn/State/Setup.hs b/src/Matterhorn/State/Setup.hs
--- a/src/Matterhorn/State/Setup.hs
+++ b/src/Matterhorn/State/Setup.hs
@@ -10,8 +10,9 @@
 import           Brick.BChan ( newBChan )
 import           Brick.Themes ( themeToAttrMap, loadCustomizations )
 import qualified Control.Concurrent.STM as STM
+import qualified Data.Foldable as F
+import qualified Data.HashMap.Strict as HM
 import           Data.Maybe ( fromJust )
-import qualified Data.Sequence as Seq
 import qualified Data.Text as T
 import           Data.Time.Clock ( getCurrentTime )
 import qualified Graphics.Vty as Vty
@@ -24,19 +25,16 @@
 
 import           Matterhorn.Config
 import           Matterhorn.InputHistory
-import           Matterhorn.LastRunState
 import           Matterhorn.Login
 import           Matterhorn.State.Flagging
-import           Matterhorn.State.Messages ( fetchVisibleIfNeeded )
+import           Matterhorn.State.Teams ( buildTeamState )
 import           Matterhorn.State.Setup.Threads
-import           Matterhorn.TeamSelect
 import           Matterhorn.Themes
 import           Matterhorn.TimeUtils ( lookupLocalTimeZone )
 import           Matterhorn.Types
 import           Matterhorn.Types.Common
 import           Matterhorn.Emoji
 import           Matterhorn.FilePaths ( userEmojiJsonPath, bundledEmojiJsonPath )
-import qualified Matterhorn.Zipper as Z
 
 
 incompleteCredentials :: Config -> ConnectionInfo
@@ -103,25 +101,15 @@
           -- with setup.
           return (sess, user, cd, mbTeam)
 
-  teams <- mmGetUsersTeams UserMe session
-  when (Seq.null teams) $ do
+  teams <- F.toList <$> mmGetUsersTeams UserMe session
+  when (null teams) $ do
       putStrLn "Error: your account is not a member of any teams"
       exitFailure
 
-  (myTeam, teamSelVty) <- do
-      let foundTeam = do
-             tName <- mbTeam <|> configTeam config
-             let matchingTeam = listToMaybe $ filter matches $ toList teams
-                 matches t = (sanitizeUserText $ teamName t) == tName
-             matchingTeam
-
-      case foundTeam of
-          Just t -> return (t, loginVty)
-          Nothing -> do
-              (mTeam, vty) <- interactiveTeamSelection loginVty mkVty $ toList teams
-              case mTeam of
-                  Nothing -> shutdown vty
-                  Just team -> return (team, vty)
+  let initialTeamId = fromMaybe (teamId $ head $ sortTeams teams) $ do
+          tName <- mbTeam <|> configTeam config
+          let matchingTeam = listToMaybe $ filter (matchesTeam tName) teams
+          teamId <$> matchingTeam
 
   userStatusChan <- STM.newTChanIO
   slc <- STM.newTChanIO
@@ -151,7 +139,7 @@
                  result <- loadCustomizations absPath baseTheme
                  case result of
                      Left e -> do
-                         Vty.shutdown teamSelVty
+                         Vty.shutdown loginVty
                          putStrLn $ "Error loading theme customization from " <> show absPath <> ": " <> e
                          exitFailure
                      Right t -> return t
@@ -181,43 +169,23 @@
                          , _crEmoji               = emoji
                          }
 
-  st <- initializeState cr myTeam me
+  st <- initializeState cr initialTeamId teams me
 
-  return (st, teamSelVty)
+  return (st, loginVty)
 
-initializeState :: ChatResources -> Team -> User -> IO ChatState
-initializeState cr myTeam me = do
+matchesTeam :: T.Text -> Team -> Bool
+matchesTeam tName t =
+    let normalizeUserText = normalize . sanitizeUserText
+        normalize = T.strip . T.toLower
+        urlName = normalizeUserText $ teamName t
+        displayName = normalizeUserText $ teamDisplayName t
+    in normalize tName `elem` [displayName, urlName]
+
+initializeState :: ChatResources -> TeamId -> [Team] -> User -> IO ChatState
+initializeState cr initialTeamId teams me = do
   let session = getResourceSession cr
       requestChan = cr^.crRequestQueue
-      myTId = getId myTeam
 
-  -- Create a predicate to find the last selected channel by reading the
-  -- run state file. If unable to read or decode or validate the file, this
-  -- predicate is just `isTownSquare`.
-  isLastSelectedChannel <- do
-    result <- readLastRunState $ teamId myTeam
-    case result of
-      Right lrs | isValidLastRunState cr me lrs -> return $ \c ->
-           channelId c == lrs^.lrsSelectedChannelId
-      _ -> return isTownSquare
-
-  -- Get all channels, but filter down to just the one we want to start
-  -- in. We get all, rather than requesting by name or ID, because
-  -- we don't know whether the server will give us a last-viewed preference.
-  -- We first try to find a channel matching with the last selected channel ID,
-  -- failing which we look for the Town Square channel by name.
-  userChans <- mmGetChannelsForUser UserMe myTId session
-  let lastSelectedChans = Seq.filter isLastSelectedChannel userChans
-      chans = if Seq.null lastSelectedChans
-                then Seq.filter isTownSquare userChans
-                else lastSelectedChans
-
-  -- Since the only channel we are dealing with is by construction the
-  -- last channel, we don't have to consider other cases here:
-  chanPairs <- forM (toList chans) $ \c -> do
-      cChannel <- makeClientChannel (userId me) c
-      return (getId c, cChannel)
-
   tz <- lookupLocalTimeZone
   hist <- do
       result <- readHistory
@@ -247,35 +215,26 @@
   --  * Subprocess logger
   startSubprocessLoggerThread (cr^.crSubprocessLog) requestChan
 
-  --  * Spell checker and spell check timer, if configured
-  spResult <- maybeStartSpellChecker (cr^.crConfiguration) (cr^.crEventQueue)
-
   -- End thread startup ----------------------------------------------
 
-  now <- getCurrentTime
-  let chanIds = mkChannelZipperList now (cr^.crConfiguration) Nothing (cr^.crUserPreferences) clientChans noUsers
-      chanZip = Z.fromList chanIds
-      clientChans = foldr (uncurry addChannel) noChannels chanPairs
-      startupState =
+  -- For each team, build a team state and load the last-run state.
+  (teamStates, chanLists) <- unzip <$> mapM (buildTeamState cr me) teams
+
+  let startupState =
           StartupStateInfo { startupStateResources      = cr
-                           , startupStateChannelZipper  = chanZip
                            , startupStateConnectedUser  = me
-                           , startupStateTeam           = myTeam
                            , startupStateTimeZone       = tz
                            , startupStateInitialHistory = hist
-                           , startupStateSpellChecker   = spResult
+                           , startupStateInitialTeam    = initialTeamId
+                           , startupStateTeams          = teamMap
                            }
-
-  initialState <- newState startupState
-  let st = initialState & csChannels .~ clientChans
+      clientChans = mconcat chanLists
+      st = newState startupState & csChannels .~ clientChans
+      teamMap = HM.fromList $ (\ts -> (teamId $ _tsTeam ts, ts)) <$> F.toList teamStates
 
   loadFlaggedMessages (cr^.crUserPreferences.userPrefFlaggedPostList) st
 
   -- Trigger an initial websocket refresh
   writeBChan (cr^.crEventQueue) RefreshWebsocketEvent
-
-  -- Refresh initial channel(s)
-  writeBChan (cr^.crEventQueue) $ RespEvent $ do
-      fetchVisibleIfNeeded
 
   return st
diff --git a/src/Matterhorn/State/Teams.hs b/src/Matterhorn/State/Teams.hs
new file mode 100644
--- /dev/null
+++ b/src/Matterhorn/State/Teams.hs
@@ -0,0 +1,217 @@
+module Matterhorn.State.Teams
+  ( nextTeam
+  , prevTeam
+  , handleJoinTeam
+  , handleLeaveTeam
+  , handleUpdateTeam
+  , buildTeamState
+  , moveCurrentTeamLeft
+  , moveCurrentTeamRight
+  )
+where
+
+import           Prelude ()
+import           Matterhorn.Prelude
+
+import           Brick.Main ( invalidateCache )
+import qualified Data.Sequence as Seq
+import qualified Data.Text as T
+import           Data.Time.Clock ( getCurrentTime )
+import qualified Data.HashMap.Strict as HM
+import           Lens.Micro.Platform ( (%=), (.=), at )
+
+import           Network.Mattermost.Lenses ( userIdL )
+import           Network.Mattermost.Types ( TeamId, Team, User, userId
+                                          , getId, channelId, teamId, UserParam(..)
+                                          , teamOrderPref
+                                          )
+import qualified Network.Mattermost.Endpoints as MM
+
+import           Matterhorn.Types
+import           Matterhorn.LastRunState
+import           Matterhorn.State.Async
+import           Matterhorn.State.ChannelList
+import           Matterhorn.State.Channels
+import           Matterhorn.State.Messages
+import           Matterhorn.State.Setup.Threads ( maybeStartSpellChecker )
+import qualified Matterhorn.Zipper as Z
+
+
+-- | Move right in the channel list to select the next team.
+nextTeam :: MH ()
+nextTeam = setTeamFocusWith Z.right
+
+-- | Move left in the channel list to select the previous team.
+prevTeam :: MH ()
+prevTeam = setTeamFocusWith Z.left
+
+-- | Change the selected team with the specified team zipper
+-- transformation. This function also takes care of book-keeping
+-- necessary during team switching.
+setTeamFocusWith :: (Z.Zipper () TeamId -> Z.Zipper () TeamId) -> MH ()
+setTeamFocusWith f = do
+    csTeamZipper %= f
+    postChangeTeamCommon
+
+-- | Book-keeping common to all team selection changes.
+postChangeTeamCommon :: MH ()
+postChangeTeamCommon = do
+    updateViewed False
+    fetchVisibleIfNeeded
+
+-- | Fetch the specified team and add it to the application state.
+--
+-- This is called in response to a server event indicating that the
+-- current user was added to the team.
+handleJoinTeam :: TeamId -> MH ()
+handleJoinTeam tId = do
+    session <- getSession
+    cr <- use csResources
+    me <- use csMe
+
+    mhLog LogGeneral $ T.pack $ "Joining team " <> show tId
+    doAsyncWith Normal $ do
+        t <- MM.mmGetTeam tId session
+        (ts, chans) <- buildTeamState cr me t
+        return $ Just $ do
+            curTs <- use csTeams
+            let myTIds = HM.keys curTs
+            when (not $ tId `elem` myTIds) $ do
+                addTeamState ts chans
+                updateSidebar $ Just tId
+                updateWindowTitle
+                refreshTeamZipper
+
+-- | Remove the specified team to the application state.
+--
+-- This is called in response to a server event indicating that the
+-- current user was removed from the team.
+handleLeaveTeam :: TeamId -> MH ()
+handleLeaveTeam tId =
+    doAsyncWith Normal $ return $ Just $ do
+        mhLog LogGeneral $ T.pack $ "Leaving team " <> show tId
+        removeTeam tId
+        updateWindowTitle
+        -- Invalidating the cache here expunges any cached message
+        -- renderings from the team we are leaving.
+        mh invalidateCache
+
+-- | Fetch the specified team's metadata and update it in the
+-- application state.
+--
+-- This is called in response to a server event indicating that the
+-- specified team was updated in some way.
+handleUpdateTeam :: TeamId -> MH ()
+handleUpdateTeam tId = do
+    session <- getSession
+    mhLog LogGeneral $ T.pack $ "Updating team " <> show tId
+    doAsyncWith Normal $ do
+        t <- MM.mmGetTeam tId session
+        return $ Just $ do
+            updateTeam t
+            -- Invalidate the cache since we happen to know that the
+            -- team name is in the cached sidebar.
+            mh invalidateCache
+
+-- | Set the team zipper ordering with the specified transformation,
+-- which is expected to be either 'moveLeft' or 'moveRight'.
+setTeamOrderWith :: (TeamId -> [TeamId] -> [TeamId]) -> MH ()
+setTeamOrderWith sortFunc = do
+    session <- getSession
+    me <- use csMe
+
+    tId <- use csCurrentTeamId
+    z <- use csTeamZipper
+    let tIds = teamZipperIds z
+        newList = sortFunc tId tIds
+
+    doAsyncWith Normal $ do
+        let pref = teamOrderPref (me^.userIdL) newList
+        MM.mmSaveUsersPreferences UserMe (Seq.singleton pref) session
+        return Nothing
+
+-- | Move the selected team left in the team list.
+moveCurrentTeamLeft :: MH ()
+moveCurrentTeamLeft = setTeamOrderWith moveLeft
+
+-- | Move the selected team right in the team list.
+moveCurrentTeamRight :: MH ()
+moveCurrentTeamRight = setTeamOrderWith moveRight
+
+-- | Build a new 'TeamState' for the specified team.
+--
+-- This function starts a new spell checker thread for the team's
+-- message editor, loads the last-run state for the team (to ensure that
+-- the initially-selected channel is honored), and fetches the channel
+-- metadata for the team.
+--
+-- This returns the resulting team state as well as the channels
+-- associated with the team. The caller is responsible for adding the
+-- channels and the team state to the application state.
+buildTeamState :: ChatResources -> User -> Team -> IO (TeamState, ClientChannels)
+buildTeamState cr me team = do
+    let tId = teamId team
+        session = getResourceSession cr
+
+    -- Create a predicate to find the last selected channel by reading
+    -- the run state file. If unable to read or decode or validate the
+    -- file, this predicate is just `isTownSquare`.
+    isLastSelectedChannel <- do
+        result <- readLastRunState tId
+        case result of
+            Right lrs | isValidLastRunState cr me lrs -> return $ \c ->
+                 channelId c == lrs^.lrsSelectedChannelId
+            _ -> return isTownSquare
+
+    -- Get all channels, but filter down to just the one we want
+    -- to start in. We get all, rather than requesting by name or
+    -- ID, because we don't know whether the server will give us a
+    -- last-viewed preference. We first try to find a channel matching
+    -- with the last selected channel ID, failing which we look for the
+    -- Town Square channel by name.
+    userChans <- MM.mmGetChannelsForUser UserMe tId session
+    let lastSelectedChans = Seq.filter isLastSelectedChannel userChans
+        chans = if Seq.null lastSelectedChans
+                  then Seq.filter isTownSquare userChans
+                  else lastSelectedChans
+
+    -- Since the only channel we are dealing with is by construction the
+    -- last channel, we don't have to consider other cases here:
+    chanPairs <- forM (toList chans) $ \c -> do
+        cChannel <- makeClientChannel (userId me) c
+        return (getId c, cChannel)
+
+    -- Start the spell checker and spell check timer, if configured
+    spResult <- maybeStartSpellChecker (cr^.crConfiguration) (cr^.crEventQueue)
+
+    now <- getCurrentTime
+    let chanIds = mkChannelZipperList now (cr^.crConfiguration) tId
+                                          Nothing (cr^.crUserPreferences)
+                                          clientChans noUsers
+        chanZip = Z.fromList chanIds
+        clientChans = foldr (uncurry addChannel) noChannels chanPairs
+
+    return (newTeamState team chanZip spResult, clientChans)
+
+-- | Add a new 'TeamState' and corresponding channels to the application
+-- state.
+addTeamState :: TeamState -> ClientChannels -> MH ()
+addTeamState ts chans = do
+    let tId = teamId $ _tsTeam ts
+    csTeams.at tId .= Just ts
+    csChannels %= (chans <>)
+
+-- | Update the specified team metadata in the application state (only
+-- if we are already a member of that team).
+updateTeam :: Team -> MH ()
+updateTeam t = do
+    let tId = teamId t
+    ts <- use csTeams
+    when (tId `elem` HM.keys ts) $ do
+        csTeam(tId).tsTeam .= t
+
+-- | Remove the specified team from the application state.
+removeTeam :: TeamId -> MH ()
+removeTeam tId = do
+    csTeams.at tId .= Nothing
+    setTeamFocusWith $ Z.filterZipper (/= tId)
diff --git a/src/Matterhorn/State/ThemeListOverlay.hs b/src/Matterhorn/State/ThemeListOverlay.hs
--- a/src/Matterhorn/State/ThemeListOverlay.hs
+++ b/src/Matterhorn/State/ThemeListOverlay.hs
@@ -31,7 +31,8 @@
 -- request to gather the first search results.
 enterThemeListMode :: MH ()
 enterThemeListMode =
-    enterListOverlayMode csThemeListOverlay ThemeListOverlay () setInternalTheme getThemesMatching
+    enterListOverlayMode (csCurrentTeam.tsThemeListOverlay)
+        ThemeListOverlay () setInternalTheme getThemesMatching
 
 -- | Move the selection up in the user list overlay by one user.
 themeListSelectUp :: MH ()
@@ -55,7 +56,7 @@
 -- cursor, and then check to see whether the modification warrants a
 -- prefetch of more search results.
 themeListMove :: (L.List Name InternalTheme -> L.List Name InternalTheme) -> MH ()
-themeListMove = listOverlayMove csThemeListOverlay
+themeListMove = listOverlayMove (csCurrentTeam.tsThemeListOverlay)
 
 -- | The number of users in a "page" for cursor movement purposes.
 themeListPageSize :: Int
diff --git a/src/Matterhorn/State/UrlSelect.hs b/src/Matterhorn/State/UrlSelect.hs
--- a/src/Matterhorn/State/UrlSelect.hs
+++ b/src/Matterhorn/State/UrlSelect.hs
@@ -22,15 +22,16 @@
 startUrlSelect :: MH ()
 startUrlSelect = do
     urls <- use (csCurrentChannel.to findUrls.to V.fromList)
+    tId <- use csCurrentTeamId
     setMode UrlSelect
-    csUrlList .= (listMoveTo (length urls - 1) $ list UrlList urls 2)
+    csCurrentTeam.tsUrlList .= (listMoveTo (length urls - 1) $ list (UrlList tId) urls 2)
 
 stopUrlSelect :: MH ()
 stopUrlSelect = setMode Main
 
 openSelectedURL :: MH ()
 openSelectedURL = whenMode UrlSelect $ do
-    selected <- use (csUrlList.to listSelectedElement)
+    selected <- use (csCurrentTeam.tsUrlList.to listSelectedElement)
     case selected of
         Nothing -> setMode Main
         Just (_, link) -> do
diff --git a/src/Matterhorn/State/UserListOverlay.hs b/src/Matterhorn/State/UserListOverlay.hs
--- a/src/Matterhorn/State/UserListOverlay.hs
+++ b/src/Matterhorn/State/UserListOverlay.hs
@@ -34,15 +34,15 @@
 -- current channel.
 enterChannelMembersUserList :: MH ()
 enterChannelMembersUserList = do
-    cId <- use csCurrentChannelId
+    myTId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId myTId)
     myId <- gets myUserId
-    myTId <- gets myTeamId
     session <- getSession
 
     doAsyncWith Preempt $ do
         stats <- MM.mmGetChannelStatistics cId session
         return $ Just $ do
-            enterUserListMode (ChannelMembers cId myTId) (Just $ channelStatsMemberCount stats)
+            enterUserListMode myTId (ChannelMembers cId myTId) (Just $ channelStatsMemberCount stats)
               (\u -> case u^.uiId /= myId of
                 True -> createOrFocusDMChannel u Nothing >> return True
                 False -> return False
@@ -53,10 +53,10 @@
 -- channel.
 enterChannelInviteUserList :: MH ()
 enterChannelInviteUserList = do
-    cId <- use csCurrentChannelId
+    myTId <- use csCurrentTeamId
+    cId <- use (csCurrentChannelId myTId)
     myId <- gets myUserId
-    myTId <- gets myTeamId
-    enterUserListMode (ChannelNonMembers cId myTId) Nothing
+    enterUserListMode myTId (ChannelNonMembers cId myTId) Nothing
       (\u -> case u^.uiId /= myId of
         True -> addUserToCurrentChannel u >> return True
         False -> return False
@@ -67,12 +67,12 @@
 enterDMSearchUserList :: MH ()
 enterDMSearchUserList = do
     myId <- gets myUserId
-    myTId <- gets myTeamId
+    myTId <- use csCurrentTeamId
     config <- use csClientConfig
     let restrictTeam = case MM.clientConfigRestrictDirectMessage <$> config of
             Just MM.RestrictTeam -> Just myTId
             _ -> Nothing
-    enterUserListMode (AllUsers restrictTeam) Nothing
+    enterUserListMode myTId (AllUsers restrictTeam) Nothing
       (\u -> case u^.uiId /= myId of
         True -> createOrFocusDMChannel u Nothing >> return True
         False -> return False
@@ -80,10 +80,10 @@
 
 -- | Show the user list overlay with the given search scope, and issue a
 -- request to gather the first search results.
-enterUserListMode :: UserSearchScope -> Maybe Int -> (UserInfo -> MH Bool) -> MH ()
-enterUserListMode scope resultCount enterHandler = do
-    csUserListOverlay.listOverlayRecordCount .= resultCount
-    enterListOverlayMode csUserListOverlay UserListOverlay scope enterHandler getUserSearchResults
+enterUserListMode :: TeamId -> UserSearchScope -> Maybe Int -> (UserInfo -> MH Bool) -> MH ()
+enterUserListMode tId scope resultCount enterHandler = do
+    csTeam(tId).tsUserListOverlay.listOverlayRecordCount .= resultCount
+    enterListOverlayMode (csTeam(tId).tsUserListOverlay) UserListOverlay scope enterHandler getUserSearchResults
 
 userInfoFromPair :: User -> Text -> UserInfo
 userInfoFromPair u status =
@@ -111,7 +111,7 @@
 -- cursor, and then check to see whether the modification warrants a
 -- prefetch of more search results.
 userListMove :: (L.List Name UserInfo -> L.List Name UserInfo) -> MH ()
-userListMove = listOverlayMove csUserListOverlay
+userListMove = listOverlayMove (csCurrentTeam.tsUserListOverlay)
 
 -- | The number of users in a "page" for cursor movement purposes.
 userListPageSize :: Int
diff --git a/src/Matterhorn/TeamSelect.hs b/src/Matterhorn/TeamSelect.hs
deleted file mode 100644
--- a/src/Matterhorn/TeamSelect.hs
+++ /dev/null
@@ -1,90 +0,0 @@
-module Matterhorn.TeamSelect
-  ( interactiveTeamSelection
-  )
-where
-
-import           Prelude ()
-import           Matterhorn.Prelude
-
-import           Brick
-import           Brick.Widgets.Border
-import           Brick.Widgets.Center
-import           Brick.Widgets.List
-import qualified Data.Function as F
-import           Data.List ( sortBy )
-import qualified Data.Vector as V
-import           Graphics.Vty hiding (mkVty)
-import qualified Data.Text as T
-
-import           Network.Mattermost.Types
-
-import           Matterhorn.Draw.RichText
-import           Matterhorn.Types.Common
-
-
-data State =
-    State { appList :: List () Team
-          , appCancelled :: Bool
-          }
-
-interactiveTeamSelection :: Vty -> IO Vty -> [Team] -> IO (Maybe Team, Vty)
-interactiveTeamSelection vty mkVty teams = do
-    let state = State { appList = list () (V.fromList sortedTeams) 1
-                      , appCancelled = False
-                      }
-        sortedTeams = sortBy (compare `F.on` teamName) teams
-
-    (finalSt, finalVty) <- customMainWithVty vty mkVty Nothing app state
-
-    let result = if appCancelled finalSt
-                 then Nothing
-                 else snd <$> listSelectedElement (appList finalSt)
-
-    return (result, finalVty)
-
-app :: App State e ()
-app = App
-  { appDraw         = teamSelectDraw
-  , appChooseCursor = neverShowCursor
-  , appHandleEvent  = onEvent
-  , appStartEvent   = return
-  , appAttrMap      = const colorTheme
-  }
-
-colorTheme :: AttrMap
-colorTheme = attrMap defAttr
-  [ (listSelectedFocusedAttr, black `on` yellow)
-  ]
-
-teamSelectDraw :: State -> [Widget ()]
-teamSelectDraw st =
-    [ teamSelect st
-    ]
-
-teamSelect :: State -> Widget ()
-teamSelect st =
-    center $ hLimit 50 $ vLimit 15 $
-    vBox [ hCenter $ txt "Welcome to Mattermost. Please select a team:"
-         , txt " "
-         , border theList
-         , txt " "
-         , renderText "Press Enter to select a team and connect or Esc to exit."
-         ]
-    where
-    theList = renderList renderTeamItem True (appList st)
-
-renderTeamItem :: Bool -> Team -> Widget ()
-renderTeamItem _ t =
-    padRight Max $ txt $ (sanitizeUserText $ teamName t) <>
-        if not $ T.null (sanitizeUserText $ teamDisplayName t)
-        then " (" <> (sanitizeUserText $ teamDisplayName t) <> ")"
-        else ""
-
-onEvent :: State -> BrickEvent () e -> EventM () (Next State)
-onEvent st (VtyEvent (EvKey KEsc [])) = do
-    halt $ st { appCancelled = True }
-onEvent st (VtyEvent (EvKey KEnter [])) = halt st
-onEvent st (VtyEvent e) = do
-    list' <- handleListEvent e (appList st)
-    continue $ st { appList = list' }
-onEvent st _ = continue st
diff --git a/src/Matterhorn/Themes.hs b/src/Matterhorn/Themes.hs
--- a/src/Matterhorn/Themes.hs
+++ b/src/Matterhorn/Themes.hs
@@ -16,6 +16,7 @@
   , unreadChannelAttr
   , unreadGroupMarkerAttr
   , mentionsChannelAttr
+  , currentTeamAttr
   , urlAttr
   , codeAttr
   , emailAttr
@@ -161,6 +162,9 @@
 mentionsChannelAttr :: AttrName
 mentionsChannelAttr = "channelWithMentions"
 
+currentTeamAttr :: AttrName
+currentTeamAttr = "currentTeam"
+
 tabSelectedAttr :: AttrName
 tabSelectedAttr = "tabSelected"
 
@@ -309,6 +313,7 @@
        , (editedRecentlyMarkingAttr,        black `on` yellow)
        , (tabSelectedAttr,                  black `on` yellow)
        , (focusedFormInputAttr,             black `on` yellow)
+       , (currentTeamAttr,                  black `on` yellow)
        , (FB.fileBrowserCurrentDirectoryAttr, white `on` blue)
        , (FB.fileBrowserSelectionInfoAttr,  white `on` blue)
        , (FB.fileBrowserDirectoryAttr,      fg blue)
@@ -369,6 +374,7 @@
      , (editedRecentlyMarkingAttr,        black `on` yellow)
      , (tabSelectedAttr,                  black `on` yellow)
      , (focusedFormInputAttr,             black `on` yellow)
+     , (currentTeamAttr,                  black `on` yellow)
      , (FB.fileBrowserCurrentDirectoryAttr, white `on` blue)
      , (FB.fileBrowserSelectionInfoAttr,  white `on` blue)
      , (FB.fileBrowserDirectoryAttr,      fg blue)
@@ -802,6 +808,9 @@
       )
     , ( currentUserAttr
       , "Attribute for the username of the user running Matterhorn"
+      )
+    , ( currentTeamAttr
+      , "The currently-selected team"
       )
     ] <> [ (usernameAttr i, T.pack $ "Username color " <> show i)
          | i <- [0..usernameColorHashBuckets-1]
diff --git a/src/Matterhorn/Types.hs b/src/Matterhorn/Types.hs
--- a/src/Matterhorn/Types.hs
+++ b/src/Matterhorn/Types.hs
@@ -51,7 +51,47 @@
   , ChannelTopicDialogState(..)
   , channelTopicDialogEditor
   , channelTopicDialogFocus
+
   , Config(..)
+  , configUserL
+  , configHostL
+  , configTeamL
+  , configPortL
+  , configUrlPathL
+  , configPassL
+  , configTokenL
+  , configTimeFormatL
+  , configDateFormatL
+  , configThemeL
+  , configThemeCustomizationFileL
+  , configSmartBacktickL
+  , configSmartEditingL
+  , configURLOpenCommandL
+  , configURLOpenCommandInteractiveL
+  , configActivityNotifyCommandL
+  , configActivityBellL
+  , configShowMessageTimestampsL
+  , configShowBackgroundL
+  , configShowMessagePreviewL
+  , configShowChannelListL
+  , configShowExpandedChannelTopicsL
+  , configEnableAspellL
+  , configAspellDictionaryL
+  , configUnsafeUseHTTPL
+  , configValidateServerCertificateL
+  , configChannelListWidthL
+  , configLogMaxBufferSizeL
+  , configShowOlderEditsL
+  , configShowTypingIndicatorL
+  , configAbsPathL
+  , configUserKeysL
+  , configHyperlinkingModeL
+  , configSyntaxDirsL
+  , configDirectChannelExpirationDaysL
+  , configCpuUsagePolicyL
+  , configDefaultAttachmentPathL
+  , configChannelListOrientationL
+
   , HelpScreen(..)
   , PasswordSource(..)
   , TokenSource(..)
@@ -68,9 +108,14 @@
 
   , attrNameToConfig
 
+  , sortTeams
+  , mkTeamZipper
+  , mkTeamZipperFromIds
+  , teamZipperIds
   , mkChannelZipperList
   , ChannelListGroup(..)
   , channelListGroupUnread
+  , nonDMChannelListGroupUnread
 
   , trimChannelSigil
 
@@ -79,44 +124,51 @@
   , channelSelectInput
   , emptyChannelSelectState
 
+  , TeamState(..)
+  , tsFocus
+  , tsMode
+  , tsPendingChannelChange
+  , tsRecentChannel
+  , tsReturnChannel
+  , tsEditState
+  , tsMessageSelect
+  , tsTeam
+  , tsChannelSelectState
+  , tsUrlList
+  , tsViewedMessage
+  , tsPostListOverlay
+  , tsUserListOverlay
+  , tsChannelListOverlay
+  , tsNotifyPrefs
+  , tsChannelTopicDialog
+  , tsReactionEmojiListOverlay
+  , tsThemeListOverlay
+
   , ChatState
   , newState
-  , csChannelTopicDialog
+  , newTeamState
+
+  , csTeamZipper
+  , csCurrentTeam
+  , csTeams
+  , csTeam
   , csChannelListOrientation
   , csResources
-  , csFocus
   , csCurrentChannel
   , csCurrentChannelId
-  , csUrlList
-  , csShowMessagePreview
-  , csShowChannelList
-  , csShowExpandedChannelTopics
+  , csCurrentTeamId
   , csPostMap
-  , csRecentChannel
-  , csReturnChannel
-  , csThemeListOverlay
-  , csPostListOverlay
-  , csUserListOverlay
-  , csChannelListOverlay
-  , csReactionEmojiListOverlay
-  , csMyTeam
-  , csMessageSelect
   , csConnectionStatus
   , csWorkerIsBusy
   , csChannel
   , csChannels
-  , csChannelSelectState
-  , csEditState
   , csClientConfig
-  , csPendingChannelChange
-  , csViewedMessage
-  , csNotifyPrefs
+  , csInputHistory
   , csMe
   , timeZone
   , whenMode
   , setMode
   , setMode'
-  , appMode
 
   , ChatEditState
   , emptyEditState
@@ -128,7 +180,6 @@
   , cedEditMode
   , cedEphemeral
   , cedEditor
-  , cedInputHistory
   , cedAutocomplete
   , cedAutocompletePending
   , cedJustCompleted
@@ -188,12 +239,16 @@
 
   , specialUserMentions
 
+  , applyTeamOrder
+  , refreshTeamZipper
+
   , UserPreferences(UserPreferences)
   , userPrefShowJoinLeave
   , userPrefFlaggedPostList
   , userPrefGroupChannelPrefs
   , userPrefDirectChannelPrefs
   , userPrefTeammateNameDisplayMode
+  , userPrefTeamOrder
   , dmChannelShowPreference
   , groupChannelShowPreference
 
@@ -217,6 +272,7 @@
   , generateUUID_IO
   , mhSuspendAndResume
   , mhHandleEventLensed
+  , mhHandleEventLensed'
   , St.gets
   , mhError
 
@@ -254,13 +310,11 @@
   , myUser
   , myUsername
   , myUserId
-  , myTeamId
   , usernameForUserId
   , userByUsername
   , userByNickname
   , channelIdByChannelName
   , channelIdByUsername
-  , channelByName
   , userById
   , allUserIds
   , addNewUser
@@ -276,7 +330,11 @@
   , UserSet
   , ChannelSet
   , getHighlightSet
+  , emptyHSet
 
+  , moveLeft
+  , moveRight
+
   , module Matterhorn.Types.Channels
   , module Matterhorn.Types.Messages
   , module Matterhorn.Types.Posts
@@ -309,6 +367,7 @@
 import qualified Data.Set as Set
 import qualified Data.ByteString as BS
 import qualified Data.Foldable as F
+import           Data.Function ( on )
 import qualified Data.Kind as K
 import           Data.Ord ( comparing )
 import qualified Data.HashMap.Strict as HM
@@ -378,6 +437,11 @@
 channelListGroupUnread (ChannelGroupPrivateChannels n) = n
 channelListGroupUnread (ChannelGroupDirectMessages n)  = n
 
+nonDMChannelListGroupUnread :: ChannelListGroup -> Int
+nonDMChannelListGroupUnread (ChannelGroupPublicChannels n)  = n
+nonDMChannelListGroupUnread (ChannelGroupPrivateChannels n) = n
+nonDMChannelListGroupUnread (ChannelGroupDirectMessages _)  = 0
+
 -- | The type of channel list entries.
 data ChannelListEntry =
     CLChannel ChannelId
@@ -502,11 +566,12 @@
     deriving (Eq, Show)
 
 data UserPreferences =
-    UserPreferences { _userPrefShowJoinLeave     :: Bool
-                    , _userPrefFlaggedPostList   :: Seq FlaggedPost
+    UserPreferences { _userPrefShowJoinLeave :: Bool
+                    , _userPrefFlaggedPostList :: Seq FlaggedPost
                     , _userPrefGroupChannelPrefs :: HashMap ChannelId Bool
                     , _userPrefDirectChannelPrefs :: HashMap UserId Bool
                     , _userPrefTeammateNameDisplayMode :: Maybe TeammateNameDisplayMode
+                    , _userPrefTeamOrder :: Maybe [TeamId]
                     }
 
 hasUnread :: ChatState -> ChannelId -> Bool
@@ -524,23 +589,25 @@
 
 mkChannelZipperList :: UTCTime
                     -> Config
+                    -> TeamId
                     -> Maybe ClientConfig
                     -> UserPreferences
                     -> ClientChannels
                     -> Users
                     -> [(ChannelListGroup, [ChannelListEntry])]
-mkChannelZipperList now config cconfig prefs cs us =
-    [ let (unread, entries) = getChannelEntriesInOrder cs Ordinary
+mkChannelZipperList now config tId cconfig prefs cs us =
+    [ let (unread, entries) = getChannelEntriesInOrder tId cs Ordinary
       in (ChannelGroupPublicChannels unread, entries)
-    , let (unread, entries) = getChannelEntriesInOrder cs Private
+    , let (unread, entries) = getChannelEntriesInOrder tId cs Private
       in (ChannelGroupPrivateChannels unread, entries)
     , let (unread, entries) = getDMChannelEntriesInOrder now config cconfig prefs us cs
       in (ChannelGroupDirectMessages unread, entries)
     ]
 
-getChannelEntriesInOrder :: ClientChannels -> Type -> (Int, [ChannelListEntry])
-getChannelEntriesInOrder cs ty =
-    let matches (_, info) = info^.ccInfo.cdType == ty
+getChannelEntriesInOrder :: TeamId -> ClientChannels -> Type -> (Int, [ChannelListEntry])
+getChannelEntriesInOrder tId cs ty =
+    let matches (_, info) = info^.ccInfo.cdType == ty &&
+                            info^.ccInfo.cdTeamId == Just tId
         pairs = filteredChannels matches cs
         unread = length $ filter (== True) $ (hasUnread' . snd) <$> pairs
         entries = fmap (CLChannel . fst) $
@@ -593,6 +660,7 @@
                          -> [(Bool, T.Text, ChannelListEntry)]
 getGroupDMChannelEntries now config prefs cs =
     let matches (_, info) = info^.ccInfo.cdType == Group &&
+                            info^.ccInfo.cdTeamId == Nothing &&
                             groupChannelShouldAppear now config prefs info
     in fmap (\(cId, ch) -> (hasUnread' ch, ch^.ccInfo.cdDisplayName, CLGroupDM cId)) $
        filteredChannels matches cs
@@ -668,43 +736,44 @@
 -- parts of the interface.
 data Name =
     ChannelMessages ChannelId
-    | MessageInput
-    | ChannelList
+    | MessageInput TeamId
+    | ChannelList TeamId
     | HelpViewport
     | HelpText
     | ScriptHelpText
     | ThemeHelpText
     | SyntaxHighlightHelpText
     | KeybindingHelpText
-    | ChannelSelectString
-    | CompletionAlternatives
-    | CompletionList
-    | JoinChannelList
-    | UrlList
-    | MessagePreviewViewport
-    | ThemeListSearchInput
-    | UserListSearchInput
-    | JoinChannelListSearchInput
-    | UserListSearchResults
-    | ThemeListSearchResults
-    | ViewMessageArea
-    | ViewMessageReactionsArea
-    | ChannelSidebar
-    | ChannelSelectInput
-    | AttachmentList
-    | AttachmentFileBrowser
-    | MessageReactionsArea
-    | ReactionEmojiList
-    | ReactionEmojiListInput
-    | TabbedWindowTabBar
-    | MuteToggleField
-    | ChannelMentionsField
-    | DesktopNotificationsField (WithDefault NotifyOption)
-    | PushNotificationsField (WithDefault NotifyOption)
-    | ChannelTopicEditor
-    | ChannelTopicSaveButton
-    | ChannelTopicCancelButton
-    | ChannelTopicEditorPreview
+    | ChannelSelectString TeamId
+    | CompletionAlternatives TeamId
+    | CompletionList TeamId
+    | JoinChannelList TeamId
+    | UrlList TeamId
+    | MessagePreviewViewport TeamId
+    | ThemeListSearchInput TeamId
+    | UserListSearchInput TeamId
+    | JoinChannelListSearchInput TeamId
+    | UserListSearchResults TeamId
+    | ThemeListSearchResults TeamId
+    | ViewMessageArea TeamId
+    | ViewMessageReactionsArea TeamId
+    | ChannelSidebar TeamId
+    | ChannelSelectInput TeamId
+    | AttachmentList TeamId
+    | AttachmentFileBrowser TeamId
+    | MessageReactionsArea TeamId
+    | ReactionEmojiList TeamId
+    | ReactionEmojiListInput TeamId
+    | TabbedWindowTabBar TeamId
+    | MuteToggleField TeamId
+    | ChannelMentionsField TeamId
+    | DesktopNotificationsField TeamId (WithDefault NotifyOption)
+    | PushNotificationsField TeamId (WithDefault NotifyOption)
+    | ChannelTopicEditor TeamId
+    | ChannelTopicSaveButton TeamId
+    | ChannelTopicCancelButton TeamId
+    | ChannelTopicEditorPreview TeamId
+    | TeamList
     deriving (Eq, Show, Ord)
 
 -- | The sum type of exceptions we expect to encounter on authentication
@@ -796,6 +865,7 @@
                     , _userPrefGroupChannelPrefs = mempty
                     , _userPrefDirectChannelPrefs = mempty
                     , _userPrefTeammateNameDisplayMode = Nothing
+                    , _userPrefTeamOrder = Nothing
                     }
 
 setUserPreferences :: Seq Preference -> UserPreferences -> UserPreferences
@@ -819,6 +889,9 @@
                     (groupChannelShow gp)
                     (_userPrefGroupChannelPrefs u)
                 }
+            | Just tIds <- preferenceToTeamOrder p =
+              u { _userPrefTeamOrder = Just tIds
+                }
             | preferenceName p == PreferenceName "join_leave" =
               u { _userPrefShowJoinLeave =
                   preferenceValue p /= PreferenceValue "false" }
@@ -1010,13 +1083,6 @@
     ChatEditState { _cedEditor :: Editor Text Name
                   , _cedEditMode :: EditMode
                   , _cedEphemeral :: EphemeralEditState
-                  , _cedInputHistory :: InputHistory
-                  -- ^ The map of per-channel input history for the
-                  -- application. We don't distribute the per-channel
-                  -- history into the per-channel states (like we do
-                  -- for other per-channel state) since keeping it
-                  -- under the InputHistory banner lets us use a nicer
-                  -- startup/shutdown disk file management API.
                   , _cedYankBuffer :: Text
                   , _cedSpellChecker :: Maybe (Aspell, IO ())
                   , _cedMisspellings :: Set Text
@@ -1055,21 +1121,20 @@
 
 -- | We can initialize a new 'ChatEditState' value with just an edit
 -- history, which we save locally.
-emptyEditState :: InputHistory -> Maybe (Aspell, IO ()) -> IO ChatEditState
-emptyEditState hist sp =
-    return ChatEditState { _cedEditor               = editor MessageInput Nothing ""
-                         , _cedEphemeral            = defaultEphemeralEditState
-                         , _cedInputHistory         = hist
-                         , _cedEditMode             = NewPost
-                         , _cedYankBuffer           = ""
-                         , _cedSpellChecker         = sp
-                         , _cedMisspellings         = mempty
-                         , _cedAutocomplete         = Nothing
-                         , _cedAutocompletePending  = Nothing
-                         , _cedAttachmentList       = list AttachmentList mempty 1
-                         , _cedFileBrowser          = Nothing
-                         , _cedJustCompleted        = False
-                         }
+emptyEditState :: TeamId -> ChatEditState
+emptyEditState tId =
+    ChatEditState { _cedEditor               = editor (MessageInput tId) Nothing ""
+                  , _cedEphemeral            = defaultEphemeralEditState
+                  , _cedEditMode             = NewPost
+                  , _cedYankBuffer           = ""
+                  , _cedSpellChecker         = Nothing
+                  , _cedMisspellings         = mempty
+                  , _cedAutocomplete         = Nothing
+                  , _cedAutocompletePending  = Nothing
+                  , _cedAttachmentList       = list (AttachmentList tId) mempty 1
+                  , _cedFileBrowser          = Nothing
+                  , _cedJustCompleted        = False
+                  }
 
 -- | A 'RequestChan' is a queue of operations we have to perform in the
 -- background to avoid blocking on the main loop
@@ -1303,21 +1368,20 @@
     -- ^ Show the channel list to the right of the message area.
     deriving (Eq, Show)
 
--- | This is the giant bundle of fields that represents the current
--- state of our application at any given time.
+-- | This type represents the current state of our application at any
+-- given time.
 data ChatState =
     ChatState { _csResources :: ChatResources
               -- ^ Global application-wide resources that don't change
               -- much.
-              , _csFocus :: Z.Zipper ChannelListGroup ChannelListEntry
-              -- ^ The channel sidebar zipper that tracks which channel
-              -- is selected.
+              , _csTeams :: HashMap TeamId TeamState
+              -- ^ The state for each team that we are in.
+              , _csTeamZipper :: Z.Zipper () TeamId
+              -- ^ The list of teams we can cycle through.
               , _csChannelListOrientation :: ChannelListOrientation
               -- ^ The orientation of the channel list.
               , _csMe :: User
               -- ^ The authenticated user.
-              , _csMyTeam :: Team
-              -- ^ The active team of the authenticated user.
               , _csChannels :: ClientChannels
               -- ^ The channels that we are showing, including their
               -- message lists.
@@ -1329,56 +1393,59 @@
               -- ^ All of the users we know about.
               , _timeZone :: TimeZoneSeries
               -- ^ The client time zone.
-              , _csEditState :: ChatEditState
-              -- ^ The state of the input box used for composing and
-              -- editing messages and commands.
-              , _csMode :: Mode
-              -- ^ The current application mode. This is used to
-              -- dispatch to different rendering and event handling
-              -- routines.
-              , _csShowMessagePreview :: Bool
-              -- ^ Whether to show the message preview area.
-              , _csShowChannelList :: Bool
-              -- ^ Whether to show the channel list.
-              , _csShowExpandedChannelTopics :: Bool
-              -- ^ Whether to show expanded channel topics.
-              , _csChannelSelectState :: ChannelSelectState
-              -- ^ The state of the user's input and selection for
-              -- channel selection mode.
-              , _csRecentChannel :: Maybe ChannelId
-              -- ^ The most recently-selected channel, if any.
-              , _csReturnChannel :: Maybe ChannelId
-              -- ^ The channel to return to after visiting one or more
-              -- unread channels.
-              , _csUrlList :: List Name LinkChoice
-              -- ^ The URL list used to show URLs drawn from messages in
-              -- a channel.
               , _csConnectionStatus :: ConnectionStatus
               -- ^ Our view of the connection status.
               , _csWorkerIsBusy :: Maybe (Maybe Int)
               -- ^ Whether the async worker thread is busy, and its
               -- queue length if so.
-              , _csMessageSelect :: MessageSelectState
-              -- ^ The state of message selection mode.
-              , _csThemeListOverlay :: ListOverlayState InternalTheme ()
-              -- ^ The state of the theme list overlay.
-              , _csPostListOverlay :: PostListOverlayState
-              -- ^ The state of the post list overlay.
-              , _csUserListOverlay :: ListOverlayState UserInfo UserSearchScope
-              -- ^ The state of the user list overlay.
-              , _csChannelListOverlay :: ListOverlayState Channel ChannelSearchScope
-              -- ^ The state of the user list overlay.
-              , _csReactionEmojiListOverlay :: ListOverlayState (Bool, T.Text) ()
-              -- ^ The state of the reaction emoji list overlay.
               , _csClientConfig :: Maybe ClientConfig
               -- ^ The Mattermost client configuration, as we understand it.
-              , _csPendingChannelChange :: Maybe PendingChannelChange
+              , _csInputHistory :: InputHistory
+              -- ^ The map of per-channel input history for the
+              -- application. We don't distribute the per-channel
+              -- history into the per-channel states (like we do
+              -- for other per-channel state) since keeping it
+              -- under the InputHistory banner lets us use a nicer
+              -- startup/shutdown disk file management API.
+              }
+
+-- | All application state specific to a team, along with state specific
+-- to our user interface's presentation of that team. We include the
+-- UI state relevant to the team so that we can easily switch which
+-- team the UI is presenting without having to reinitialize the UI from
+-- the new team. This allows the user to be engaged in just about any
+-- application activity while viewing a team, switch to another team,
+-- and return to the original team and resume what they were doing, all
+-- without us doing any work.
+data TeamState =
+    TeamState { _tsFocus :: Z.Zipper ChannelListGroup ChannelListEntry
+              -- ^ The channel sidebar zipper that tracks which channel
+              -- is selected.
+              , _tsPendingChannelChange :: Maybe PendingChannelChange
               -- ^ A pending channel change that we need to apply once
               -- the channel in question is available. We set this up
               -- when we need to change to a channel in the sidebar, but
               -- it isn't even there yet because we haven't loaded its
               -- metadata.
-              , _csViewedMessage :: Maybe (Message, TabbedWindow ViewMessageWindowTab)
+              , _tsRecentChannel :: Maybe ChannelId
+              -- ^ The most recently-selected channel, if any.
+              , _tsReturnChannel :: Maybe ChannelId
+              -- ^ The channel to return to after visiting one or more
+              -- unread channels.
+              , _tsEditState :: ChatEditState
+              -- ^ The state of the input box used for composing and
+              -- editing messages and commands.
+              , _tsMessageSelect :: MessageSelectState
+              -- ^ The state of message selection mode.
+              , _tsTeam :: Team
+              -- ^ The team data.
+              , _tsChannelSelectState :: ChannelSelectState
+              -- ^ The state of the user's input and selection for
+              -- channel selection mode.
+              , _tsUrlList :: List Name LinkChoice
+              -- ^ The URL list used to show URLs drawn from messages in
+              -- a channel.
+              , _tsViewedMessage :: Maybe (Message, TabbedWindow ViewMessageWindowTab)
               -- ^ Set when the ViewMessage mode is active. The message
               -- being viewed. Note that this stores a message, not
               -- a message ID. That's because not all messages have
@@ -1388,14 +1455,28 @@
               -- consult the chat state for the latest *version* of any
               -- message with an ID here, to be sure that the latest
               -- version is used (e.g. if it gets edited, etc.).
-              , _csNotifyPrefs :: Maybe (Form ChannelNotifyProps MHEvent Name)
+              , _tsPostListOverlay :: PostListOverlayState
+              -- ^ The state of the post list overlay.
+              , _tsUserListOverlay :: ListOverlayState UserInfo UserSearchScope
+              -- ^ The state of the user list overlay.
+              , _tsChannelListOverlay :: ListOverlayState Channel ChannelSearchScope
+              -- ^ The state of the user list overlay.
+              , _tsNotifyPrefs :: Maybe (Form ChannelNotifyProps MHEvent Name)
               -- ^ A form for editing the notification preferences for
               -- the current channel. This is set when entering
               -- EditNotifyPrefs mode and updated when the user
               -- changes the form state.
-              , _csChannelTopicDialog :: ChannelTopicDialogState
+              , _tsChannelTopicDialog :: ChannelTopicDialogState
               -- ^ The state for the interactive channel topic editor
               -- window.
+              , _tsMode :: Mode
+              -- ^ The current application mode when viewing this team.
+              -- This is used to dispatch to different rendering and
+              -- event handling routines.
+              , _tsReactionEmojiListOverlay :: ListOverlayState (Bool, T.Text) ()
+              -- ^ The state of the reaction emoji list overlay.
+              , _tsThemeListOverlay :: ListOverlayState InternalTheme ()
+              -- ^ The state of the theme list overlay.
               }
 
 -- | Handles for the View Message window's tabs.
@@ -1407,19 +1488,18 @@
     deriving (Eq, Show)
 
 data PendingChannelChange =
-    ChangeByChannelId ChannelId (Maybe (MH ()))
+    ChangeByChannelId TeamId ChannelId (Maybe (MH ()))
     | ChangeByUserId UserId
 
 -- | Startup state information that is constructed prior to building a
 -- ChatState.
 data StartupStateInfo =
     StartupStateInfo { startupStateResources      :: ChatResources
-                     , startupStateChannelZipper  :: Z.Zipper ChannelListGroup ChannelListEntry
                      , startupStateConnectedUser  :: User
-                     , startupStateTeam           :: Team
+                     , startupStateTeams          :: HM.HashMap TeamId TeamState
                      , startupStateTimeZone       :: TimeZoneSeries
                      , startupStateInitialHistory :: InputHistory
-                     , startupStateSpellChecker   :: Maybe (Aspell, IO ())
+                     , startupStateInitialTeam    :: TeamId
                      }
 
 -- | The state of the channel topic editor window.
@@ -1430,58 +1510,61 @@
                             -- ^ The window focus state (editor/buttons)
                             }
 
-newState :: StartupStateInfo -> IO ChatState
-newState (StartupStateInfo {..}) = do
-    editState <- emptyEditState startupStateInitialHistory startupStateSpellChecker
-    let config = _crConfiguration startupStateResources
-    return ChatState { _csResources                   = startupStateResources
-                     , _csFocus                       = startupStateChannelZipper
-                     , _csChannelListOrientation      = configChannelListOrientation config
-                     , _csMe                          = startupStateConnectedUser
-                     , _csMyTeam                      = startupStateTeam
-                     , _csChannels                    = noChannels
-                     , _csPostMap                     = HM.empty
-                     , _csUsers                       = noUsers
-                     , _timeZone                      = startupStateTimeZone
-                     , _csEditState                   = editState
-                     , _csMode                        = Main
-                     , _csShowMessagePreview          = configShowMessagePreview config
-                     , _csShowChannelList             = configShowChannelList config
-                     , _csShowExpandedChannelTopics   = configShowExpandedChannelTopics config
-                     , _csChannelSelectState          = emptyChannelSelectState
-                     , _csRecentChannel               = Nothing
-                     , _csReturnChannel               = Nothing
-                     , _csUrlList                     = list UrlList mempty 2
-                     , _csConnectionStatus            = Connected
-                     , _csWorkerIsBusy                = Nothing
-                     , _csMessageSelect               = MessageSelectState Nothing
-                     , _csThemeListOverlay            = nullThemeListOverlayState
-                     , _csPostListOverlay             = PostListOverlayState emptyDirSeq Nothing
-                     , _csUserListOverlay             = nullUserListOverlayState
-                     , _csChannelListOverlay          = nullChannelListOverlayState
-                     , _csReactionEmojiListOverlay    = nullEmojiListOverlayState
-                     , _csClientConfig                = Nothing
-                     , _csPendingChannelChange        = Nothing
-                     , _csViewedMessage               = Nothing
-                     , _csNotifyPrefs                 = Nothing
-                     , _csChannelTopicDialog          = newChannelTopicDialog ""
-                     }
+sortTeams :: [Team] -> [Team]
+sortTeams = sortBy (compare `on` (T.strip . sanitizeUserText . teamName))
 
+mkTeamZipper :: HM.HashMap TeamId TeamState -> Z.Zipper () TeamId
+mkTeamZipper m =
+    let sortedTeams = sortTeams $ _tsTeam <$> HM.elems m
+    in mkTeamZipperFromIds $ teamId <$> sortedTeams
+
+mkTeamZipperFromIds :: [TeamId] -> Z.Zipper () TeamId
+mkTeamZipperFromIds tIds = Z.fromList [((), tIds)]
+
+teamZipperIds :: Z.Zipper () TeamId -> [TeamId]
+teamZipperIds = concat . fmap snd . Z.toList
+
+newTeamState :: Team
+             -> Z.Zipper ChannelListGroup ChannelListEntry
+             -> Maybe (Aspell, IO ())
+             -> TeamState
+newTeamState team chanList spellChecker =
+    let tId = teamId team
+    in TeamState { _tsMode                     = Main
+                 , _tsFocus                    = chanList
+                 , _tsEditState                = (emptyEditState tId) { _cedSpellChecker = spellChecker }
+                 , _tsTeam                     = team
+                 , _tsUrlList                  = list (UrlList tId) mempty 2
+                 , _tsPostListOverlay          = PostListOverlayState emptyDirSeq Nothing
+                 , _tsUserListOverlay          = nullUserListOverlayState tId
+                 , _tsChannelListOverlay       = nullChannelListOverlayState tId
+                 , _tsChannelSelectState       = emptyChannelSelectState tId
+                 , _tsChannelTopicDialog       = newChannelTopicDialog tId ""
+                 , _tsMessageSelect            = MessageSelectState Nothing
+                 , _tsNotifyPrefs              = Nothing
+                 , _tsPendingChannelChange     = Nothing
+                 , _tsRecentChannel            = Nothing
+                 , _tsReturnChannel            = Nothing
+                 , _tsViewedMessage            = Nothing
+                 , _tsThemeListOverlay         = nullThemeListOverlayState tId
+                 , _tsReactionEmojiListOverlay = nullEmojiListOverlayState tId
+                 }
+
 -- | Make a new channel topic editor window state.
-newChannelTopicDialog :: T.Text -> ChannelTopicDialogState
-newChannelTopicDialog t =
-    ChannelTopicDialogState { _channelTopicDialogEditor = editor ChannelTopicEditor Nothing t
-                            , _channelTopicDialogFocus = focusRing [ ChannelTopicEditor
-                                                                   , ChannelTopicSaveButton
-                                                                   , ChannelTopicCancelButton
+newChannelTopicDialog :: TeamId -> T.Text -> ChannelTopicDialogState
+newChannelTopicDialog tId t =
+    ChannelTopicDialogState { _channelTopicDialogEditor = editor (ChannelTopicEditor tId) Nothing t
+                            , _channelTopicDialogFocus = focusRing [ ChannelTopicEditor tId
+                                                                   , ChannelTopicSaveButton tId
+                                                                   , ChannelTopicCancelButton tId
                                                                    ]
                             }
 
-nullChannelListOverlayState :: ListOverlayState Channel ChannelSearchScope
-nullChannelListOverlayState =
-    let newList rs = list JoinChannelList rs 2
+nullChannelListOverlayState :: TeamId -> ListOverlayState Channel ChannelSearchScope
+nullChannelListOverlayState tId =
+    let newList rs = list (JoinChannelList tId) rs 2
     in ListOverlayState { _listOverlaySearchResults  = newList mempty
-                        , _listOverlaySearchInput    = editor JoinChannelListSearchInput (Just 1) ""
+                        , _listOverlaySearchInput    = editor (JoinChannelListSearchInput tId) (Just 1) ""
                         , _listOverlaySearchScope    = AllChannels
                         , _listOverlaySearching      = False
                         , _listOverlayEnterHandler   = const $ return False
@@ -1491,11 +1574,11 @@
                         , _listOverlayReturnMode     = Main
                         }
 
-nullThemeListOverlayState :: ListOverlayState InternalTheme ()
-nullThemeListOverlayState =
-    let newList rs = list ThemeListSearchResults rs 3
+nullThemeListOverlayState :: TeamId -> ListOverlayState InternalTheme ()
+nullThemeListOverlayState tId =
+    let newList rs = list (ThemeListSearchResults tId) rs 3
     in ListOverlayState { _listOverlaySearchResults  = newList mempty
-                        , _listOverlaySearchInput    = editor ThemeListSearchInput (Just 1) ""
+                        , _listOverlaySearchInput    = editor (ThemeListSearchInput tId) (Just 1) ""
                         , _listOverlaySearchScope    = ()
                         , _listOverlaySearching      = False
                         , _listOverlayEnterHandler   = const $ return False
@@ -1505,11 +1588,11 @@
                         , _listOverlayReturnMode     = Main
                         }
 
-nullUserListOverlayState :: ListOverlayState UserInfo UserSearchScope
-nullUserListOverlayState =
-    let newList rs = list UserListSearchResults rs 1
+nullUserListOverlayState :: TeamId -> ListOverlayState UserInfo UserSearchScope
+nullUserListOverlayState tId =
+    let newList rs = list (UserListSearchResults tId) rs 1
     in ListOverlayState { _listOverlaySearchResults  = newList mempty
-                        , _listOverlaySearchInput    = editor UserListSearchInput (Just 1) ""
+                        , _listOverlaySearchInput    = editor (UserListSearchInput tId) (Just 1) ""
                         , _listOverlaySearchScope    = AllUsers Nothing
                         , _listOverlaySearching      = False
                         , _listOverlayEnterHandler   = const $ return False
@@ -1519,11 +1602,11 @@
                         , _listOverlayReturnMode     = Main
                         }
 
-nullEmojiListOverlayState :: ListOverlayState (Bool, T.Text) ()
-nullEmojiListOverlayState =
-    let newList rs = list ReactionEmojiList rs 1
+nullEmojiListOverlayState :: TeamId -> ListOverlayState (Bool, T.Text) ()
+nullEmojiListOverlayState tId =
+    let newList rs = list (ReactionEmojiList tId) rs 1
     in ListOverlayState { _listOverlaySearchResults  = newList mempty
-                        , _listOverlaySearchInput    = editor ReactionEmojiListInput (Just 1) ""
+                        , _listOverlaySearchInput    = editor (ReactionEmojiListInput tId) (Just 1) ""
                         , _listOverlaySearchScope    = ()
                         , _listOverlaySearching      = False
                         , _listOverlayEnterHandler   = const $ return False
@@ -1533,26 +1616,15 @@
                         , _listOverlayReturnMode     = MessageSelect
                         }
 
-getServerBaseUrl :: MH TeamBaseURL
-getServerBaseUrl = do
-    st <- use id
-    return $ serverBaseUrl st
-
-serverBaseUrl :: ChatState -> TeamBaseURL
-serverBaseUrl st =
-    let baseUrl = connectionDataURL $ _crConn $ _csResources st
-        tName = teamName $ _csMyTeam st
-    in TeamBaseURL (TeamURLName $ sanitizeUserText tName) baseUrl
-
 -- | The state of channel selection mode.
 data ChannelSelectState =
     ChannelSelectState { _channelSelectInput :: Editor Text Name
                        , _channelSelectMatches :: Z.Zipper ChannelListGroup ChannelSelectMatch
                        }
 
-emptyChannelSelectState :: ChannelSelectState
-emptyChannelSelectState =
-    ChannelSelectState { _channelSelectInput = editor ChannelSelectInput (Just 1) ""
+emptyChannelSelectState :: TeamId -> ChannelSelectState
+emptyChannelSelectState tId =
+    ChannelSelectState { _channelSelectInput = editor (ChannelSelectInput tId) (Just 1) ""
                        , _channelSelectMatches = Z.fromList []
                        }
 
@@ -1732,6 +1804,13 @@
     n <- R.lift $ St.lift $ f event (st ^. ln)
     St.put (s { mhCurrentState = st & ln .~ n })
 
+mhHandleEventLensed' :: Lens' ChatState b -> (b -> EventM Name b) -> MH ()
+mhHandleEventLensed' ln f = MH $ do
+    s <- St.get
+    let st = mhCurrentState s
+    n <- R.lift $ St.lift $ f (st ^. ln)
+    St.put (s { mhCurrentState = st & ln .~ n })
+
 mhSuspendAndResume :: (ChatState -> IO ChatState) -> MH ()
 mhSuspendAndResume mote = MH $ do
     s <- St.get
@@ -1846,6 +1925,7 @@
 
 makeLenses ''ChatResources
 makeLenses ''ChatState
+makeLenses ''TeamState
 makeLenses ''ChatEditState
 makeLenses ''AutocompleteState
 makeLenses ''PostListOverlayState
@@ -1854,7 +1934,60 @@
 makeLenses ''UserPreferences
 makeLenses ''ConnectionInfo
 makeLenses ''ChannelTopicDialogState
+Brick.suffixLenses ''Config
 
+applyTeamOrderPref :: Maybe [TeamId] -> ChatState -> ChatState
+applyTeamOrderPref Nothing st = st
+applyTeamOrderPref (Just prefTIds) st =
+    let teams = _csTeams st
+        ourTids = HM.keys teams
+        tIds = filter (`elem` ourTids) prefTIds
+        curTId = st^.csCurrentTeamId
+        unmentioned = filter (not . wasMentioned) $ HM.elems teams
+        wasMentioned ts = (teamId $ _tsTeam ts) `elem` tIds
+        zipperTids = tIds <> (teamId <$> sortTeams (_tsTeam <$> unmentioned))
+    in st { _csTeamZipper = (Z.findRight (== curTId) $ mkTeamZipperFromIds zipperTids)
+          }
+
+refreshTeamZipper :: MH ()
+refreshTeamZipper = do
+    tidOrder <- use (csResources.crUserPreferences.userPrefTeamOrder)
+    St.modify (applyTeamOrderPref tidOrder)
+
+applyTeamOrder :: [TeamId] -> MH ()
+applyTeamOrder tIds = St.modify (applyTeamOrderPref $ Just tIds)
+
+newState :: StartupStateInfo -> ChatState
+newState (StartupStateInfo {..}) =
+    let config = _crConfiguration startupStateResources
+    in applyTeamOrderPref (_userPrefTeamOrder $ _crUserPreferences startupStateResources) $
+       ChatState { _csResources                   = startupStateResources
+                 , _csTeamZipper                  = Z.findRight (== startupStateInitialTeam) $
+                                                    mkTeamZipper startupStateTeams
+                 , _csTeams                       = startupStateTeams
+                 , _csChannelListOrientation      = configChannelListOrientation config
+                 , _csMe                          = startupStateConnectedUser
+                 , _csChannels                    = noChannels
+                 , _csPostMap                     = HM.empty
+                 , _csUsers                       = noUsers
+                 , _timeZone                      = startupStateTimeZone
+                 , _csConnectionStatus            = Connected
+                 , _csWorkerIsBusy                = Nothing
+                 , _csClientConfig                = Nothing
+                 , _csInputHistory                = startupStateInitialHistory
+                 }
+
+getServerBaseUrl :: TeamId -> MH TeamBaseURL
+getServerBaseUrl tId = do
+    st <- use id
+    return $ serverBaseUrl st tId
+
+serverBaseUrl :: ChatState -> TeamId -> TeamBaseURL
+serverBaseUrl st tId =
+    let baseUrl = connectionDataURL $ _crConn $ _csResources st
+        tName = teamName $ st^.csTeam(tId).tsTeam
+    in TeamBaseURL (TeamURLName $ sanitizeUserText tName) baseUrl
+
 getSession :: MH Session
 getSession = use (csResources.crSession)
 
@@ -1863,19 +1996,16 @@
 
 whenMode :: Mode -> MH () -> MH ()
 whenMode m act = do
-    curMode <- use csMode
+    curMode <- use (csCurrentTeam.tsMode)
     when (curMode == m) act
 
 setMode :: Mode -> MH ()
 setMode m = do
-    csMode .= m
+    csCurrentTeam.tsMode .= m
     mh invalidateCache
 
 setMode' :: Mode -> ChatState -> ChatState
-setMode' m = csMode .~ m
-
-appMode :: ChatState -> Mode
-appMode = _csMode
+setMode' m = csCurrentTeam.tsMode .~ m
 
 resetSpellCheckTimer :: ChatEditState -> IO ()
 resetSpellCheckTimer s =
@@ -1884,9 +2014,24 @@
         Just (_, reset) -> reset
 
 -- ** Utility Lenses
-csCurrentChannelId :: SimpleGetter ChatState ChannelId
-csCurrentChannelId = csFocus.to Z.unsafeFocus.to channelListEntryChannelId
+csCurrentChannelId :: TeamId -> SimpleGetter ChatState ChannelId
+csCurrentChannelId tId =
+    csTeam(tId).tsFocus.to Z.unsafeFocus.to channelListEntryChannelId
 
+csCurrentTeamId :: SimpleGetter ChatState TeamId
+csCurrentTeamId =
+    csTeamZipper.to Z.unsafeFocus
+
+csCurrentTeam :: Lens' ChatState TeamState
+csCurrentTeam =
+    lens (\st   -> st^.csTeam(st^.csCurrentTeamId))
+         (\st t -> st & csTeam(st^.csCurrentTeamId) .~ t)
+
+csTeam :: TeamId -> Lens' ChatState TeamState
+csTeam tId =
+    lens (\ st -> st ^. csTeams . at tId ^?! _Just)
+         (\ st t -> st & csTeams . at tId .~ Just t)
+
 channelListEntryChannelId :: ChannelListEntry -> ChannelId
 channelListEntryChannelId (CLChannel cId) = cId
 channelListEntryChannelId (CLUserDM cId _) = cId
@@ -1907,8 +2052,8 @@
 
 csCurrentChannel :: Lens' ChatState ClientChannel
 csCurrentChannel =
-    lens (\ st -> findChannelById (st^.csCurrentChannelId) (st^.csChannels) ^?! _Just)
-         (\ st n -> st & csChannels %~ addChannel (st^.csCurrentChannelId) n)
+    lens (\ st -> findChannelById (st^.csCurrentChannelId(st^.csCurrentTeamId)) (st^.csChannels) ^?! _Just)
+         (\ st n -> st & csChannels %~ addChannel (st^.csCurrentChannelId(st^.csCurrentTeamId)) n)
 
 csChannel :: ChannelId -> Traversal' ChatState ClientChannel
 csChannel cId =
@@ -1982,7 +2127,9 @@
 setUserStatus :: UserId -> Text -> MH ()
 setUserStatus uId t = do
     csUsers %= modifyUserById uId (uiStatus .~ statusFromText t)
-    mh $ invalidateCacheEntry ChannelSidebar
+    cs <- use csChannels
+    forM_ (allTeamIds cs) $ \tId ->
+        mh $ invalidateCacheEntry $ ChannelSidebar tId
 
 usernameForUserId :: UserId -> ChatState -> Maybe Text
 usernameForUserId uId st = _uiName <$> findUserById uId (st^.csUsers)
@@ -2001,7 +2148,8 @@
 
 channelIdByChannelName :: Text -> ChatState -> Maybe ChannelId
 channelIdByChannelName name st =
-    let matches (_, cc) = cc^.ccInfo.cdName == (trimChannelSigil name)
+    let matches (_, cc) = cc^.ccInfo.cdName == (trimChannelSigil name) &&
+                          cc^.ccInfo.cdTeamId == (Just $ st^.csCurrentTeamId)
     in listToMaybe $ fst <$> filteredChannels matches (st^.csChannels)
 
 channelIdByUsername :: Text -> ChatState -> Maybe ChannelId
@@ -2013,11 +2161,6 @@
 useNickname st =
     useNickname' (st^.csClientConfig) (st^.csResources.crUserPreferences)
 
-channelByName :: Text -> ChatState -> Maybe ClientChannel
-channelByName n st = do
-    cId <- channelIdByChannelName n st
-    findChannelById cId (st^.csChannels)
-
 trimChannelSigil :: Text -> Text
 trimChannelSigil n
     | normalChannelSigil `T.isPrefixOf` n = T.tail n
@@ -2038,8 +2181,8 @@
 
 resetAutocomplete :: MH ()
 resetAutocomplete = do
-    csEditState.cedAutocomplete .= Nothing
-    csEditState.cedAutocompletePending .= Nothing
+    csCurrentTeam.tsEditState.cedAutocomplete .= Nothing
+    csCurrentTeam.tsEditState.cedAutocompletePending .= Nothing
 
 
 -- * Slash Commands
@@ -2090,9 +2233,6 @@
 myUserId :: ChatState -> UserId
 myUserId st = myUser st ^. userIdL
 
-myTeamId :: ChatState -> TeamId
-myTeamId st = st ^. csMyTeam . teamIdL
-
 myUser :: ChatState -> User
 myUser st = st^.csMe
 
@@ -2131,12 +2271,16 @@
                  , hSyntaxMap  :: SyntaxMap
                  }
 
+emptyHSet :: HighlightSet
+emptyHSet = HighlightSet Set.empty Set.empty mempty
+
 getHighlightSet :: ChatState -> HighlightSet
 getHighlightSet st =
-    HighlightSet { hUserSet = addSpecialUserMentions $ getUsernameSet $ st^.csUsers
-                 , hChannelSet = getChannelNameSet $ st^.csChannels
-                 , hSyntaxMap = st^.csResources.crSyntaxMap
-                 }
+    let tId = st^.csCurrentTeamId
+    in HighlightSet { hUserSet = addSpecialUserMentions $ getUsernameSet $ st^.csUsers
+                    , hChannelSet = getChannelNameSet tId $ st^.csChannels
+                    , hSyntaxMap = st^.csResources.crSyntaxMap
+                    }
 
 attrNameToConfig :: Brick.AttrName -> Text
 attrNameToConfig = T.pack . intercalate "." . Brick.attrNameComponents
@@ -2163,3 +2307,22 @@
     mh $ invalidateCacheEntry (ChannelMessages cId)
     csChannel(cId) %= (clearNewMessageIndicator .
                        clearEditedThreshold)
+
+moveLeft :: (Eq a) => a -> [a] -> [a]
+moveLeft v as =
+    case elemIndex v as of
+        Nothing -> as
+        Just 0 -> as
+        Just i ->
+            let (h, t) = splitAt i as
+            in init h <> [v, last h] <> tail t
+
+moveRight :: (Eq a) => a -> [a] -> [a]
+moveRight v as =
+    case elemIndex v as of
+        Nothing -> as
+        Just i
+            | i == length as - 1 -> as
+            | otherwise ->
+                let (h, t) = splitAt i as
+                in h <> [head (tail t), v] <> (tail (tail t))
diff --git a/src/Matterhorn/Types/Channels.hs b/src/Matterhorn/Types/Channels.hs
--- a/src/Matterhorn/Types/Channels.hs
+++ b/src/Matterhorn/Types/Channels.hs
@@ -3,6 +3,7 @@
 {-# LANGUAGE DeriveFoldable #-}
 {-# LANGUAGE DeriveTraversable #-}
 {-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE FlexibleInstances #-}
 
 module Matterhorn.Types.Channels
   ( ClientChannel(..)
@@ -20,7 +21,7 @@
   , cdViewed, cdNewMessageIndicator, cdEditedMessageThreshold, cdUpdated
   , cdName, cdDisplayName, cdHeader, cdPurpose, cdType
   , cdMentionCount, cdTypingUsers, cdDMUserId, cdChannelId
-  , cdSidebarShowOverride, cdNotifyProps
+  , cdSidebarShowOverride, cdNotifyProps, cdTeamId
   -- * Lenses created for accessing ChannelContents fields
   , cdMessages, cdFetchPending
   -- * Creating ClientChannel objects
@@ -28,6 +29,7 @@
   -- * Managing ClientChannel collections
   , noChannels, addChannel, removeChannel, findChannelById, modifyChannelById
   , channelByIdL, maybeChannelByIdL
+  , allTeamIds
   , filteredChannelIds
   , filteredChannels
   -- * Creating ChannelInfo objects
@@ -77,6 +79,7 @@
                                           , NotifyOption(..)
                                           , WithDefault(..)
                                           , ServerTime
+                                          , TeamId
                                           , emptyChannelNotifyProps
                                           )
 
@@ -141,6 +144,7 @@
 initialChannelInfo myId chan =
     let updated  = chan ^. channelLastPostAtL
     in ChannelInfo { _cdChannelId              = chan^.channelIdL
+                   , _cdTeamId                 = chan^.channelTeamIdL
                    , _cdViewed                 = Nothing
                    , _cdNewMessageIndicator    = Hide
                    , _cdEditedMessageThreshold = Nothing
@@ -205,6 +209,8 @@
 data ChannelInfo = ChannelInfo
   { _cdChannelId        :: ChannelId
     -- ^ The channel's ID
+  , _cdTeamId           :: Maybe TeamId
+    -- ^ The channel's team ID
   , _cdViewed           :: Maybe ServerTime
     -- ^ The last time we looked at a channel
   , _cdNewMessageIndicator :: NewMessageIndicator
@@ -281,8 +287,8 @@
 -- | Define a binary kinded type to allow derivation of functor.
 data AllMyChannels a =
     AllChannels { _chanMap :: HashMap ChannelId a
+                , _channelNameSet :: HashMap TeamId (S.Set Text)
                 , _userChannelMap :: HashMap UserId ChannelId
-                , _channelNameSet :: S.Set Text
                 }
                 deriving (Functor, Foldable, Traversable)
 
@@ -292,19 +298,23 @@
 
 makeLenses ''AllMyChannels
 
-getChannelNameSet :: ClientChannels -> S.Set Text
-getChannelNameSet = _channelNameSet
+getChannelNameSet :: TeamId -> ClientChannels -> S.Set Text
+getChannelNameSet tId cs = case cs^.channelNameSet.at tId of
+    Nothing -> mempty
+    Just s -> s
 
 -- | Initial collection of Channels with no members
 noChannels :: ClientChannels
-noChannels = AllChannels HM.empty HM.empty mempty
+noChannels = AllChannels HM.empty HM.empty HM.empty
 
 -- | Add a channel to the existing collection.
 addChannel :: ChannelId -> ClientChannel -> ClientChannels -> ClientChannels
 addChannel cId cinfo =
     (chanMap %~ HM.insert cId cinfo) .
     (if cinfo^.ccInfo.cdType `notElem` [Direct, Group]
-     then channelNameSet %~ S.insert (cinfo^.ccInfo.cdName)
+     then case cinfo^.ccInfo.cdTeamId of
+         Nothing -> id
+         Just tId -> channelNameSet %~ HM.insertWith S.union tId (S.singleton $ cinfo^.ccInfo.cdName)
      else id) .
     (case cinfo^.ccInfo.cdDMUserId of
          Nothing -> id
@@ -317,11 +327,21 @@
     let mChan = findChannelById cId cs
         removeChannelName = case mChan of
             Nothing -> id
-            Just ch -> channelNameSet %~ S.delete (ch^.ccInfo.cdName)
+            Just ch -> case ch^.ccInfo.cdTeamId of
+                Nothing -> id
+                Just tId -> channelNameSet %~ HM.adjust (S.delete (ch^.ccInfo.cdName)) tId
     in cs & chanMap %~ HM.delete cId
           & removeChannelName
           & userChannelMap %~ HM.filter (/= cId)
 
+instance Semigroup (AllMyChannels ClientChannel) where
+    a <> b =
+        let pairs = HM.toList $ _chanMap a
+        in foldr (uncurry addChannel) b pairs
+
+instance Monoid (AllMyChannels ClientChannel) where
+    mempty = noChannels
+
 getDmChannelFor :: UserId -> ClientChannels -> Maybe ChannelId
 getDmChannelFor uId cs = cs^.userChannelMap.at uId
 
@@ -351,6 +371,10 @@
 -- ChannelId values for which the filter matched.
 filteredChannelIds :: (ClientChannel -> Bool) -> ClientChannels -> [ChannelId]
 filteredChannelIds f cc = fst <$> filter (f . snd) (HM.toList (cc^.chanMap))
+
+-- | Get all the team IDs in the channel collection.
+allTeamIds :: ClientChannels -> [TeamId]
+allTeamIds cc = HM.keys $ cc^.channelNameSet
 
 -- | Filter the ClientChannel collection, keeping only those for which
 -- the provided filter test function returns True.
diff --git a/src/Matterhorn/Types/Common.hs b/src/Matterhorn/Types/Common.hs
--- a/src/Matterhorn/Types/Common.hs
+++ b/src/Matterhorn/Types/Common.hs
@@ -10,6 +10,7 @@
 import Matterhorn.Prelude
 
 import qualified Data.Text as T
+import Data.Char ( isPrint )
 
 import Network.Mattermost.Types ( UserText, unsafeUserText, UserId(..), Id(..) )
 
@@ -18,9 +19,9 @@
 
 sanitizeUserText' :: T.Text -> T.Text
 sanitizeUserText' =
+    T.filter (\c -> isPrint c || c == '\n') . -- remove non-printable
     T.replace "\ESC" "<ESC>" .
-    T.replace "\t" " " .
-    T.filter (\c -> c >= ' ' || c == '\n')  -- remove non-printable
+    T.replace "\t" " "
 
 -- | Extract the corresponding other user from a direct channel name.
 -- Returns Nothing if the string is not a direct channel name or if it
diff --git a/src/Matterhorn/Types/KeyEvents.hs b/src/Matterhorn/Types/KeyEvents.hs
--- a/src/Matterhorn/Types/KeyEvents.hs
+++ b/src/Matterhorn/Types/KeyEvents.hs
@@ -125,6 +125,12 @@
 
   -- Form submission
   | FormSubmitEvent
+
+  -- Team switching
+  | NextTeamEvent
+  | PrevTeamEvent
+  | MoveCurrentTeamLeftEvent
+  | MoveCurrentTeamRightEvent
     deriving (Eq, Show, Ord, Enum)
 
 allEvents :: [KeyEvent]
@@ -198,6 +204,11 @@
   , SearchSelectUpEvent
   , SearchSelectDownEvent
 
+  , NextTeamEvent
+  , PrevTeamEvent
+  , MoveCurrentTeamLeftEvent
+  , MoveCurrentTeamRightEvent
+
   , FlagMessageEvent
   , PinMessageEvent
   , ViewMessageEvent
@@ -388,6 +399,11 @@
   EditorHomeEvent             -> "editor-home"
   EditorEndEvent              -> "editor-end"
   EditorYankEvent             -> "editor-yank"
+
+  NextTeamEvent               -> "next-team"
+  PrevTeamEvent               -> "prev-team"
+  MoveCurrentTeamLeftEvent    -> "move-current-team-left"
+  MoveCurrentTeamRightEvent   -> "move-current-team-right"
 
   EnterFlaggedPostsEvent    -> "show-flagged-posts"
   ToggleChannelListVisibleEvent -> "toggle-channel-list-visibility"
diff --git a/src/Matterhorn/Types/Messages.hs b/src/Matterhorn/Types/Messages.hs
--- a/src/Matterhorn/Types/Messages.hs
+++ b/src/Matterhorn/Types/Messages.hs
@@ -124,11 +124,7 @@
 
 import           Matterhorn.Types.DirectionalSeq
 import           Matterhorn.Types.Posts
-import           Matterhorn.Types.RichText ( RichTextBlock(..), Element(..)
-                                , ElementData(..), findUsernames, blockGetURLs
-                                , ElementStyle(..), URL(..), parseMarkdown
-                                , TeamURLName
-                                )
+import           Matterhorn.Types.RichText
 
 
 -- | The state of a message's thread context.
@@ -157,7 +153,7 @@
 -- | A 'Message' is any message we might want to render, either from
 --   Mattermost itself or from a client-internal source.
 data Message = Message
-  { _mText          :: Seq RichTextBlock
+  { _mText          :: Blocks
   , _mMarkdownSource :: Text
   , _mUser          :: UserRef
   , _mDate          :: ServerTime
@@ -294,7 +290,7 @@
 data LinkChoice =
     LinkChoice { _linkTime   :: ServerTime
                , _linkUser   :: UserRef
-               , _linkLabel  :: Maybe (Seq Element)
+               , _linkLabel  :: Maybe Inlines
                , _linkTarget :: LinkTarget
                } deriving (Eq, Show)
 
@@ -734,7 +730,7 @@
       mkTarget (Right url) = LinkURL url
       mkTarget (Left (tName, pId)) = LinkPermalink tName pId
       mkEntry (val, text) = LinkChoice (msg^.mDate) uRef text (mkTarget val)
-      msgUrls = mkEntry <$> (Seq.fromList $ mconcat $ blockGetURLs <$> (toList $ msg^.mText))
+      msgUrls = mkEntry <$> (Seq.fromList $ mconcat $ blockGetURLs <$> (F.toList $ unBlocks $ msg^.mText))
       attachmentURLs = (\ a ->
                           LinkChoice
                             (msg^.mDate)
@@ -743,8 +739,8 @@
                             (LinkFileId $ a^.attachmentFileId))
                        <$> (msg^.mAttachments)
       attachmentLabel a =
-          Seq.fromList [ Element Normal $ EText "attachment"
-                       , Element Normal ESpace
-                       , Element Code $ EText $ a^.attachmentName
-                       ]
+          Inlines $ Seq.fromList [ EText "attachment"
+                                 , ESpace
+                                 , ECode $ Inlines $ Seq.singleton $ EText $ a^.attachmentName
+                                 ]
   in msgUrls <> attachmentURLs
diff --git a/src/Matterhorn/Types/Posts.hs b/src/Matterhorn/Types/Posts.hs
--- a/src/Matterhorn/Types/Posts.hs
+++ b/src/Matterhorn/Types/Posts.hs
@@ -59,7 +59,7 @@
 import           Network.Mattermost.Types
 
 import           Matterhorn.Types.Common
-import           Matterhorn.Types.RichText ( RichTextBlock(Blockquote), parseMarkdown
+import           Matterhorn.Types.RichText ( Blocks(..), Block(Blockquote), parseMarkdown
                                            , TeamBaseURL
                                            )
 
@@ -112,7 +112,7 @@
 --   the Mattermost 'Post' type, with unnecessary information
 --   removed and some preprocessing done.
 data ClientPost = ClientPost
-  { _cpText          :: Seq RichTextBlock
+  { _cpText          :: Blocks
   , _cpMarkdownSource :: Text
   , _cpUser          :: Maybe UserId
   , _cpUserOverride  :: Maybe Text
@@ -193,10 +193,10 @@
 
 -- | Convert a Mattermost 'Post' to a 'ClientPost', passing in a
 --   'ParentId' if it has a known one.
-toClientPost :: TeamBaseURL -> Post -> Maybe PostId -> ClientPost
+toClientPost :: Maybe TeamBaseURL -> Post -> Maybe PostId -> ClientPost
 toClientPost baseUrl p parentId =
   let src = unEmote (postClientPostType p) $ sanitizeUserText $ postMessage p
-  in ClientPost { _cpText          = parseMarkdown (Just baseUrl) src <> getAttachmentText p
+  in ClientPost { _cpText          = parseMarkdown baseUrl src <> getAttachmentText p
                 , _cpMarkdownSource = src
                 , _cpUser          = postUserId p
                 , _cpUserOverride  = p^.postPropsL.postPropsOverrideUsernameL
@@ -216,12 +216,12 @@
 
 -- | Right now, instead of treating 'attachment' properties specially, we're
 --   just going to roll them directly into the message text
-getAttachmentText :: Post -> Seq RichTextBlock
+getAttachmentText :: Post -> Blocks
 getAttachmentText p =
   case p^.postPropsL.postPropsAttachmentsL of
-    Nothing -> Seq.empty
+    Nothing -> mempty
     Just attachments ->
-      fmap (Blockquote . render) attachments
+      Blocks $ fmap (Blockquote . render) attachments
   where render att = parseMarkdown Nothing (att^.ppaTextL) <>
                      parseMarkdown Nothing (att^.ppaFallbackL)
 
diff --git a/src/Matterhorn/Types/RichText.hs b/src/Matterhorn/Types/RichText.hs
--- a/src/Matterhorn/Types/RichText.hs
+++ b/src/Matterhorn/Types/RichText.hs
@@ -1,18 +1,29 @@
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
 -- | This module provides a set of data types to represent message text.
--- The types here are based loosely on the @cheapskate@ package's types
--- but provide higher-level support for the kinds of things we find in
--- Mattermost messages such as user and channel references.
+-- The inline and block types in this module are designed to represent
+-- most of what is found in Markdown documents (particularly the
+-- Commonmark specification) in addition to other things we find in
+-- Mattermost messages, such as username or channel references.
 --
 -- To parse a Markdown document, use 'parseMarkdown'. To actually render
 -- text in this representation, see the module 'Draw.RichText'.
 module Matterhorn.Types.RichText
-  ( RichTextBlock(..)
-  , ListType(..)
+  ( Blocks(..)
+  , unBlocks
+
+  , Block(..)
+  , sameBlockType
   , CodeBlockInfo(..)
-  , NumDecoration(..)
-  , Element(..)
-  , ElementData(..)
-  , ElementStyle(..)
+  , Inline(..)
+  , Inlines(..)
+  , unInlines
+
+  , C.ListType(..)
+  , C.ListSpacing(..)
+  , C.EnumeratorType(..)
+  , C.DelimiterType(..)
+
   , TeamBaseURL(..)
   , TeamURLName(..)
 
@@ -20,32 +31,33 @@
   , unURL
 
   , parseMarkdown
-  , setElementStyle
 
   , findUsernames
   , blockGetURLs
   , findVerbatimChunk
-
-  -- Exposed for testing only:
-  , fromMarkdownBlocks
   )
 where
 
 import           Prelude ()
 import           Matterhorn.Prelude
 
-import qualified Cheapskate as C
-import           Data.Char ( isAlphaNum, isAlpha )
+import qualified Commonmark as C
+import qualified Commonmark.Extensions as C
+import qualified Commonmark.Inlines as C
+import qualified Commonmark.TokParsers as C
+import           Control.Monad.Identity
 import qualified Data.Foldable as F
+import           Data.List ( intersperse )
 import           Data.Monoid (First(..))
 import qualified Data.Set as S
 import qualified Data.Sequence as Seq
-import           Data.Sequence ( (<|), ViewL((:<)) )
+import           Data.Sequence ( (<|), viewl, viewr, ViewL((:<)), ViewR((:>)) )
 import qualified Data.Text as T
+import qualified Text.Parsec as P
 
 import           Network.Mattermost.Types ( PostId(..), Id(..), ServerBaseURL(..) )
 
-import           Matterhorn.Constants ( userSigil, normalChannelSigil )
+import           Matterhorn.Constants ( userSigilChar, normalChannelSigilChar )
 
 -- | A team name found in a Mattermost post URL
 data TeamURLName = TeamURLName Text
@@ -55,15 +67,28 @@
 data TeamBaseURL = TeamBaseURL TeamURLName ServerBaseURL
                  deriving (Eq, Show)
 
+-- | A sequence of rich text blocks.
+newtype Blocks = Blocks (Seq Block)
+            deriving (Semigroup, Monoid, Show)
+
+unBlocks :: Blocks -> Seq Block
+unBlocks (Blocks bs) = bs
+
+singleB :: Block -> Blocks
+singleB = Blocks . Seq.singleton
+
 -- | A block in a rich text document.
-data RichTextBlock =
-    Para (Seq Element)
+--
+-- NOTE: update 'sameBlockType' when constructors are added to this
+-- type.
+data Block =
+    Para Inlines
     -- ^ A paragraph.
-    | Header Int (Seq Element)
+    | Header Int Inlines
     -- ^ A section header with specified depth and contents.
-    | Blockquote (Seq RichTextBlock)
+    | Blockquote Blocks
     -- ^ A blockquote.
-    | List Bool ListType (Seq (Seq RichTextBlock))
+    | List C.ListType C.ListSpacing (Seq Blocks)
     -- ^ An itemized list.
     | CodeBlock CodeBlockInfo Text
     -- ^ A code block.
@@ -73,14 +98,15 @@
     -- ^ A horizontal rule.
     deriving (Show)
 
--- | The type of itemized list items.
-data ListType =
-    Bullet Char
-    -- ^ Decorate the items with bullet using the specified character.
-    | Numbered NumDecoration Int
-    -- ^ Number the items starting at the specified number; use the
-    -- indicated decoration following the number.
-    deriving (Eq, Show, Ord)
+-- | Returns whether two blocks have the same type.
+sameBlockType :: Block -> Block -> Bool
+sameBlockType (Para {})       (Para {})       = True
+sameBlockType (Header {})     (Header {})     = True
+sameBlockType (Blockquote {}) (Blockquote {}) = True
+sameBlockType (List {})       (List {})       = True
+sameBlockType (CodeBlock {})  (CodeBlock {})  = True
+sameBlockType (HTMLBlock {})  (HTMLBlock {})  = True
+sameBlockType _               _               = False
 
 -- | Information about a code block.
 data CodeBlockInfo =
@@ -96,25 +122,6 @@
                   }
                   deriving (Eq, Show, Ord)
 
--- | Ways to decorate numbered itemized list items. The decoration
--- follows the list item number.
-data NumDecoration =
-    Paren
-    | Period
-    deriving (Eq, Show, Ord)
-
--- | A single logical inline element in a rich text block.
-data Element =
-    Element { eStyle :: ElementStyle
-            -- ^ The element's visual style.
-            , eData :: ElementData
-            -- ^ The element's data.
-            }
-            deriving (Show, Eq, Ord)
-
-setElementStyle :: ElementStyle -> Element -> Element
-setElementStyle s e = e { eStyle = s }
-
 -- | A URL.
 newtype URL = URL Text
             deriving (Eq, Show, Ord)
@@ -122,9 +129,18 @@
 unURL :: URL -> Text
 unURL (URL url) = url
 
--- | The kinds of data that can appear in rich text elements.
-data ElementData =
+-- | The kinds of inline values that can appear in rich text blocks.
+data Inline =
     EText Text
+    -- ^ Plain text that SHOULD be a contiguous sequence of
+    -- non-whitespace characters.
+    | EEmph Inlines
+    -- ^ Emphasized (usually italicized) content.
+    | EStrikethrough Inlines
+    -- ^ Strikethrough content.
+    | EStrong Inlines
+    -- ^ Boldface content.
+    | ECode Inlines
     -- ^ A sequence of non-whitespace characters.
     | ESpace
     -- ^ A single space.
@@ -147,261 +163,197 @@
     | EChannel Text
     -- ^ A channel reference. The text here includes only the channel
     -- name, not the sigil.
-    | EHyperlink URL (Maybe (Seq Element))
+    | EHyperlink URL Inlines
     -- ^ A hyperlink to the specified URL. Optionally provides an
     -- element sequence indicating the URL's text label; if absent, the
     -- label is understood to be the URL itself.
-    | EImage URL (Maybe (Seq Element))
+    | EImage URL Inlines
     -- ^ An image at the specified URL. Optionally provides an element
     -- sequence indicating the image's "alt" text label; if absent, the
     -- label is understood to be the URL itself.
     | EEmoji Text
     -- ^ An emoji reference. The text here includes only the text
     -- portion, not the colons, e.g. "foo" instead of ":foo:".
-    | ENonBreaking (Seq Element)
+    | ENonBreaking Inlines
     -- ^ A sequence of elements that must never be separated during line
     -- wrapping.
-    | EPermalink TeamURLName PostId (Maybe (Seq Element))
+    | EPermalink TeamURLName PostId (Maybe Inlines)
     -- ^ A permalink to the specified team (name) and post ID with an
     -- optional label.
     deriving (Show, Eq, Ord)
 
--- | Element visual styles.
-data ElementStyle =
-    Normal
-    -- ^ Normal text
-    | Emph
-    -- ^ Emphasized text
-    | Strikethrough
-    -- ^ Strikethrough text
-    | Strong
-    -- ^ Bold text
-    | Code
-    -- ^ Inline code segment or code block
-    | Hyperlink URL ElementStyle
-    -- ^ A terminal hyperlink to the specified URL, composed with
-    -- another element style
-    | Permalink
-    -- ^ A post permalink
-    deriving (Eq, Show, Ord)
+-- | A sequence of inline values.
+newtype Inlines = Inlines (Seq Inline)
+                deriving (Monoid, Ord, Eq, Show)
 
-parseMarkdown :: Maybe TeamBaseURL -> T.Text -> Seq RichTextBlock
-parseMarkdown baseUrl t =
-    fromMarkdownBlocks baseUrl bs where C.Doc _ bs = C.markdown C.def t
+unInlines :: Inlines -> Seq Inline
+unInlines (Inlines is) = is
 
--- | Convert a sequence of markdown (Cheapskate) blocks into rich text
--- blocks.
-fromMarkdownBlocks :: Maybe TeamBaseURL -> C.Blocks -> Seq RichTextBlock
-fromMarkdownBlocks baseUrl = fmap (fromMarkdownBlock baseUrl)
+singleI :: Inline -> Inlines
+singleI = Inlines . Seq.singleton
 
--- | Convert a single markdown block into a single rich text block.
-fromMarkdownBlock :: Maybe TeamBaseURL -> C.Block -> RichTextBlock
-fromMarkdownBlock baseUrl (C.Para is) =
-    Para $ fromMarkdownInlines baseUrl is
-fromMarkdownBlock baseUrl (C.Header level is) =
-    Header level $ fromMarkdownInlines baseUrl is
-fromMarkdownBlock baseUrl (C.Blockquote bs) =
-    Blockquote $ fromMarkdownBlock baseUrl <$> bs
-fromMarkdownBlock baseUrl (C.List f ty bss) =
-    List f (fromMarkdownListType ty) $ fmap (fromMarkdownBlock baseUrl) <$> Seq.fromList bss
-fromMarkdownBlock _ (C.CodeBlock attr body) =
-    CodeBlock (fromMarkdownCodeAttr attr) body
-fromMarkdownBlock _ (C.HtmlBlock body) =
-    HTMLBlock body
-fromMarkdownBlock _ C.HRule =
-    HRule
+instance Semigroup Inlines where
+    (Inlines l) <> (Inlines r) =
+        Inlines $ case (viewr l, viewl r) of
+            (lInit :> lLast, rHead :< rTail) ->
+                case (lLast, rHead) of
+                    (EText a, EText b) ->
+                        lInit <> ((EText $ a <> b) <| rTail)
+                    (ECode a, ECode b) ->
+                        lInit <> ((ECode $ a <> b) <| rTail)
+                    (EEmph a, EEmph b) ->
+                        lInit <> ((EEmph $ a <> b) <| rTail)
+                    (EStrikethrough a, EStrikethrough b) ->
+                        lInit <> ((EStrikethrough $ a <> b) <| rTail)
+                    (EStrong a, EStrong b) ->
+                        lInit <> ((EStrong $ a <> b) <| rTail)
+                    (_, _) ->
+                        l <> r
+            (_, _) -> l <> r
 
-fromMarkdownCodeAttr :: C.CodeAttr -> CodeBlockInfo
-fromMarkdownCodeAttr (C.CodeAttr lang info) =
-    let strippedLang = T.strip lang
-        strippedInfo = T.strip info
-        maybeText t = if T.null t then Nothing else Just t
-    in CodeBlockInfo (maybeText strippedLang)
-                     (maybeText strippedInfo)
+-- A dummy instance just to satisfy commonmark; we don't use this.
+instance C.Rangeable Inlines where
+    ranged _ = id
 
-fromMarkdownListType :: C.ListType -> ListType
-fromMarkdownListType (C.Bullet c) =
-    Bullet c
-fromMarkdownListType (C.Numbered wrap i) =
-    let dec = case wrap of
-                  C.PeriodFollowing -> Period
-                  C.ParenFollowing -> Paren
-    in Numbered dec i
+-- A dummy instance just to satisfy commonmark; we don't use this.
+instance C.HasAttributes Inlines where
+    addAttributes _ = id
 
--- | Remove hyperlinks from an inline sequence. This should only be used
--- for sequences that are themselves used as labels for hyperlinks; this
--- prevents them from embedding their own hyperlinks, which is nonsense.
---
--- Any hyperlinks found in the sequence will be replaced with a text
--- represent of their URL (if they have no label) or the label itself
--- otherwise.
-removeHyperlinks :: Seq C.Inline -> Seq C.Inline
-removeHyperlinks is =
-    case Seq.viewl is of
-        h :< t ->
-            case h of
-                C.Link label theUrl _ ->
-                    if Seq.null label
-                    then C.Str theUrl <| removeHyperlinks t
-                    else removeHyperlinks label <> removeHyperlinks t
-                _ -> h <| removeHyperlinks t
-        Seq.EmptyL -> mempty
+instance C.IsInline Inlines where
+    lineBreak = singleI ELineBreak
+    softBreak = singleI ESoftBreak
+    str t = Inlines $ Seq.fromList $
+            filter (/= (EText "")) $
+            intersperse ESpace $ EText <$> T.splitOn " " t
+    entity = singleI . EText
+    escapedChar = singleI . EText . T.singleton
+    emph = singleI . EEmph
+    strong = singleI . EStrong
+    link url _title desc = singleI $ EHyperlink (URL url) desc
+    image url _title desc = singleI $ EImage (URL url) desc
+    code t = singleI $ ECode $ C.str t
+    rawInline _ = singleI . ERawHtml
 
--- | Convert a sequence of Markdown inline values to a sequence of
--- Elements.
---
--- This conversion converts sequences of Markdown AST fragments into
--- RichText elements. In particular, this function may determine that
--- some sequences of Markdown text fragments belong together, such as
--- the sequence @["@", "joe", "-", "user"]@, which should be treated as
--- a single "@joe-user" token due to username character validation. When
--- appropriate, this function does such consolidation when converting to
--- RichText elements.
---
--- This function is also partially responsible for paving the way for
--- line-wrapping later on when RichText is rendered. This means that,
--- when possible, the elements produced by this function need to be as
--- small as possible, without losing structure information. An example
--- of this is Markdown inline code fragments, such as "`this is code`".
--- This function will convert that one Markdown inline code fragment
--- into a sequence of five RichText elements, each with a "Code" style
--- assigned: @[EText "this", ESpace, EText "is", ESpace, EText "code"]@.
--- This "flattening" of the original Markdown structure makes it much
--- easier to do line-wrapping without losing style information because
--- it is possible to gather up tokens that do not exceed line widths
--- without losing style information. This is key to rendering the text
--- with the right terminal attributes.
+instance C.HasStrikethrough Inlines where
+    strikethrough = singleI . EStrikethrough
+
+-- Syntax extension for parsing ~channel references.
+channelSpec :: (Monad m) => C.SyntaxSpec m Inlines Blocks
+channelSpec =
+    mempty { C.syntaxInlineParsers = [C.withAttributes parseChannel]
+           }
+
+parseChannel :: (Monad m) => C.InlineParser m Inlines
+parseChannel = P.try $ do
+    void $ C.symbol normalChannelSigilChar
+    let chunk = C.satisfyWord (const True) <|> C.symbol '_' <|> C.symbol '-'
+    cts <- P.many1 chunk
+    return $ singleI $ EChannel $ C.untokenize cts
+
+-- Syntax extension for parsing @username references.
+usernameSpec :: (Monad m) => C.SyntaxSpec m Inlines Blocks
+usernameSpec =
+    mempty { C.syntaxInlineParsers = [C.withAttributes parseUsername]
+           }
+
+parseUsername :: (Monad m) => C.InlineParser m Inlines
+parseUsername = P.try $ do
+    void $ C.symbol userSigilChar
+    let chunk = C.satisfyWord (const True) <|> C.symbol '_' <|> C.symbol '-'
+        [period] = C.tokenize "" "."
+    uts <- intersperse period <$> P.sepBy1 chunk (C.symbol '.')
+    return $ singleI $ EUser $ C.untokenize uts
+
+-- Syntax extension for parsing :emoji: references.
 --
--- However, there are a couple of cases where such flattening does *not*
--- happen: hyperlinks and images. In these cases we do not flatten the
--- (arbitrary) text label structure of links and images because we need
--- to be able to recover those labels to gather up URLs to show to the
--- user in the URL list. So we leave the complete text structure of
--- those labels behind in the 'EHyperlink' and 'EImage' constructors as
--- sequences of Elements. This means that logic in 'Draw.RichText' that
--- does line-wrapping will have to explicitly break up link and image
--- labels across line breaks.
-fromMarkdownInlines :: Maybe TeamBaseURL -> Seq C.Inline -> Seq Element
-fromMarkdownInlines baseUrl inlines =
-    let go sty is = case Seq.viewl is of
-          C.Str "~" :< xs ->
-              case Seq.viewl xs of
-                  C.Str "~" :< xs2 ->
-                      case takeUntilStrikethroughEnd xs2 of
-                          Nothing -> Element sty (EText "~") <|
-                                     go sty xs
-                          Just (strikethroughInlines, rest) ->
-                              go Strikethrough strikethroughInlines <>
-                              go sty rest
-                  _ ->
-                      let (cFrags, rest) = Seq.spanl isNameFragment xs
-                          cn = T.concat (unsafeGetStr <$> F.toList cFrags)
-                      in if not (T.null cn)
-                         then Element sty (EChannel cn) <| go sty rest
-                         else Element sty (EText normalChannelSigil) <| go sty xs
-          C.Str ":" :< xs ->
-              let validEmojiFragment (C.Str f) =
-                      f `elem` ["_", "-"] || T.all isAlphaNum f
-                  validEmojiFragment _ = False
-                  (emojiFrags, rest) = Seq.spanl validEmojiFragment xs
-                  em = T.concat $ unsafeGetStr <$> F.toList emojiFrags
-              in case Seq.viewl rest of
-                  C.Str ":" :< rest2 ->
-                      Element Normal (EEmoji em) <| go sty rest2
-                  _ ->
-                      Element sty (EText ":") <| go sty xs
-          C.Str t :< xs | userSigil `T.isPrefixOf` t ->
-              let (uFrags, rest) = Seq.spanl isNameFragment xs
-                  t' = T.concat $ t : (unsafeGetStr <$> F.toList uFrags)
-                  u = T.drop 1 t'
-              in Element sty (EUser u) <| go sty rest
-          C.Str t :< xs ->
-              -- When we encounter a string node, we go ahead and
-              -- process the rest of the nodes in the sequence. If the
-              -- new sequence starts with *another* string node with
-              -- the same style, we merge them. We do this because
-              -- Cheapskate will parse things like punctuation as
-              -- individual string nodes, but we want to keep those
-              -- together with any text is adjacent to them to avoid
-              -- e.g. breaking up quotes from quoted text when doing
-              -- line-wrapping. It's important to make sure we only do
-              -- this for adjacent string (i.e. not whitespace) nodes
-              -- and that we make sure we only merge when they have the
-              -- same style.
-              let rest = go sty xs
-                  e = Element sty (EText t)
-              in case Seq.viewl rest of
-                  Element sty2 (EText t2) :< tail_ | sty2 == sty ->
-                      (Element sty (EText (t <> t2))) <| tail_
-                  _ ->
-                      e <| rest
-          C.Space :< xs ->
-              Element sty ESpace <| go sty xs
-          C.SoftBreak :< xs ->
-              Element sty ESoftBreak <| go sty xs
-          C.LineBreak :< xs ->
-              Element sty ELineBreak <| go sty xs
-          C.Link label theUrl _ :< xs ->
-              let mLabel = if Seq.null label
-                           then Nothing
-                           else case F.toList label of
-                               [C.Str u] | u == theUrl -> Nothing
-                               _ -> Just $ fromMarkdownInlines baseUrl $ removeHyperlinks label
-                  rest = go sty xs
-                  this = case flip getPermalink theUrl =<< baseUrl of
-                      Nothing ->
-                          let url = URL theUrl
-                          in Element (Hyperlink url sty) $ EHyperlink url mLabel
-                      Just (tName, pId) ->
-                          Element Permalink $ EPermalink tName pId mLabel
-              in this <| rest
-          C.Image altIs theUrl _ :< xs ->
-              let mLabel = if Seq.null altIs
-                           then Nothing
-                           else Just $ fromMarkdownInlines baseUrl altIs
-                  url = URL theUrl
-              in (Element (Hyperlink url sty) $ EImage url mLabel) <| go sty xs
-          C.RawHtml t :< xs ->
-              Element sty (ERawHtml t) <| go sty xs
-          C.Code t :< xs ->
-              -- We turn a single code string into individual Elements
-              -- so we can perform line-wrapping on the inline code
-              -- text.
-              let ts = [ Element Code frag
-                       | wd <- T.split (== ' ') t
-                       , frag <- case wd of
-                           "" -> [ESpace]
-                           _  -> [ESpace, EText wd]
-                       ]
-                  ts' = case ts of
-                    (Element _ ESpace:rs) -> rs
-                    _                     -> ts
-              in Seq.fromList ts' <> go sty xs
-          C.Emph as :< xs ->
-              go Emph as <> go sty xs
-          C.Strong as :< xs ->
-              go Strong as <> go sty xs
-          C.Entity t :< xs ->
-              Element sty (EText t) <| go sty xs
-          Seq.EmptyL -> mempty
+-- NOTE: the commonmark-extensions package also provides a syntax
+-- extension for exactly this. Why don't we use it? I'm glad you asked.
+-- We don't use it because that extension actually checks to see whether
+-- emoji are valid by looking in a database (provided by the 'emojis'
+-- package). While that's actually a great feature, it is problematic
+-- when that package's emoji database does not exactly match the one
+-- that the Mattermost server uses. As a result, Matterhorn may think
+-- that some valid emoji (according to the server) is invalid (according
+-- to the 'emojis' package). Instead of using that extension, we made
+-- our own that does *not* validate the emoji references at parse time.
+-- We just parse them and keep them around, and then validate them at
+-- *render* time. That way we can allow anything to parse, but change
+-- how we render valid and invalid emoji based on a copy of the server's
+-- emoji database that we bundle with Matterhorn.
+emojiSpec :: (Monad m) => C.SyntaxSpec m Inlines Blocks
+emojiSpec =
+    mempty { C.syntaxInlineParsers = [C.withAttributes parseEmoji]
+           }
 
-    in go Normal inlines
+parseEmoji :: (Monad m) => C.InlineParser m Inlines
+parseEmoji = P.try $ do
+    void $ C.symbol ':'
+    ts <- P.many1 $ C.satisfyWord (const True)
+               <|> C.symbol '_'
+               <|> C.symbol '+'
+               <|> C.symbol '-'
+    void $ C.symbol ':'
+    let kw = C.untokenize ts
+    return $ singleI $ EEmoji kw
 
-takeUntilStrikethroughEnd :: Seq C.Inline -> Maybe (Seq C.Inline, Seq C.Inline)
-takeUntilStrikethroughEnd is =
-    let go pos s = case Seq.viewl s of
-            C.Str "~" :< rest ->
-                case Seq.viewl rest of
-                    C.Str "~" :< _ ->
-                        Just pos
-                    _ -> go (pos + 1) rest
-            _ :< rest -> go (pos + 1) rest
-            Seq.EmptyL -> Nothing
-    in do
-        pos <- go 0 is
-        let (h, t) = Seq.splitAt pos is
-        return (h, Seq.drop 2 t)
+-- A dummy instance just to satisfy commonmark; we don't use this.
+instance C.HasAttributes Blocks where
+    addAttributes _ = id
 
+-- A dummy instance just to satisfy commonmark; we don't use this.
+instance C.Rangeable Blocks where
+    ranged _ = id
+
+instance C.IsBlock Inlines Blocks where
+    paragraph = singleB . Para
+    plain = singleB . Para
+    thematicBreak = singleB HRule
+    blockQuote = singleB . Blockquote
+    codeBlock infoTxt content = singleB $ CodeBlock (parseCodeBlockInfo infoTxt) content
+    heading level i = singleB $ Header level i
+    rawBlock _format content = singleB $ CodeBlock (parseCodeBlockInfo "") content
+    list ty spacing bs = singleB $ List ty spacing $ Seq.fromList bs
+    referenceLinkDefinition _label (_dest, _title) = mempty
+
+parseCodeBlockInfo :: Text -> CodeBlockInfo
+parseCodeBlockInfo t = CodeBlockInfo lang info
+    where
+        ws = T.words t
+        (lang, info) = case ws of
+            [l, i] -> (Just l, Just i)
+            [l]    -> (Just l, Nothing)
+            _      -> (Nothing, Nothing)
+
+-- | Parse markdown input text to RichText.
+--
+-- Note that this always returns a block sequence even if the input
+-- cannot be parsed. It isn't yet clear just how permissive the
+-- commonmark parser is, but so far we have not encountered any issues.
+-- If the input document is so broken that commonmark cannot parse it,
+-- we return an empty block sequence.
+parseMarkdown :: Maybe TeamBaseURL
+              -- ^ If provided, perform post link detection whenever a
+              -- hyperlink is parsed by checking to see if the post link
+              -- is a post in this Mattermost team
+              -> T.Text
+              -- ^ The markdown input text to parse
+              -> Blocks
+parseMarkdown mBaseUrl t =
+    let customSyntax = mconcat $ markdownExtensions <> [C.defaultSyntaxSpec]
+        markdownExtensions =
+            [ C.autolinkSpec
+            , C.strikethroughSpec
+            , usernameSpec
+            , channelSpec
+            , emojiSpec
+            ]
+
+    in case runIdentity $ C.commonmarkWith customSyntax "-" t of
+        Left _ -> mempty
+        Right bs -> case mBaseUrl of
+            Nothing -> bs
+            Just baseUrl -> rewriteBlocksPermalinks baseUrl bs
+
 -- | If the specified URL matches the active server base URL and team
 -- and refers to a post, extract the team name and post ID values and
 -- return them.
@@ -419,20 +371,68 @@
                then Just (tName, PI $ Id pIdStr)
                else Nothing
 
+-- | Locate post hyperlinks in the block sequence and rewrite them as
+-- post permalinks.
+rewriteBlocksPermalinks :: TeamBaseURL -> Blocks -> Blocks
+rewriteBlocksPermalinks u (Blocks bs) = Blocks $ rewriteBlockPermalinks u <$> bs
 
-unsafeGetStr :: C.Inline -> Text
-unsafeGetStr (C.Str t) = t
-unsafeGetStr _ = error "BUG: unsafeGetStr called on non-Str Inline"
+-- | Locate post hyperlinks in the block and rewrite them as post
+-- permalinks.
+rewriteBlockPermalinks :: TeamBaseURL -> Block -> Block
+rewriteBlockPermalinks u (Para s) = Para $ rewriteInlinePermalinks u s
+rewriteBlockPermalinks u (Header i s) = Header i $ rewriteInlinePermalinks u s
+rewriteBlockPermalinks u (Blockquote bs) = Blockquote $ rewriteBlocksPermalinks u bs
+rewriteBlockPermalinks u (List ty spacing bss) = List ty spacing $ rewriteBlocksPermalinks u <$> bss
+rewriteBlockPermalinks _ b@(CodeBlock {}) = b
+rewriteBlockPermalinks _ b@(HTMLBlock {}) = b
+rewriteBlockPermalinks _ b@HRule = b
 
--- | Obtain all username references in a sequence of rich text blocks.
-findUsernames :: Seq RichTextBlock -> S.Set T.Text
-findUsernames = S.unions . F.toList . fmap blockFindUsernames
+-- | Locate post hyperlinks in the inline sequence and rewrite them as
+-- post permalinks.
+rewriteInlinePermalinks :: TeamBaseURL -> Inlines -> Inlines
+rewriteInlinePermalinks u (Inlines is) = Inlines $ rewriteInlinePermalink u <$> is
 
-blockFindUsernames :: RichTextBlock -> S.Set T.Text
+-- | Locate post hyperlinks in the inline value and rewrite them as post
+-- permalinks.
+rewriteInlinePermalink :: TeamBaseURL -> Inline -> Inline
+rewriteInlinePermalink u i@(EHyperlink url label) =
+    case getPermalink u (unURL url) of
+        Nothing -> i
+        Just (tName, pId) ->
+            -- Get rid of permalink labels if they just match the URL,
+            -- because that's how Commonmark-extensions parses them. We
+            -- would rather only preserve the label if it differs from
+            -- the URL.
+            let newLabel = if label == Inlines (Seq.fromList [EText $ unURL url])
+                           then Nothing
+                           else Just label
+            in EPermalink tName pId newLabel
+rewriteInlinePermalink u (EEmph s) = EEmph $ rewriteInlinePermalinks u s
+rewriteInlinePermalink u (ECode s) = ECode $ rewriteInlinePermalinks u s
+rewriteInlinePermalink u (EStrikethrough s) = EStrikethrough $ rewriteInlinePermalinks u s
+rewriteInlinePermalink u (EStrong s) = EStrong $ rewriteInlinePermalinks u s
+rewriteInlinePermalink u (ENonBreaking s) = ENonBreaking $ rewriteInlinePermalinks u s
+rewriteInlinePermalink _ i@(EText {}) = i
+rewriteInlinePermalink _ i@ESpace = i
+rewriteInlinePermalink _ i@ESoftBreak = i
+rewriteInlinePermalink _ i@ELineBreak = i
+rewriteInlinePermalink _ i@(EEditSentinel {}) = i
+rewriteInlinePermalink _ i@(ERawHtml {}) = i
+rewriteInlinePermalink _ i@(EEmoji {}) = i
+rewriteInlinePermalink _ i@(EUser {}) = i
+rewriteInlinePermalink _ i@(EChannel {}) = i
+rewriteInlinePermalink _ i@(EImage {}) = i
+rewriteInlinePermalink _ i@(EPermalink {}) = i
+
+-- | Obtain all username references in a rich text document.
+findUsernames :: Blocks -> S.Set T.Text
+findUsernames (Blocks bs) = S.unions $ F.toList $ fmap blockFindUsernames bs
+
+blockFindUsernames :: Block -> S.Set T.Text
 blockFindUsernames (Para is) =
-    elementFindUsernames $ F.toList is
+    inlineFindUsernames $ F.toList $ unInlines is
 blockFindUsernames (Header _ is) =
-    elementFindUsernames $ F.toList is
+    inlineFindUsernames $ F.toList $ unInlines is
 blockFindUsernames (Blockquote bs) =
     findUsernames bs
 blockFindUsernames (List _ _ bs) =
@@ -440,47 +440,39 @@
 blockFindUsernames _ =
     mempty
 
-elementFindUsernames :: [Element] -> S.Set T.Text
-elementFindUsernames [] = mempty
-elementFindUsernames (e : es) =
-    case eData e of
-        EUser u -> S.insert u $ elementFindUsernames es
-        _ -> elementFindUsernames es
+inlineFindUsernames :: [Inline] -> S.Set T.Text
+inlineFindUsernames [] = mempty
+inlineFindUsernames (i : is) =
+    case i of
+        EUser u -> S.insert u $ inlineFindUsernames is
+        _ -> inlineFindUsernames is
 
 -- | Obtain all URLs (and optional labels) in a rich text block.
-blockGetURLs :: RichTextBlock -> [(Either (TeamURLName, PostId) URL, Maybe (Seq Element))]
+blockGetURLs :: Block -> [(Either (TeamURLName, PostId) URL, Maybe Inlines)]
 blockGetURLs (Para is) =
-    catMaybes $ elementGetURL <$> toList is
+    catMaybes $ elementGetURL <$> (toList $ unInlines is)
 blockGetURLs (Header _ is) =
-    catMaybes $ elementGetURL <$> toList is
+    catMaybes $ elementGetURL <$> (toList $ unInlines is)
 blockGetURLs (Blockquote bs) =
-    mconcat $ blockGetURLs <$> toList bs
+    mconcat $ blockGetURLs <$> toList (unBlocks bs)
 blockGetURLs (List _ _ bss) =
     mconcat $ mconcat $
-    (fmap blockGetURLs . F.toList) <$> F.toList bss
+    (fmap blockGetURLs . F.toList . unBlocks) <$> F.toList bss
 blockGetURLs _ =
     mempty
 
-elementGetURL :: Element -> Maybe (Either (TeamURLName, PostId) URL, Maybe (Seq Element))
-elementGetURL (Element _ (EHyperlink url label)) =
-    Just (Right url, label)
-elementGetURL (Element _ (EImage url label)) =
-    Just (Right url, label)
-elementGetURL (Element _ (EPermalink tName pId label)) =
+elementGetURL :: Inline -> Maybe (Either (TeamURLName, PostId) URL, Maybe Inlines)
+elementGetURL (EHyperlink url label) =
+    Just (Right url, Just label)
+elementGetURL (EImage url label) =
+    Just (Right url, Just label)
+elementGetURL (EPermalink tName pId label) =
     Just (Left (tName, pId), label)
 elementGetURL _ =
     Nothing
 
 -- | Find the first code block in a sequence of rich text blocks.
-findVerbatimChunk :: Seq RichTextBlock -> Maybe Text
-findVerbatimChunk = getFirst . F.foldMap go
+findVerbatimChunk :: Blocks -> Maybe Text
+findVerbatimChunk (Blocks bs) = getFirst $ F.foldMap go bs
   where go (CodeBlock _ t) = First (Just t)
         go _               = First Nothing
-
-isValidNameChar :: Char -> Bool
-isValidNameChar c = isAlpha c || c == '_' || c == '.' || c == '-'
-
-isNameFragment :: C.Inline -> Bool
-isNameFragment (C.Str t) =
-    not (T.null t) && isValidNameChar (T.head t)
-isNameFragment _ = False
diff --git a/src/Matterhorn/Windows/ViewMessage.hs b/src/Matterhorn/Windows/ViewMessage.hs
--- a/src/Matterhorn/Windows/ViewMessage.hs
+++ b/src/Matterhorn/Windows/ViewMessage.hs
@@ -21,39 +21,41 @@
 import qualified Graphics.Vty as Vty
 import           Lens.Micro.Platform ( to )
 
+import           Network.Mattermost.Types ( TeamId )
+
 import           Matterhorn.Constants
 import           Matterhorn.Events.Keybindings
 import           Matterhorn.Themes
 import           Matterhorn.Types
 import           Matterhorn.Draw.RichText
-import           Matterhorn.Draw.Messages ( nameForUserRef )
+import           Matterhorn.Draw.Messages ( renderMessage, MessageData(..), nameForUserRef )
 
 -- | The template for "View Message" windows triggered by message
 -- selection mode.
-viewMessageWindowTemplate :: TabbedWindowTemplate ViewMessageWindowTab
-viewMessageWindowTemplate =
-    TabbedWindowTemplate { twtEntries = [ messageEntry
-                                        , reactionsEntry
+viewMessageWindowTemplate :: TeamId -> TabbedWindowTemplate ViewMessageWindowTab
+viewMessageWindowTemplate tId =
+    TabbedWindowTemplate { twtEntries = [ messageEntry tId
+                                        , reactionsEntry tId
                                         ]
                          , twtTitle = const $ txt "View Message"
                          }
 
-messageEntry :: TabbedWindowEntry ViewMessageWindowTab
-messageEntry =
+messageEntry :: TeamId -> TabbedWindowEntry ViewMessageWindowTab
+messageEntry tId =
     TabbedWindowEntry { tweValue = VMTabMessage
                       , tweRender = renderTab
                       , tweHandleEvent = handleEvent
                       , tweTitle = tabTitle
-                      , tweShowHandler = onShow
+                      , tweShowHandler = onShow tId
                       }
 
-reactionsEntry :: TabbedWindowEntry ViewMessageWindowTab
-reactionsEntry =
+reactionsEntry :: TeamId -> TabbedWindowEntry ViewMessageWindowTab
+reactionsEntry tId =
     TabbedWindowEntry { tweValue = VMTabReactions
                       , tweRender = renderTab
                       , tweHandleEvent = handleEvent
                       , tweTitle = tabTitle
-                      , tweShowHandler = onShow
+                      , tweShowHandler = onShow tId
                       }
 
 tabTitle :: ViewMessageWindowTab -> Bool -> T.Text
@@ -65,9 +67,9 @@
 -- window used the same handle for the viewport and we don't want that
 -- old state affecting this window. This also means that switching tabs
 -- in an existing window resets this state, too.
-onShow :: ViewMessageWindowTab -> MH ()
-onShow VMTabMessage = resetVp ViewMessageArea
-onShow VMTabReactions = resetVp ViewMessageArea
+onShow :: TeamId -> ViewMessageWindowTab -> MH ()
+onShow tId VMTabMessage = resetVp $ ViewMessageArea tId
+onShow tId VMTabReactions = resetVp $ ViewMessageArea tId
 
 resetVp :: Name -> MH ()
 resetVp n = do
@@ -78,7 +80,7 @@
 
 renderTab :: ViewMessageWindowTab -> ChatState -> Widget Name
 renderTab tab cs =
-    let latestMessage = case cs^.csViewedMessage of
+    let latestMessage = case cs^.csCurrentTeam.tsViewedMessage of
           Nothing -> error "BUG: no message to show, please report!"
           Just (m, _) -> getLatestMessage cs m
     in case tab of
@@ -98,8 +100,9 @@
     void . handleKeyboardEvent viewMessageReactionsKeybindings (const $ return ())
 
 reactionsText :: ChatState -> Message -> Widget Name
-reactionsText st m = viewport ViewMessageReactionsArea Vertical body
+reactionsText st m = viewport (ViewMessageReactionsArea tId) Vertical body
     where
+        tId = st^.csCurrentTeamId
         body = case null reacList of
             True -> txt "This message has no reactions."
             False -> vBox $ mkEntry <$> reacList
@@ -125,6 +128,7 @@
 viewMessageBox st msg =
     let maybeWarn = if not (msg^.mDeleted) then id else warn
         warn w = vBox [w, hBorder, deleteWarning]
+        tId = st^.csCurrentTeamId
         deleteWarning = withDefAttr errorMessageAttr $
                         txtWrap $ "Alert: this message has been deleted and " <>
                                   "will no longer be accessible once this window " <>
@@ -153,43 +157,53 @@
 
     in Widget Greedy Greedy $ do
         ctx <- getContext
-        render $ maybeWarn $ viewport ViewMessageArea Both $ mkBody (ctx^.availWidthL)
+        render $ maybeWarn $ viewport (ViewMessageArea tId) Both $ mkBody (ctx^.availWidthL)
 
 viewMessageKeybindings :: KeyConfig -> KeyHandlerMap
 viewMessageKeybindings = mkKeybindings viewMessageKeyHandlers
 
 viewMessageKeyHandlers :: [KeyEventHandler]
 viewMessageKeyHandlers =
-    let vs = viewportScroll ViewMessageArea
-    in [ mkKb PageUpEvent "Page up" $
-           mh $ vScrollBy vs (-1 * pageAmount)
+    let vs = viewportScroll . ViewMessageArea
+    in [ mkKb PageUpEvent "Page up" $ do
+           tId <- use csCurrentTeamId
+           mh $ vScrollBy (vs tId) (-1 * pageAmount)
 
-       , mkKb PageDownEvent "Page down" $
-           mh $ vScrollBy vs pageAmount
+       , mkKb PageDownEvent "Page down" $ do
+           tId <- use csCurrentTeamId
+           mh $ vScrollBy (vs tId) pageAmount
 
-       , mkKb PageLeftEvent "Page left" $
-           mh $ hScrollBy vs (-2 * pageAmount)
+       , mkKb PageLeftEvent "Page left" $ do
+           tId <- use csCurrentTeamId
+           mh $ hScrollBy (vs tId) (-2 * pageAmount)
 
-       , mkKb PageRightEvent "Page right" $
-           mh $ hScrollBy vs (2 * pageAmount)
+       , mkKb PageRightEvent "Page right" $ do
+           tId <- use csCurrentTeamId
+           mh $ hScrollBy (vs tId) (2 * pageAmount)
 
-       , mkKb ScrollUpEvent "Scroll up" $
-           mh $ vScrollBy vs (-1)
+       , mkKb ScrollUpEvent "Scroll up" $ do
+           tId <- use csCurrentTeamId
+           mh $ vScrollBy (vs tId) (-1)
 
-       , mkKb ScrollDownEvent "Scroll down" $
-           mh $ vScrollBy vs 1
+       , mkKb ScrollDownEvent "Scroll down" $ do
+           tId <- use csCurrentTeamId
+           mh $ vScrollBy (vs tId) 1
 
-       , mkKb ScrollLeftEvent "Scroll left" $
-           mh $ hScrollBy vs (-1)
+       , mkKb ScrollLeftEvent "Scroll left" $ do
+           tId <- use csCurrentTeamId
+           mh $ hScrollBy (vs tId) (-1)
 
-       , mkKb ScrollRightEvent "Scroll right" $
-           mh $ hScrollBy vs 1
+       , mkKb ScrollRightEvent "Scroll right" $ do
+           tId <- use csCurrentTeamId
+           mh $ hScrollBy (vs tId) 1
 
-       , mkKb ScrollBottomEvent "Scroll to the end of the message" $
-           mh $ vScrollToEnd vs
+       , mkKb ScrollBottomEvent "Scroll to the end of the message" $ do
+           tId <- use csCurrentTeamId
+           mh $ vScrollToEnd (vs tId)
 
-       , mkKb ScrollTopEvent "Scroll to the beginning of the message" $
-           mh $ vScrollToBeginning vs
+       , mkKb ScrollTopEvent "Scroll to the beginning of the message" $ do
+           tId <- use csCurrentTeamId
+           mh $ vScrollToBeginning (vs tId)
        ]
 
 viewMessageReactionsKeybindings :: KeyConfig -> KeyHandlerMap
@@ -197,22 +211,28 @@
 
 viewMessageReactionsKeyHandlers :: [KeyEventHandler]
 viewMessageReactionsKeyHandlers =
-    let vs = viewportScroll ViewMessageReactionsArea
-    in [ mkKb PageUpEvent "Page up" $
-           mh $ vScrollBy vs (-1 * pageAmount)
+    let vs = viewportScroll . ViewMessageReactionsArea
+    in [ mkKb PageUpEvent "Page up" $ do
+           tId <- use csCurrentTeamId
+           mh $ vScrollBy (vs tId) (-1 * pageAmount)
 
-       , mkKb PageDownEvent "Page down" $
-           mh $ vScrollBy vs pageAmount
+       , mkKb PageDownEvent "Page down" $ do
+           tId <- use csCurrentTeamId
+           mh $ vScrollBy (vs tId) pageAmount
 
-       , mkKb ScrollUpEvent "Scroll up" $
-           mh $ vScrollBy vs (-1)
+       , mkKb ScrollUpEvent "Scroll up" $ do
+           tId <- use csCurrentTeamId
+           mh $ vScrollBy (vs tId) (-1)
 
-       , mkKb ScrollDownEvent "Scroll down" $
-           mh $ vScrollBy vs 1
+       , mkKb ScrollDownEvent "Scroll down" $ do
+           tId <- use csCurrentTeamId
+           mh $ vScrollBy (vs tId) 1
 
-       , mkKb ScrollBottomEvent "Scroll to the end of the reactions list" $
-           mh $ vScrollToEnd vs
+       , mkKb ScrollBottomEvent "Scroll to the end of the reactions list" $ do
+           tId <- use csCurrentTeamId
+           mh $ vScrollToEnd (vs tId)
 
-       , mkKb ScrollTopEvent "Scroll to the beginning of the reactions list" $
-           mh $ vScrollToBeginning vs
+       , mkKb ScrollTopEvent "Scroll to the beginning of the reactions list" $ do
+           tId <- use csCurrentTeamId
+           mh $ vScrollToBeginning (vs tId)
        ]
diff --git a/syntax/abc.xml b/syntax/abc.xml
--- a/syntax/abc.xml
+++ b/syntax/abc.xml
@@ -2,7 +2,7 @@
 <!DOCTYPE language SYSTEM "language.dtd">
 <!-- Andrea Primiani - primiani at dag dot it
  	version1.10 - 12 december 2005 -->
-<language name="ABC" version="5" kateversion="2.4" section="Other" extensions="*.abc;*.ABC" mimetype="text/vnd.abc" casesensitive="1" author="Andrea Primiani (primiani@dag.it)" license="LGPL">
+<language name="ABC" version="6" kateversion="2.4" section="Other" extensions="*.abc;*.ABC" mimetype="text/vnd.abc" casesensitive="1" author="Andrea Primiani (primiani@dag.it)" license="LGPL">
     <highlighting>
         <contexts>
            <context name="Normal" attribute="Normal Text" lineEndContext="#stay">
@@ -38,7 +38,10 @@
 <!-- returns to Normal context at the end of line -->	   
 	   <context name="Preprocessor" attribute="Preprocessor" lineEndContext="#pop" />
 	   <context name="Lyrics" attribute="Lyrics" lineEndContext="#pop" />
-	   <context name="Comment" attribute="Comment" lineEndContext="#pop" />
+	   <context name="Comment" attribute="Comment" lineEndContext="#pop">
+	    <IncludeRules context="##Alerts" />
+	    <IncludeRules context="##Modelines" />
+	   </context>
 <!-- returns to Normal context after the end of bar symbols or at EOL -->
 	   <context name="Bar" attribute="Bar" lineEndContext="#pop" >
 	   	<DetectChar attribute="Normal Text" context="#pop" char="&quot;" />
@@ -79,8 +82,9 @@
  </highlighting>
   <general>
     <comments>
-      <comment name="singleLine" start="%" />
+      <comment name="singleLine" start="%" position="afterwhitespace" />
     </comments>
     <keywords casesensitive="1" />
   </general>
 </language>
+<!-- kate: replace-tabs off; -->
diff --git a/syntax/actionscript.xml b/syntax/actionscript.xml
--- a/syntax/actionscript.xml
+++ b/syntax/actionscript.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="ActionScript 2.0" version="3" kateversion="5.0" section="Sources" extensions="*.as" mimetype="text/x-actionscript" license="LGPL" author="Aaron Miller (armantic101@gmail.com)">
+<language name="ActionScript 2.0" version="6" kateversion="5.0" section="Sources" extensions="*.as" mimetype="text/x-actionscript" license="LGPL" author="Aaron Miller (armantic101@gmail.com)">
   <highlighting>
     
     <list name="properties">
@@ -247,6 +247,8 @@
       <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
         <!-- Comment next line if you don't use Javadoc tool -->
         <IncludeRules context="##Javadoc"/>
+        <WordDetect attribute="Keyword" context="Imports" String="package" />
+        <WordDetect attribute="Keyword" context="ImportsPrefix" String="import" lookAhead="true" />
         <keyword attribute="Properties" context="#stay" String="properties"/>
         <keyword attribute="Global Functions" context="#stay" String="global_functions"/>
         <keyword attribute="Classes" context="#stay" String="classes"/>
@@ -266,12 +268,14 @@
         <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1"/>
         <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1"/>
         <RegExpr attribute="Keyword" context="#stay" String="\.{3,3}\s+" />  
-        <RegExpr attribute="Keyword" context="StaticImports" String="\b(import\s+static)\b" />
-        <RegExpr attribute="Keyword" context="Imports" String="\b(package|import)\b" /> 
         <RegExpr attribute="Function" context="#stay" String="\b[_\w][_\w\d]*(?=[\s]*(/\*\s*\d+\s*\*/\s*)?[(])" />
-        <RegExpr attribute="Symbol" context="Member" String="[.]{1,1}" /> 
-        <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;"/>
+        <DetectChar attribute="Symbol" context="Member" char="." />
+        <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/*&lt;=&gt;?[]|~^&#59;"/>
       </context>
+      <context name="ImportsPrefix" attribute="Keyword" lineEndContext="#pop">
+        <RegExpr attribute="Keyword" context="#pop!StaticImports" String="import\s+static\b" />
+        <WordDetect attribute="Keyword" context="#pop!Imports" String="import" />
+      </context>
       <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
           <AnyChar String="fF" attribute="Float" context="#pop"/>
       </context>
@@ -293,15 +297,16 @@
       <context attribute="Normal Text" lineEndContext="#pop" name="Member" fallthrough="true" fallthroughContext="#pop">  
         <RegExpr attribute="Function" context="#pop" String="\b[_a-zA-Z]\w*(?=[\s]*)" />
       </context>
-      <context attribute="Normal Text" lineEndContext="#pop" name="StaticImports">
-        <RegExpr attribute="StaticImports" context="#pop" String="\s*.*$" />
-      </context>
-      <context attribute="Normal Text" lineEndContext="#pop" name="Imports">
-        <RegExpr attribute="Imports" context="#pop" String="\s*.*$" />
+      <context attribute="StaticImports" lineEndContext="#pop" name="StaticImports"/>
+      <context attribute="Imports" lineEndContext="#pop" name="Imports"/>
+      <context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
-      <context attribute="Comment" lineEndContext="#pop" name="Commentar 1"/>
       <context attribute="Comment" lineEndContext="#stay" name="Commentar 2">
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
     </contexts>
     <itemDatas>
@@ -329,8 +334,9 @@
   <general>
     <comments>
       <comment name="singleLine" start="//"/>
-      <comment name="multiLine" start="/*" end="*/"/>
+      <comment name="multiLine" start="/*" end="*/" region="Comment"/>
     </comments>
     <keywords casesensitive="1"/>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/ada.xml b/syntax/ada.xml
--- a/syntax/ada.xml
+++ b/syntax/ada.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
 <language name="Ada"
-          version="3"
+          version="4"
           kateversion="5.0"
           section="Sources"
           extensions="*.adb;*.ads;*.ada;*.a"
@@ -175,7 +175,10 @@
       <context attribute="String" lineEndContext="#pop" name="String">
         <DetectChar attribute="String" context="#pop" char="&quot;"/>
       </context>
-      <context attribute="Comment" lineEndContext="#pop" name="Comment"/>
+      <context attribute="Comment" lineEndContext="#pop" name="Comment">
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
+      </context>
     </contexts>
     <itemDatas>
       <itemData name="Normal Text" defStyleNum="dsNormal" />
@@ -193,7 +196,7 @@
   </highlighting>
   <general>
     <comments>
-      <comment name="singleLine" start="--" />
+      <comment name="singleLine" start="--" position="afterwhitespace" />
     </comments>
     <keywords casesensitive="0" />
   </general>
diff --git a/syntax/agda.xml b/syntax/agda.xml
--- a/syntax/agda.xml
+++ b/syntax/agda.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd"[
   <!ENTITY charsdelim "_;.&#34;(){}@">
-  <!ENTITY wordsep "(?=([&charsdelim;]|\s|$))">
+  <!ENTITY wordsep "(?=[&charsdelim;]|\s|$)">
 ]>
-<language name="Agda" version="6" kateversion="5.0" section="Sources" extensions="*.agda" mimetype="text/x-agda" author="Matthias C. M. Troffaes" license="LGPL">
+<language name="Agda" version="7" kateversion="5.0" section="Sources" extensions="*.agda" mimetype="text/x-agda" author="Matthias C. M. Troffaes" license="LGPL">
   <highlighting>
     <list name="reserved keywords">
       <item>abstract</item>
@@ -56,14 +56,14 @@
       <context attribute="Normal" lineEndContext="#stay" name="code">
         <RegExpr attribute="Pragma"  context="#stay" String="\{-#.*#-\}" />
         <keyword attribute="Keyword" context="#stay" String="reserved keywords" />
-        <RegExpr attribute="Type"    context="#stay" String="(Prop[₀-₉]+|Prop[0-9]*|Set[₀-₉]+|Set[0-9]*)&wordsep;" />
-        <RegExpr attribute="Special" context="#stay" String="(-&gt;|→|∀|λ|:|=|\|)&wordsep;" />
-        <RegExpr attribute="Float"   context="#stay" String="\d+\.\d+&wordsep;" />
+        <RegExpr attribute="Type"    context="#stay" String="(?:Prop[₀-₉]+|Prop[0-9]*|Set[₀-₉]+|Set[0-9]*)&wordsep;" />
+        <RegExpr attribute="Special" context="#stay" String="(?:\-&gt;|→|∀|λ|:|=|\|)&wordsep;" />
+        <RegExpr attribute="Float"   context="#stay" String="\d+(?:(?:\.\d+)?[eE][+-]?\d+|\.\d+)&wordsep;" />
         <RegExpr attribute="Decimal" context="#stay" String="[0-9]+&wordsep;" />
         <DetectChar attribute="Char"   context="char"   char="'" />
         <DetectChar attribute="String" context="string" char="&quot;" />
         <Detect2Chars attribute="Comment" context="comment"  char="-"  char1="-" />
-        <Detect2Chars attribute="Comment" context="comments" char="{" char1="-" />
+        <Detect2Chars attribute="Comment" context="comments" char="{" char1="-" beginRegion="CommentBlock" />
         <Detect2Chars attribute="Hole"    context="hole"     char="{" char1="!" />
         <!-- delimiters which cannot be part of an identifier, or
              backslash which starts a lambda expression -->
@@ -73,11 +73,16 @@
              cases are already taken care off above) -->
         <RegExpr attribute="Normal" context="#stay" String="[^&charsdelim;\s]+" />
       </context>
-      <context attribute="Comment" lineEndContext="#pop" name="comment" />
-      <context attribute="Comment" lineEndContext="#stay" name="comments">
-        <Detect2Chars attribute="Comment" context="comments" char="{" char1="-" /> <!-- for nested comments -->
-        <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" />
+      <context attribute="Comment" lineEndContext="#pop" name="comment">
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
+      <context attribute="Comment" lineEndContext="#stay" name="comments" noIndentationBasedFolding="1">
+        <Detect2Chars attribute="Comment" context="comments" char="{" char1="-" beginRegion="CommentBlock" /> <!-- for nested comments -->
+        <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" endRegion="CommentBlock" />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
+      </context>
       <context attribute="Hole" lineEndContext="#stay" name="hole">
         <Detect2Chars attribute="Hole" context="#pop" char="!" char1="}" />
       </context>
@@ -107,11 +112,12 @@
   <general>
     <folding indentationsensitive="1"/>
     <comments>
-      <comment name="singleLine" start="--" />
-      <comment name="multiLine" start="{-" end="-}" />
+      <comment name="singleLine" start="--" position="afterwhitespace" />
+      <comment name="multiLine" start="{-" end="-}" region="CommentBlock" />
     </comments>
     <keywords casesensitive="1"
               weakDeliminator=":!+,-&lt;=&gt;%&amp;*/?[]^|~\\"
               additionalDeliminator="&charsdelim;" />
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/apache.xml b/syntax/apache.xml
--- a/syntax/apache.xml
+++ b/syntax/apache.xml
@@ -13,7 +13,7 @@
 -->
 
 <language name="Apache Configuration" section="Configuration"
-          version="3" kateversion="5.0"
+          version="4" kateversion="5.0"
           extensions="httpd.conf;httpd2.conf;apache.conf;apache2.conf;.htaccess*;.htpasswd*"
           mimetype=""
           author="Jan Janssen (medhefgo@googlemail.com)" license="LGPL">
@@ -585,6 +585,7 @@
  <context name="Comment" attribute="Comment" lineEndContext="#pop">
   <DetectSpaces />
   <IncludeRules context="##Alerts" />
+  <IncludeRules context="##Modelines" />
   <DetectIdentifier />
  </context>
 
@@ -631,3 +632,4 @@
 </general>
 
 </language>
+<!-- kate: replace-tabs on; tab-width 1; indent-width 1; -->
diff --git a/syntax/asn1.xml b/syntax/asn1.xml
--- a/syntax/asn1.xml
+++ b/syntax/asn1.xml
@@ -13,7 +13,7 @@
 
         You'll find the "Writing a Kate Highlighting XML File HOWTO" at http://kate.kde.org/doc/hlhowto.php
 -->
-<language name="ASN.1" section="Markup" version="3" kateversion="2.3" extensions="*.asn;*.asn1" mimetype="" author="Philippe Rigault" license="GPL">
+<language name="ASN.1" section="Markup" version="4" kateversion="2.3" extensions="*.asn;*.asn1" mimetype="" author="Philippe Rigault" license="GPL">
   <highlighting>
     <list name="keywords">
       <item>DEFINITIONS</item>
@@ -54,6 +54,8 @@
       </context>
       
       <context attribute="Comment" lineEndContext="#pop" name="Comment">
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
     </contexts>
     
@@ -64,6 +66,11 @@
       <itemData name="Data Type"   defStyleNum="dsDataType"/>
     </itemDatas>
   </highlighting>
+  <general>
+    <comments>
+      <comment name="singleLine" start="--"/>
+    </comments>
+  </general>
 </language>
 <!--
 // kate: space-indent on; indent-width 2; replace-tabs on;
diff --git a/syntax/asp.xml b/syntax/asp.xml
--- a/syntax/asp.xml
+++ b/syntax/asp.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE  language SYSTEM "language.dtd">
-<language name="ASP" version="4" kateversion="5.0" section="Markup" extensions="*.asp;" mimetype="text/x-asp-src;text/x-asp-src" author="Antonio Salazar (savedfastcool@gmail.com)" license="LGPL">
+<language name="ASP" version="6" kateversion="5.44" section="Markup" extensions="*.asp;" mimetype="text/x-asp-src;text/x-asp-src" author="Antonio Salazar (savedfastcool@gmail.com)" license="LGPL">
     <highlighting>
         <list name="control structures">
             <item>select</item>
@@ -231,15 +231,18 @@
         </list>
             <contexts>
             <context name="nosource" attribute="Normal Text" lineEndContext="#stay">
-                <StringDetect attribute="Keyword" context="aspsource" String="&lt;%" />
+                <IncludeRules context="find-aspsource" />
                 <RegExpr attribute="HTML Tag" context="aspsource" String="&lt;\s*script\s*language=&quot;VBScript&quot;[^&gt;]*&gt;" insensitive="true" />
-                <RegExpr attribute="HTML Tag" context="scripts" String="&lt;\s*script(\s|&gt;)" insensitive="true" />
+                <RegExpr attribute="HTML Tag" context="scripts" String="&lt;\s*script(?:\s|&gt;|$)" insensitive="true" />
                 <RegExpr attribute="HTML Tag" context="htmltag" String="&lt;\s*\/?\s*[a-zA-Z_:][a-zA-Z0-9._:-]*" />
-                <StringDetect attribute="HTML Comment" context="htmlcomment" String="&lt;!--" />
+                <StringDetect attribute="HTML Comment" context="htmlcomment" String="&lt;!--" beginRegion="HTMLComment" />
             </context>
 
+            <context name="find-aspsource" attribute="Normal Text" lineEndContext="#stay">
+                <Detect2Chars attribute="ASP Source" context="aspsource" char="&lt;" char1="%" beginRegion="ASPSource" />
+            </context>
             <context name="aspsource" attribute="ASP Text" lineEndContext="#stay">
-                <StringDetect attribute="Keyword" context="#pop" String="%&gt;" />
+                <Detect2Chars attribute="ASP Source" context="#pop" char="%" char1="&gt;" endRegion="ASPSource" />
                 <RegExpr attribute="HTML Tag" context="#pop" String="&lt;\s*\/\s*script\s*&gt;" insensitive="true" />
                 <DetectChar attribute="Comment" context="asp_onelinecomment" char="'" />
                 <DetectChar attribute="String" context="doublequotestring" char="&quot;" />
@@ -252,45 +255,49 @@
                 <Int attribute="Decimal" context="#stay" />
                 <AnyChar attribute="Other" context="#stay" String=";()}{:,[]" />
 
-                <RegExpr attribute="Control Structures" context="#stay" String="\belseif\b" insensitive="true" beginRegion="iffi1" endRegion="iffi1"/>
-                <RegExpr attribute="Control Structures" context="#stay" String="\belse\b" insensitive="true" beginRegion="iffi1" endRegion="iffi1"/>
-                <RegExpr attribute="Control Structures" context="#stay" String="\bif\b" insensitive="true" beginRegion="iffi1"/>
-                <RegExpr attribute="Control Structures" context="#stay" String="\bend if\b" insensitive="true" endRegion="iffi1"/>
+                <WordDetect attribute="Control Structures" context="#stay" String="elseif" insensitive="true" beginRegion="iffi1" endRegion="iffi1"/>
+                <WordDetect attribute="Control Structures" context="#stay" String="else" insensitive="true" beginRegion="iffi1" endRegion="iffi1"/>
+                <WordDetect attribute="Control Structures" context="#stay" String="if" insensitive="true" beginRegion="iffi1"/>
+                <WordDetect attribute="Control Structures" context="#stay" String="end if" insensitive="true" endRegion="iffi1"/>
 
-                <RegExpr attribute="Keyword" context="#stay" String="\bexit function\b" insensitive="true" />
-                <RegExpr attribute="Keyword" context="#stay" String="\bfunction\b" insensitive="true" beginRegion="funendfun1"/>
-                <RegExpr attribute="Keyword" context="#stay" String="\bend function\b" insensitive="true" endRegion="funendfun1"/>
+                <WordDetect attribute="Keyword" context="#stay" String="exit function" insensitive="true" />
+                <WordDetect attribute="Keyword" context="#stay" String="function" insensitive="true" beginRegion="funendfun1"/>
+                <WordDetect attribute="Keyword" context="#stay" String="end function" insensitive="true" endRegion="funendfun1"/>
 
-                <RegExpr attribute="Keyword" context="#stay" String="\bexit sub\b" insensitive="true" />
-                <RegExpr attribute="Keyword" context="#stay" String="\bsub\b" insensitive="true" beginRegion="subendsub1"/>
-                <RegExpr attribute="Keyword" context="#stay" String="\bend sub\b" insensitive="true" endRegion="subendsub1"/>
+                <WordDetect attribute="Keyword" context="#stay" String="exit sub" insensitive="true" />
+                <WordDetect attribute="Keyword" context="#stay" String="sub" insensitive="true" beginRegion="subendsub1"/>
+                <WordDetect attribute="Keyword" context="#stay" String="end sub" insensitive="true" endRegion="subendsub1"/>
 
-                <RegExpr attribute="Keyword" context="#stay" String="\bclass\b" insensitive="true" beginRegion="classendclass1"/>
-                <RegExpr attribute="Keyword" context="#stay" String="\bend class\b" insensitive="true" endRegion="classendclass1"/>
+                <WordDetect attribute="Keyword" context="#stay" String="class" insensitive="true" beginRegion="classendclass1"/>
+                <WordDetect attribute="Keyword" context="#stay" String="end class" insensitive="true" endRegion="classendclass1"/>
 
-                <RegExpr attribute="Control Structures" context="#stay" String="\bexit do\b" insensitive="true" />
-                <RegExpr attribute="Control Structures" context="#stay" String="\bdo(\s+(while))?\b" insensitive="true" beginRegion="doloop1"/>
-                <RegExpr attribute="Control Structures" context="#stay" String="\bloop\b" insensitive="true" endRegion="doloop1"/>
+                <WordDetect attribute="Control Structures" context="#stay" String="exit do" insensitive="true" />
+                <RegExpr attribute="Control Structures" context="#stay" String="\bdo(?:\s+while)?\b" insensitive="true" beginRegion="doloop1"/>
+                <WordDetect attribute="Control Structures" context="#stay" String="loop" insensitive="true" endRegion="doloop1"/>
 
-                <RegExpr attribute="Control Structures" context="#stay" String="\bexit while\b" insensitive="true" />
-                <RegExpr attribute="Control Structures" context="#stay" String="\bwhile\b" insensitive="true" beginRegion="whilewend1"/>
-                <RegExpr attribute="Control Structures" context="#stay" String="\bwend\b" insensitive="true" endRegion="whilewend1"/>
+                <WordDetect attribute="Control Structures" context="#stay" String="exit while" insensitive="true" />
+                <WordDetect attribute="Control Structures" context="#stay" String="while" insensitive="true" beginRegion="whilewend1"/>
+                <WordDetect attribute="Control Structures" context="#stay" String="wend" insensitive="true" endRegion="whilewend1"/>
 
-                <RegExpr attribute="Control Structures" context="#stay" String="\bexit for\b" insensitive="true" />
-                <RegExpr attribute="Control Structures" context="#stay" String="\bfor\b" insensitive="true" beginRegion="fornext1"/>
-                <RegExpr attribute="Control Structures" context="#stay" String="\bnext\b" insensitive="true" endRegion="fornext1"/>
+                <WordDetect attribute="Control Structures" context="#stay" String="exit for" insensitive="true" />
+                <WordDetect attribute="Control Structures" context="#stay" String="for" insensitive="true" beginRegion="fornext1"/>
+                <WordDetect attribute="Control Structures" context="#stay" String="next" insensitive="true" endRegion="fornext1"/>
 
-                <RegExpr attribute="Control Structures" context="#stay" String="\bselect case\b" insensitive="true" beginRegion="selcase1"/>
-                <RegExpr attribute="Control Structures" context="#stay" String="\bend select\b" insensitive="true" endRegion="selcase1"/>
+                <WordDetect attribute="Control Structures" context="#stay" String="select case" insensitive="true" beginRegion="selcase1"/>
+                <WordDetect attribute="Control Structures" context="#stay" String="end select" insensitive="true" endRegion="selcase1"/>
 
                 <keyword attribute="Keyword" context="#stay" String="keywords" />
                 <keyword attribute="Control Structures" context="#stay" String="control structures" />
                 <keyword attribute="Function" context="#stay" String="functions" />
             </context>
             <context name="asp_onelinecomment" attribute="Comment" lineEndContext="#pop">
-                <StringDetect attribute="Keyword" context="#pop#pop" String="%&gt;" />
+                <DetectSpaces />
+                <Detect2Chars context="#pop" char="%" char1="&gt;" lookAhead="true" />
+                <IncludeRules context="##Alerts" />
+                <IncludeRules context="##Modelines" />
             </context>
             <context name="doublequotestring" attribute="String" lineEndContext="#stay">
+                <DetectSpaces />
                 <Detect2Chars attribute="Escape Code" context="#stay" char="&quot;" char1="&quot;" />
                 <RegExpr attribute="Escape Code" context="#stay" String="\\[0-7]{1,3}" />
                 <RegExpr attribute="Escape Code" context="#stay" String="\\x[0-9A-Fa-f]{1,2}" />
@@ -301,43 +308,44 @@
                 <DetectChar attribute="String" context="#pop" char="'" />
             </context>
             <context name="htmltag" attribute="Identifier" lineEndContext="#stay">
+                <DetectSpaces />
                 <Detect2Chars attribute="HTML Tag" context="#pop" char="/" char1="&gt;" />
                 <DetectChar attribute="HTML Tag" context="#pop" char="&gt;"/>
-                <StringDetect attribute="Keyword" context="aspsource" String="&lt;%" />
-                <StringDetect attribute="Keyword" context="aspsource" String="&lt;%" />
-                <RegExpr attribute="Identifier" context="identifiers" String="\s*=\s*"/>
+                <IncludeRules context="find-aspsource" />
+                <DetectChar attribute="Identifier" context="identifiers" char="="/>
             </context>
             <context name="htmlcomment" attribute="HTML Comment" lineEndContext="#stay">
-                <StringDetect attribute="Keyword" context="aspsource" String="&lt;%" />
-                <StringDetect attribute="Keyword" context="aspsource" String="&lt;%" />
-                <StringDetect attribute="HTML Comment" context="#pop" String="--&gt;" />
-                <RegExpr attribute="Normal Text" context="identifiers" String="\s*=\s*"/>
+                <DetectSpaces />
+                <IncludeRules context="find-aspsource" />
+                <StringDetect attribute="HTML Comment" context="#pop" String="--&gt;" endRegion="HTMLComment" />
+                <DetectChar attribute="Normal Text" context="identifiers" char="="/>
+                <IncludeRules context="##Alerts" />
+                <IncludeRules context="##Modelines" />
             </context>
             <context name="identifiers" attribute="Identifier" lineEndContext="#stay">
+                <DetectSpaces />
                 <RegExpr attribute="String" context="#pop" String="\s*#?[a-zA-Z0-9]*" />
                 <DetectChar attribute="Types" context="types1" char="'" />
                 <DetectChar attribute="Types" context="types2" char="&quot;" />
             </context>
 
             <context name="types1" attribute="Types" lineEndContext="#stay">
-                <StringDetect attribute="Keyword" context="aspsource" String="&lt;%" />
-                <StringDetect attribute="Keyword" context="aspsource" String="&lt;%" />
+                <IncludeRules context="find-aspsource" />
                 <DetectChar attribute="Types" context="#pop#pop" char="'" />
             </context>
 
             <context name="types2" attribute="Types" lineEndContext="#stay">
-                <StringDetect attribute="Keyword" context="aspsource" String="&lt;%" />
-                <StringDetect attribute="Keyword" context="aspsource" String="&lt;%" />
+                <IncludeRules context="find-aspsource" />
                 <DetectChar attribute="Types" context="#pop#pop" char="&quot;" />
             </context>
 
             <context name="scripts" attribute="Normal Text" lineEndContext="#stay">
                 <Detect2Chars attribute="Comment" context="scripts_onelinecomment" char="/" char1="/" />
-                <Detect2Chars attribute="Comment" context="twolinecomment" char="/" char1="*" />
+                <Detect2Chars attribute="Comment" context="twolinecomment" char="/" char1="*" beginRegion="ScriptComment" />
                 <keyword attribute="Control Structures" context="#stay" String="control structures" />
                 <keyword attribute="Keyword" context="#stay" String="keywords" />
                 <keyword attribute="Function" context="#stay" String="functions" />
-                <StringDetect attribute="Keyword" context="aspsource" String="&lt;%"/>
+                <IncludeRules context="find-aspsource" />
                 <RegExpr attribute="HTML Tag" context="#pop" String="&lt;\s*\/\s*script\s*&gt;" insensitive="true" />
 
                 <DetectChar attribute="String" context="doublequotestring" char="&quot;" />
@@ -351,39 +359,44 @@
                 <AnyChar attribute="Other" context="#stay" String=";()}{:,[]" />
             </context>
             <context name="scripts_onelinecomment" attribute="Comment" lineEndContext="#pop">
+                <DetectSpaces />
                 <RegExpr attribute="HTML Tag" context="#pop#pop" String="&lt;\s*\/\s*script\s*&gt;" insensitive="true" />
+                <IncludeRules context="##Alerts" />
             </context>
             <context name="twolinecomment" attribute="Comment" lineEndContext="#stay">
-                <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment" />
+                <DetectSpaces />
+                <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="ScriptComment" />
+                <IncludeRules context="##Alerts" />
             </context>
 
         </contexts>
         <itemDatas>
             <itemData name="Normal Text" defStyleNum="dsNormal" />
-            <itemData name="ASP Text" defStyleNum="dsNormal" />
-            <itemData name="Keyword" defStyleNum="dsKeyword" />
-            <itemData name="Function" defStyleNum="dsFunction" />
-            <itemData name="Decimal" defStyleNum="dsDecVal" />
-            <itemData name="Octal" defStyleNum="dsBaseN" />
-            <itemData name="Hex" defStyleNum="dsBaseN" />
-            <itemData name="Float" defStyleNum="dsFloat" />
+            <itemData name="ASP Text" defStyleNum="dsNormal" spellChecking="false" />
+            <itemData name="Keyword" defStyleNum="dsKeyword" spellChecking="false" />
+            <itemData name="Function" defStyleNum="dsFunction" spellChecking="false" />
+            <itemData name="Decimal" defStyleNum="dsDecVal" spellChecking="false" />
+            <itemData name="Octal" defStyleNum="dsBaseN" spellChecking="false" />
+            <itemData name="Hex" defStyleNum="dsBaseN" spellChecking="false" />
+            <itemData name="Float" defStyleNum="dsFloat" spellChecking="false" />
             <itemData name="String" defStyleNum="dsString" />
             <itemData name="Comment" defStyleNum="dsComment" />
-            <itemData name="Control Structures" defStyleNum="dsControlFlow" bold="0" />
-            <itemData name="Escape Code" defStyleNum="dsKeyword" color="#0F0F8F" selColor="#ffffff" bold="1" italic="0" />
-            <itemData name="Other" defStyleNum="dsOthers" />
+            <itemData name="Control Structures" defStyleNum="dsControlFlow" spellChecking="false" />
+            <itemData name="Escape Code" defStyleNum="dsSpecialChar" spellChecking="false" />
+            <itemData name="Other" defStyleNum="dsOthers" spellChecking="false" />
+            <itemData name="ASP Source" defStyleNum="dsDataType" bold="1" spellChecking="false" />
 
-            <itemData name="HTML Tag" defStyleNum="dsKeyword" color="#0F0000" selColor="#ffffff" bold="1" italic="0" />
+            <itemData name="HTML Tag" defStyleNum="dsKeyword" spellChecking="false" />
             <itemData name="HTML Comment" defStyleNum="dsComment" />
-            <itemData name="Identifier" defStyleNum="dsOthers" />
-            <itemData name="Types" defStyleNum="dsDataType" />
+            <itemData name="Identifier" defStyleNum="dsOthers" spellChecking="false" />
+            <itemData name="Types" defStyleNum="dsString" />
         </itemDatas>
     </highlighting>
     <general>
         <comments>
             <comment name="singleLine" start="'" />
-            <comment name="multiLine" start="/*" end="*/" />
         </comments>
         <keywords casesensitive="0" weakDeliminator=""/>
     </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 4; indent-width 4; -->
diff --git a/syntax/ats.xml b/syntax/ats.xml
--- a/syntax/ats.xml
+++ b/syntax/ats.xml
@@ -1,165 +1,165 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd"
 [
-<!-- Regular expresion constants: -->
-<!ENTITY LETTER "A-Za-z\0300-\0326\0330-\0366\0370-\0377">          <!-- Latin-1 letters. -->
+<!-- Regular expression constants: -->
+<!ENTITY LETTER "A-Za-z\xc0-\xd6\xd8-\xf6\xf8-\xff">                <!-- Latin-1 letters. -->
 <!ENTITY IDENT  "[&LETTER;_][&LETTER;0-9_']*">                      <!-- ATS identifiers. -->
 <!ENTITY ESC    "(\\[ntbr'&quot;\\]|\\[0-9]{3}|\\x[0-9A-Fa-f]{2})"> <!-- ATS character code escapes. -->
 <!ENTITY DEC    "[0-9][0-9_]*">                                     <!-- Decimal digits with underscores. -->
 ]>
-<language name="ATS" version="0.01" kateversion="2.4" section="Sources" extensions="*.dats;*.sats;*.hats" mimetype="" author="Kiwamu Okabe (kiwamu@debian.or.jp)" license="LGPL">
+<language name="ATS" version="2" kateversion="2.4" section="Sources" extensions="*.dats;*.sats;*.hats" mimetype="" author="Kiwamu Okabe (kiwamu@debian.or.jp)" license="LGPL">
   <highlighting>
     <list name="keywords">
-      <item> abstype </item>
-      <item> abst0ype </item>
-      <item> absprop </item>
-      <item> absview </item>
-      <item> absvtype </item>
-      <item> absviewtype </item>
-      <item> absvt0ype </item>
-      <item> absviewt0ype </item>
-      <item> and </item>
-      <item> as </item>
-      <item> assume </item>
-      <item> begin </item>
-      <item> break </item>
-      <item> case </item>
-      <item> continue </item>
-      <item> classdec </item>
-      <item> datasort </item>
-      <item> datatype </item>
-      <item> dataprop </item>
-      <item> dataview </item>
-      <item> datavtype </item>
-      <item> dataviewtype </item>
-      <item> do </item>
-      <item> dynload </item>
-      <item> else </item>
-      <item> end </item>
-      <item> exception </item>
-      <item> extern </item>
-      <item> extype </item>
-      <item> extval </item>
-      <item> if </item>
-      <item> in </item>
-      <item> infix </item>
-      <item> infixl </item>
-      <item> infixr </item>
-      <item> prefix </item>
-      <item> postfix </item>
-      <item> let </item>
-      <item> local </item>
-      <item> macdef </item>
-      <item> macrodef </item>
-      <item> nonfix </item>
-      <item> overload </item>
-      <item> of </item>
-      <item> op </item>
-      <item> rec </item>
-      <item> scase </item>
-      <item> sif </item>
-      <item> sortdef </item>
-      <item> sta </item>
-      <item> stacst </item>
-      <item> stadef </item>
-      <item> stavar </item>
-      <item> staload </item>
-      <item> symelim </item>
-      <item> symintr </item>
-      <item> then </item>
-      <item> try </item>
-      <item> tkindef </item>
-      <item> type </item>
-      <item> typedef </item>
-      <item> propdef </item>
-      <item> viewdef </item>
-      <item> vtypedef </item>
-      <item> viewtypedef </item>
-      <item> val </item>
-      <item> prval </item>
-      <item> var </item>
-      <item> prvar </item>
-      <item> when </item>
-      <item> where </item>
-      <item> for </item>
-      <item> while </item>
-      <item> with </item>
-      <item> withtype </item>
-      <item> withprop </item>
-      <item> withview </item>
-      <item> withvtype </item>
-      <item> withviewtype </item>
+      <item>abstype</item>
+      <item>abst0ype</item>
+      <item>absprop</item>
+      <item>absview</item>
+      <item>absvtype</item>
+      <item>absviewtype</item>
+      <item>absvt0ype</item>
+      <item>absviewt0ype</item>
+      <item>and</item>
+      <item>as</item>
+      <item>assume</item>
+      <item>begin</item>
+      <item>break</item>
+      <item>case</item>
+      <item>continue</item>
+      <item>classdec</item>
+      <item>datasort</item>
+      <item>datatype</item>
+      <item>dataprop</item>
+      <item>dataview</item>
+      <item>datavtype</item>
+      <item>dataviewtype</item>
+      <item>do</item>
+      <item>dynload</item>
+      <item>else</item>
+      <item>end</item>
+      <item>exception</item>
+      <item>extern</item>
+      <item>extype</item>
+      <item>extval</item>
+      <item>if</item>
+      <item>in</item>
+      <item>infix</item>
+      <item>infixl</item>
+      <item>infixr</item>
+      <item>prefix</item>
+      <item>postfix</item>
+      <item>let</item>
+      <item>local</item>
+      <item>macdef</item>
+      <item>macrodef</item>
+      <item>nonfix</item>
+      <item>overload</item>
+      <item>of</item>
+      <item>op</item>
+      <item>rec</item>
+      <item>scase</item>
+      <item>sif</item>
+      <item>sortdef</item>
+      <item>sta</item>
+      <item>stacst</item>
+      <item>stadef</item>
+      <item>stavar</item>
+      <item>staload</item>
+      <item>symelim</item>
+      <item>symintr</item>
+      <item>then</item>
+      <item>try</item>
+      <item>tkindef</item>
+      <item>type</item>
+      <item>typedef</item>
+      <item>propdef</item>
+      <item>viewdef</item>
+      <item>vtypedef</item>
+      <item>viewtypedef</item>
+      <item>val</item>
+      <item>prval</item>
+      <item>var</item>
+      <item>prvar</item>
+      <item>when</item>
+      <item>where</item>
+      <item>for</item>
+      <item>while</item>
+      <item>with</item>
+      <item>withtype</item>
+      <item>withprop</item>
+      <item>withview</item>
+      <item>withvtype</item>
+      <item>withviewtype</item>
     </list>
     <list name="special keywords">
-      <item> $arrpsz </item>
-      <item> $arrptrsize </item>
-      <item> $delay </item>
-      <item> $ldelay </item>
-      <item> $effmask </item>
-      <item> $effmask_ntm </item>
-      <item> $effmask_exn </item>
-      <item> $effmask_ref </item>
-      <item> $effmask_wrt </item>
-      <item> $effmask_all </item>
-      <item> $extern </item>
-      <item> $extkind </item>
-      <item> $extype </item>
-      <item> $extype_struct </item>
-      <item> $extval </item>
-      <item> $lst </item>
-      <item> $lst_t </item>
-      <item> $lst_vt </item>
-      <item> $list </item>
-      <item> $list_t </item>
-      <item> $list_vt </item>
-      <item> $rec </item>
-      <item> $rec_t </item>
-      <item> $rec_vt </item>
-      <item> $record </item>
-      <item> $record_t </item>
-      <item> $record_vt </item>
-      <item> $tup </item>
-      <item> $tup_t </item>
-      <item> $tup_vt </item>
-      <item> $tuple </item>
-      <item> $tuple_t </item>
-      <item> $tuple_vt </item>
-      <item> $raise </item>
-      <item> $showtype </item>
-      <item> $myfilename </item>
-      <item> $mylocation </item>
-      <item> $myfunction </item>
-      <item> #assert </item>
-      <item> #define </item>
-      <item> #elif </item>
-      <item> #elifdef </item>
-      <item> #elifndef </item>
-      <item> #else </item>
-      <item> #endif </item>
-      <item> #error </item>
-      <item> #if </item>
-      <item> #ifdef </item>
-      <item> #ifndef </item>
-      <item> #include </item>
-      <item> #print </item>
-      <item> #then </item>
-      <item> #undef </item>
+      <item>$arrpsz</item>
+      <item>$arrptrsize</item>
+      <item>$delay</item>
+      <item>$ldelay</item>
+      <item>$effmask</item>
+      <item>$effmask_ntm</item>
+      <item>$effmask_exn</item>
+      <item>$effmask_ref</item>
+      <item>$effmask_wrt</item>
+      <item>$effmask_all</item>
+      <item>$extern</item>
+      <item>$extkind</item>
+      <item>$extype</item>
+      <item>$extype_struct</item>
+      <item>$extval</item>
+      <item>$lst</item>
+      <item>$lst_t</item>
+      <item>$lst_vt</item>
+      <item>$list</item>
+      <item>$list_t</item>
+      <item>$list_vt</item>
+      <item>$rec</item>
+      <item>$rec_t</item>
+      <item>$rec_vt</item>
+      <item>$record</item>
+      <item>$record_t</item>
+      <item>$record_vt</item>
+      <item>$tup</item>
+      <item>$tup_t</item>
+      <item>$tup_vt</item>
+      <item>$tuple</item>
+      <item>$tuple_t</item>
+      <item>$tuple_vt</item>
+      <item>$raise</item>
+      <item>$showtype</item>
+      <item>$myfilename</item>
+      <item>$mylocation</item>
+      <item>$myfunction</item>
+      <item>#assert</item>
+      <item>#define</item>
+      <item>#elif</item>
+      <item>#elifdef</item>
+      <item>#elifndef</item>
+      <item>#else</item>
+      <item>#endif</item>
+      <item>#error</item>
+      <item>#if</item>
+      <item>#ifdef</item>
+      <item>#ifndef</item>
+      <item>#include</item>
+      <item>#print</item>
+      <item>#then</item>
+      <item>#undef</item>
     </list>
     <list name="function keywords">
-      <item> fn </item>
-      <item> fnx </item>
-      <item> fun </item>
-      <item> prfn </item>
-      <item> prfun </item>
-      <item> praxi </item>
-      <item> castfn </item>
-      <item> implmnt </item>
-      <item> implement </item>
-      <item> primplmnt </item>
-      <item> primplement </item>
-      <item> lam </item>
-      <item> llam </item>
-      <item> fix </item>
+      <item>fn</item>
+      <item>fnx</item>
+      <item>fun</item>
+      <item>prfn</item>
+      <item>prfun</item>
+      <item>praxi</item>
+      <item>castfn</item>
+      <item>implmnt</item>
+      <item>implement</item>
+      <item>primplmnt</item>
+      <item>primplement</item>
+      <item>lam</item>
+      <item>llam</item>
+      <item>fix</item>
     </list>
     <contexts>
       <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
@@ -190,28 +190,27 @@
         <!-- Support for nested comments -->
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1=")" endRegion="comment" />
         <Detect2Chars attribute="Comment" context="Multiline Comment" char="(" char1="*" beginRegion="comment" />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
       <context attribute="Comment" lineEndContext="#stay" name="Multiline C-style Comment">
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
-      <context attribute="Comment" lineEndContext="#pop" name="Singleline C++ style Comment"/>
-
-      <context attribute="String" lineEndContext="#stay" name="String Context">
-        <DetectChar attribute="String" context="#pop" char="&quot;" />
-        <RegExpr attribute="Escaped characters" context="#stay" String="&ESC;" />
-        <!-- An underscore at the end of a line in a string indicates  -->
-        <!-- that the string will continue on the next line.           -->
-        <RegExpr attribute="Escaped characters" context="#stay" String="\\$" />
+      <context attribute="Comment" lineEndContext="#pop" name="Singleline C++ style Comment">
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
 
       <context attribute="Termination Metrics" lineEndContext="#stay" name="Termination Metrics Context">
         <Detect2Chars attribute="Termination Metrics" context="#pop" char="&gt;" char1="." />
       </context>
 
-      <context attribute="Normal text" lineEndContext="#stay" name="Function Keyword Context">
-        <DetectChar attribute="Normal text" context="#pop" char="=" />
-	<DetectChar attribute="Universal" context="Universal Context" char="{" />
-	<DetectChar attribute="Existential" context="Existential Context" char="[" />
+      <context attribute="Normal Text" lineEndContext="#stay" name="Function Keyword Context">
+        <DetectChar attribute="Normal Text" context="#pop" char="=" />
+        <DetectChar attribute="Universal" context="Universal Context" char="{" />
+        <DetectChar attribute="Existential" context="Existential Context" char="[" />
         <IncludeRules context="Normal"/>
       </context>
 
@@ -236,8 +235,6 @@
       <itemData name="Decimal"  defStyleNum="dsDecVal"/>
       <itemData name="Hexadecimal"  defStyleNum="dsBaseN"/>
       <itemData name="Float"  defStyleNum="dsFloat"/>
-      <itemData name="Character"  defStyleNum="dsChar"/>
-      <itemData name="String"  defStyleNum="dsString"/>
       <itemData name="Comment"  defStyleNum="dsComment"/>
       <itemData name="Constructor" defStyleNum="dsDataType"/>
     </itemDatas>
@@ -247,9 +244,7 @@
     <keywords casesensitive="1" />
     <comments>
       <comment name="singleLine" start="//" />
-      <comment name="multiLine" start="(*" end="*)" />
-      <comment name="multiLine" start="/*" end="*/" />
-      <comment name="multiLine" start="////" end="" />
+      <comment name="multiLine" start="(*" end="*)" region="comment" />
     </comments>
   </general>
 </language>
diff --git a/syntax/awk.xml b/syntax/awk.xml
--- a/syntax/awk.xml
+++ b/syntax/awk.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="AWK" version="3" kateversion="5.0" section="Scripts"
+<language name="AWK" version="4" kateversion="5.0" section="Scripts"
   extensions="*.awk" mimetype="text/x-awk" indenter="cstyle"
   license="LGPL">
 <!-- patched by igli#kate@irc:chat.freenode.net -->
@@ -134,128 +134,129 @@
       <item>xdigit</item>
     </list>
 
-<contexts>
-<!-- START CONTEXTS -->
-<context name="Pattern" attribute="Normal" lineEndContext="#stay">
-	<DetectSpaces />
-	<DetectChar char="{" attribute="Symbol" context="Block" beginRegion="block" />
-	<DetectChar char="}" attribute="Error" context="#stay"/>
-	<DetectChar char="/" attribute="Regex Op" firstNonSpace="true" context="Regex"/>
-	<IncludeRules context="base" />
-	<keyword String="special" attribute="Special" context="#stay"/>
-</context>
+    <contexts>
+      <!-- START CONTEXTS -->
+      <context name="Pattern" attribute="Normal" lineEndContext="#stay">
+        <DetectSpaces />
+        <DetectChar char="{" attribute="Symbol" context="Block" beginRegion="block" />
+        <DetectChar char="}" attribute="Error" context="#stay"/>
+        <DetectChar char="/" attribute="Regex Op" firstNonSpace="true" context="Regex"/>
+        <IncludeRules context="base" />
+        <keyword String="special" attribute="Special" context="#stay"/>
+      </context>
 
-<context name="Block" attribute="Normal" lineEndContext="#stay">
-	<DetectSpaces />
-	<DetectChar char="}" attribute="Symbol" context="#pop" endRegion="block" />
-	<DetectChar char="{" attribute="Symbol" context="Block" beginRegion="block" />
-	<IncludeRules context="base" />
-	<keyword String="special" attribute="Error" context="#stay"/>
-</context>
+      <context name="Block" attribute="Normal" lineEndContext="#stay">
+        <DetectSpaces />
+        <DetectChar char="}" attribute="Symbol" context="#pop" endRegion="block" />
+        <DetectChar char="{" attribute="Symbol" context="Block" beginRegion="block" />
+        <IncludeRules context="base" />
+        <keyword String="special" attribute="Error" context="#stay"/>
+      </context>
 
-<context name="base" attribute="Normal" lineEndContext="#stay">
-	<DetectChar char=")" attribute="Symbol" context="#stay"/>
-	<DetectChar char="(" attribute="Symbol" context="Match"/>
-	<AnyChar String="=~" attribute="Operator" context="Match"/>
-	<DetectChar char="," attribute="Separator Symbol" context="ArgSep"/>
-	<DetectChar char="&quot;" attribute="String" context="String"/>
-	<DetectChar char="#" attribute="Comment" context="Comment"/>
-	<AnyChar String="@!%&amp;*+-/:&lt;&gt;?^|" attribute="Operator" context="#stay"/>
-	<keyword String="controlflow" attribute="ControlFlow" context="#stay"/>
-	<keyword String="keywords" attribute="Keyword" context="#stay"/>
-	<keyword String="builtins" attribute="Builtin" context="#stay"/>
-	<keyword String="functions" attribute="Function" context="#stay"/>
-	<Float attribute="Float"   context="#stay"/>
-	<Int   attribute="Decimal" context="#stay"/>
-	<RegExpr String="\$[A-Za-z0-9_]+" attribute="Field" context="#stay"/>
-	<DetectChar char=";" attribute="Separator Symbol" context="#stay"/>
-</context>
+      <context name="base" attribute="Normal" lineEndContext="#stay">
+        <DetectChar char=")" attribute="Symbol" context="#stay"/>
+        <DetectChar char="(" attribute="Symbol" context="Match"/>
+        <AnyChar String="=~" attribute="Operator" context="Match"/>
+        <DetectChar char="," attribute="Separator Symbol" context="ArgSep"/>
+        <DetectChar char="&quot;" attribute="String" context="String"/>
+        <DetectChar char="#" attribute="Comment" context="Comment"/>
+        <AnyChar String="@!%&amp;*+-/:&lt;&gt;?^|" attribute="Operator" context="#stay"/>
+        <keyword String="controlflow" attribute="ControlFlow" context="#stay"/>
+        <keyword String="keywords" attribute="Keyword" context="#stay"/>
+        <keyword String="builtins" attribute="Builtin" context="#stay"/>
+        <keyword String="functions" attribute="Function" context="#stay"/>
+        <Float attribute="Float"   context="#stay"/>
+        <Int   attribute="Decimal" context="#stay"/>
+        <RegExpr String="\$[A-Za-z0-9_]+" attribute="Field" context="#stay"/>
+        <DetectChar char=";" attribute="Separator Symbol" context="#stay"/>
+      </context>
 
-<context name="ArgSep" attribute="Normal" lineEndContext="#stay"
-   fallthrough="true" fallthroughContext="#pop">
-	<IncludeRules context="Match" />
-</context>
+      <context name="ArgSep" attribute="Normal" lineEndContext="#stay"
+        fallthrough="true" fallthroughContext="#pop">
+        <IncludeRules context="Match" />
+      </context>
 
-<context name="String" attribute="String" lineEndContext="#stay">
-	<DetectChar char="&quot;" attribute="String" context="#pop"/>
-	<DetectChar char="\" context="Escape" attribute="Escape"/>
-</context>
+      <context name="String" attribute="String" lineEndContext="#stay">
+        <DetectChar char="&quot;" attribute="String" context="#pop"/>
+        <DetectChar char="\" context="Escape" attribute="Escape"/>
+      </context>
 
-<context name="Comment" attribute="Comment" lineEndContext="#pop">
-	<IncludeRules context="##Alerts"/>
-</context>
+      <context name="Comment" attribute="Comment" lineEndContext="#pop">
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
 
-<context name="Escape" attribute="Error" lineEndContext="#pop">
-	<RegExpr String="[\\abfnrtv]|x[0-9a-fA-F]{1,2}|[0-7]{1,3}" attribute="Escape" context="#pop"/>
-	<RegExpr String="." attribute="Error" context="#pop"/>
-</context>
+      <context name="Escape" attribute="Error" lineEndContext="#pop">
+        <RegExpr String="[\\abfnrtv]|x[0-9a-fA-F]{1,2}|[0-7]{1,3}" attribute="Escape" context="#pop"/>
+        <RegExpr String="." attribute="Error" context="#pop"/>
+      </context>
 
-<context name="Match" attribute="Normal" lineEndContext="#pop"
-   fallthrough="true" fallthroughContext="#pop">
-	<DetectSpaces />
-	<DetectChar char="/" attribute="Regex Op" context="#pop!Regex"/>
-</context>
+      <context name="Match" attribute="Normal" lineEndContext="#pop"
+        fallthrough="true" fallthroughContext="#pop">
+        <DetectSpaces />
+        <DetectChar char="/" attribute="Regex Op" context="#pop!Regex"/>
+      </context>
 
-<context name="Regex" attribute="Regex" lineEndContext="#pop">
-	<IncludeRules context="regex"/>
-	<DetectChar char="/" context="#pop" attribute="Regex Op"/>
-</context>
+      <context name="Regex" attribute="Regex" lineEndContext="#pop">
+        <IncludeRules context="regex"/>
+        <DetectChar char="/" context="#pop" attribute="Regex Op"/>
+      </context>
 
-<context name="regex" attribute="Normal" lineEndContext="#stay">
-	<Detect2Chars char="[" char1="^" context="RegexChar" attribute="Regex Op"/>
-	<DetectChar char="[" context="RegexChar" attribute="Regex Op"/>
-	<AnyChar String="^$.+?*()|" context="#stay" attribute="Regex Op"/>
-	<DetectChar char="\" context="Regex Escape" attribute="Regex Op"/>
-</context>
+      <context name="regex" attribute="Normal" lineEndContext="#stay">
+        <Detect2Chars char="[" char1="^" context="RegexChar" attribute="Regex Op"/>
+        <DetectChar char="[" context="RegexChar" attribute="Regex Op"/>
+        <AnyChar String="^$.+?*()|" context="#stay" attribute="Regex Op"/>
+        <DetectChar char="\" context="Regex Escape" attribute="Regex Op"/>
+      </context>
 
-<context name="Regex Escape" attribute="Normal" lineEndContext="#pop">
-	<RegExpr String="[&lt;&gt;sSwW`'[\]{}^$.+?*()|/\\abfnrtv]|x[0-9a-fA-F]{1,2}|[0-7]{1,3}" attribute="Escape" context="#pop"/>
-	<RegExpr String="." attribute="Regex" context="#pop"/>
-</context>
+      <context name="Regex Escape" attribute="Normal" lineEndContext="#pop">
+        <RegExpr String="[&lt;&gt;sSwW`'[\]{}^$.+?*()|/\\abfnrtv]|x[0-9a-fA-F]{1,2}|[0-7]{1,3}" attribute="Escape" context="#pop"/>
+        <RegExpr String="." attribute="Regex" context="#pop"/>
+      </context>
 
-<context name="RegexChar" attribute="Regex" lineEndContext="#pop"
-   fallthrough="true" fallthroughContext="InChar">
-	<AnyChar String="-]" context="InChar" attribute="Regex"/>
-</context>
+      <context name="RegexChar" attribute="Regex" lineEndContext="#pop"
+        fallthrough="true" fallthroughContext="InChar">
+        <AnyChar String="-]" context="InChar" attribute="Regex"/>
+      </context>
 
-<context name="InChar" attribute="Regex" lineEndContext="#pop#pop">
-	<Detect2Chars char="-" char1="]" context="InCharEnd" attribute="Regex" lookAhead="true"/>
-	<DetectChar char="-" context="#stay" attribute="Regex Op"/>
-	<DetectChar char="\" context="Regex Escape" attribute="Regex Op"/>
-	<DetectChar char="[" context="CharClassSelect" attribute="Regex" lookAhead="true"/>
-	<DetectChar char="]" context="#pop#pop" attribute="Regex Op"/>
-</context>
+      <context name="InChar" attribute="Regex" lineEndContext="#pop#pop">
+        <Detect2Chars char="-" char1="]" context="InCharEnd" attribute="Regex" lookAhead="true"/>
+        <DetectChar char="-" context="#stay" attribute="Regex Op"/>
+        <DetectChar char="\" context="Regex Escape" attribute="Regex Op"/>
+        <DetectChar char="[" context="CharClassSelect" attribute="Regex" lookAhead="true"/>
+        <DetectChar char="]" context="#pop#pop" attribute="Regex Op"/>
+      </context>
 
-<context name="InCharEnd" attribute="Regex Op" lineEndContext="#stay">
-	<DetectChar char="-" context="#stay" attribute="Regex"/>
-	<DetectChar char="]" context="#pop#pop#pop" attribute="Regex Op"/>
-</context>
+      <context name="InCharEnd" attribute="Regex Op" lineEndContext="#stay">
+        <DetectChar char="-" context="#stay" attribute="Regex"/>
+        <DetectChar char="]" context="#pop#pop#pop" attribute="Regex Op"/>
+      </context>
 
-<context name="CharClassSelect" attribute="Custom" lineEndContext="#pop#pop#pop#pop">
-	<Detect2Chars char="[" char1=":" context="#pop!CharClass" attribute="CharClass"/>
-	<Detect2Chars char="[" char1="." context="#pop!CollatingSymbols" attribute="CharClass"/>
-	<Detect2Chars char="[" char1="=" context="#pop!EquivalenceClass" attribute="CharClass"/>
-	<DetectChar char="[" context="#pop" attribute="Regex"/>
-</context>
+      <context name="CharClassSelect" attribute="Custom" lineEndContext="#pop#pop#pop#pop">
+        <Detect2Chars char="[" char1=":" context="#pop!CharClass" attribute="CharClass"/>
+        <Detect2Chars char="[" char1="." context="#pop!CollatingSymbols" attribute="CharClass"/>
+        <Detect2Chars char="[" char1="=" context="#pop!EquivalenceClass" attribute="CharClass"/>
+        <DetectChar char="[" context="#pop" attribute="Regex"/>
+      </context>
 
-<context name="CharClass" attribute="Custom" lineEndContext="#pop#pop#pop#pop">
-	<keyword String="charclass" attribute="CharClass" context="#stay"/>
-	<Detect2Chars char=":" char1="]" attribute="CharClass" context="#pop"/>
-	<DetectChar char="]" attribute="Error" context="#pop"/>
-</context>
+      <context name="CharClass" attribute="Custom" lineEndContext="#pop#pop#pop#pop">
+        <keyword String="charclass" attribute="CharClass" context="#stay"/>
+        <Detect2Chars char=":" char1="]" attribute="CharClass" context="#pop"/>
+        <DetectChar char="]" attribute="Error" context="#pop"/>
+      </context>
 
-<context name="CollatingSymbols" attribute="Custom" lineEndContext="#pop#pop#pop#pop">
-	<Detect2Chars char="." char1="]" attribute="CharClass" context="#pop"/>
-	<DetectChar char="]" attribute="Error" context="#pop"/>
-</context>
+      <context name="CollatingSymbols" attribute="Custom" lineEndContext="#pop#pop#pop#pop">
+        <Detect2Chars char="." char1="]" attribute="CharClass" context="#pop"/>
+        <DetectChar char="]" attribute="Error" context="#pop"/>
+      </context>
 
-<context name="EquivalenceClass" attribute="Custom" lineEndContext="#pop#pop#pop#pop">
-	<Detect2Chars char="=" char1="]" attribute="CharClass" context="#pop"/>
-	<DetectChar char="]" attribute="Error" context="#pop"/>
-</context>
+      <context name="EquivalenceClass" attribute="Custom" lineEndContext="#pop#pop#pop#pop">
+        <Detect2Chars char="=" char1="]" attribute="CharClass" context="#pop"/>
+        <DetectChar char="]" attribute="Error" context="#pop"/>
+      </context>
 
-<!-- END OF CONTEXTS -->
-</contexts>
+      <!-- END OF CONTEXTS -->
+  </contexts>
     <itemDatas>
       <itemData name="Normal"   defStyleNum="dsNormal"/>
       <itemData name="ControlFlow" defStyleNum="dsControlFlow" spellChecking="false"/>
@@ -286,3 +287,4 @@
     <keywords casesensitive="1" weakDeliminator="@"/>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/bash.xml b/syntax/bash.xml
--- a/syntax/bash.xml
+++ b/syntax/bash.xml
@@ -7,8 +7,9 @@
         <!ENTITY eos      "(?=($|\s))">                 <!-- eol or space following -->
         <!ENTITY noword   "(?![\w$+-])">                <!-- no word, $, + or - following -->
         <!ENTITY pathpart "([\w_@.&#37;*?+-]|\\ )">     <!-- valid character in a file name -->
+        <!ENTITY charbeforecomment "[\s;]">             <!-- character before a comment # -->
 ]>
-<language name="Bash" version="9" kateversion="5.0" section="Scripts" extensions="*.sh;*.bash;*.ebuild;*.eclass;*.nix;.bashrc;.bash_profile;.bash_login;.profile;PKGBUILD;APKBUILD" mimetype="application/x-shellscript" casesensitive="1" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL">
+<language name="Bash" version="11" kateversion="5.0" section="Scripts" extensions="*.sh;*.bash;*.ebuild;*.eclass;*.nix;.bashrc;.bash_profile;.bash_login;.profile;PKGBUILD;APKBUILD" mimetype="application/x-shellscript" casesensitive="1" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL">
 
 <!-- (c) 2004 by Wilbert Berendsen (wilbert@kde.nl)
     Changes by Matthew Woehlke (mw_triad@users.sourceforge.net)
@@ -473,6 +474,9 @@
       <!-- FindMost tries to interpret anything except commands -->
       <context attribute="Normal Text" lineEndContext="#stay" name="FindMost">
         <IncludeRules context="FindComments" />
+        <IncludeRules context="FindMostWithoutComments" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindMostWithoutComments">
         <IncludeRules context="FindStrings" />
         <IncludeRules context="FindSubstitutions" />
         <IncludeRules context="FindOthers" />
@@ -482,8 +486,14 @@
       <!-- FindComments consumes shell comments till EOL -->
       <context attribute="Normal Text" lineEndContext="#pop" name="FindComments">
         <DetectChar attribute="Comment" context="Comment" char="#" firstNonSpace="true"/>
-        <RegExpr attribute="Normal Text" context="Comment" String="\s*[\s;](?=#)" />
+        <RegExpr attribute="Comment" context="Comment" String="(?&lt;=&charbeforecomment;)#" />
       </context>
+      <context attribute="Normal Text" lineEndContext="#pop" name="FindCommentsInCommand">
+        <DetectChar attribute="Comment" context="Comment" char="#" firstNonSpace="true"/>
+        <!-- NOTE: If a rule already matches a character of &charbeforecomment;
+             (for example, in an escaped character), the comment will not be highlighted. -->
+        <RegExpr attribute="Normal Text" context="Comment" String="&charbeforecomment;(?=#)" />
+      </context>
       <context attribute="Comment" lineEndContext="#pop" name="Comment">
         <IncludeRules context="##Alerts" />
         <IncludeRules context="##Modelines" />
@@ -492,7 +502,7 @@
       <!-- FindCommentsParen consumes shell comments till EOL or a closing parenthese -->
       <context attribute="Normal Text" lineEndContext="#pop" name="FindCommentsParen">
         <DetectChar attribute="Comment" context="CommentParen" char="#" firstNonSpace="true"/>
-        <RegExpr attribute="Normal Text" context="CommentParen" String="[\s;](?=#)" />
+        <RegExpr attribute="Normal Text" context="CommentParen" String="&charbeforecomment;(?=#)" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="CommentParen">
         <RegExpr attribute="Comment" context="#pop" String="[^)](?=\))" />
@@ -502,7 +512,7 @@
       <!-- FindCommentsBackq consumes shell comments till EOL or a backquote -->
       <context attribute="Normal Text" lineEndContext="#pop" name="FindCommentsBackq">
         <DetectChar attribute="Comment" context="CommentBackq" char="#" firstNonSpace="true"/>
-        <RegExpr attribute="Normal Text" context="CommentBackq" String="[\s;](?=#)" />
+        <RegExpr attribute="Normal Text" context="CommentBackq" String="&charbeforecomment;(?=#)" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="CommentBackq">
         <RegExpr attribute="Comment" context="#pop" String="[^`](?=`)" />
@@ -553,7 +563,8 @@
         <!-- handle here document -->
         <Detect2Chars attribute="Redirection" context="HereDoc" char="&lt;" char1="&lt;" lookAhead="true" />
         <!-- handle process subst -->
-        <RegExpr attribute="Redirection" context="ProcessSubst" String="[&lt;&gt;]\(" />
+        <Detect2Chars attribute="Redirection" context="ProcessSubst" char="&lt;" char1="(" />
+        <Detect2Chars attribute="Redirection" context="ProcessSubst" char="&gt;" char1="(" />
         <!-- handle redirection -->
         <RegExpr attribute="Redirection" context="#stay" String="([0-9]*(&gt;{1,2}|&lt;)(&amp;[0-9]+-?)?|&amp;&gt;|&gt;&amp;|[0-9]*&lt;&gt;)" />
         <!-- handle &, &&, | and || -->
@@ -567,13 +578,27 @@
         <RegExpr attribute="OtherCommand" context="#stay" String="/&pathpart;*(?=([/);$`'&quot;]|$))" />
         <RegExpr attribute="OtherCommand" context="CommandArgs" String="/&pathpart;*(?=([\s);$`'&quot;]|$))" />
         <!-- This list is not complete. ie, ":" is missing but as it is in bash completition. -->
-        <RegExpr attribute="OtherCommand" context="CommandArgs" String="&pathpart;*" />
+        <RegExpr attribute="OtherCommand" context="CommandArgsNormal" String="&pathpart;*" />
       </context>
 
       <!-- CommandArgs matches the items after a command -->
       <context attribute="Normal Text" lineEndContext="#pop" name="CommandArgs">
-        <LineContinue />
+        <!-- In command arguments, do not allow comments after escaped characters.
+             This avoids highlighting comments within paths or other text. Ex: pathtext\ #no\ comment -->
+        <!-- FindComments -->
+        <RegExpr attribute="Control" context="#pop!Comment" String=";;?(?=#)" />
+        <IncludeRules context="FindCommentsInCommand" />
+        <IncludeRules context="FindMostWithoutComments" />
+        <IncludeRules context="DefaultCommandArgs" />
+      </context>
+      <!-- CommandArgs but with normal comments -->
+      <context attribute="Normal Text" lineEndContext="#pop" name="CommandArgsNormal">
         <IncludeRules context="FindMost" />
+        <IncludeRules context="DefaultCommandArgs" />
+      </context>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="DefaultCommandArgs">
+        <LineContinue />
         <RegExpr attribute="Keyword" context="#stay" String="\\$" />
         <!-- handle keywords -->
         <RegExpr attribute="Option" context="#stay" String="\.(?=\s)" />
@@ -582,10 +607,11 @@
         <!-- handle here document -->
         <Detect2Chars attribute="Redirection" context="HereDoc" char="&lt;" char1="&lt;" lookAhead="true" />
         <!-- handle process subst -->
-        <RegExpr attribute="Redirection" context="ProcessSubst" String="[&lt;&gt;]\(" />
+        <Detect2Chars attribute="Redirection" context="ProcessSubst" char="&lt;" char1="(" />
+        <Detect2Chars attribute="Redirection" context="ProcessSubst" char="&gt;" char1="(" />
         <!-- handle redirection -->
         <RegExpr attribute="Redirection" context="#stay" String="([0-9]*(&gt;{1,2}|&lt;)(&amp;[0-9]+-?)?|&amp;&gt;|&gt;&amp;|[0-9]*&lt;&gt;)" />
-        <!-- handle &, &&, | and || -->
+        <!-- handle &, &&, |, ||, ; and ;; -->
         <RegExpr attribute="Control" context="#pop" String="([|&amp;;])\1?" />
         <RegExpr attribute="Normal Text" context="#stay" String="[a-zA-Z_]+-[A-Za-z0-9_-]*" />
         <RegExpr attribute="Option" context="#stay" String="-?-[a-zA-Z_][A-Za-z0-9_-]*" />
diff --git a/syntax/boo.xml b/syntax/boo.xml
--- a/syntax/boo.xml
+++ b/syntax/boo.xml
@@ -2,7 +2,7 @@
 <!DOCTYPE language>
 <!-- Based on Python syntax highlighting v1.99 by Primoz Anzur, Paul Giannaros, Michael Bueker, Per Wigren -->
 <!-- Also based on boo.lang from gtksourceview -->
-<language name="Boo" version="3" kateversion="5.0" section="Sources" extensions="*.boo" mimetype="text/x-boo" casesensitive="1" author="Marc Dassonneville" license="LGPL">
+<language name="Boo" version="6" kateversion="5.0" section="Sources" extensions="*.boo" mimetype="text/x-boo" casesensitive="1" author="Marc Dassonneville" license="LGPL">
 	<highlighting>
 		<list name="namespace">
 			<item>import</item>
@@ -163,13 +163,15 @@
 				<RegExpr attribute="Hex" String="0[Xx][0-9a-fA-F]+" context="#stay"/>
 				<RegExpr attribute="Octal" String="0[1-9][0-9]*" context="#stay"/>
 
-				<RegExpr attribute="Raw String" String="[rR]'''" context="Raw Tripple A-string"/>
-				<RegExpr attribute="Raw String" String="[rR]&quot;&quot;&quot;" context="Raw Tripple Q-string"/>
+				<StringDetect attribute="Raw String" String="r'''" context="Raw Tripple A-string" insensitive="1"/>
+				<StringDetect attribute="Raw String" String="r&quot;&quot;&quot;" context="Raw Tripple Q-string" insensitive="1"/>
 
-				<RegExpr attribute="Raw String" String="[rR]'" context="Raw A-string"/>
-				<RegExpr attribute="Raw String" String="[rR]&quot;" context="Raw Q-string"/>
+				<Detect2Chars attribute="Raw String" char="r" char1="'" context="Raw A-string"/>
+				<Detect2Chars attribute="Raw String" char="R" char1="'" context="Raw A-string"/>
+				<Detect2Chars attribute="Raw String" char="r" char1="&quot;" context="Raw Q-string"/>
+				<Detect2Chars attribute="Raw String" char="R" char1="&quot;" context="Raw Q-string"/>
 
-				<RegExpr attribute="Comment" String="#.*$" context="#stay"/>
+				<DetectChar attribute="Comment" char="#" context="Comment"/>
 				<RegExpr attribute="Comment" String="^\s*u?'''" context="Tripple A-comment" beginRegion="Tripple A-region"/>
 				<RegExpr attribute="Comment" String="^\s*u?&quot;&quot;&quot;" context="Tripple Q-comment" beginRegion="Tripple Q-region"/>
 				<Detect2Chars attribute="Comment" char="/" char1="/" context="Comment SlashSlash"/>
@@ -185,7 +187,7 @@
 				<StringDetect attribute="Operator" String="[|" context="Quasi-Quotation" beginRegion="qq"/>
 				<StringDetect attribute="Operator" String="|]" context="#pop" endRegion="qq"/>
 
-				<RegExpr attribute="Operator" String="[+*/%\|=;\!&lt;&gt;!^&amp;~-]" context="#stay"/>
+				<AnyChar attribute="Operator" String="+*/%|=;!&lt;&gt;!^&amp;~-" context="#stay"/>
 				<RegExpr attribute="String Substitution" String="%[a-zA-Z]" context="#stay"/>
 			</context>
 
@@ -199,11 +201,13 @@
 
 			<context name="Tripple A-comment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
 				<StringDetect attribute="Comment" String="'''" context="#pop" endRegion="Tripple A-region"/>
+				<IncludeRules context="##Alerts"/>
 			</context>
 
 			<context name="Tripple Q-comment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
 				<HlCChar attribute="Comment" context="#stay"/>
 				<RegExpr attribute="Comment" String="&quot;&quot;&quot;" context="#pop" endRegion="Tripple Q-region"/>
+				<IncludeRules context="##Alerts"/>
 			</context>
 
 			<context name="Tripple A-string" attribute="String" lineEndContext="#stay" noIndentationBasedFolding="true">
@@ -236,6 +240,8 @@
 
 			<context name="Comment SlashSlash" attribute="Comment" lineEndContext="#pop" >
 				<LineContinue attribute="Comment" context="#stay"/>
+				<IncludeRules context="##Alerts"/>
+				<IncludeRules context="##Modelines"/>
 			</context>
 
 			<context name="Single A-string" attribute="String" lineEndContext="#stay">
@@ -265,6 +271,11 @@
 				<RegExpr attribute="String Substitution" String="%[a-zA-Z]" context="#stay"/>
 				<DetectChar attribute="Raw String" char="&quot;" context="#pop"/>
 			</context>
+
+			<context name="Comment" attribute="Comment" lineEndContext="#pop">
+				<IncludeRules context="##Alerts"/>
+				<IncludeRules context="##Modelines"/>
+			</context>
 		</contexts>
 
 
@@ -293,8 +304,8 @@
 	<general>
 		<folding indentationsensitive="1" />
 		<emptyLines>
-			<emptyLine regexpr="\s+" casesensitive="false"/>
-			<emptyLine regexpr="\s*#.*$" casesensitive="false"/>
+			<emptyLine regexpr="\s+"/>
+			<emptyLine regexpr="\s*#.*$"/>
 		</emptyLines>
 		<comments>
 			<comment name="singleLine" start="#" position="afterwhitespace"/>
@@ -302,3 +313,4 @@
 		<keywords casesensitive="1" />
 	</general>
 </language>
+<!-- kate: replace-tabs off; -->
diff --git a/syntax/c.xml b/syntax/c.xml
--- a/syntax/c.xml
+++ b/syntax/c.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd"
 [
-    <!ENTITY int "(?:[0-9](?:'?[0-9]+)*)">
-    <!ENTITY hex_int "(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f]+)*)">
+    <!ENTITY int "(?:[0-9]++)">
+    <!ENTITY hex_int "(?:[0-9A-Fa-f]++)">
     <!ENTITY exp_float "(?:[eE][+-]?&int;)">
     <!ENTITY exp_hexfloat "(?:[pP][-+]?&int;)">
 
@@ -10,7 +10,7 @@
     <!ENTITY pphash "&ispphash;\s*">
 ]>
 <language name="C" section="Sources"
-          version="7" kateversion="5.0"
+          version="11" kateversion="5.0"
           indenter="cstyle"
           extensions="*.c;*.C;*.h"
           mimetype="text/x-csrc;text/x-c++src;text/x-chdr"
@@ -119,10 +119,8 @@
     <contexts>
       <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
         <DetectSpaces />
-	<RegExpr attribute="Preprocessor" context="Outscoped" String="&pphash;if\s+0\s*$" beginRegion="PP" firstNonSpace="true" />
+        <RegExpr attribute="Preprocessor" context="Outscoped" String="&pphash;if\s+0\s*$" beginRegion="PP" firstNonSpace="true" />
         <RegExpr context="AfterHash" String="&ispphash;" firstNonSpace="true" lookAhead="true" />
-        <StringDetect attribute="Region Marker" context="Region Marker" String="//BEGIN" beginRegion="Region1" firstNonSpace="true" />
-        <StringDetect attribute="Region Marker" context="Region Marker" String="//END" endRegion="Region1" firstNonSpace="true" />
         <keyword attribute="Control Flow" context="#stay" String="controlflow"/>
         <keyword attribute="Keyword" context="#stay" String="keywords"/>
         <keyword attribute="Data Type" context="#stay" String="types"/>
@@ -137,9 +135,7 @@
 
         <HlCChar attribute="Char" context="#stay"/>
         <DetectChar attribute="String" context="String" char="&quot;"/>
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/"/>
-        <Detect2Chars attribute="Comment" context="Commentar 2" char="/" char1="*" beginRegion="Comment"/>
+        <IncludeRules context="FindComments" />
         <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;"/>
       </context>
 
@@ -149,17 +145,32 @@
         <DetectChar attribute="String" context="#pop" char="&quot;"/>
       </context>
 
+      <context name="FindComments" attribute="Normal Text" lineEndContext="#pop">
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="/" lookAhead="true" />
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="*" lookAhead="true" />
+      </context>
+
+      <context name="MatchComment" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <StringDetect attribute="Region Marker" context="#pop!Region Marker" String="//BEGIN" beginRegion="Region1" firstNonSpace="true" />
+        <StringDetect attribute="Region Marker" context="#pop!Region Marker" String="//END" endRegion="Region1" firstNonSpace="true" />
+        <IncludeRules context="##Doxygen" />
+        <Detect2Chars attribute="Comment" context="#pop!Commentar 1" char="/" char1="/" />
+        <Detect2Chars attribute="Comment" context="#pop!Commentar 2" char="/" char1="*" beginRegion="Comment" />
+      </context>
+
       <context attribute="Region Marker" lineEndContext="#pop" name="Region Marker">
       </context>
 
       <context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
         <LineContinue attribute="Comment" context="#stay"/>
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
 
       <context attribute="Comment" lineEndContext="#stay" name="Commentar 2">
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
 
       <context attribute="Error" lineEndContext="#pop" name="AfterHash">
@@ -187,27 +198,19 @@
 
       <context attribute="Preprocessor" lineEndContext="#pop" name="Preprocessor">
         <LineContinue attribute="Preprocessor" context="#stay"/>
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="Commentar/Preprocessor" char="/" char1="*" beginRegion="Comment2" />
-        <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/" />
+        <IncludeRules context="FindComments" />
       </context>
 
       <context attribute="Preprocessor" lineEndContext="#pop" name="Define">
         <LineContinue attribute="Preprocessor" context="#stay"/>
       </context>
 
-      <context attribute="Comment" lineEndContext="#stay" name="Commentar/Preprocessor">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment2" />
-      </context>
-
       <context attribute="Comment" lineEndContext="#stay" name="Outscoped" >
         <DetectSpaces />
         <IncludeRules context="##Alerts" />
         <DetectIdentifier />
         <DetectChar attribute="String" context="String" char="&quot;"/>
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/"/>
-        <Detect2Chars attribute="Comment" context="Commentar 2" char="/" char1="*" beginRegion="Comment"/>
+        <IncludeRules context="FindComments" />
         <RegExpr attribute="Comment" context="Outscoped intern" String="&pphash;if" beginRegion="PP" firstNonSpace="true" />
         <RegExpr attribute="Preprocessor" context="#pop" String="&pphash;el(?:se|if)" firstNonSpace="true" />
         <RegExpr attribute="Preprocessor" context="#pop" String="&pphash;endif" endRegion="PP" firstNonSpace="true" />
@@ -218,24 +221,22 @@
         <IncludeRules context="##Alerts" />
         <DetectIdentifier />
         <DetectChar attribute="String" context="String" char="&quot;"/>
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/"/>
-        <Detect2Chars attribute="Comment" context="Commentar 2" char="/" char1="*" beginRegion="Comment"/>
+        <IncludeRules context="FindComments" />
         <RegExpr attribute="Comment" context="Outscoped intern" String="&pphash;if" beginRegion="PP" firstNonSpace="true" />
         <RegExpr attribute="Comment" context="#pop" String="&pphash;endif" endRegion="PP" firstNonSpace="true" />
       </context>
 
       <context name="Number" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
-        <RegExpr attribute="Float" context="FloatSuffix" String="\.&int;&exp_float;?|&int;(?:&exp_float;|\.&int;?&exp_float;?)|0[xX](?:\.&hex_int;&exp_hexfloat;?|&hex_int;(?:&exp_hexfloat;|\.&hex_int;?&exp_hexfloat;?))" />
+        <RegExpr attribute="Float" context="FloatSuffix" String="\.&int;&exp_float;?|0[xX](?:\.&hex_int;&exp_hexfloat;?|&hex_int;(?:&exp_hexfloat;|\.&hex_int;?&exp_hexfloat;?))|&int;(?:&exp_float;|\.&int;?&exp_float;?)" />
         <IncludeRules context="Integer" />
       </context>
 
       <context name="Integer" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
         <RegExpr attribute="Hex" context="IntSuffix" String="0[xX]&hex_int;" />
-        <RegExpr attribute="Binary" context="IntSuffix" String="0[Bb][01](?:'?[01]+)*" />
-        <RegExpr attribute="Octal" context="IntSuffix" String="0(?:'?[0-7]+)+" />
-        <RegExpr attribute="Decimal" context="IntSuffix" String="0(?![xXbB0-9])|[1-9](?:'?[0-9]+)*" />
-        <RegExpr attribute="Error" context="#pop" String="[._0-9A-Za-z']+" />
+        <RegExpr attribute="Binary" context="IntSuffix" String="0[Bb][01]++" />
+        <RegExpr attribute="Octal" context="IntSuffix" String="0[0-7]++" />
+        <RegExpr attribute="Decimal" context="IntSuffix" String="0(?![xXbB0-9])|[1-9][0-9]*+" />
+        <RegExpr attribute="Error" context="#pop" String="[._0-9A-Za-z']++" />
       </context>
 
       <context name="IntSuffix" attribute="Error" lineEndContext="#pop#pop" fallthrough="true" fallthroughContext="NumericSuffixError">
@@ -280,8 +281,9 @@
   <general>
     <comments>
       <comment name="singleLine" start="//" />
-      <comment name="multiLine" start="/*" end="*/" />
+      <comment name="multiLine" start="/*" end="*/" region="Comment" />
     </comments>
     <keywords casesensitive="1" additionalDeliminator="'&quot;" />
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/clojure.xml b/syntax/clojure.xml
--- a/syntax/clojure.xml
+++ b/syntax/clojure.xml
@@ -22,7 +22,7 @@
  * Boston, MA  02110-1301, USA.                                       *
  **********************************************************************
  -->
-<language version="10" kateversion="5.0" name="Clojure" section="Sources" extensions="*.clj;*.cljs;*.cljc" mimetype="" author="Dominik Haumann [lisp] modified for clojure by Caspar Hasenclever" license="LGPLv2+">
+<language version="12" kateversion="5.0" name="Clojure" section="Sources" extensions="*.clj;*.cljs;*.cljc" mimetype="" author="Dominik Haumann [lisp] modified for clojure by Caspar Hasenclever" license="LGPLv2+">
   <highlighting>
     <list name="definitions">
       <item>def</item>
@@ -741,13 +741,14 @@
         <DetectChar attribute="Brackets1" context="Level1" char="("/>
       </context>
       <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
-            <StringDetect attribute="Float" context="#pop" String="M" insensitive="false"/>
+        <StringDetect attribute="Float" context="#pop" String="M" insensitive="false"/>
       </context>
       <context name="Int Suffixes" attribute="Decimal" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
-            <StringDetect attribute="Decimal" context="#pop" String="N" insensitive="false"/>
+        <StringDetect attribute="Decimal" context="#pop" String="N" insensitive="false"/>
       </context>
       <context name="Comment" attribute="Comment" lineEndContext="#pop">
-        <RegExpr String="(FIXME|TODO):?" attribute="Alert" context="#stay"/>
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
       <context name="function_decl_documentable" attribute="Function" lineEndContext="#stay">
         <RegExpr attribute="Function" context="#pop!DocumentationPossible" String="\s*[A-Za-z0-9-+\&lt;\&gt;//\*!\?']*\s*"/>
@@ -859,19 +860,18 @@
       <itemData name="Regexpr" defStyleNum="dsSpecialString"/>
       <itemData name="Comment" defStyleNum="dsComment"/>
       <itemData name="Documentation" defStyleNum="dsDocumentation"/>
-      <itemData name="Alert" defStyleNum="dsAlert" spellChecking="false"/>
       <itemData name="Error" defStyleNum="dsError" spellChecking="false"/>
       <itemData name="Readermacro" defStyleNum="dsPreprocessor"/>
       <itemData name="BracketsSet" defStyleNum="dsNormal" color="#0000ff" selColor="#00ff00"/>
       <itemData name="BracketsMeta" defStyleNum="dsNormal" color="#0000ff" selColor="#00ff00" bold="1" italic="0"/>
-      <itemData name="BracketsMap" defStyleNum="dsNormal" color="#206620" selColor="#219921"/>
+      <itemData name="BracketsMap" defStyleNum="dsNormal" color="#33ab33" selColor="#219921"/>
       <itemData name="BracketsSquare" defStyleNum="dsNormal" color="#3333ff" selColor="#3333aa"/>
       <itemData name="Brackets1" defStyleNum="dsNormal" color="#ff0000" selColor="#ffaa00" bold="0" italic="0"/>
       <itemData name="Brackets2" defStyleNum="dsNormal" color="#ff8800" selColor="#ffff00" bold="0" italic="0"/>
       <itemData name="Brackets3" defStyleNum="dsNormal" color="#888800" selColor="#888888" bold="0" italic="0"/>
-      <itemData name="Brackets4" defStyleNum="dsNormal" color="#008800" selColor="#000000" bold="0" italic="0"/>
-      <itemData name="Brackets5" defStyleNum="dsNormal" color="#000088" selColor="#000000" bold="0" italic="0"/>
-      <itemData name="Brackets6" defStyleNum="dsNormal" color="#880088" selColor="#000000" bold="0" italic="0"/>
+      <itemData name="Brackets4" defStyleNum="dsNormal" color="#008800" bold="0" italic="0"/>
+      <itemData name="Brackets5" defStyleNum="dsNormal" color="#3689e6" bold="0" italic="0"/>
+      <itemData name="Brackets6" defStyleNum="dsNormal" color="#a100a1" bold="0" italic="0"/>
     </itemDatas>
   </highlighting>
   <general>
@@ -881,3 +881,4 @@
     </comments>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/cmake.xml b/syntax/cmake.xml
--- a/syntax/cmake.xml
+++ b/syntax/cmake.xml
@@ -4,35 +4,20 @@
   <!ENTITY id_re "[_A-Za-z][\-_0-9A-Za-z]*">
 ]>
 <!--
-  This file is part of KDE's kate project.
+    This file is part of KDE's kate project.
 
-  Copyright 2004 Alexander Neundorf (neundorf@kde.org)
-  Copyright 2005 Dominik Haumann (dhdev@gmx.de)
-  Copyright 2007,2008,2013,2014 Matthew Woehlke (mw_triad@users.sourceforge.net)
-  Copyright 2013-2015,2017-2019 Alex Turbov (i.zaufi@gmail.com)
+    SPDX-FileCopyrightText: 2004 Alexander Neundorf <neundorf@kde.org>
+    SPDX-FileCopyrightText: 2005 Dominik Haumann <dhdev@gmx.de>
+    SPDX-FileCopyrightText: 2007, 2008, 2013, 2014 Matthew Woehlke <mw_triad@users.sourceforge.net>
+    SPDX-FileCopyrightText: 2013-2015, 2017-2020 Alex Turbov <i.zaufi@gmail.com>
 
- **********************************************************************
- * This library is free software; you can redistribute it and/or      *
- * modify it under the terms of the GNU Lesser General Public         *
- * License as published by the Free Software Foundation; either       *
- * version 2 of the License, or (at your option) any later version.   *
- *                                                                    *
- * This library is distributed in the hope that it will be useful,    *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of     *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  *
- * Lesser General Public License for more details.                    *
- *                                                                    *
- * You should have received a copy of the GNU Lesser General Public   *
- * License along with this library; if not, write to the              *
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,   *
- * Boston, MA  02110-1301, USA.                                       *
- **********************************************************************
+    SPDX-License-Identifier: LGPL-2.0-or-later
  -->
 
 <language
     name="CMake"
-    version="19"
-    kateversion="2.4"
+    version="25"
+    kateversion="5.0"
     section="Other"
     extensions="CMakeLists.txt;*.cmake;*.cmake.in"
     style="CMake"
@@ -45,6 +30,7 @@
     <list name="commands">
         <item>break</item>
         <item>cmake_host_system_information</item>
+        <item>cmake_language</item>
         <item>cmake_minimum_required</item>
         <item>cmake_parse_arguments</item>
         <item>cmake_policy</item>
@@ -185,6 +171,11 @@
       <item>TOTAL_PHYSICAL_MEMORY</item>
       <item>TOTAL_VIRTUAL_MEMORY</item>
     </list>
+    <list name="cmake_language_nargs">
+      <item>CALL</item>
+      <item>CODE</item>
+      <item>EVAL</item>
+    </list>
     <list name="cmake_minimum_required_nargs">
       <item>FATAL_ERROR</item>
       <item>VERSION</item>
@@ -218,6 +209,7 @@
     </list>
     <list name="elseif_nargs">
       <item>AND</item>
+      <item>COMMAND</item>
       <item>DEFINED</item>
       <item>EQUAL</item>
       <item>EXISTS</item>
@@ -250,6 +242,8 @@
     <list name="execute_process_nargs">
       <item>COMMAND</item>
       <item>COMMAND_ECHO</item>
+      <item>ECHO_ERROR_VARIABLE</item>
+      <item>ECHO_OUTPUT_VARIABLE</item>
       <item>ENCODING</item>
       <item>ERROR_FILE</item>
       <item>ERROR_QUIET</item>
@@ -275,8 +269,12 @@
       <item>UTF8</item>
     </list>
     <list name="file_nargs">
+      <item>@ONLY</item>
       <item>APPEND</item>
+      <item>ARCHIVE_CREATE</item>
+      <item>ARCHIVE_EXTRACT</item>
       <item>CONDITION</item>
+      <item>CONFIGURE</item>
       <item>CONFIGURE_DEPENDS</item>
       <item>CONTENT</item>
       <item>COPY</item>
@@ -285,13 +283,16 @@
       <item>DIRECTORY_PERMISSIONS</item>
       <item>DOWNLOAD</item>
       <item>ENCODING</item>
+      <item>ESCAPE_QUOTES</item>
       <item>EXCLUDE</item>
       <item>EXPECTED_HASH</item>
       <item>EXPECTED_MD5</item>
+      <item>FILES</item>
       <item>FILES_MATCHING</item>
       <item>FILE_PERMISSIONS</item>
       <item>FOLLOW_SYMLINKS</item>
       <item>FOLLOW_SYMLINK_CHAIN</item>
+      <item>FORMAT</item>
       <item>GENERATE</item>
       <item>GET_RUNTIME_DEPENDENCIES</item>
       <item>GLOB</item>
@@ -309,13 +310,16 @@
       <item>LIMIT_INPUT</item>
       <item>LIMIT_OUTPUT</item>
       <item>LIST_DIRECTORIES</item>
+      <item>LIST_ONLY</item>
       <item>LOCK</item>
       <item>LOG</item>
       <item>MAKE_DIRECTORY</item>
       <item>MD5</item>
+      <item>MTIME</item>
       <item>NETRC</item>
       <item>NETRC_FILE</item>
       <item>NEWLINE_CONSUME</item>
+      <item>NEWLINE_STYLE</item>
       <item>NO_HEX_CONVERSION</item>
       <item>NO_SOURCE_PERMISSIONS</item>
       <item>OFFSET</item>
@@ -353,19 +357,28 @@
       <item>TOUCH_NOCREATE</item>
       <item>TO_CMAKE_PATH</item>
       <item>TO_NATIVE_PATH</item>
+      <item>TYPE</item>
       <item>UPLOAD</item>
       <item>USERPWD</item>
       <item>USE_SOURCE_PERMISSIONS</item>
       <item>UTC</item>
+      <item>VERBOSE</item>
       <item>WRITE</item>
     </list>
     <list name="file_sargs">
+      <item>7zip</item>
+      <item>BZip2</item>
+      <item>CRLF</item>
+      <item>DOS</item>
       <item>FILE</item>
       <item>FUNCTION</item>
       <item>GROUP_EXECUTE</item>
       <item>GROUP_READ</item>
       <item>GROUP_WRITE</item>
+      <item>GZip</item>
       <item>IGNORED</item>
+      <item>LF</item>
+      <item>None</item>
       <item>OPTIONAL</item>
       <item>OWNER_EXECUTE</item>
       <item>OWNER_READ</item>
@@ -374,14 +387,23 @@
       <item>REQUIRED</item>
       <item>SETGID</item>
       <item>SETUID</item>
+      <item>UNIX</item>
       <item>UTF-16BE</item>
       <item>UTF-16LE</item>
       <item>UTF-32B</item>
       <item>UTF-32LE</item>
       <item>UTF-8</item>
+      <item>WIN32</item>
       <item>WORLD_EXECUTE</item>
       <item>WORLD_READ</item>
       <item>WORLD_WRITE</item>
+      <item>XZ</item>
+      <item>Zstd</item>
+      <item>gnutar</item>
+      <item>pax</item>
+      <item>paxr</item>
+      <item>raw</item>
+      <item>zip</item>
     </list>
     <list name="find_file_nargs">
       <item>CMAKE_FIND_ROOT_PATH_BOTH</item>
@@ -398,6 +420,7 @@
       <item>ONLY_CMAKE_FIND_ROOT_PATH</item>
       <item>PATHS</item>
       <item>PATH_SUFFIXES</item>
+      <item>REQUIRED</item>
     </list>
     <list name="find_library_nargs">
       <item>CMAKE_FIND_ROOT_PATH_BOTH</item>
@@ -415,6 +438,7 @@
       <item>ONLY_CMAKE_FIND_ROOT_PATH</item>
       <item>PATHS</item>
       <item>PATH_SUFFIXES</item>
+      <item>REQUIRED</item>
     </list>
     <list name="find_package_nargs">
       <item>CMAKE_FIND_ROOT_PATH_BOTH</item>
@@ -458,6 +482,7 @@
       <item>ONLY_CMAKE_FIND_ROOT_PATH</item>
       <item>PATHS</item>
       <item>PATH_SUFFIXES</item>
+      <item>REQUIRED</item>
     </list>
     <list name="find_program_nargs">
       <item>CMAKE_FIND_ROOT_PATH_BOTH</item>
@@ -475,12 +500,14 @@
       <item>ONLY_CMAKE_FIND_ROOT_PATH</item>
       <item>PATHS</item>
       <item>PATH_SUFFIXES</item>
+      <item>REQUIRED</item>
     </list>
     <list name="foreach_nargs">
       <item>IN</item>
       <item>ITEMS</item>
       <item>LISTS</item>
       <item>RANGE</item>
+      <item>ZIP_LISTS</item>
     </list>
     <list name="get_cmake_property_sargs">
       <item>CACHE_VARIABLES</item>
@@ -520,11 +547,13 @@
       <item>SET</item>
       <item>SOURCE</item>
       <item>TARGET</item>
+      <item>TARGET_DIRECTORY</item>
       <item>TEST</item>
       <item>VARIABLE</item>
     </list>
     <list name="if_nargs">
       <item>AND</item>
+      <item>COMMAND</item>
       <item>DEFINED</item>
       <item>EQUAL</item>
       <item>EXISTS</item>
@@ -600,6 +629,7 @@
       <item>DESCENDING</item>
       <item>FILE_BASENAME</item>
       <item>INSENSITIVE</item>
+      <item>NATURAL</item>
       <item>SENSITIVE</item>
       <item>STRING</item>
     </list>
@@ -617,6 +647,9 @@
     </list>
     <list name="message_nargs">
       <item>AUTHOR_WARNING</item>
+      <item>CHECK_FAIL</item>
+      <item>CHECK_PASS</item>
+      <item>CHECK_START</item>
       <item>DEBUG</item>
       <item>DEPRECATION</item>
       <item>FATAL_ERROR</item>
@@ -645,6 +678,7 @@
       <item>PROPERTY</item>
       <item>SOURCE</item>
       <item>TARGET</item>
+      <item>TARGET_DIRECTORY</item>
       <item>TEST</item>
       <item>VARIABLE</item>
     </list>
@@ -675,6 +709,7 @@
       <item>GENEX_STRIP</item>
       <item>GREATER</item>
       <item>GREATER_EQUAL</item>
+      <item>HEX</item>
       <item>JOIN</item>
       <item>LENGTH</item>
       <item>LESS</item>
@@ -718,6 +753,7 @@
     </list>
     <list name="while_nargs">
       <item>AND</item>
+      <item>COMMAND</item>
       <item>DEFINED</item>
       <item>EQUAL</item>
       <item>EXISTS</item>
@@ -862,6 +898,10 @@
       <item>NAMESPACE</item>
       <item>TARGETS</item>
     </list>
+    <list name="get_source_file_property_nargs">
+      <item>DIRECTORY</item>
+      <item>TARGET_DIRECTORY</item>
+    </list>
     <list name="include_directories_nargs">
       <item>AFTER</item>
       <item>BEFORE</item>
@@ -964,7 +1004,9 @@
       <item>Swift</item>
     </list>
     <list name="set_source_files_properties_nargs">
+      <item>DIRECTORY</item>
       <item>PROPERTIES</item>
+      <item>TARGET_DIRECTORY</item>
     </list>
     <list name="set_target_properties_nargs">
       <item>PROPERTIES</item>
@@ -996,6 +1038,11 @@
       <item>c_std_90</item>
       <item>c_std_99</item>
       <item>c_variadic_macros</item>
+      <item>cuda_std_03</item>
+      <item>cuda_std_11</item>
+      <item>cuda_std_14</item>
+      <item>cuda_std_17</item>
+      <item>cuda_std_20</item>
       <item>cxx_aggregate_default_initializers</item>
       <item>cxx_alias_templates</item>
       <item>cxx_alignas</item>
@@ -1208,13 +1255,20 @@
       <item>INCLUDE_LABEL</item>
       <item>PARALLEL_LEVEL</item>
       <item>QUIET</item>
+      <item>REPEAT</item>
       <item>RETURN_VALUE</item>
       <item>SCHEDULE_RANDOM</item>
       <item>START</item>
+      <item>STOP_ON_FAILURE</item>
       <item>STOP_TIME</item>
       <item>STRIDE</item>
       <item>TEST_LOAD</item>
     </list>
+    <list name="ctest_test_sargs">
+      <item>AFTER_TIMEOUT</item>
+      <item>UNTIL_FAIL</item>
+      <item>UNTIL_PASS</item>
+    </list>
     <list name="ctest_update_nargs">
       <item>QUIET</item>
       <item>RETURN_VALUE</item>
@@ -1229,10 +1283,14 @@
     <list name="variables">
       <item>ANDROID</item>
       <item>APPLE</item>
+      <item>ARGC</item>
+      <item>ARGN</item>
+      <item>ARGV</item>
       <item>BORLAND</item>
       <item>BUILD_SHARED_LIBS</item>
       <item>BUILD_TESTING</item>
       <item>CMAKE_ABSOLUTE_DESTINATION_FILES</item>
+      <item>CMAKE_AIX_EXPORT_ALL_SYMBOLS</item>
       <item>CMAKE_ANDROID_ANT_ADDITIONAL_OPTIONS</item>
       <item>CMAKE_ANDROID_API</item>
       <item>CMAKE_ANDROID_API_MIN</item>
@@ -1303,14 +1361,24 @@
       <item>CMAKE_CONFIGURATION_TYPES</item>
       <item>CMAKE_CROSSCOMPILING</item>
       <item>CMAKE_CROSSCOMPILING_EMULATOR</item>
+      <item>CMAKE_CROSS_CONFIGS</item>
+      <item>CMAKE_CTEST_ARGUMENTS</item>
       <item>CMAKE_CTEST_COMMAND</item>
+      <item>CMAKE_CUDA_ARCHITECTURES</item>
+      <item>CMAKE_CUDA_COMPILE_FEATURES</item>
       <item>CMAKE_CUDA_EXTENSIONS</item>
+      <item>CMAKE_CUDA_HOST_COMPILER</item>
       <item>CMAKE_CUDA_RESOLVE_DEVICE_SYMBOLS</item>
+      <item>CMAKE_CUDA_RUNTIME_LIBRARY</item>
       <item>CMAKE_CUDA_SEPARABLE_COMPILATION</item>
       <item>CMAKE_CUDA_STANDARD</item>
       <item>CMAKE_CUDA_STANDARD_REQUIRED</item>
       <item>CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES</item>
       <item>CMAKE_CURRENT_BINARY_DIR</item>
+      <item>CMAKE_CURRENT_FUNCTION</item>
+      <item>CMAKE_CURRENT_FUNCTION_LIST_DIR</item>
+      <item>CMAKE_CURRENT_FUNCTION_LIST_FILE</item>
+      <item>CMAKE_CURRENT_FUNCTION_LIST_LINE</item>
       <item>CMAKE_CURRENT_LIST_DIR</item>
       <item>CMAKE_CURRENT_LIST_FILE</item>
       <item>CMAKE_CURRENT_LIST_LINE</item>
@@ -1325,9 +1393,13 @@
       <item>CMAKE_C_STANDARD_REQUIRED</item>
       <item>CMAKE_DEBUG_POSTFIX</item>
       <item>CMAKE_DEBUG_TARGET_PROPERTIES</item>
+      <item>CMAKE_DEFAULT_BUILD_TYPE</item>
+      <item>CMAKE_DEFAULT_CONFIGS</item>
       <item>CMAKE_DEPENDS_IN_PROJECT_ONLY</item>
       <item>CMAKE_DIRECTORY_LABELS</item>
+      <item>CMAKE_DISABLE_PRECOMPILE_HEADERS</item>
       <item>CMAKE_DL_LIBS</item>
+      <item>CMAKE_DOTNET_TARGET_FRAMEWORK</item>
       <item>CMAKE_DOTNET_TARGET_FRAMEWORK_VERSION</item>
       <item>CMAKE_ECLIPSE_GENERATE_LINKED_RESOURCES</item>
       <item>CMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT</item>
@@ -1349,6 +1421,7 @@
       <item>CMAKE_EXTRA_INCLUDE_FILES</item>
       <item>CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES</item>
       <item>CMAKE_FIND_APPBUNDLE</item>
+      <item>CMAKE_FIND_DEBUG_MODE</item>
       <item>CMAKE_FIND_FRAMEWORK</item>
       <item>CMAKE_FIND_FRAMEWORK_EXTRA_LOCATIONS</item>
       <item>CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX</item>
@@ -1383,8 +1456,10 @@
       <item>CMAKE_Fortran_MODDIR_FLAG</item>
       <item>CMAKE_Fortran_MODOUT_FLAG</item>
       <item>CMAKE_Fortran_MODULE_DIRECTORY</item>
+      <item>CMAKE_Fortran_PREPROCESS</item>
       <item>CMAKE_GENERATOR</item>
       <item>CMAKE_GENERATOR_INSTANCE</item>
+      <item>CMAKE_GENERATOR_NO_COMPILER_ENV</item>
       <item>CMAKE_GENERATOR_PLATFORM</item>
       <item>CMAKE_GENERATOR_TOOLSET</item>
       <item>CMAKE_GLOBAL_AUTOGEN_TARGET</item>
@@ -1393,7 +1468,6 @@
       <item>CMAKE_GLOBAL_AUTORCC_TARGET_NAME</item>
       <item>CMAKE_GNUtoMS</item>
       <item>CMAKE_HAS_ANSI_STRING_STREAM</item>
-      <item>CMAKE_HOME_DIRECTORY</item>
       <item>CMAKE_HOST_APPLE</item>
       <item>CMAKE_HOST_SOLARIS</item>
       <item>CMAKE_HOST_SYSTEM</item>
@@ -1462,7 +1536,6 @@
       <item>CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS</item>
       <item>CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP</item>
       <item>CMAKE_INSTALL_UCRT_LIBRARIES</item>
-      <item>CMAKE_INTERNAL_PLATFORM_ABI</item>
       <item>CMAKE_INTERPROCEDURAL_OPTIMIZATION</item>
       <item>CMAKE_IOS_INSTALL_COMBINED</item>
       <item>CMAKE_JOB_POOLS</item>
@@ -1489,7 +1562,10 @@
       <item>CMAKE_MAKE_PROGRAM</item>
       <item>CMAKE_MATCH_COUNT</item>
       <item>CMAKE_MAXIMUM_RECURSION_DEPTH</item>
+      <item>CMAKE_MESSAGE_CONTEXT</item>
+      <item>CMAKE_MESSAGE_CONTEXT_SHOW</item>
       <item>CMAKE_MESSAGE_INDENT</item>
+      <item>CMAKE_MESSAGE_LOG_LEVEL</item>
       <item>CMAKE_MFC_FLAG</item>
       <item>CMAKE_MINIMUM_REQUIRED_VERSION</item>
       <item>CMAKE_MINOR_VERSION</item>
@@ -1501,7 +1577,6 @@
       <item>CMAKE_NETRC</item>
       <item>CMAKE_NETRC_FILE</item>
       <item>CMAKE_NINJA_OUTPUT_PATH_PREFIX</item>
-      <item>CMAKE_NOT_USING_CONFIG_FLAGS</item>
       <item>CMAKE_NO_ANSI_FOR_SCOPE</item>
       <item>CMAKE_NO_ANSI_STREAM_HEADERS</item>
       <item>CMAKE_NO_ANSI_STRING_STREAM</item>
@@ -1514,6 +1589,7 @@
       <item>CMAKE_OSX_SYSROOT</item>
       <item>CMAKE_PARENT_LIST_FILE</item>
       <item>CMAKE_PATCH_VERSION</item>
+      <item>CMAKE_PCH_WARN_INVALID</item>
       <item>CMAKE_PDB_OUTPUT_DIRECTORY</item>
       <item>CMAKE_POSITION_INDEPENDENT_CODE</item>
       <item>CMAKE_PREFIX_PATH</item>
@@ -1558,8 +1634,6 @@
       <item>CMAKE_STATIC_LINKER_FLAGS_INIT</item>
       <item>CMAKE_SUBLIME_TEXT_2_ENV_SETTINGS</item>
       <item>CMAKE_SUBLIME_TEXT_2_EXCLUDE_BUILD_TREE</item>
-      <item>CMAKE_SUPPRESS_DEVELOPER_ERRORS</item>
-      <item>CMAKE_SUPPRESS_DEVELOPER_WARNINGS</item>
       <item>CMAKE_SUPPRESS_REGENERATION</item>
       <item>CMAKE_SWIG_FLAGS</item>
       <item>CMAKE_SWIG_OUTDIR</item>
@@ -1600,7 +1674,6 @@
       <item>CMAKE_VS_GLOBALS</item>
       <item>CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD</item>
       <item>CMAKE_VS_INCLUDE_PACKAGE_TO_DEFAULT_BUILD</item>
-      <item>CMAKE_VS_INTEL_Fortran_PROJECT_VERSION</item>
       <item>CMAKE_VS_JUST_MY_CODE_DEBUGGING</item>
       <item>CMAKE_VS_MSBUILD_COMMAND</item>
       <item>CMAKE_VS_NsightTegra_VERSION</item>
@@ -1629,6 +1702,7 @@
       <item>CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER</item>
       <item>CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS</item>
       <item>CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE</item>
+      <item>CMAKE_XCODE_SCHEME_ENVIRONMENT</item>
       <item>CMAKE_XCODE_SCHEME_GUARD_MALLOC</item>
       <item>CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP</item>
       <item>CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES</item>
@@ -1638,10 +1712,12 @@
       <item>CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP</item>
       <item>CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER</item>
       <item>CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP</item>
+      <item>CMAKE_XCODE_SCHEME_WORKING_DIRECTORY</item>
       <item>CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS</item>
       <item>CPACK_ABSOLUTE_DESTINATION_FILES</item>
       <item>CPACK_ARCHIVE_COMPONENT_INSTALL</item>
       <item>CPACK_ARCHIVE_FILE_NAME</item>
+      <item>CPACK_ARCHIVE_THREADS</item>
       <item>CPACK_BUILD_SOURCE_DIRS</item>
       <item>CPACK_BUNDLE_APPLE_CERT_APP</item>
       <item>CPACK_BUNDLE_APPLE_CODESIGN_FILES</item>
@@ -1706,9 +1782,9 @@
       <item>CPACK_DMG_SLA_LANGUAGES</item>
       <item>CPACK_DMG_VOLUME_NAME</item>
       <item>CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION</item>
-      <item>CPACK_EXT_ENABLE_STAGING</item>
-      <item>CPACK_EXT_PACKAGE_SCRIPT</item>
-      <item>CPACK_EXT_REQUESTED_VERSIONS</item>
+      <item>CPACK_EXTERNAL_ENABLE_STAGING</item>
+      <item>CPACK_EXTERNAL_PACKAGE_SCRIPT</item>
+      <item>CPACK_EXTERNAL_REQUESTED_VERSIONS</item>
       <item>CPACK_GENERATOR</item>
       <item>CPACK_IFW_ADMIN_TARGET_DIRECTORY</item>
       <item>CPACK_IFW_BINARYCREATOR_EXECUTABLE</item>
@@ -1752,7 +1828,6 @@
       <item>CPACK_INSTALL_CMAKE_PROJECTS</item>
       <item>CPACK_INSTALL_COMMANDS</item>
       <item>CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS</item>
-      <item>CPACK_INSTALL_SCRIPT</item>
       <item>CPACK_INSTALL_SCRIPTS</item>
       <item>CPACK_MONOLITHIC_INSTALL</item>
       <item>CPACK_NSIS_COMPRESSOR</item>
@@ -1765,19 +1840,26 @@
       <item>CPACK_NSIS_EXTRA_INSTALL_COMMANDS</item>
       <item>CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS</item>
       <item>CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS</item>
+      <item>CPACK_NSIS_FINISH_TITLE</item>
+      <item>CPACK_NSIS_FINISH_TITLE_3LINES</item>
       <item>CPACK_NSIS_HELP_LINK</item>
       <item>CPACK_NSIS_INSTALLED_ICON_NAME</item>
       <item>CPACK_NSIS_INSTALLER_MUI_ICON_CODE</item>
       <item>CPACK_NSIS_INSTALL_ROOT</item>
+      <item>CPACK_NSIS_MANIFEST_DPI_AWARE</item>
       <item>CPACK_NSIS_MENU_LINKS</item>
       <item>CPACK_NSIS_MODIFY_PATH</item>
       <item>CPACK_NSIS_MUI_FINISHPAGE_RUN</item>
+      <item>CPACK_NSIS_MUI_HEADERIMAGE</item>
       <item>CPACK_NSIS_MUI_ICON</item>
       <item>CPACK_NSIS_MUI_UNIICON</item>
       <item>CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP</item>
       <item>CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP</item>
       <item>CPACK_NSIS_PACKAGE_NAME</item>
+      <item>CPACK_NSIS_UNINSTALL_NAME</item>
       <item>CPACK_NSIS_URL_INFO_ABOUT</item>
+      <item>CPACK_NSIS_WELCOME_TITLE</item>
+      <item>CPACK_NSIS_WELCOME_TITLE_3LINES</item>
       <item>CPACK_NUGET_COMPONENT_INSTALL</item>
       <item>CPACK_NUGET_PACKAGE_AUTHORS</item>
       <item>CPACK_NUGET_PACKAGE_COPYRIGHT</item>
@@ -1794,10 +1876,8 @@
       <item>CPACK_NUGET_PACKAGE_TAGS</item>
       <item>CPACK_NUGET_PACKAGE_TITLE</item>
       <item>CPACK_NUGET_PACKAGE_VERSION</item>
-      <item>CPACK_OSX_PACKAGE_VERSION</item>
       <item>CPACK_OUTPUT_CONFIG_FILE</item>
       <item>CPACK_PACKAGE_CHECKSUM</item>
-      <item>CPACK_PACKAGE_CONTACT</item>
       <item>CPACK_PACKAGE_DESCRIPTION</item>
       <item>CPACK_PACKAGE_DESCRIPTION_FILE</item>
       <item>CPACK_PACKAGE_DESCRIPTION_SUMMARY</item>
@@ -1809,7 +1889,6 @@
       <item>CPACK_PACKAGE_INSTALL_DIRECTORY</item>
       <item>CPACK_PACKAGE_INSTALL_REGISTRY_KEY</item>
       <item>CPACK_PACKAGE_NAME</item>
-      <item>CPACK_PACKAGE_RELOCATABLE</item>
       <item>CPACK_PACKAGE_VENDOR</item>
       <item>CPACK_PACKAGE_VERSION</item>
       <item>CPACK_PACKAGE_VERSION_MAJOR</item>
@@ -1818,6 +1897,16 @@
       <item>CPACK_PACKAGING_INSTALL_PREFIX</item>
       <item>CPACK_PKGBUILD_IDENTITY_NAME</item>
       <item>CPACK_PKGBUILD_KEYCHAIN_PATH</item>
+      <item>CPACK_PRODUCTBUILD_BACKGROUND</item>
+      <item>CPACK_PRODUCTBUILD_BACKGROUND_ALIGNMENT</item>
+      <item>CPACK_PRODUCTBUILD_BACKGROUND_DARKAQUA</item>
+      <item>CPACK_PRODUCTBUILD_BACKGROUND_DARKAQUA_ALIGNMENT</item>
+      <item>CPACK_PRODUCTBUILD_BACKGROUND_DARKAQUA_MIME_TYPE</item>
+      <item>CPACK_PRODUCTBUILD_BACKGROUND_DARKAQUA_SCALING</item>
+      <item>CPACK_PRODUCTBUILD_BACKGROUND_DARKAQUA_UTI</item>
+      <item>CPACK_PRODUCTBUILD_BACKGROUND_MIME_TYPE</item>
+      <item>CPACK_PRODUCTBUILD_BACKGROUND_SCALING</item>
+      <item>CPACK_PRODUCTBUILD_BACKGROUND_UTI</item>
       <item>CPACK_PRODUCTBUILD_IDENTITY_NAME</item>
       <item>CPACK_PRODUCTBUILD_KEYCHAIN_PATH</item>
       <item>CPACK_PRODUCTBUILD_RESOURCES_DIR</item>
@@ -1875,8 +1964,10 @@
       <item>CPACK_RPM_PACKAGE_VENDOR</item>
       <item>CPACK_RPM_PACKAGE_VERSION</item>
       <item>CPACK_RPM_POST_INSTALL_SCRIPT_FILE</item>
+      <item>CPACK_RPM_POST_TRANS_SCRIPT_FILE</item>
       <item>CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE</item>
       <item>CPACK_RPM_PRE_INSTALL_SCRIPT_FILE</item>
+      <item>CPACK_RPM_PRE_TRANS_SCRIPT_FILE</item>
       <item>CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE</item>
       <item>CPACK_RPM_RELOCATION_PATHS</item>
       <item>CPACK_RPM_SOURCE_PKG_BUILD_PARAMS</item>
@@ -1972,6 +2063,8 @@
       <item>CTEST_P4_COMMAND</item>
       <item>CTEST_P4_OPTIONS</item>
       <item>CTEST_P4_UPDATE_OPTIONS</item>
+      <item>CTEST_RESOURCE_SPEC_FILE</item>
+      <item>CTEST_RUN_CURRENT_SCRIPT</item>
       <item>CTEST_SCP_COMMAND</item>
       <item>CTEST_SITE</item>
       <item>CTEST_SOURCE_DIRECTORY</item>
@@ -2069,12 +2162,28 @@
       <item>XCODE_VERSION</item>
     </list>
 
+    <list name="deprecated-or-internal-variables">
+      <item>CMAKE_HOME_DIRECTORY</item>
+      <item>CMAKE_INTERNAL_PLATFORM_ABI</item>
+      <item>CMAKE_NOT_USING_CONFIG_FLAGS</item>
+      <item>CMAKE_SUPPRESS_DEVELOPER_ERRORS</item>
+      <item>CMAKE_SUPPRESS_DEVELOPER_WARNINGS</item>
+      <item>CMAKE_VS_INTEL_Fortran_PROJECT_VERSION</item>
+      <item>CPACK_INSTALL_PREFIX</item>
+      <item>CPACK_INSTALL_SCRIPT</item>
+      <item>CPACK_PACKAGE_CONTACT</item>
+      <item>CPACK_PACKAGE_RELOCATABLE</item>
+      <item>CPACK_TEMPORARY_DIRECTORY</item>
+      <item>CPACK_TOPLEVEL_DIRECTORY</item>
+    </list>
+
     <list name="environment-variables">
       <item>CC</item>
       <item>CFLAGS</item>
       <item>CMAKE_APPBUNDLE_PATH</item>
       <item>CMAKE_BUILD_PARALLEL_LEVEL</item>
       <item>CMAKE_CONFIG_TYPE</item>
+      <item>CMAKE_EXPORT_COMPILE_COMMANDS</item>
       <item>CMAKE_FRAMEWORK_PATH</item>
       <item>CMAKE_GENERATOR</item>
       <item>CMAKE_GENERATOR_INSTANCE</item>
@@ -2114,6 +2223,7 @@
       <item>AUTOMOC_SOURCE_GROUP</item>
       <item>AUTOMOC_TARGETS_FOLDER</item>
       <item>AUTORCC_SOURCE_GROUP</item>
+      <item>CMAKE_CUDA_KNOWN_FEATURES</item>
       <item>CMAKE_CXX_KNOWN_FEATURES</item>
       <item>CMAKE_C_KNOWN_FEATURES</item>
       <item>CMAKE_ROLE</item>
@@ -2183,6 +2293,7 @@
     </list>
     <list name="target-properties">
       <item>ADDITIONAL_CLEAN_FILES</item>
+      <item>AIX_EXPORT_ALL_SYMBOLS</item>
       <item>ALIASED_TARGET</item>
       <item>ANDROID_ANT_ADDITIONAL_OPTIONS</item>
       <item>ANDROID_API</item>
@@ -2239,9 +2350,11 @@
       <item>COMPILE_PDB_NAME</item>
       <item>COMPILE_PDB_OUTPUT_DIRECTORY</item>
       <item>CROSSCOMPILING_EMULATOR</item>
+      <item>CUDA_ARCHITECTURES</item>
       <item>CUDA_EXTENSIONS</item>
       <item>CUDA_PTX_COMPILATION</item>
       <item>CUDA_RESOLVE_DEVICE_SYMBOLS</item>
+      <item>CUDA_RUNTIME_LIBRARY</item>
       <item>CUDA_SEPARABLE_COMPILATION</item>
       <item>CUDA_STANDARD</item>
       <item>CUDA_STANDARD_REQUIRED</item>
@@ -2254,7 +2367,9 @@
       <item>DEFINE_SYMBOL</item>
       <item>DEPLOYMENT_ADDITIONAL_FILES</item>
       <item>DEPLOYMENT_REMOTE_DIRECTORY</item>
+      <item>DEPRECATION</item>
       <item>DISABLE_PRECOMPILE_HEADERS</item>
+      <item>DOTNET_TARGET_FRAMEWORK</item>
       <item>DOTNET_TARGET_FRAMEWORK_VERSION</item>
       <item>ENABLE_EXPORTS</item>
       <item>EXCLUDE_FROM_ALL</item>
@@ -2267,6 +2382,7 @@
       <item>FRAMEWORK_VERSION</item>
       <item>Fortran_FORMAT</item>
       <item>Fortran_MODULE_DIRECTORY</item>
+      <item>Fortran_PREPROCESS</item>
       <item>GENERATOR_FILE_NAME</item>
       <item>GNUtoMS</item>
       <item>HAS_CXX</item>
@@ -2325,6 +2441,8 @@
       <item>LINK_SEARCH_START_STATIC</item>
       <item>LINK_WHAT_YOU_USE</item>
       <item>LOCATION</item>
+      <item>MACHO_COMPATIBILITY_VERSION</item>
+      <item>MACHO_CURRENT_VERSION</item>
       <item>MACOSX_BUNDLE</item>
       <item>MACOSX_BUNDLE_INFO_PLIST</item>
       <item>MACOSX_FRAMEWORK_INFO_PLIST</item>
@@ -2335,7 +2453,10 @@
       <item>NO_SONAME</item>
       <item>NO_SYSTEM_FROM_IMPORTED</item>
       <item>OSX_ARCHITECTURES</item>
+      <item>OSX_COMPATIBILITY_VERSION</item>
+      <item>OSX_CURRENT_VERSION</item>
       <item>OUTPUT_NAME</item>
+      <item>PCH_WARN_INVALID</item>
       <item>PDB_NAME</item>
       <item>PDB_OUTPUT_DIRECTORY</item>
       <item>POSITION_INDEPENDENT_CODE</item>
@@ -2366,6 +2487,7 @@
       <item>UNITY_BUILD_BATCH_SIZE</item>
       <item>UNITY_BUILD_CODE_AFTER_INCLUDE</item>
       <item>UNITY_BUILD_CODE_BEFORE_INCLUDE</item>
+      <item>UNITY_BUILD_MODE</item>
       <item>VERSION</item>
       <item>VISIBILITY_INLINES_HIDDEN</item>
       <item>VS_CONFIGURATION_TYPE</item>
@@ -2374,6 +2496,7 @@
       <item>VS_DEBUGGER_ENVIRONMENT</item>
       <item>VS_DEBUGGER_WORKING_DIRECTORY</item>
       <item>VS_DESKTOP_EXTENSIONS_VERSION</item>
+      <item>VS_DOTNET_DOCUMENTATION_FILE</item>
       <item>VS_DOTNET_REFERENCES</item>
       <item>VS_DOTNET_REFERENCES_COPY_LOCAL</item>
       <item>VS_DOTNET_TARGET_FRAMEWORK_VERSION</item>
@@ -2388,12 +2511,14 @@
       <item>VS_MOBILE_EXTENSIONS_VERSION</item>
       <item>VS_NO_SOLUTION_DEPLOY</item>
       <item>VS_PACKAGE_REFERENCES</item>
+      <item>VS_PLATFORM_TOOLSET</item>
       <item>VS_PROJECT_IMPORT</item>
       <item>VS_SCC_AUXPATH</item>
       <item>VS_SCC_LOCALPATH</item>
       <item>VS_SCC_PROJECTNAME</item>
       <item>VS_SCC_PROVIDER</item>
       <item>VS_SDK_REFERENCES</item>
+      <item>VS_SOLUTION_DEPLOY</item>
       <item>VS_USER_PROPS</item>
       <item>VS_WINDOWS_TARGET_PLATFORM_MIN_VERSION</item>
       <item>VS_WINRT_COMPONENT</item>
@@ -2423,6 +2548,7 @@
       <item>XCODE_SCHEME_THREAD_SANITIZER_STOP</item>
       <item>XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER</item>
       <item>XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP</item>
+      <item>XCODE_SCHEME_WORKING_DIRECTORY</item>
       <item>XCODE_SCHEME_ZOMBIE_OBJECTS</item>
       <item>XCTEST</item>
     </list>
@@ -2435,6 +2561,7 @@
       <item>COMPILE_OPTIONS</item>
       <item>EXTERNAL_OBJECT</item>
       <item>Fortran_FORMAT</item>
+      <item>Fortran_PREPROCESS</item>
       <item>GENERATED</item>
       <item>HEADER_FILE_ONLY</item>
       <item>INCLUDE_DIRECTORIES</item>
@@ -2459,6 +2586,7 @@
       <item>VS_DEPLOYMENT_LOCATION</item>
       <item>VS_INCLUDE_IN_VSIX</item>
       <item>VS_RESOURCE_GENERATOR</item>
+      <item>VS_SETTINGS</item>
       <item>VS_SHADER_DISABLE_OPTIMIZATIONS</item>
       <item>VS_SHADER_ENABLE_DEBUG</item>
       <item>VS_SHADER_ENTRYPOINT</item>
@@ -2548,6 +2676,10 @@
       <item>COMPILE_FEATURES</item>
       <item>COMPILE_LANG_AND_ID</item>
       <item>COMPILE_LANGUAGE</item>
+      <item>LINK_LANG_AND_ID</item>
+      <item>LINK_LANGUAGE</item>
+      <item>DEVICE_LINK</item>
+      <item>HOST_LINK</item>
       <item>ANGLE-R</item>
       <item>COMMA</item>
       <item>SEMICOLON</item>
@@ -2599,6 +2731,7 @@
         <DetectSpaces/>
         <WordDetect String="break" insensitive="true" attribute="Command" context="break_ctx" />
         <WordDetect String="cmake_host_system_information" insensitive="true" attribute="Command" context="cmake_host_system_information_ctx" />
+        <WordDetect String="cmake_language" insensitive="true" attribute="Command" context="cmake_language_ctx" />
         <WordDetect String="cmake_minimum_required" insensitive="true" attribute="Command" context="cmake_minimum_required_ctx" />
         <WordDetect String="cmake_parse_arguments" insensitive="true" attribute="Command" context="cmake_parse_arguments_ctx" />
         <WordDetect String="cmake_policy" insensitive="true" attribute="Command" context="cmake_policy_ctx" />
@@ -2606,11 +2739,11 @@
         <WordDetect String="continue" insensitive="true" attribute="Command" context="continue_ctx" />
         <WordDetect String="elseif" insensitive="true" attribute="Command" context="elseif_ctx" />
         <WordDetect String="else" insensitive="true" attribute="Command" context="else_ctx" />
-        <WordDetect String="endforeach" insensitive="true" attribute="Command" context="endforeach_ctx" />
-        <WordDetect String="endfunction" insensitive="true" attribute="Command" context="endfunction_ctx" />
-        <WordDetect String="endif" insensitive="true" attribute="Command" context="endif_ctx" />
-        <WordDetect String="endmacro" insensitive="true" attribute="Command" context="endmacro_ctx" />
-        <WordDetect String="endwhile" insensitive="true" attribute="Command" context="endwhile_ctx" />
+        <WordDetect String="endforeach" insensitive="true" attribute="Command" context="endforeach_ctx" endRegion="foreach" />
+        <WordDetect String="endfunction" insensitive="true" attribute="Command" context="endfunction_ctx" endRegion="function" />
+        <WordDetect String="endif" insensitive="true" attribute="Command" context="endif_ctx" endRegion="if" />
+        <WordDetect String="endmacro" insensitive="true" attribute="Command" context="endmacro_ctx" endRegion="macro" />
+        <WordDetect String="endwhile" insensitive="true" attribute="Command" context="endwhile_ctx" endRegion="while" />
         <WordDetect String="execute_process" insensitive="true" attribute="Command" context="execute_process_ctx" />
         <WordDetect String="file" insensitive="true" attribute="Command" context="file_ctx" />
         <WordDetect String="find_file" insensitive="true" attribute="Command" context="find_file_ctx" />
@@ -2618,17 +2751,17 @@
         <WordDetect String="find_package" insensitive="true" attribute="Command" context="find_package_ctx" />
         <WordDetect String="find_path" insensitive="true" attribute="Command" context="find_path_ctx" />
         <WordDetect String="find_program" insensitive="true" attribute="Command" context="find_program_ctx" />
-        <WordDetect String="foreach" insensitive="true" attribute="Command" context="foreach_ctx" />
-        <WordDetect String="function" insensitive="true" attribute="Command" context="function_ctx" />
+        <WordDetect String="foreach" insensitive="true" attribute="Command" context="foreach_ctx" beginRegion="foreach" />
+        <WordDetect String="function" insensitive="true" attribute="Command" context="function_ctx" beginRegion="function" />
         <WordDetect String="get_cmake_property" insensitive="true" attribute="Command" context="get_cmake_property_ctx" />
         <WordDetect String="get_directory_property" insensitive="true" attribute="Command" context="get_directory_property_ctx" />
         <WordDetect String="get_filename_component" insensitive="true" attribute="Command" context="get_filename_component_ctx" />
         <WordDetect String="get_property" insensitive="true" attribute="Command" context="get_property_ctx" />
-        <WordDetect String="if" insensitive="true" attribute="Command" context="if_ctx" />
+        <WordDetect String="if" insensitive="true" attribute="Command" context="if_ctx" beginRegion="if" />
         <WordDetect String="include" insensitive="true" attribute="Command" context="include_ctx" />
         <WordDetect String="include_guard" insensitive="true" attribute="Command" context="include_guard_ctx" />
         <WordDetect String="list" insensitive="true" attribute="Command" context="list_ctx" />
-        <WordDetect String="macro" insensitive="true" attribute="Command" context="macro_ctx" />
+        <WordDetect String="macro" insensitive="true" attribute="Command" context="macro_ctx" beginRegion="macro" />
         <WordDetect String="mark_as_advanced" insensitive="true" attribute="Command" context="mark_as_advanced_ctx" />
         <WordDetect String="math" insensitive="true" attribute="Command" context="math_ctx" />
         <WordDetect String="message" insensitive="true" attribute="Command" context="message_ctx" />
@@ -2642,7 +2775,7 @@
         <WordDetect String="string" insensitive="true" attribute="Command" context="string_ctx" />
         <WordDetect String="unset" insensitive="true" attribute="Command" context="unset_ctx" />
         <WordDetect String="variable_watch" insensitive="true" attribute="Command" context="variable_watch_ctx" />
-        <WordDetect String="while" insensitive="true" attribute="Command" context="while_ctx" />
+        <WordDetect String="while" insensitive="true" attribute="Command" context="while_ctx" beginRegion="while" />
         <WordDetect String="add_compile_definitions" insensitive="true" attribute="Command" context="add_compile_definitions_ctx" />
         <WordDetect String="add_compile_options" insensitive="true" attribute="Command" context="add_compile_options_ctx" />
         <WordDetect String="add_custom_command" insensitive="true" attribute="Command" context="add_custom_command_ctx" />
@@ -2704,9 +2837,7 @@
         <WordDetect String="ctest_test" insensitive="true" attribute="Command" context="ctest_test_ctx" />
         <WordDetect String="ctest_update" insensitive="true" attribute="Command" context="ctest_update_ctx" />
         <WordDetect String="ctest_upload" insensitive="true" attribute="Command" context="ctest_upload_ctx" />
-        <RegExpr attribute="Region Marker" context="RST Documentation" String="^#\[(=*)\[\.rst:" column="0" />
-        <RegExpr attribute="Comment" context="Bracketed Comment" String="#\[(=*)\[" />
-        <DetectChar attribute="Comment" context="Comment" char="#" />
+        <DetectChar attribute="Comment" context="Match Comments and Docs" char="#" lookAhead="true" />
         <DetectIdentifier attribute="User Function/Macro" context="User Function" />
         <RegExpr attribute="@Variable Substitution" context="@VarSubst" String="@&id_re;@" lookAhead="true" />
         <!-- Include keywords matching for language autocompleter work -->
@@ -2728,6 +2859,14 @@
         <keyword attribute="Special Args" context="#stay" String="cmake_host_system_information_sargs" />
         <IncludeRules context="User Function Args" />
       </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="cmake_language_ctx">
+        <DetectChar attribute="Normal Text" context="cmake_language_ctx_op" char="(" />
+      </context>
+      <context attribute="Normal Text" lineEndContext="#stay" name="cmake_language_ctx_op">
+        <IncludeRules context="EndCmdPop2" />
+        <keyword attribute="Named Args" context="#stay" String="cmake_language_nargs" />
+        <IncludeRules context="User Function Args" />
+      </context>
       <context attribute="Normal Text" lineEndContext="#stay" name="cmake_minimum_required_ctx">
         <DetectChar attribute="Normal Text" context="cmake_minimum_required_ctx_op" char="(" />
       </context>
@@ -3309,6 +3448,7 @@
       </context>
       <context attribute="Normal Text" lineEndContext="#stay" name="get_source_file_property_ctx_op">
         <IncludeRules context="EndCmdPop2" />
+        <keyword attribute="Named Args" context="#stay" String="get_source_file_property_nargs" />
         <keyword attribute="Property" context="#stay" String="source-properties" />
         <IncludeRules context="Detect More source-properties" />
         <IncludeRules context="User Function Args" />
@@ -3625,6 +3765,7 @@
       <context attribute="Normal Text" lineEndContext="#stay" name="ctest_test_ctx_op">
         <IncludeRules context="EndCmdPop2" />
         <keyword attribute="Named Args" context="#stay" String="ctest_test_nargs" />
+        <keyword attribute="Special Args" context="#stay" String="ctest_test_sargs" />
         <IncludeRules context="User Function Args" />
       </context>
       <context attribute="Normal Text" lineEndContext="#stay" name="ctest_update_ctx">
@@ -3661,6 +3802,7 @@
         <RegExpr attribute="Property" context="#stay" String="\b&id_re;_OUTPUT_NAME\b" />
         <RegExpr attribute="Property" context="#stay" String="\b&id_re;_POSTFIX\b" />
         <RegExpr attribute="Property" context="#stay" String="\bEXCLUDE_FROM_DEFAULT_BUILD_&id_re;\b" />
+        <RegExpr attribute="Property" context="#stay" String="\bFRAMEWORK_MULTI_CONFIG_POSTFIX_&id_re;\b" />
         <RegExpr attribute="Property" context="#stay" String="\bIMPORTED_IMPLIB_&id_re;\b" />
         <RegExpr attribute="Property" context="#stay" String="\bIMPORTED_LIBNAME_&id_re;\b" />
         <RegExpr attribute="Property" context="#stay" String="\bIMPORTED_LINK_DEPENDENT_LIBRARIES_&id_re;\b" />
@@ -3695,6 +3837,7 @@
         <RegExpr attribute="Property" context="#stay" String="\bVS_DOTNET_REFERENCE_&id_re;\b" />
         <RegExpr attribute="Property" context="#stay" String="\bVS_DOTNET_REFERENCEPROP_&id_re;_TAG_&id_re;\b" />
         <RegExpr attribute="Property" context="#stay" String="\bVS_GLOBAL_&id_re;\b" />
+        <RegExpr attribute="Property" context="#stay" String="\bVS_SOURCE_SETTINGS_&id_re;\b" />
         <RegExpr attribute="Property" context="#stay" String="\bXCODE_ATTRIBUTE_&id_re;\b" />
       </context>
 
@@ -3721,16 +3864,17 @@
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect Builtin Variables">
+        <RegExpr attribute="Internal Name" context="#stay" String="\b_&id_re;\b" />
+        <keyword attribute="CMake Internal Variable" context="#stay" String="deprecated-or-internal-variables" insensitive="false" />
         <keyword attribute="Builtin Variable" context="#stay" String="variables" insensitive="false" />
         <IncludeRules context="Detect More Builtin Variables" />
-        <!-- JGM: next line is needed because we don't really handle
-             \b at the beginning of a regex, and we don't want to
-             capture part of FOO_BAR as an "Internal Name" -->
-        <RegExpr attribute="Normal Text" context="#stay" String="&id_re;\b" />
-        <RegExpr attribute="Internal Name" context="#stay" String="\b_&id_re;\b" />
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect More Builtin Variables">
+        <RegExpr attribute="CMake Internal Variable" context="#stay" String="\bCMAKE_&id_re;_COMPILER_ABI\b" />
+        <RegExpr attribute="CMake Internal Variable" context="#stay" String="\bCMAKE_&id_re;_COMPILER_ARCHITECTURE_ID\b" />
+        <RegExpr attribute="CMake Internal Variable" context="#stay" String="\bCMAKE_&id_re;_COMPILER_VERSION_INTERNAL\b" />
+        <RegExpr attribute="CMake Internal Variable" context="#stay" String="\bCMAKE_&id_re;_PLATFORM_ID\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_BINARY_DIR\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_SOURCE_DIR\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_VERSION\b" />
@@ -3759,7 +3903,10 @@
         <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_LIBRARY_DIRS\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_VERSION_COUNT\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_VERSION_STRING\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_KEYWORDS_MISSING_VALUES\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_UNPARSED_ARGUMENTS\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\b&id_re;_MODULE_NAME\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bARGV[0-9]+\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_POSTFIX\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_ANDROID_TOOLCHAIN_MACHINE\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_ANDROID_TOOLCHAIN_PREFIX\b" />
@@ -3769,7 +3916,6 @@
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_ARCHIVE_FINISH\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_CLANG_TIDY\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_COMPILER\b" />
-        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_COMPILER_ABI\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_COMPILER_AR\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_COMPILER_EXTERNAL_TOOLCHAIN\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_COMPILER_ID\b" />
@@ -3811,7 +3957,6 @@
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_LINKER_WRAPPER_FLAG_SEP\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_LINK_EXECUTABLE\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_OUTPUT_EXTENSION\b" />
-        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_PLATFORM_ID\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_SIMULATE_ID\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_SIMULATE_VERSION\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_&id_re;_SIZEOF_DATA_PTR\b" />
@@ -3825,6 +3970,7 @@
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_DISABLE_FIND_PACKAGE_&id_re;\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_EXE_LINKER_FLAGS_&id_re;\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_EXE_LINKER_FLAGS_&id_re;_INIT\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_FRAMEWORK_MULTI_CONFIG_POSTFIX_&id_re;\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_INTERPROCEDURAL_OPTIMIZATION_&id_re;\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_LIBRARY_OUTPUT_DIRECTORY_&id_re;\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCMAKE_MAP_IMPORTED_CONFIG_&id_re;\b" />
@@ -3872,6 +4018,7 @@
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_DEBIAN_&id_re;_PACKAGE_SOURCE\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_DEBIAN_&id_re;_PACKAGE_SUGGESTS\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_DEBIAN_&id_re;_DEBUGINFO_PACKAGE\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_DMG_&id_re;_FILE_NAME\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NSIS_&id_re;_INSTALL_DIRECTORY\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_AUTHORS\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_COPYRIGHT\b" />
@@ -3889,6 +4036,8 @@
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_TITLE\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_&id_re;_PACKAGE_VERSION\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_NUGET_PACKAGE_DEPENDENCIES_&id_re;_VERSION\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_POSTFLIGHT_&id_re;_SCRIPT\b" />
+        <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_PREFLIGHT_&id_re;_SCRIPT\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_RPM_&id_re;_DEFAULT_DIR_PERMISSIONS\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_RPM_&id_re;_DEFAULT_FILE_PERMISSIONS\b" />
         <RegExpr attribute="Builtin Variable" context="#stay" String="\bCPACK_RPM_&id_re;_DEFAULT_GROUP\b" />
@@ -3930,25 +4079,21 @@
 
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect Variable Substitutions">
         <RegExpr attribute="Cache Variable Substitution" context="#stay" String="\$CACHE\{\s*[\w-]+\s*\}" />
-        <RegExpr attribute="Environment Variable Substitution" context="EnvVarSubst" String="\$ENV\{\s*[\w-]+\s*\}" lookAhead="true" />
+        <RegExpr attribute="Environment Variable Substitution" context="EnvVarSubst" String="\$?ENV\{" />
         <Detect2Chars attribute="Variable Substitution" context="VarSubst" char="$" char1="{" />
         <RegExpr attribute="@Variable Substitution" context="@VarSubst" String="@&id_re;@" lookAhead="true" />
       </context>
 
       <context attribute="Environment Variable Substitution" lineEndContext="#pop" name="EnvVarSubst">
-        <DetectIdentifier />
-        <DetectChar attribute="Environment Variable Substitution" context="EnvVarSubstVar" char="{" />
-        <DetectChar attribute="Environment Variable Substitution" context="#pop" char="}" />
-      </context>
-
-      <context attribute="Environment Variable Substitution" lineEndContext="#pop" name="EnvVarSubstVar">
         <keyword attribute="Standard Environment Variable" context="#stay" String="environment-variables" insensitive="false" />
         <RegExpr attribute="Standard Environment Variable" context="#stay" String="\b&id_re;_DIR\b" />
         <RegExpr attribute="Standard Environment Variable" context="#stay" String="\b&id_re;_ROOT\b" />
         <RegExpr attribute="Standard Environment Variable" context="#stay" String="\bASM&id_re;\b" />
         <RegExpr attribute="Standard Environment Variable" context="#stay" String="\bASM&id_re;FLAGS\b" />
+        <RegExpr attribute="Standard Environment Variable" context="#stay" String="\bCMAKE_&id_re;_COMPILER_LAUNCHER\b" />
         <DetectIdentifier />
-        <DetectChar attribute="Environment Variable Substitution" context="#pop#pop" char="}" />
+        <IncludeRules context="Detect Variable Substitutions" />
+        <DetectChar attribute="Environment Variable Substitution" context="#pop" char="}" />
       </context>
 
       <context attribute="Variable Substitution" lineEndContext="#pop" name="VarSubst">
@@ -3959,6 +4104,7 @@
       </context>
 
       <context attribute="@Variable Substitution" lineEndContext="#pop" name="@VarSubst">
+        <IncludeRules context="Detect Builtin Variables" />
         <DetectChar attribute="@Variable Substitution" context="VarSubst@" char="@" />
       </context>
 
@@ -3971,11 +4117,13 @@
       <context attribute="Normal Text" lineEndContext="#stay" name="User Function Args">
         <Detect2Chars attribute="Normal Text" context="#stay" char="\" char1="(" />
         <Detect2Chars attribute="Normal Text" context="#stay" char="\" char1=")" />
-        <RegExpr attribute="Escapes" context="#stay" String="\\[&quot;$n\\]" />
+        <Detect2Chars attribute="Escapes" context="#stay" char="\" char1="&quot;" />
+        <Detect2Chars attribute="Escapes" context="#stay" char="\" char1="$" />
+        <Detect2Chars attribute="Escapes" context="#stay" char="\" char1="n" />
+        <Detect2Chars attribute="Escapes" context="#stay" char="\" char1="\" />
         <DetectChar attribute="Strings" context="String" char="&quot;" />
-        <RegExpr attribute="Strings" context="Bracketed String" String="\[(=*)\[" />
-        <RegExpr attribute="Comment" context="Bracketed Comment" String="#\[(=*)\[" />
-        <DetectChar attribute="Comment" context="Comment" char="#" />
+        <RegExpr attribute="Strings" context="Bracketed String" String="\[(=*)\[" beginRegion="BracketedString" />
+        <DetectChar attribute="Comment" context="Match Comments" char="#" lookAhead="true" />
         <IncludeRules context="Detect Builtin Variables" />
         <IncludeRules context="Detect Variable Substitutions" />
         <IncludeRules context="Detect Special Values" />
@@ -3984,41 +4132,62 @@
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect Special Values">
-        <RegExpr attribute="True Special Arg" context="#stay" String="\b(TRUE|ON)\b" />
-        <RegExpr attribute="False Special Arg" context="#stay" String="\b(FALSE|OFF|(&id_re;-)?NOTFOUND)\b" />
+        <WordDetect attribute="True Special Arg" context="#stay" String="TRUE" />
+        <WordDetect attribute="True Special Arg" context="#stay" String="ON" />
+        <WordDetect attribute="False Special Arg" context="#stay" String="FALSE" />
+        <WordDetect attribute="False Special Arg" context="#stay" String="OFF" />
+        <RegExpr attribute="False Special Arg" context="#stay" String="\b(?:&id_re;-)?NOTFOUND\b" />
         <RegExpr attribute="Special Args" context="#stay" String="\bCMP[0-9][0-9][0-9]\b" />
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect Aliased Targets">
-        <RegExpr attribute="Aliased Targets" context="#stay" String="\b&id_re;::&id_re;(::&id_re;)*\b" />
+        <RegExpr attribute="Aliased Targets" context="#stay" String="\b&id_re;::&id_re;(?:\:\:&id_re;)*\b" />
       </context>
 
+      <context attribute="Comment" lineEndContext="#pop" name="Match Comments">
+        <RegExpr attribute="Comment" context="#pop!Bracketed Comment" String="#\[(=*)\[" beginRegion="BracketedComment" />
+        <DetectChar attribute="Comment" context="#pop!Comment" char="#" />
+      </context>
+
+      <context attribute="Comment" lineEndContext="#pop" name="Match Comments and Docs">
+        <RegExpr attribute="Region Marker" context="#pop!RST Documentation" String="^#\[(=*)\[\.rst:" column="0" beginRegion="RSTDocumentation" />
+        <IncludeRules context="Match Comments" />
+      </context>
+
       <context attribute="Comment" lineEndContext="#pop" name="Comment">
         <LineContinue attribute="Comment" context="#pop" />
+        <DetectSpaces />
         <IncludeRules context="##Alerts" />
         <IncludeRules context="##Modelines" />
       </context>
 
       <context attribute="Comment" lineEndContext="#stay" name="RST Documentation" dynamic="true">
-        <RegExpr attribute="Region Marker" context="#pop" String="^#?\]%1\]" dynamic="true" column="0" />
+        <RegExpr attribute="Region Marker" context="#pop" String="^#?\]%1\]" dynamic="true" column="0" endRegion="RSTDocumentation" />
         <IncludeRules context="##reStructuredText" />
       </context>
 
       <context attribute="Comment" lineEndContext="#stay" name="Bracketed Comment" dynamic="true">
-        <RegExpr attribute="Comment" context="#pop" String=".*\]%1\]" dynamic="true" />
+        <LineContinue attribute="Comment" context="#stay" />
+        <DetectSpaces />
+        <StringDetect attribute="Comment" context="#pop" String="]%1]" dynamic="true" endRegion="BracketedComment" />
         <IncludeRules context="##Alerts" />
         <IncludeRules context="##Modelines" />
       </context>
 
       <context attribute="Strings" lineEndContext="#stay" name="String">
         <RegExpr attribute="Strings" context="#pop" String="&quot;(?=[ );]|$)" />
-        <RegExpr attribute="Escapes" context="#stay" String="\\[&quot;$nrt\\]" />
+        <Detect2Chars attribute="Escapes" context="#stay" char="\" char1="&quot;" />
+        <Detect2Chars attribute="Escapes" context="#stay" char="\" char1="$" />
+        <Detect2Chars attribute="Escapes" context="#stay" char="\" char1="n" />
+        <Detect2Chars attribute="Escapes" context="#stay" char="\" char1="r" />
+        <Detect2Chars attribute="Escapes" context="#stay" char="\" char1="t" />
+        <Detect2Chars attribute="Escapes" context="#stay" char="\" char1="\" />
         <IncludeRules context="Detect Variable Substitutions" />
         <IncludeRules context="Detect Generator Expressions" />
       </context>
 
       <context attribute="Strings" lineEndContext="#stay" name="Bracketed String" dynamic="true">
-        <RegExpr attribute="Strings" context="#pop" String="\]%1\]" dynamic="true" />
+        <StringDetect attribute="Strings" context="#pop" String="]%1]" dynamic="true" endRegion="BracketedString" />
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="Detect Generator Expressions">
@@ -4047,9 +4216,10 @@
       <itemData name="True Special Arg" defStyleNum="dsOthers" color="#30a030" selColor="#30a030" spellChecking="false" />
       <itemData name="False Special Arg" defStyleNum="dsOthers" color="#e05050" selColor="#e05050" spellChecking="false" />
       <itemData name="Strings" defStyleNum="dsString" spellChecking="true" />
-      <itemData name="Escapes" defStyleNum="dsChar" spellChecking="false" />
+      <itemData name="Escapes" defStyleNum="dsSpecialChar" spellChecking="false" />
       <itemData name="Builtin Variable" defStyleNum="dsDecVal" color="#c09050" selColor="#c09050" spellChecking="false" />
-      <itemData name="Internal Name" defStyleNum="dsDecVal" color="#303030" selColor="#303030" spellChecking="false" />
+      <itemData name="CMake Internal Variable" defStyleNum="dsVariable" spellChecking="false" />
+      <itemData name="Internal Name" defStyleNum="dsVariable" spellChecking="false" />
       <itemData name="Variable Substitution" defStyleNum="dsDecVal" spellChecking="false" />
       <itemData name="@Variable Substitution" defStyleNum="dsBaseN" spellChecking="false" />
       <itemData name="Cache Variable Substitution" defStyleNum="dsFloat" spellChecking="false" />
@@ -4065,11 +4235,12 @@
 
   <general>
     <comments>
-      <comment name="singleLine" start="#" />
+      <comment name="singleLine" start="#" position="afterwhitespace" />
+      <comment name="multiLine" start="#[[" end="]]" region="BracketedComment"/>
     </comments>
     <keywords casesensitive="1" />
   </general>
 </language>
 
-<!-- kate: indent-width 2; tab-width 2; -->
+<!-- kate: replace-tabs on; indent-width 2; tab-width 2; -->
 
diff --git a/syntax/coffee.xml b/syntax/coffee.xml
--- a/syntax/coffee.xml
+++ b/syntax/coffee.xml
@@ -2,7 +2,7 @@
 <!DOCTYPE language SYSTEM "language.dtd">
 
 <language name="CoffeeScript"
-          version="10"
+          version="13"
           kateversion="5.0"
           section="Scripts"
           extensions="Cakefile;*.coffee;*.coco;*.cson"
@@ -155,9 +155,9 @@
         <keyword attribute="Browser Globals" context="#stay" String="browser_globals"/>
         <keyword attribute="Node.js Globals" context="#stay" String="nodejs_globals"/>
         <!-- Member accessors. -->
-        <RegExpr attribute="Accessor" context="#stay" String="(@[_$a-zA-Z][$\w]*|\bthis)\b" insensitive="false"/>
+        <RegExpr attribute="Accessor" context="#stay" String="(?:@[_$a-zA-Z][$\w]*|\bthis)\b" insensitive="false"/>
         <!-- Function definitions. Matches an optional argument list followed by a function arrow (normal or fat). -->
-        <RegExpr attribute="Function" context="#stay" String="(\((\'[^']*'|&quot;[^&quot;]*&quot;|[^()])*\))?\s*(-|=)&gt;" insensitive="true"/>
+        <RegExpr attribute="Function" context="#stay" String="(?:\((?:\'[^']*'|&quot;[^&quot;]*&quot;|[^()])*\))?\s*(?:\-|=)&gt;" insensitive="true"/>
         <!-- Generic identifiers. -->
         <RegExpr attribute="Identifier" context="#stay" String="[_$a-z][$\w]*\b" insensitive="true"/>
         <!-- Strings. -->
@@ -173,7 +173,7 @@
         <DetectChar attribute="Comment" context="Comment" char="#"/>
         <!-- Regular expressions. -->
         <StringDetect attribute="Regex" context="Multiline Regex" String="///" beginRegion="Multiline Regex"/>
-        <RegExpr attribute="Regex" context="#stay" String="/([^/\\\r\n]|\\.)*/[mig]{0,3}"/>
+        <RegExpr attribute="Regex" context="#stay" String="/(?:[^/\\\r\n]|\\.)*/[mig]{0,3}"/>
         <!-- Member objects. -->
         <DetectChar attribute="Symbol" context="Member Object" char="."/>
         <!-- Operators and other non-alphanumeric symbols. -->
@@ -197,10 +197,12 @@
       <!-- Comments. -->
       <context name="Comment" attribute="Comment" lineEndContext="#pop">
         <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
       <context name="Multiline Comment" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="1">
         <StringDetect attribute="Comment" context="#pop" String="###" endRegion="Comment"/>
         <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
       <!-- Single-line strings. -->
       <context name="String" attribute="String" lineEndContext="#stay">
@@ -225,7 +227,7 @@
       <!-- Escaped characters. -->
       <context name="Escape" attribute="String" lineEndContext="#stay">
         <!-- Hexadecimal, unicode & reserved character escape sequences. -->
-        <RegExpr attribute="Escape" context="#stay" String="\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u\{[0-9a-fA-F]+\}|[\\0bfnrtv&quot;&apos;])"/>
+        <RegExpr attribute="Escape" context="#stay" String="\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u\{[0-9a-fA-F]+\}|[\\0bfnrtv&quot;&apos;])"/>
         <!-- Invalid escapes. Octal escape sequences are not allowed. -->
         <RegExpr attribute="Error" context="#stay" String="\\[ux1-7]"/>
         <!-- Make any character literal. -->
@@ -238,58 +240,72 @@
       </context>
 
       <!-- Embedded Javascript (one backtick). -->
+
       <context name="Javascript" attribute="Normal" lineEndContext="#stay" noIndentationBasedFolding="1">
         <DetectChar attribute="Javascript" context="#pop" char="`" endRegion="Javascript"/>
         <!-- NOTE: This hides errors where a backtick is embedded in a JS string or a comment. -->
         <IncludeRules context="Overwrite Javascript"/>
         <IncludeRules context="Normal##JavaScript" includeAttrib="true"/>
       </context>
+
       <!-- Allow template strings in JavaScript embedded code (with one backtick). -->
-      <context name="Overwrite Javascript" attribute="Javascript" lineEndContext="#stay" noIndentationBasedFolding="1">
+      <context name="Overwrite Javascript" attribute="Normal" lineEndContext="#stay" noIndentationBasedFolding="1">
         <!-- JavaScript Template. -->
-        <Detect2Chars attribute="JavaScript Template" context="Javascript Template" char="\" char1="`"/>
-        <RegExpr attribute="Error" context="#stay" String="String\.raw(?=`)"/>
-        <StringDetect attribute="JavaScript Template" context="Javascript RawTemplate" String="String.raw\`"/>
+        <Detect2Chars attribute="JavaScript Template" context="Javascript Template" char="\" char1="`" beginRegion="Template"/>
+        <RegExpr context="Javascript StartRawTemplate" String="\b(String)\s*(\.)\s*(raw)\s*\\`" lookAhead="true"/>
+        <!-- Tagged Template Literals -->
+        <RegExpr attribute="JavaScript Function Name" context="#stay" String="[a-zA-Z_$[:^ascii:]][\w$[:^ascii:]]*(?=\s*\\`)" />
+        <RegExpr attribute="Error" context="#stay" String="\bString\s*\.\s*raw(?=\s*`)" />
+        <RegExpr attribute="Normal" context="#stay" String="[a-zA-Z_$[:^ascii:]][\w$[:^ascii:]]*(?=\s*`)" />
         <!-- Contexts of javascript.xml. -->
-        <DetectChar context="JavaScript Object" char="{" beginRegion="Brace" />
+        <DetectChar attribute="Normal" context="JavaScript Object" char="{" beginRegion="Brace" />
       </context>
       <context name="JavaScript Object" attribute="Normal" lineEndContext="#stay" noIndentationBasedFolding="1">
         <DetectChar context="#pop" char="`" lookAhead="true"/>
-        <DetectChar context="#pop" char="}" endRegion="Brace"/>
+        <DetectChar attribute="Normal" context="#pop" char="}" endRegion="Brace"/>
         <IncludeRules context="Overwrite Javascript"/>
         <IncludeRules context="Object##JavaScript"/>
       </context>
+
       <context name="Javascript Template" attribute="JavaScript Template" lineEndContext="#stay" noIndentationBasedFolding="1">
         <RegExpr attribute="Escape" context="#stay" String="\\\\\\`"/>
-        <Detect2Chars attribute="JavaScript Template" context="RegExpAfterString##JavaScript" char="\" char1="`"/> <!-- End template. -->
+        <Detect2Chars attribute="JavaScript Template" context="RegExpAfterString##JavaScript" char="\" char1="`" endRegion="Template"/> <!-- End template. -->
         <DetectChar context="#pop" char="`" lookAhead="true"/>
         <Detect2Chars attribute="JavaScript Substitution" context="Javascript Substitution" char="$" char1="{"/>
         <IncludeRules context="Template##JavaScript"/>
         <RegExpr attribute="Error" context="#stay" String="(?:[^\\\s](?=`)|\S(?=\s+`))"/>
       </context>
-      <context name="Javascript RawTemplate" attribute="JavaScript Template" lineEndContext="#stay">
-        <Detect2Chars attribute="JavaScript Template" context="#stay" char="\" char1="\"/>
-        <Detect2Chars attribute="JavaScript Template" context="RegExpAfterString##JavaScript" char="\" char1="`"/> <!-- End template. -->
-        <DetectChar context="#pop" char="`" lookAhead="true"/>
-        <RegExpr attribute="Error" context="#stay" String="(?:[^\\\s](?=`)|\S(?=\s+`))"/>
-      </context>
       <context name="Javascript Substitution" attribute="Normal" lineEndContext="#stay" noIndentationBasedFolding="1">
         <DetectChar attribute="Javascript" context="#pop" char="`" lookAhead="true"/>
-        <DetectChar context="#pop" attribute="JavaScript Substitution" char="}"/>
+        <DetectChar attribute="JavaScript Substitution" context="#pop" char="}"/>
         <IncludeRules context="Overwrite Javascript"/>
         <IncludeRules context="Substitution##JavaScript"/>
       </context>
 
+      <context name="Javascript StartRawTemplate" attribute="JavaScript Template" lineEndContext="#pop" noIndentationBasedFolding="1">
+        <DetectSpaces />
+        <Detect2Chars attribute="JavaScript Template" context="#pop!Javascript RawTemplate" char="\" char1="`" beginRegion="Template"/>
+        <StringDetect attribute="JavaScript Built-in Objects" context="#stay" String="%1" dynamic="true"/>
+        <DetectChar attribute="JavaScript Symbol" context="#stay" char="2" dynamic="true"/>
+        <StringDetect attribute="JavaScript Function Name" context="#stay" String="%3" dynamic="true"/>
+      </context>
+      <context name="Javascript RawTemplate" attribute="JavaScript Template" lineEndContext="#stay" noIndentationBasedFolding="1">
+        <Detect2Chars attribute="JavaScript Template" context="#stay" char="\" char1="\"/>
+        <Detect2Chars attribute="JavaScript Template" context="RegExpAfterString##JavaScript" char="\" char1="`" endRegion="Template"/> <!-- End template. -->
+        <DetectChar context="#pop" char="`" lookAhead="true"/>
+        <RegExpr attribute="Error" context="#stay" String="(?:[^\\\s](?=`)|\S(?=\s+`))"/>
+      </context>
+
       <!-- Embedded Javascript (triple backticks). -->
       <context name="Javascript Triple Backticks" attribute="Normal" lineEndContext="#stay" noIndentationBasedFolding="1">
         <StringDetect attribute="Javascript" context="#pop" String="```" endRegion="Javascript TB"/>
-        <DetectChar context="JavaScript-TB Object" char="{" beginRegion="Brace"/>
+        <DetectChar attribute="Normal" context="JavaScript-TB Object" char="{" beginRegion="Brace"/>
         <IncludeRules context="Normal##JavaScript" includeAttrib="true"/>
       </context>
       <context name="JavaScript-TB Object" attribute="Normal" lineEndContext="#stay" noIndentationBasedFolding="1">
         <StringDetect attribute="Javascript" context="#pop" String="```" lookAhead="true"/>
-        <DetectChar context="#pop" char="}" endRegion="Brace"/>
-        <DetectChar context="JavaScript-TB Object" char="{" beginRegion="Brace"/>
+        <DetectChar attribute="Normal" context="#pop" char="}" endRegion="Brace"/>
+        <DetectChar attribute="Normal" context="JavaScript-TB Object" char="{" beginRegion="Brace"/>
         <IncludeRules context="Object##JavaScript"/>
       </context>
     </contexts>
@@ -323,13 +339,16 @@
 
       <itemData name="JavaScript Template" defStyleNum="dsVerbatimString"/>
       <itemData name="JavaScript Substitution" defStyleNum="dsSpecialChar" spellChecking="false"/>
+      <itemData name="JavaScript Function Name" defStyleNum="dsFunction" spellChecking="false"/>
+      <itemData name="JavaScript Built-in Objects" defStyleNum="dsBuiltIn" spellChecking="false" />
+      <itemData name="JavaScript Symbol" defStyleNum="dsOperator" spellChecking="false" />
     </itemDatas>
   </highlighting>
   <!-- Global settings. -->
   <general>
     <folding indentationsensitive="1"/>
     <comments>
-      <comment name="singleLine" start="#"/>
+      <comment name="singleLine" start="#" position="afterwhitespace"/>
       <comment name="multiLine" start="###" end="###" region="Comment"/>
     </comments>
     <keywords casesensitive="1" additionalDeliminator="#'`"/>
@@ -338,3 +357,4 @@
     </emptyLines>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/coldfusion.xml b/syntax/coldfusion.xml
--- a/syntax/coldfusion.xml
+++ b/syntax/coldfusion.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="ColdFusion" version="3" kateversion="2.2" section="Markup" extensions="*.cfm;*.cfc;*.cfml;*.dbm" mimetype="text/x-coldfusion">
+<language name="ColdFusion" version="4" kateversion="5.0" section="Markup" extensions="*.cfm;*.cfc;*.cfml;*.dbm" mimetype="text/x-coldfusion">
 
 	<highlighting>
 
@@ -510,111 +510,109 @@
 		<contexts>
 
 			<context attribute="Normal Text" lineEndContext="#stay" name="Normal Text">
-				<StringDetect attribute="CF Comment" context="ctxCF Comment" String="&lt;!---" />
-				<StringDetect attribute="HTML Comment" context="ctxHTML Comment" String="&lt;!--" />
-				<RegExpr attribute="Script Tags" context="ctxCFSCRIPT Tag" String="&lt;[cC][fF][sS][cC][rR][iI][pP][tT]" />
-				<RegExpr attribute="Script Tags" context="ctxSCRIPT Tag" String="&lt;[sS][cC][rR][iI][pP][tT]" />
-				<RegExpr attribute="Style Tags" context="ctxSTYLE Tag" String="&lt;[sS][tT][yY][lL][eE]" />
+				<StringDetect attribute="CF Comment" context="ctxCF Comment" String="&lt;!---" beginRegion="CF Comment" />
+				<StringDetect attribute="HTML Comment" context="ctxHTML Comment" String="&lt;!--" beginRegion="HTML Comment" />
+				<StringDetect attribute="Script Tags" context="ctxCFSCRIPT Tag" String="&lt;cfscript" insensitive="true" beginRegion="CF Script" />
+				<StringDetect attribute="Script Tags" context="ctxSCRIPT Tag" String="&lt;script" insensitive="true" beginRegion="Script" />
+				<StringDetect attribute="Style Tags" context="ctxSTYLE Tag" String="&lt;style" insensitive="true" beginRegion="Style" />
 				<DetectChar attribute="HTML Entities" context="ctxHTML Entities" char="&amp;" />
-				<RegExpr attribute="Custom Tags" context="ctxCustom Tag" String="&lt;\/?[cC][fF]_" />
-				<RegExpr attribute="CFX Tags" context="ctxCFX Tag" String="&lt;\/?[cC][fF][xX]_" />
-				<RegExpr attribute="CF Tags" context="ctxCF Tag" String="&lt;\/?[cC][fF]" />
-				<RegExpr attribute="Table Tags" context="ctxTable Tag" String="&lt;\/?([tT][aAhHbBfFrRdD])|([cC][aA][pP][tT])" />
-				<RegExpr attribute="Anchor Tags" context="ctxAnchor Tag" String="&lt;\/?[aA] " />
-				<RegExpr attribute="Image Tags" context="ctxImage Tag" String="&lt;\/?[iI][mM][gG] " />
+				<StringDetect attribute="Custom Tags" context="ctxCustom Tag" String="&lt;cf_" insensitive="true" />
+				<StringDetect attribute="Custom Tags" context="ctxCustom Tag" String="&lt;/cf_" insensitive="true" />
+				<StringDetect attribute="CFX Tags" context="ctxCFX Tag" String="&lt;cfx_" insensitive="true" />
+				<StringDetect attribute="CFX Tags" context="ctxCFX Tag" String="&lt;/cfx_" insensitive="true" />
+				<StringDetect attribute="CF Tags" context="ctxCF Tag" String="&lt;cf" insensitive="true" />
+				<StringDetect attribute="CF Tags" context="ctxCF Tag" String="&lt;/cf" insensitive="true" />
+				<RegExpr attribute="Table Tags" context="ctxTable Tag" String="&lt;\/?(?:[tT][aAhHbBfFrRdD])|(?:[cC][aA][pP][tT])" />
+				<RegExpr attribute="Anchor Tags" context="ctxAnchor Tag" String="&lt;\/?a(?=[&gt;\s]|$)" insensitive="true" />
+				<RegExpr attribute="Image Tags" context="ctxImage Tag" String="&lt;\/?img(?=[&gt;\s]|$)" insensitive="true" />
+				<StringDetect attribute="Anchor Tags" context="#stay" String="&lt;a/&gt;" insensitive="true" />
+				<StringDetect attribute="Image Tags" context="#stay" String="&lt;img/&gt;" insensitive="true" />
 				<RegExpr attribute="Tags" context="ctxTag" String="&lt;!?\/?[a-zA-Z0-9_]+" />
 			</context>
 
 
+			<context name="Tag Content" attribute="Normal Text" lineEndContext="#stay">
+				<RegExpr attribute="Tag Attributes" context="#stay" String="(?:\s|^)[A-Za-z_:*][\w.:_-]*(?=\s*\=)" />
+				<DetectChar attribute="Normal Text" context="#stay" char="=" />
+				<RangeDetect attribute="Attribute Values" context="#stay" char="&quot;" char1="&quot;" />
+				<RangeDetect attribute="Attribute Values" context="#stay" char="'" char1="'" />
+			</context>
 
 			<context name="ctxCFSCRIPT Tag" attribute="Script Tags" lineEndContext="#stay">
 				<DetectChar attribute="Script Tags" context="ctxCFSCRIPT Block" char="&gt;" />
-				<DetectChar attribute="Normal Text" context="#stay" char="=" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="&quot;[^&quot;]*&quot;" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="'[^']*'" />
+				<IncludeRules context="Tag Content" />
 			</context>
 
 			<context name="ctxSCRIPT Tag" attribute="Script Tags" lineEndContext="#stay">
 				<DetectChar attribute="Script Tags" context="ctxSCRIPT Block" char="&gt;" />
-				<DetectChar attribute="Normal Text" context="#stay" char="=" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="&quot;[^&quot;]*&quot;" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="'[^']*'" />
+				<IncludeRules context="Tag Content" />
 			</context>
 
 			<context name="ctxSTYLE Tag" attribute="Style Tags" lineEndContext="#stay">
 				<DetectChar attribute="Style Tags" context="ctxSTYLE Block" char="&gt;" />
-				<DetectChar attribute="Normal Text" context="#stay" char="=" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="&quot;[^&quot;]*&quot;" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="'[^']*'" />
+				<IncludeRules context="Tag Content" />
 			</context>
 
 
 
 			<context name="ctxTag" attribute="Tags" lineEndContext="#stay">
 				<DetectChar attribute="Tags" context="#pop" char="&gt;" />
-				<DetectChar attribute="Normal Text" context="#stay" char="=" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="&quot;[^&quot;]*&quot;" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="'[^']*'" />
+				<IncludeRules context="Tag Content" />
 			</context>
 
 			<context name="ctxTable Tag" attribute="Table Tags" lineEndContext="#stay">
 				<DetectChar attribute="Table Tags" context="#pop" char="&gt;" />
-				<DetectChar attribute="Normal Text" context="#stay" char="=" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="&quot;[^&quot;]*&quot;" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="'[^']*'" />
+				<IncludeRules context="Tag Content" />
 			</context>
 
 			<context name="ctxAnchor Tag" attribute="Anchor Tags" lineEndContext="#stay">
 				<DetectChar attribute="Anchor Tags" context="#pop" char="&gt;" />
-				<DetectChar attribute="Normal Text" context="#stay" char="=" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="&quot;[^&quot;]*&quot;" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="'[^']*'" />
+				<IncludeRules context="Tag Content" />
 			</context>
 
 			<context name="ctxImage Tag" attribute="Image Tags" lineEndContext="#stay">
 				<DetectChar attribute="Image Tags" context="#pop" char="&gt;" />
-				<DetectChar attribute="Normal Text" context="#stay" char="=" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="&quot;[^&quot;]*&quot;" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="'[^']*'" />
+				<IncludeRules context="Tag Content" />
 			</context>
 
 			<context name="ctxCF Tag" attribute="CF Tags" lineEndContext="#stay">
 				<DetectChar attribute="CF Tags" context="#pop" char="&gt;" />
-				<DetectChar attribute="Normal Text" context="#stay" char="=" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="&quot;[^&quot;]*&quot;" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="'[^']*'" />
+				<IncludeRules context="Tag Content" />
 			</context>
 
 			<context name="ctxCustom Tag" attribute="Custom Tags" lineEndContext="#stay">
 				<DetectChar attribute="Custom Tags" context="#pop" char="&gt;" />
-				<DetectChar attribute="Normal Text" context="#stay" char="=" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="&quot;[^&quot;]*&quot;" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="'[^']*'" />
+				<IncludeRules context="Tag Content" />
 			</context>
 
 			<context name="ctxCFX Tag" attribute="CFX Tags" lineEndContext="#stay">
 				<DetectChar attribute="CFX Tags" context="#pop" char="&gt;" />
-				<DetectChar attribute="Normal Text" context="#stay" char="=" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="&quot;[^&quot;]*&quot;" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="'[^']*'" />
+				<IncludeRules context="Tag Content" />
 			</context>
 
 
 
 			<context name="ctxHTML Comment" attribute="HTML Comment" lineEndContext="#stay">
-				<StringDetect attribute="CF Comment" context="ctxCF Comment" String="&lt;!---" />
-				<StringDetect attribute="HTML Comment" context="#pop" String="--&gt;" />
+				<StringDetect attribute="CF Comment" context="ctxCF Comment" String="&lt;!---" beginRegion="CF Comment" />
+				<StringDetect attribute="HTML Comment" context="#pop" String="--&gt;" endRegion="HTML Comment" />
+				<IncludeRules context="##Alerts" />
+				<IncludeRules context="##Modelines" />
 			</context>
 
 			<context name="ctxCF Comment" attribute="CF Comment" lineEndContext="#stay">
-				<StringDetect attribute="CF Comment" context="#pop" String="---&gt;" />
+				<StringDetect attribute="CF Comment" context="#pop" String="---&gt;" endRegion="CF Comment" />
+				<IncludeRules context="##Alerts" />
+				<IncludeRules context="##Modelines" />
 			</context>
 
 			<context name="ctxC Style Comment" attribute="Script Comment" lineEndContext="#stay">
-        		<Detect2Chars attribute="Script Comment" context="#pop" char="*" char1="/" />
+				<Detect2Chars attribute="Script Comment" context="#pop" char="*" char1="/" endRegion="CComment" />
+				<IncludeRules context="##Alerts" />
 			</context>
 
-			<context name="ctxOne Line Comment" attribute="Script Comment" lineEndContext="#pop" />
+			<context name="ctxOne Line Comment" attribute="Script Comment" lineEndContext="#pop">
+				<IncludeRules context="##Alerts" />
+			</context>
 
 			<context name="ctxHTML Entities" attribute="HTML Entities" lineEndContext="#pop">
 				<DetectChar attribute="HTML Entities" context="#pop" char=";" />
@@ -623,49 +621,49 @@
 
 
 			<context name="ctxCFSCRIPT Block" attribute="Normal Text" lineEndContext="#stay">
-				<Detect2Chars attribute="Script Comment" context="ctxC Style Comment" char="/" char1="*" />
+				<Detect2Chars attribute="Script Comment" context="ctxC Style Comment" char="/" char1="*" beginRegion="CComment" />
 				<Detect2Chars attribute="Script Comment" context="ctxOne Line Comment" char="/" char1="/" />
-				<RegExpr attribute="Script Strings" context="#stay" String="&quot;[^&quot;]*&quot;" />
-				<RegExpr attribute="Script Strings" context="#stay" String="'[^']*'" />
+				<RangeDetect attribute="Script Strings" context="#stay" char="&quot;" char1="&quot;" />
+				<RangeDetect attribute="Script Strings" context="#stay" char="'" char1="'" />
 				<Int attribute="Script Numbers" context="#stay" />
 				<Float attribute="Script Numbers" context="#stay" />
-				<AnyChar attribute="Script Operators" context="#stay" String="[()[\]=+-*/]+" />
+				<AnyChar attribute="Script Operators" context="#stay" String="()[]=+-*/" />
 				<AnyChar attribute="Brackets" context="#stay" String="{}" />
 
 				<keyword attribute="Script Keywords" context="#stay" String="CFSCRIPT Keywords" />
 				<keyword attribute="Script Functions" context="#stay" String="CFSCRIPT Functions" />
-				<RegExpr attribute="Script Tags" context="#pop#pop" String="&lt;/[cC][fF][sS][cC][rR][iI][pP][tT]&gt;" />
+				<StringDetect attribute="Script Tags" context="#pop#pop" String="&lt;/cfscript&gt;" insensitive="true" endRegion="CF Script" />
 			</context>
 
 
 
 			<context name="ctxSCRIPT Block" attribute="Normal Text" lineEndContext="#stay">
-				<Detect2Chars attribute="Script Comment" context="ctxC Style Comment" char="/" char1="*" />
+				<Detect2Chars attribute="Script Comment" context="ctxC Style Comment" char="/" char1="*" beginRegion="CComment" />
 				<Detect2Chars attribute="Script Comment" context="ctxOne Line Comment" char="/" char1="/" />
-				<RegExpr attribute="Script Strings" context="#stay" String="&quot;[^&quot;]*&quot;" />
-				<RegExpr attribute="Script Strings" context="#stay" String="'[^']*'" />
+				<RangeDetect attribute="Script Strings" context="#stay" char="&quot;" char1="&quot;" />
+				<RangeDetect attribute="Script Strings" context="#stay" char="'" char1="'" />
 				<Int attribute="Script Numbers" context="#stay" />
 				<Float attribute="Script Numbers" context="#stay" />
-				<AnyChar attribute="Script Operators" context="#stay" String="[()[\]=+-*/]+" />
+				<AnyChar attribute="Script Operators" context="#stay" String="()[]=+-*/" />
 				<AnyChar attribute="Brackets" context="#stay" String="{}" />
 
 				<keyword attribute="Script Keywords" context="#stay" String="Script Keywords" />
 				<keyword attribute="Script Objects" context="#stay" String="Script Objects" />
 				<keyword attribute="Script Functions" context="#stay" String="Script Methods" />
-				<RegExpr attribute="Script Tags" context="#pop#pop" String="&lt;/[sS][cC][rR][iI][pP][tT]&gt;" />
+				<StringDetect attribute="Script Tags" context="#pop#pop" String="&lt;/script&gt;" insensitive="true" endRegion="Script" />
 			</context>
 
 
 
 			<context name="ctxSTYLE Block" attribute="Style Selectors" lineEndContext="#stay">
-				<Detect2Chars attribute="Script Comment" context="ctxC Style Comment" char="/" char1="*" />
+				<Detect2Chars attribute="Script Comment" context="ctxC Style Comment" char="/" char1="*" beginRegion="CComment" />
 				<DetectChar attribute="Brackets" context="ctxStyle Properties" char="{" />
-				<RegExpr attribute="Style Tags" context="#pop#pop" String="&lt;/[sS][tT][yY][lL][eE]&gt;" />
+				<StringDetect attribute="Style Tags" context="#pop#pop" String="&lt;/style&gt;" insensitive="true" endRegion="Style" />
 			</context>
 
 			<context name="ctxStyle Properties" attribute="Style Properties" lineEndContext="#stay">
 				<DetectChar attribute="Brackets" context="#pop" char="}" />
-				<Detect2Chars attribute="Script Comment" context="ctxC Style Comment" char="/" char1="*" />
+				<Detect2Chars attribute="Script Comment" context="ctxC Style Comment" char="/" char1="*" beginRegion="CComment" />
 				<DetectChar attribute="Normal Text" context="ctxStyle Values" char=":" />
 			</context>
 
@@ -674,41 +672,42 @@
 				<DetectChar attribute="Normal Text" context="#stay" char="," />
 				<Int attribute="Numbers" context="#stay" />
 				<Float attribute="Numbers" context="#stay" />
-				<RegExpr attribute="Numbers" context="#stay" String="#([0-9a-fA-F]{3})|([0-9a-fA-F]{6})" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="&quot;[^&quot;]*&quot;" />
-				<RegExpr attribute="Attribute Values" context="#stay" String="'[^']*'" />
+				<RegExpr attribute="Numbers" context="#stay" String="#(?:[0-9a-fA-F]{3})|(?:[0-9a-fA-F]{6})" />
+				<RangeDetect attribute="Attribute Values" context="#stay" char="&quot;" char1="&quot;" />
+				<RangeDetect attribute="Attribute Values" context="#stay" char="'" char1="'" />
 			</context>
 
 		</contexts>
 
 		<itemDatas>
 
-			<itemData name="Normal Text" defStyleNum="dsNormal" />
-			<itemData name="Tags" defStyleNum="dsNormal"				color="#000080" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="Table Tags" defStyleNum="dsNormal"			color="#008080" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="Script Tags" defStyleNum="dsNormal"			color="#800000" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="Image Tags" defStyleNum="dsNormal"			color="#800080" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="Style Tags" defStyleNum="dsNormal"			color="#800080" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="Anchor Tags" defStyleNum="dsNormal"			color="#008000" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="Attribute Values" defStyleNum="dsNormal"	color="#0000ff" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="HTML Comment" defStyleNum="dsComment"		color="#008000" selColor="#999999" bold="0" italic="0" />
-			<itemData name="CF Comment" defStyleNum="dsComment"			color="#ff9900" selColor="#999999" bold="0" italic="0" />
-			<itemData name="Script Comment" defStyleNum="dsComment"		color="#ff9900" selColor="#999999" bold="0" italic="0" />
-			<itemData name="CF Tags" defStyleNum="dsNormal"				color="#800000" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="Custom Tags" defStyleNum="dsNormal"			color="#cc6666" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="CFX Tags" defStyleNum="dsNormal"			color="#008000" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="Numbers" defStyleNum="dsNormal"				color="#0000ff" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="HTML Entities" defStyleNum="dsNormal"		color="#000000" selColor="#ffffff" bold="1" italic="0" />
-			<itemData name="Style Selectors" defStyleNum="dsNormal"		color="#ff00ff" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="Style Properties" defStyleNum="dsNormal"	color="#000080" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="Style Values" defStyleNum="dsNormal"		color="#ff0000" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="Brackets" defStyleNum="dsNormal"			color="#000080" selColor="#ffffff" bold="1" italic="0" />
-			<itemData name="Script Numbers" defStyleNum="dsNormal"		color="#ff00ff" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="Script Strings" defStyleNum="dsNormal"		color="#008080" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="Script Operators" defStyleNum="dsNormal"	color="#0000ff" selColor="#ffffff" bold="0" italic="0" />
-			<itemData name="Script Keywords" defStyleNum="dsNormal"		color="#0000cc" selColor="#ffffff" bold="1" italic="0" />
-			<itemData name="Script Functions" defStyleNum="dsFunction"	bold="1" />
-			<itemData name="Script Objects" defStyleNum="dsNormal"		color="#0000cc" selColor="#ffffff" bold="1" italic="0" />
+			<itemData name="Normal Text"      defStyleNum="dsNormal" />
+			<itemData name="Tags"             defStyleNum="dsKeyword" spellChecking="false"/> <!-- #000080 -->
+			<itemData name="Table Tags"       defStyleNum="dsVariable" bold="1" spellChecking="false" /> <!-- #008080 -->
+			<itemData name="Script Tags"      defStyleNum="dsWarning" bold="1" spellChecking="false" /> <!-- #800000 -->
+			<itemData name="Image Tags"       defStyleNum="dsInformation" bold="1" spellChecking="false" /> <!-- #800080 -->
+			<itemData name="Style Tags"       defStyleNum="dsInformation" bold="1" spellChecking="false" /> <!-- #800080 -->
+			<itemData name="Anchor Tags"      defStyleNum="dsPreprocessor" bold="1" spellChecking="false" /> <!-- #008000 -->
+			<itemData name="Tag Attributes"   defStyleNum="dsOthers" spellChecking="false"/>
+			<itemData name="Attribute Values" defStyleNum="dsString" /> <!-- #0000ff -->
+			<itemData name="HTML Comment"     defStyleNum="dsComment" /> <!-- #008000 -->
+			<itemData name="CF Comment"       defStyleNum="dsComment" /> <!-- #ff9900 -->
+			<itemData name="Script Comment"   defStyleNum="dsComment" /> <!-- #ff9900 -->
+			<itemData name="CF Tags"          defStyleNum="dsFunction" bold="1" spellChecking="false" /> <!-- #800000 -->
+			<itemData name="Custom Tags"      defStyleNum="dsDataType" bold="1" spellChecking="false" /> <!-- #cc6666 -->
+			<itemData name="CFX Tags"         defStyleNum="dsOthers" bold="1" spellChecking="false" /> <!-- #008000 -->
+			<itemData name="Numbers"          defStyleNum="dsDecVal" spellChecking="false" /> <!-- #0000ff -->
+			<itemData name="HTML Entities"    defStyleNum="dsInformation" spellChecking="false" /> <!-- #000000 -->
+			<itemData name="Style Selectors"  defStyleNum="dsChar" /> <!-- #ff00ff -->
+			<itemData name="Style Properties" defStyleNum="dsAttribute" /> <!-- #000080 -->
+			<itemData name="Style Values"     defStyleNum="dsVerbatimString" /> <!-- #ff0000 -->
+			<itemData name="Brackets"         defStyleNum="dsKeyword" spellChecking="false" /> <!-- #000080 -->
+			<itemData name="Script Numbers"   defStyleNum="dsDecVal" spellChecking="false" /> <!-- #ff00ff -->
+			<itemData name="Script Strings"   defStyleNum="dsString" /> <!-- #008080 -->
+			<itemData name="Script Operators" defStyleNum="dsKeyword" spellChecking="false" /> <!-- #0000ff -->
+			<itemData name="Script Keywords"  defStyleNum="dsControlFlow" spellChecking="false" /> <!-- #0000cc -->
+			<itemData name="Script Functions" defStyleNum="dsFunction" bold="1" spellChecking="false" />
+			<itemData name="Script Objects"   defStyleNum="dsExtension" spellChecking="false" /> <!-- #0000cc -->
 
 		</itemDatas>
 
@@ -718,9 +717,7 @@
 
 		<comments>
 
-			<comment name="multiLine" start="&lt;!--" end="--&gt;" />
-			<comment name="multiLine" start="/*" end="*/" />
-			<comment name="singleLine" start="//" />
+			<comment name="multiLine" start="&lt;!---" end="---&gt;" region="CF Comment" />
 
 		</comments>
 
@@ -729,3 +726,4 @@
 	</general>
 
 </language>
+<!-- kate: replace-tabs off; -->
diff --git a/syntax/commonlisp.xml b/syntax/commonlisp.xml
--- a/syntax/commonlisp.xml
+++ b/syntax/commonlisp.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language version="6" kateversion="5.0" name="Common Lisp" section="Sources" extensions="*.lisp;*.cl;*.lsp" mimetype="" author="Dominik Haumann (dhaumann@kde.org)" license="MIT">
+<language version="8" kateversion="5.0" name="Common Lisp" section="Sources" extensions="*.lisp;*.cl;*.lsp" mimetype="" author="Dominik Haumann (dhaumann@kde.org)" license="MIT">
   <highlighting>
     <list name="symbols">
       <item>&lt;</item>
@@ -1114,8 +1114,8 @@
       <context name="Normal" attribute="Normal" lineEndContext="#stay">
         <RegExpr attribute="Region Marker" context="#stay" String=";+\s*BEGIN.*$" beginRegion="region"/>
         <RegExpr attribute="Region Marker" context="#stay" String=";+\s*END.*$" endRegion="region"/>
-        <RegExpr attribute="Comment" context="#stay" String=";.*$"/>
-        <Detect2Chars attribute="Comment" context="MultiLineComment" char="#" char1="|" beginRegion="region"/>
+        <DetectChar attribute="Comment" context="Comment" char=";"/>
+        <Detect2Chars attribute="Comment" context="MultiLineComment" char="#" char1="|" beginRegion="BlockComment"/>
         <DetectChar attribute="Brackets" context="#stay" char="("/>
         <DetectChar attribute="Brackets" context="#stay" char=")"/>
         <keyword attribute="Keyword" context="#stay" String="keywords"/>
@@ -1125,13 +1125,16 @@
         <keyword attribute="Definition" context="function_decl" String="definitions"/>
         <RegExpr attribute="Char" context="#stay" String="#\\."/>
         <DetectChar attribute="String" context="String" char="&quot;"/>
+        <Detect2Chars attribute="Decimal" context="#stay" char="#" char1="t"/>
+        <Detect2Chars attribute="Decimal" context="#stay" char="#" char1="f"/>
         <RegExpr attribute="Char" context="SpecialNumber" String="#[bodxei]"/>
-        <RegExpr attribute="Decimal" context="#stay" String="#[tf]"/>
         <Float attribute="Float" context="#stay"/>
         <Int attribute="Decimal" context="#stay"/>
       </context>
       <context name="MultiLineComment" attribute="Comment" lineEndContext="#stay">
-        <Detect2Chars attribute="Comment" context="#pop" char="|" char1="#" endRegion="region"/>
+        <Detect2Chars attribute="Comment" context="#pop" char="|" char1="#" endRegion="BlockComment"/>
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
       <context name="function_decl" attribute="Function" lineEndContext="#stay">
         <RegExpr attribute="Function" context="#pop" String="\s*[A-Za-z0-9-+\&lt;\&gt;//\*]*\s*" />
@@ -1147,6 +1150,10 @@
         <HlCStringChar attribute="String Char" context="#stay"/>
         <DetectChar attribute="String" context="#pop" char="&quot;"/>
       </context>
+      <context name="Comment" attribute="Comment" lineEndContext="#pop">
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
     </contexts>
     <itemDatas>
       <itemData name="Normal"      defStyleNum="dsNormal"/>
@@ -1171,7 +1178,8 @@
     <keywords casesensitive="1" weakDeliminator="-+*?!&lt;&gt;=/:#\"/>
     <comments>
       <comment name="singleLine" start=";;" />
-      <comment name="multiLine" start="#|" end="|#" />
+      <comment name="multiLine" start="#|" end="|#" region="BlockComment" />
     </comments>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/cs.xml b/syntax/cs.xml
--- a/syntax/cs.xml
+++ b/syntax/cs.xml
@@ -1,5 +1,5 @@
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="C#" version="5" kateversion="5.0" section="Sources" extensions="*.cs" mimetype="text/x-csharp-src;text/x-csharp-hde" indenter="cstyle" style="C++">
+<language name="C#" version="8" kateversion="5.0" section="Sources" extensions="*.cs" mimetype="text/x-csharp-src;text/x-csharp-hde" indenter="cstyle" style="C++">
   <highlighting>
     <list name="keywords">
       <item>abstract</item>
@@ -100,9 +100,8 @@
         <Int attribute="Decimal" context="Int Suffixes"/>
         <HlCChar attribute="Char" context="#stay"/>
         <DetectChar attribute="String" context="String" char="&quot;"/>
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/"/>
-        <Detect2Chars attribute="Comment" context="Commentar 2" char="/" char1="*"/>
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="/" lookAhead="true"/>
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="*" lookAhead="true" />
         <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="block1"/>
         <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="block1"/>
         <RegExpr attribute="Keyword" context="#stay" String="\bpartial(?=\s+(class|struct|interface|void))"/>
@@ -110,11 +109,11 @@
         <RegExpr attribute="Keyword" context="#stay" String="\byield(?=\s+(return|break))"/>
         <RegExpr attribute="Keyword" context="#stay" String="\b(set|get)(?=\s*[;{])"/>
         <RegExpr attribute="Keyword" context="#stay" String="\bglobal(?=\s*::\s*\w+)"/>
-        <RegExpr attribute="Decimal" context="#stay" String="#region.*$" beginRegion="Region1"/>
-        <RegExpr attribute="Decimal" context="#stay" String="#endregion.*$" endRegion="Region1"/>
+        <StringDetect attribute="Decimal" context="Decimal" String="#region" beginRegion="Region1"/>
+        <StringDetect attribute="Decimal" context="Decimal" String="#endregion" endRegion="Region1"/>
         <RegExpr attribute="Function" context="#stay" String="\b[_\w][_\w\d]*(?=[\s]*[(])" />
-        <RegExpr attribute="Symbol" context="Member" String="[.]{1,1}" />
-        <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;"/>
+        <DetectChar attribute="Symbol" context="Member" char="."/>
+        <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/*&lt;=&gt;?[]|~^&#59;"/>
       </context>
       <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
           <AnyChar String="fF" attribute="Float" context="#pop"/>
@@ -137,10 +136,21 @@
       <context attribute="Normal Text" lineEndContext="#pop" name="Member" fallthrough="true" fallthroughContext="#pop">
         <RegExpr attribute="Function" context="#pop" String="\b[_\w][_\w\d]*(?=[\s]*)" />
       </context>
-      <context attribute="Comment" lineEndContext="#pop" name="Commentar 1"/>
+      <context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
       <context attribute="Comment" lineEndContext="#stay" name="Commentar 2">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/"/>
+        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="BlockComment"/>
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
+      <context name="MatchComment" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <IncludeRules context="##Doxygen" />
+        <Detect2Chars attribute="Comment" context="#pop!Commentar 1" char="/" char1="/" />
+        <Detect2Chars attribute="Comment" context="#pop!Commentar 2" char="/" char1="*" beginRegion="BlockComment" />
+      </context>
+      <context attribute="Decimal" lineEndContext="#pop" name="Decimal"/>
     </contexts>
     <itemDatas>
       <itemData name="Normal Text"  defStyleNum="dsNormal"/>
@@ -161,8 +171,9 @@
   <general>
     <comments>
       <comment name="singleLine" start="//" />
-      <comment name="multiLine" start="/*" end="*/" />
+      <comment name="multiLine" start="/*" end="*/" region="BlockComment" />
     </comments>
     <keywords casesensitive="1" />
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/css.xml b/syntax/css.xml
--- a/syntax/css.xml
+++ b/syntax/css.xml
@@ -38,7 +38,7 @@
 
 -->
 
-<language name="CSS" version="9" kateversion="5.0" section="Markup" extensions="*.css" indenter="cstyle" mimetype="text/css" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL" priority="10">
+<language name="CSS" version="10" kateversion="5.0" section="Markup" extensions="*.css" indenter="cstyle" mimetype="text/css" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL" priority="10">
     <!-- https://www.w3.org/Style/CSS/current-work -->
 
     <highlighting>
@@ -1585,6 +1585,7 @@
                 <DetectSpaces />
                 <Detect2Chars attribute="Comment" context="#pop#pop" char="*" char1="/" endRegion="comment" />
                 <IncludeRules context="##Alerts" />
+                <IncludeRules context="##Modelines" />
                 <DetectIdentifier />
             </context>
 
@@ -1731,8 +1732,9 @@
     <general>
         <keywords casesensitive="0" weakDeliminator="-%@" />
         <comments>
-            <comment name="multiLine" start="/*" end="*/" />
+            <comment name="multiLine" start="/*" end="*/" region="comment" />
         </comments>
     </general>
 
 </language>
+<!-- kate: replace-tabs on; tab-width 4; indent-width 4; -->
diff --git a/syntax/curry.xml b/syntax/curry.xml
--- a/syntax/curry.xml
+++ b/syntax/curry.xml
@@ -30,7 +30,7 @@
   <!-- dashes introducing a currydoc comment -->
   <!ENTITY currydoc    "---" >
 ]>
-<language name="Curry" version="1" kateversion="5.0"
+<language name="Curry" version="2" kateversion="5.0"
           section="Sources" extensions="*.curry" mimetype="text/x-curry"
           author="Björn Peemöller (bjp@informatik.uni-kiel.de)" license="LGPL"
           indenter="haskell">
@@ -229,13 +229,18 @@
     <!-- Multiline comment -->
     <context name="Multiline Comment" attribute="Comment" lineEndContext="#stay" >
       <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" endRegion="Multiline Comment" />
+      <IncludeRules context="##Alerts" />
+      <IncludeRules context="##Modelines" />
     </context>
 
     <!-- Currydoc -->
     <context name="Currydoc" attribute="Currydoc" lineEndContext="#pop" />
 
     <!-- Single line comment -->
-    <context name="Comment" attribute="Comment" lineEndContext="#pop" />
+    <context name="Comment" attribute="Comment" lineEndContext="#pop">
+      <IncludeRules context="##Alerts" />
+      <IncludeRules context="##Modelines" />
+    </context>
 
     <!-- Import section -->
     <context name="Import" attribute="Normal" lineEndContext="#pop" >
@@ -356,9 +361,10 @@
   <general>
     <folding indentationsensitive="1"/>
     <comments>
-      <comment name="singleLine" start="--" />
+      <comment name="singleLine" start="--" position="afterwhitespace" />
       <comment name="multiLine" start="{-" end="-}" region="Multiline Comment" />
     </comments>
     <keywords casesensitive="1" />
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/d.xml b/syntax/d.xml
--- a/syntax/d.xml
+++ b/syntax/d.xml
@@ -99,7 +99,7 @@
    ========================================================================
 -->
 
-<language name="D" version="5" kateversion="5.0" section="Sources" extensions="*.d;*.D;*.di;*.DI;" mimetype="text/x-dsrc" casesensitive="true" author="Diggory Hardy (diggory.hardy@gmail.com), Aziz Köksal (aziz.koeksal@gmail.com), Jari-Matti Mäkelä (jmjm@iki.fi), Simon J Mackenzie (project.katedxml@smackoz.fastmail.fm)" license="LGPL">
+<language name="D" version="7" kateversion="5.0" section="Sources" extensions="*.d;*.D;*.di;*.DI;" mimetype="text/x-dsrc" casesensitive="true" author="Diggory Hardy (diggory.hardy@gmail.com), Aziz Köksal (aziz.koeksal@gmail.com), Jari-Matti Mäkelä (jmjm@iki.fi), Simon J Mackenzie (project.katedxml@smackoz.fastmail.fm)" license="LGPL">
   <highlighting>
     <!-- User-defined keywords (add identifiers you'd like highlighted here) -->
     <list name="userkeywords">
@@ -737,17 +737,20 @@
       <context name="CommentLine" attribute="Comment" lineEndContext="#pop">
         <DetectSpaces />
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
       <context name="CommentBlock" attribute="Comment" lineEndContext="#stay">
         <DetectSpaces />
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="CommentBlock"/>
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
       <context name="CommentNested" attribute="Comment" lineEndContext="#stay">
         <DetectSpaces />
-       <Detect2Chars attribute="Comment" context="CommentNested" char="/" char1="+" beginRegion="CommentNested"/>
-       <Detect2Chars attribute="Comment" context="#pop" char="+" char1="/" endRegion="CommentNested"/>
-       <IncludeRules context="##Alerts" />
+        <Detect2Chars attribute="Comment" context="CommentNested" char="/" char1="+" beginRegion="CommentNested"/>
+        <Detect2Chars attribute="Comment" context="#pop" char="+" char1="/" endRegion="CommentNested"/>
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
       
       
@@ -864,14 +867,14 @@
       
       <!-- keywords -->
       <itemData name="Statement"      defStyleNum="dsKeyword"/>
-      <itemData name="Expression"     defStyleNum="dsKeyword"  color="#000080"/>
-      <itemData name="Declarator"     defStyleNum="dsKeyword"  color="#800000"/>
-      <itemData name="Template"       defStyleNum="dsKeyword"  color="#008000"/>
+      <itemData name="Expression"     defStyleNum="dsAttribute"  bold="1"/> <!-- #000080 -->
+      <itemData name="Declarator"     defStyleNum="dsWarning"    bold="1"/> <!-- #800000 -->
+      <itemData name="Template"       defStyleNum="dsOthers"     bold="1"/> <!-- #008000 -->
       
-      <itemData name="Attribute"      defStyleNum="dsKeyword"  color="#800080"/>
-      <itemData name="Deprecated"     defStyleNum="dsKeyword"  color="#800080" strikeOut="true"/>
+      <itemData name="Attribute"      defStyleNum="dsFunction"   bold="1"/> <!-- #800080 -->
+      <itemData name="Deprecated"     defStyleNum="dsFunction"   bold="1" strikeOut="true"/> <!-- #800080 -->
       
-      <itemData name="Property"       defStyleNum="dsDataType" color="#000080"/>
+      <itemData name="Property"       defStyleNum="dsDataType"   bold="1"/> <!-- #000080 -->
       
       <itemData name="Type"           defStyleNum="dsDataType"/>
       <itemData name="LibrarySymbols" defStyleNum="dsBuiltIn" italic="1"/>
@@ -879,20 +882,20 @@
       <itemData name="UserKeywords"   defStyleNum="dsDataType" italic="1"/>
 
       <!-- module, import -->
-      <itemData name="Module"         defStyleNum="dsKeyword"  color="#008000"/>
-      <itemData name="Module Name"    defStyleNum="dsNormal"   color="#008000"/>
+      <itemData name="Module"         defStyleNum="dsPreprocessor" bold="1"/> <!-- #008000 -->
+      <itemData name="Module Name"    defStyleNum="dsImport"/> <!-- #008000 -->
 
       <!-- pragma, special tokens -->
-      <itemData name="SpecialTokens"  defStyleNum="dsNormal"   color="#00aa00"/>
-      <itemData name="Pragma"         defStyleNum="dsKeyword"  color="#00aa00"/>
+      <itemData name="SpecialTokens"  defStyleNum="dsOthers"   bold="1"/> <!-- #00aa00 -->
+      <itemData name="Pragma"         defStyleNum="dsOthers"   bold="1"/> <!-- #00aa00 -->
 
       <!-- version, extern -->
-      <itemData name="Version"        defStyleNum="dsKeyword"  color="#808000"/>
-      <itemData name="Version Type"   defStyleNum="dsNormal"   bold="1"/>
-      <itemData name="Linkage"        defStyleNum="dsKeyword"  color="#808000"/>
-      <itemData name="Linkage Type"   defStyleNum="dsNormal"   bold="1"/>
+      <itemData name="Version"        defStyleNum="dsDecVal"/> <!-- #808000 -->
+      <itemData name="Version Type"   defStyleNum="dsNormal"      bold="1"/>
+      <itemData name="Linkage"        defStyleNum="dsInformation" bold="1"/> <!-- #808000 -->
+      <itemData name="Linkage Type"   defStyleNum="dsNormal"      bold="1"/>
 
-      <itemData name="Tests"        defStyleNum="dsKeyword"    color="#ff00ff"/>
+      <itemData name="Tests"        defStyleNum="dsFunction"      bold="1"/> <!-- #ff00ff -->
 
       <itemData name="Comment"        defStyleNum="dsComment"/>
       <itemData name="Region Marker"  defStyleNum="dsRegionMarker" />
@@ -917,10 +920,10 @@
       <itemData name="Delimited String Delimiter" defStyleNum="dsKeyword"/>
       
       <!-- Ddoc specific -->
-      <itemData name="Macros"      defStyleNum="dsOthers" color="#bf5fbf" selColor="#ffffff" bold="1" italic="0" />
-      <itemData name="Macro Text"  defStyleNum="dsNormal" color="#bf7fff" selColor="#ffffff" bold="0" italic="0" />
-      <itemData name="Ddoc"        defStyleNum="dsComment" color="#7f7fff" />
-      <itemData name="DdocSection" defStyleNum="dsKeyword" color="#7f7fff" bold="1" />
+      <itemData name="Macros"      defStyleNum="dsSpecialChar" bold="1" italic="0" /> <!-- #bf5fbf -->
+      <itemData name="Macro Text"  defStyleNum="dsAttribute" bold="0" italic="0" /> <!-- #bf7fff -->
+      <itemData name="Ddoc"        defStyleNum="dsDocumentation" /> <!-- #7f7fff -->
+      <itemData name="DdocSection" defStyleNum="dsAnnotation" bold="1" /> <!-- #7f7fff -->
       <itemData name="DdocCode"    defStyleNum="dsNormal" italic="1" />
     </itemDatas>
   </highlighting>
@@ -932,3 +935,4 @@
     <keywords casesensitive="true"/>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/diff.xml b/syntax/diff.xml
--- a/syntax/diff.xml
+++ b/syntax/diff.xml
@@ -2,9 +2,6 @@
 <!DOCTYPE language SYSTEM "language.dtd"
 [
   <!ENTITY file  "(====|\*\*\*|\-\-\-|diff|Only in .*:).*$">
-  <!ENTITY chunk "(\@\@|\d).*$">
-  <!ENTITY csep  "(\+\+\+|\-\-\-).*$">
-  <!ENTITY index  "Index:.*">
 ]>
 <!--
     2006-08-02: 1.10 Matthew Woehlke <mw_triad@sourceforge.net>
@@ -15,81 +12,88 @@
     2008-02-13: 1.11 Eduardo Robles Elvira <edulix AT gmail DOT com>
      Fixed folding.
 -->
-<language name="Diff" version="5" kateversion="5.0" section="Other" extensions="*.diff;*patch;*.rej" mimetype="text/x-patch">
+<language name="Diff" version="6" kateversion="5.62" section="Other" extensions="*.diff;*patch;*.rej" mimetype="text/x-patch">
 
   <highlighting>
 
     <contexts>
 
-      <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
-        <RegExpr attribute="Header" context="Chunk" String="&chunk;" beginRegion="chunk" column="0"/>
+      <context attribute="Normal Text" lineEndContext="#stay" name="Normal" fallthroughContext="AttrNormal">
+        <Detect2Chars attribute="Header" context="AttrHeader_Chunk" char="@" char1="@" beginRegion="chunk" column="0"/>
+        <AnyChar attribute="Header" context="AttrHeader_Chunk" String="0123456789" beginRegion="chunk" column="0"/>
         <RegExpr attribute="Header" context="RChunk" String="\*+$" beginRegion="chunk" column="0"/>
         <RegExpr attribute="File" context="#stay" String="Only in .*:.*$" column="0"/>
-        <RegExpr attribute="File" context="RFile" String="diff.*$" beginRegion="chunk" column="0"/>
-        <RegExpr attribute="File" context="#stay" String="====.*$" column="0"/>
-        <RegExpr attribute="File" context="File" String="(\*\*\*|\-\-\-).*$" beginRegion="chunk" column="0"/>
+        <StringDetect attribute="File" context="AttrFile_RFile" String="diff" beginRegion="chunk" column="0"/>
+        <StringDetect attribute="File" context="AttrFile" String="====" column="0"/>
+        <StringDetect attribute="File" context="AttrFile_File" String="***" beginRegion="chunk" column="0"/>
+        <StringDetect attribute="File" context="AttrFile_File" String="---" beginRegion="chunk" column="0"/>
         <IncludeRules context="FindDiff"/>
         <DetectChar attribute="Changed line (old)" context="ChangedOld" char="!" column="0"/>
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="FindDiff">
-        <RegExpr attribute="File" context="#stay" String="\-\-\-.*$" column="0"/>
-        <RegExpr attribute="Header" context="#stay" String="&csep;" column="0"/>
+        <StringDetect attribute="File" context="AttrFile" String="---" column="0"/>
+        <StringDetect attribute="Header" context="AttrHeader" String="+++" column="0"/>
         <AnyChar attribute="Added line" context="Added" String="+&gt;" column="0"/>
         <AnyChar attribute="Removed line" context="Removed" String="-&lt;" column="0"/>
       </context>
 
       <!-- block contexts -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="File">
+      <context attribute="Normal Text" lineEndContext="#stay" name="File" fallthroughContext="AttrNormal">
         <IncludeRules context="FindDiff"/>
-        <RegExpr attribute="Header" context="ChunkInFile" String="&chunk;" beginRegion="chunk" column="0"/>
+        <Detect2Chars attribute="Header" context="AttrHeader_ChunkInFile" char="@" char1="@" beginRegion="chunk" column="0"/>
+        <AnyChar attribute="Header" context="AttrHeader_ChunkInFile" String="0123456789" beginRegion="chunk" column="0"/>
         <RegExpr attribute="Header" context="RChunkInFile" String="\*+$" beginRegion="chunk" column="0"/>
         <RegExpr attribute="File" context="#pop" String="&file;" endRegion="chunk" column="0"/>
         <DetectChar attribute="Changed line (old)" context="ChangedOld" char="!" column="0"/>
       </context>
 
-      <context attribute="Normal Text" lineEndContext="#stay" name="Chunk">
+      <context attribute="Normal Text" lineEndContext="#stay" name="Chunk" fallthroughContext="AttrNormal">
         <IncludeRules context="FindDiff"/>
-        <RegExpr attribute="Header" context="#pop" String="&chunk;" endRegion="chunk" lookAhead="true" column="0"/>
+        <Detect2Chars attribute="Header" context="#pop" char="@" char1="@" endRegion="chunk" lookAhead="true" column="0"/>
+        <AnyChar attribute="Header" context="#pop" String="0123456789" endRegion="chunk" lookAhead="true" column="0"/>
         <DetectChar attribute="Changed line (old)" context="ChangedOld" char="!" column="0"/>
       </context>
 
-      <context attribute="Normal Text" lineEndContext="#stay" name="ChunkInFile">
+      <context attribute="Normal Text" lineEndContext="#stay" name="ChunkInFile" fallthroughContext="AttrNormal">
         <IncludeRules context="FindDiff"/>
-        <RegExpr attribute="Header" context="#pop" String="&chunk;" endRegion="chunk" lookAhead="true" column="0"/>
-        <RegExpr attribute="Normal Text" context="#pop" String="&index;" endRegion="chunk" column="0"/>
+        <Detect2Chars attribute="Header" context="#pop" char="@" char1="@" endRegion="chunk" lookAhead="true" column="0"/>
+        <AnyChar attribute="Header" context="#pop" String="0123456789" endRegion="chunk" lookAhead="true" column="0"/>
+        <StringDetect attribute="Normal Text" context="#pop!AttrNormal" String="Index:" endRegion="chunk" column="0"/>
         <RegExpr attribute="File" context="#pop" String="&file;" endRegion="chunk" lookAhead="true" column="0"/>
         <DetectChar attribute="Changed line (old)" context="ChangedOld" char="!" column="0"/>
       </context>
 
       <!-- block contexts (diff -r) -->
-      <context attribute="Normal Text" lineEndContext="#stay" name="RFile">
+      <context attribute="Normal Text" lineEndContext="#stay" name="RFile" fallthroughContext="AttrNormal">
         <RegExpr attribute="File" context="#pop" String="(diff|Only in .*:).*$" endRegion="chunk" lookAhead="true" column="0"/>
         <RegExpr attribute="Header" context="#stay" String="&file;" column="0"/>
         <RegExpr attribute="Header" context="RChunkInFile" String="\*+$" beginRegion="chunk" column="0"/>
         <IncludeRules context="File"/>
       </context>
 
-      <context attribute="Normal Text" lineEndContext="#stay" name="RChunk">
+      <context attribute="Normal Text" lineEndContext="#stay" name="RChunk" fallthroughContext="AttrNormal">
         <RegExpr attribute="Header" context="#stay" String="\*\*\* .* \*\*\*\*$" column="0"/>
         <RegExpr attribute="Header" context="RChunkNew" String="\-\-\- .* \-\-\-\-$" column="0"/>
         <IncludeRules context="Chunk"/>
       </context>
 
-      <context attribute="Normal Text" lineEndContext="#stay" name="RChunkInFile">
+      <context attribute="Normal Text" lineEndContext="#stay" name="RChunkInFile" fallthroughContext="AttrNormal">
         <RegExpr attribute="Header" context="#stay" String="\*\*\* .* \*\*\*\*$" column="0"/>
         <RegExpr attribute="Header" context="RChunkInFileNew" String="\-\-\- .* \-\-\-\-$" column="0"/>
         <IncludeRules context="ChunkInFile"/>
       </context>
 
-      <context attribute="Normal Text" lineEndContext="#stay" name="RChunkNew">
-        <RegExpr attribute="Header" context="#pop#pop" String="&chunk;" lookAhead="true" column="0"/>
+      <context attribute="Normal Text" lineEndContext="#stay" name="RChunkNew" fallthroughContext="AttrNormal">
+        <Detect2Chars attribute="Header" context="#pop#pop" char="@" char1="@" lookAhead="true" column="0"/>
+        <AnyChar attribute="Header" context="#pop#pop" String="0123456789" lookAhead="true" column="0"/>
         <DetectChar attribute="Changed line (new)" context="ChangedNew" char="!" column="0"/>
         <IncludeRules context="FindDiff"/>
       </context>
 
-      <context attribute="Normal Text" lineEndContext="#stay" name="RChunkInFileNew">
-        <RegExpr attribute="Header" context="#pop#pop" String="&chunk;" lookAhead="true" column="0"/>
+      <context attribute="Normal Text" lineEndContext="#stay" name="RChunkInFileNew" fallthroughContext="AttrNormal">
+        <Detect2Chars attribute="Header" context="#pop#pop" char="@" char1="@" lookAhead="true" column="0"/>
+        <AnyChar attribute="Header" context="#pop#pop" String="0123456789" lookAhead="true" column="0"/>
         <RegExpr attribute="File" context="#pop#pop" String="&file;" endRegion="chunk" lookAhead="true" column="0"/>
         <DetectChar attribute="Changed line (new)" context="ChangedNew" char="!" column="0"/>
         <IncludeRules context="FindDiff"/>
@@ -101,6 +105,13 @@
       <context attribute="Changed line (old)" lineEndContext="#pop" name="ChangedOld"/>
       <context attribute="Changed line (new)" lineEndContext="#pop" name="ChangedNew"/>
 
+      <context attribute="Normal Text" lineEndContext="#pop" name="AttrNormal"/>
+      <context attribute="File" lineEndContext="#pop" name="AttrFile"/>
+      <context attribute="File" lineEndContext="#pop!File" name="AttrFile_File"/>
+      <context attribute="File" lineEndContext="#pop!RFile" name="AttrFile_RFile"/>
+      <context attribute="Header" lineEndContext="#pop" name="AttrHeader"/>
+      <context attribute="Header" lineEndContext="#pop!Chunk" name="AttrHeader_Chunk"/>
+      <context attribute="Header" lineEndContext="#pop!ChunkInFile" name="AttrHeader_ChunkInFile"/>
     </contexts>
 
     <itemDatas>
diff --git a/syntax/djangotemplate.xml b/syntax/djangotemplate.xml
--- a/syntax/djangotemplate.xml
+++ b/syntax/djangotemplate.xml
@@ -4,7 +4,7 @@
 	<!ENTITY name    "[A-Za-z_:][\w.:_-]*">
 	<!ENTITY entref  "&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);">
 ]>
-<language name="Django HTML Template" version="4" kateversion="5.0" section="Markup" extensions="*.htm;*.html" mimetype="text/html"  author="Matthew Marshall (matthew@matthewmarshall.org)" license="LGPL" priority="9">
+<language name="Django HTML Template" version="5" kateversion="5.0" section="Markup" extensions="*.htm;*.html" mimetype="text/html"  author="Matthew Marshall (matthew@matthewmarshall.org)" license="LGPL" priority="9">
 
 <!--
     Based off of the katepart html syntax highlighting by Wilbert Berendsen.
@@ -59,6 +59,9 @@
 
   <context name="Template Comment" attribute="Template Comment" lineEndContext="#stay">
     <RegExpr attribute="Template Comment" context="#pop" String="\{%\s*endcomment\s*%\}" endRegion="templatecomment" />
+    <DetectSpaces />
+    <IncludeRules context="##Alerts" />
+    <IncludeRules context="##Modelines" />
   </context>
 
   <context name="Template Var" attribute="Template Var" lineEndContext="#stay">
@@ -171,6 +174,7 @@
     <DetectSpaces/>
     <IncludeRules context="##Alerts" />
     <IncludeRules context="FindTemplate" />
+    <IncludeRules context="##Modelines" />
     <DetectIdentifier/>
     <StringDetect attribute="Comment" context="#pop" String="--&gt;" endRegion="comment" />
     <RegExpr attribute="Error" context="#stay" String="-(-(?!-&gt;))+" />
@@ -328,3 +332,4 @@
   </comments>
 </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/dot.xml b/syntax/dot.xml
--- a/syntax/dot.xml
+++ b/syntax/dot.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
 <!-- Adapted from the VIM highlighter, by Markus Mottl (markus@oefai.at) -->
-<language name="dot" version="3" kateversion="5.0" section="Scientific" extensions="*.dot" mimetype="text/x-dot" author="Postula Loïs (lois.postula@live.be)" priority="0">
+<language name="dot" version="4" kateversion="5.0" section="Scientific" extensions="*.dot" mimetype="text/x-dot" author="Postula Loïs (lois.postula@live.be)" priority="0">
 
   <highlighting>
 
@@ -133,12 +133,16 @@
       </context>
 
       <context attribute="Comment" lineEndContext="#pop" name="CommentSL">
+        <DetectSpaces />
         <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
 
       <context attribute="Comment" lineEndContext="#stay" name="CommentML">
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+        <DetectSpaces />
         <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
 
     </contexts>
@@ -162,7 +166,7 @@
 
     <comments>
       <comment name="singleLine" start="//"/>
-      <comment name="multiLine" start="/*" end="*/"/>
+      <comment name="multiLine" start="/*" end="*/" region="Comment"/>
     </comments>
 
     <keywords casesensitive="1"/>
@@ -170,3 +174,4 @@
   </general>
 
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/doxygen.xml b/syntax/doxygen.xml
--- a/syntax/doxygen.xml
+++ b/syntax/doxygen.xml
@@ -2,9 +2,11 @@
 <!DOCTYPE language SYSTEM "language.dtd"
 [
     <!ENTITY wordsep "([][,?;()]|\.$|\.?\s)">     <!-- things that end a TagWord -->
+    <!ENTITY sl_word ".*?(?=&wordsep;)">
+    <!ENTITY ml_word ".*?(?=&wordsep;|\*/)">
 ]>
 <language name="Doxygen"
-          version="6"
+          version="7"
           kateversion="5.0"
           section="Markup"
           extensions="*.dox;*.doxygen"
@@ -42,10 +44,6 @@
       <item>\endrtfonly</item>       <item>@endrtfonly</item>
       <item>\endsecreflist</item>    <item>@endsecreflist</item>
       <item>\endxmlonly</item>       <item>@endxmlonly</item>
-      <item>\f[</item>               <item>@f[</item>
-      <item>\f]</item>               <item>@f]</item>
-      <item>\f$</item>               <item>@f$</item>
-      <!-- TODO Add @f{environment}{ and @f} -->
       <item>\hideinitializer</item>  <item>@hideinitializer</item>
       <item>\htmlonly</item>         <item>@htmlonly</item>
       <!-- TODO @internal is a candidate to be handled separately, cuz may introduce folding region -->
@@ -84,21 +82,6 @@
       <item>\test</item>             <item>@test</item>
       <item>\version</item>          <item>@version</item>
       <item>\xmlonly</item>          <item>@xmlonly</item>
-      <!-- TODO Introduce separate context for @~ ? -->
-      <item>\#</item>                <item>@#</item>
-      <item>\$</item>                <item>@$</item>
-      <item>\%</item>                <item>@%</item>
-      <item>\&amp;</item>            <item>@&amp;</item>
-      <item>\&gt;</item>             <item>@&gt;</item>
-      <item>\&lt;</item>             <item>@&lt;</item>
-      <item>\&quot;</item>           <item>@&quot;</item>
-      <item>\::</item>               <item>@::</item>
-      <item>\@</item>                <item>@@</item>
-      <item>\\</item>                <item>@\</item>
-      <item>\~</item>                <item>@~</item>
-      <item>\.</item>                <item>@.</item>
-      <item>\--</item>               <item>@--</item>
-      <item>\---</item>              <item>@---</item>
     </list>
 
     <list name="TagWord">
@@ -202,6 +185,12 @@
       <item>\var</item>              <item>@var</item>
       <item>\vhdlflow</item>         <item>@vhdlflow</item>
     </list>
+    <list name="TagEnd">
+      <item>\endcode</item>          <item>@endcode</item>
+      <item>\endverbatim</item>      <item>@endverbatim</item>
+      <item>\endmsc</item>           <item>@endmsc</item>
+      <item>\enddot</item>           <item>@enddot</item>
+    </list>
     <list name="Note">
       <item>\note</item>             <item>@note</item>
     </list>
@@ -231,8 +220,8 @@
       TODO Not all commands are handled properly nowadays :( Need few more contexts...
     -->
       <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
-        <RegExpr attribute="Comment" context="LineComment" String="//(!|(/(?=[^/]|$)))&lt;?" />
-        <RegExpr attribute="Comment" context="BlockComment" String="/\*(\*[^*/]|!|[*!]&lt;|\*$)" beginRegion="BlockComment" />
+        <RegExpr attribute="Comment" context="LineComment" String="//(?:!|(?:/(?=[^/]|$)))&lt;?" />
+        <RegExpr attribute="Comment" context="BlockComment" String="/\*(?:\*[^*/]|!|[*!]&lt;|\*$)" beginRegion="BlockComment" />
         <RegExpr attribute="Region" context="#stay" String="//\s*@\{\s*$" beginRegion="MemberGroup" />
         <RegExpr attribute="Region" context="#stay" String="//\s*@\}\s*$"   endRegion="MemberGroup" />
         <RegExpr attribute="Region" context="#stay" String="/\*\s*@\{\s*\*/" beginRegion="MemberGroup" />
@@ -242,38 +231,21 @@
         <LineContinue attribute="Comment" context="#stay" />
         <DetectSpaces />
         <IncludeRules context="##Alerts" />
-        <IncludeRules context="SL_DetectEnv" />
-        <keyword attribute="Tags" context="#stay" String="TagOnly" />
-        <keyword attribute="Tags" context="SL_TagWord" String="TagWord" />
-        <keyword attribute="Tags" context="SL_TagParam" String="TagParam" />
-        <keyword attribute="Tags" context="SL_TagWordWord" String="TagWordWord" />
-        <keyword attribute="Tags" context="SL_TagString" String="TagString" />
-        <keyword attribute="Tags" context="SL_TagWordString" String="TagWordString" />
-        <RegExpr attribute="Custom Tags" context="#stay" String="[@\\][^@\\ \t]+" />
         <DetectIdentifier />
-        <StringDetect attribute="HTML Comment" context="SL_htmlcomment" String="&lt;!--" />
-        <Detect2Chars attribute="Comment" context="#stay" char="&lt;" char1="&lt;" />
-        <RegExpr attribute="HTML Tag" context="SL_htmltag" String="&lt;\/?[-\w0-9._:@]+" />
+        <DetectChar attribute="Comment" context="SL_StartTag" char="\" lookAhead="true" />
+        <DetectChar attribute="Comment" context="SL_StartTag" char="@" lookAhead="true" />
+        <DetectChar attribute="Comment" context="SL_StartHTMLTag" char="&lt;" lookAhead="true" />
+        <DetectChar attribute="Comment" context="Entities" char="&amp;" lookAhead="true" />
       </context>
       <context attribute="Comment" lineEndContext="#stay" name="BlockComment">
         <DetectSpaces />
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="BlockComment" />
         <IncludeRules context="##Alerts" />
-        <Detect2Chars attribute="Region" context="#stay" char="@" char1="{" beginRegion="Group" />
-        <Detect2Chars attribute="Region" context="#stay" char="@" char1="}" endRegion="Group" />
-        <IncludeRules context="SL_DetectEnv" />
-        <keyword attribute="Tags" context="#stay" String="TagOnly" />
-        <keyword attribute="Tags" context="ML_TagWord" String="TagWord" />
-        <keyword attribute="Tags" context="ML_TagParam" String="TagParam" />
-        <keyword attribute="Tags" context="ML_TagWordWord" String="TagWordWord" />
-        <keyword attribute="Tags" context="ML_TagString" String="TagString" />
-        <keyword attribute="Tags" context="ML_TagWordString" String="TagWordString" />
-        <RegExpr attribute="Custom Tags" context="#stay" String="[@\\]([^@\\ \t\*]|\*(?!/))+" />
         <DetectIdentifier />
-        <RegExpr attribute="Tags" context="#stay" String="\\(&lt;|&gt;)" />
-        <Detect2Chars attribute="Comment" context="#stay" char="&lt;" char1="&lt;" />
-        <RegExpr attribute="HTML Tag" context="ML_htmltag" String="&lt;\/?[-\w0-9._:@]+" />
-        <StringDetect attribute="HTML Comment" context="ML_htmlcomment" String="&lt;!--" />
+        <DetectChar attribute="Comment" context="ML_StartTag" char="\" lookAhead="true" />
+        <DetectChar attribute="Comment" context="ML_StartTag" char="@" lookAhead="true" />
+        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="BlockComment" />
+        <DetectChar attribute="Comment" context="ML_StartHTMLTag" char="&lt;" lookAhead="true" />
+        <DetectChar attribute="Comment" context="Entities" char="&amp;" lookAhead="true" />
       </context>
 
       <!-- NOTE: all contexts beginning with ML_ are for multiline comments
@@ -284,123 +256,254 @@
                  much more complex and very hard to understand! (But use IncludeRules where the rules don't
                  refer to another SL_*/ML_* context, to help maintainability.)
       -->
+      <context attribute="Comment" lineEndContext="#pop" name="ML_StartTag">
+        <keyword attribute="Tags" context="#pop!ML_TagWord" String="TagWord" />
+        <keyword attribute="Tags" context="#pop!ML_TagParam" String="TagParam" />
+        <keyword attribute="Tags" context="#pop!ML_TagWordWord" String="TagWordWord" />
+        <keyword attribute="Tags" context="#pop!ML_TagString" String="TagString" />
+        <keyword attribute="Tags" context="#pop!ML_TagWordString" String="TagWordString" />
+        <WordDetect attribute="Tags" context="#pop!ML_Code" String="\code" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!ML_Code" String="@code" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!ML_Verbatim" String="\verbatim" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!ML_Verbatim" String="@verbatim" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!ML_Formula" String="\f[" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!ML_Formula" String="@f[" beginRegion="VerbatimBlock" />
+        <StringDetect attribute="Tags" context="#pop!ML_FormulaShort" String="\f$" beginRegion="VerbatimBlock" />
+        <StringDetect attribute="Tags" context="#pop!ML_FormulaShort" String="@f$" beginRegion="VerbatimBlock" />
+        <StringDetect attribute="Tags" context="#pop!ML_FormulaEnv" String="\f{" beginRegion="VerbatimBlock" />
+        <StringDetect attribute="Tags" context="#pop!ML_FormulaEnv" String="@f{" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!ML_Msc" String="\msc" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!ML_Msc" String="@msc" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!ML_Dot" String="\dot" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!ML_Dot" String="@dot" beginRegion="VerbatimBlock" />
+        <IncludeRules context="Inc_OtherTag" />
+      </context>
+      <context attribute="Comment" lineEndContext="#pop" name="ML_StartHTMLTag">
+        <Detect2Chars attribute="Comment" context="#pop" char="&lt;" char1="&lt;" />
+        <RegExpr attribute="HTML Tag" context="#pop!ML_htmltag" String="&lt;\/?[-\w0-9._:@]+" />
+        <StringDetect attribute="HTML Comment" context="#pop!ML_htmlcomment" String="&lt;!--" />
+        <DetectChar attribute="Comment" context="#pop" char="&lt;" />
+      </context>
+
       <!-- tag contexts -->
       <context attribute="Comment" lineEndContext="#pop" name="ML_TagWord">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" lookAhead="true" />
-        <IncludeRules context="SL_TagWord" />
+        <DetectSpaces />
+        <Detect2Chars attribute="Comment" context="#pop#pop" char="*" char1="/" endRegion="BlockComment" />
+        <keyword attribute="Tags" context="#pop!ML_TagWord" String="TagWord" />
+        <IncludeRules context="ML_Inc_Word" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="ML_TagParam">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" lookAhead="true" />
         <DetectSpaces />
-        <StringDetect attribute="Tags" context="ML_Tag2ndWord" String="[in]" />
-        <StringDetect attribute="Tags" context="ML_Tag2ndWord" String="[out]" />
-        <StringDetect attribute="Tags" context="ML_Tag2ndWord" String="[in,out]" />
-        <RegExpr attribute="Word" context="#pop" String="\S(?=&wordsep;)" />
-        <RegExpr attribute="Word" context="#stay" String="\S" />
+        <Detect2Chars attribute="Comment" context="#pop#pop" char="*" char1="/" endRegion="BlockComment" />
+        <StringDetect attribute="Tags" context="#pop!ML_TagWord" String="[in]" />
+        <StringDetect attribute="Tags" context="#pop!ML_TagWord" String="[out]" />
+        <StringDetect attribute="Tags" context="#pop!ML_TagWord" String="[in,out]" />
+        <IncludeRules context="ML_Inc_Word" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="ML_TagWordWord">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" lookAhead="true" />
         <DetectSpaces />
-        <RegExpr attribute="Word" context="ML_Tag2ndWord" String="\S(?=&wordsep;)" />
-        <RegExpr attribute="Word" context="#stay" String="\S" />
-      </context>
-      <!-- TODO for kate 2.x, convert references to "#pop!ML_TagWord" -->
-      <context attribute="Comment" lineEndContext="#pop#pop" name="ML_Tag2ndWord">
-        <Detect2Chars attribute="Comment" context="#pop#pop" char="*" char1="/" lookAhead="true" />
-        <IncludeRules context="SL_Tag2ndWord" />
+        <Detect2Chars attribute="Comment" context="#pop#pop" char="*" char1="/" endRegion="BlockComment" />
+        <RegExpr attribute="Word" context="#pop!ML_TagWord" String="&ml_word;" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="ML_TagString">
         <DetectSpaces />
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" lookAhead="true" />
+        <Detect2Chars attribute="Comment" context="#pop#pop" char="*" char1="/" endRegion="BlockComment" />
         <StringDetect attribute="HTML Comment" context="ML_htmlcomment" String="&lt;!--" />
         <Detect2Chars attribute="Comment" context="#stay" char="&lt;" char1="&lt;" />
         <RegExpr attribute="HTML Tag" context="ML_htmltag" String="&lt;\/?[-\w0-9._:@]+" />
-        <RegExpr attribute="Description" context="#stay" String="." />
+        <RegExpr attribute="Description" context="#stay" String="[&lt;*]?[^&lt;*\s]+" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="ML_TagWordString">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" lookAhead="true" />
-        <IncludeRules context="SL_TagWordString" />
+        <DetectSpaces />
+        <Detect2Chars attribute="Comment" context="#pop#pop" char="*" char1="/" endRegion="BlockComment" />
+        <IncludeRules context="ML_Inc_Word" />
       </context>
 
+      <context name="ML_Inc_Word" attribute="Word" lineEndContext="#pop">
+        <RegExpr attribute="Word" context="#pop" String="&ml_word;" />
+      </context>
+
+
       <!-- html contexts -->
       <context name="ML_htmltag" attribute="Identifier" lineEndContext="#stay">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" lookAhead="true" />
+        <Detect2Chars attribute="Comment" context="#pop#pop" char="*" char1="/" endRegion="BlockComment" />
         <Detect2Chars attribute="HTML Tag" context="#pop" char="/" char1="&gt;" />
         <DetectChar attribute="HTML Tag" context="#pop" char="&gt;" />
-        <RegExpr attribute="Identifier" context="ML_identifiers" String="\s*=\s*" />
+        <DetectSpaces />
+        <DetectChar attribute="Identifier" context="ML_identifiers" char="=" />
       </context>
       <context name="ML_htmlcomment" attribute="HTML Comment" lineEndContext="#stay">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" lookAhead="true" />
+        <DetectSpaces />
+        <Detect2Chars attribute="Comment" context="#pop#pop" char="*" char1="/" endRegion="BlockComment" />
         <IncludeRules context="##Alerts" />
+        <DetectIdentifier />
         <StringDetect attribute="HTML Comment" context="#pop" String="--&gt;" />
       </context>
       <context name="ML_identifiers" attribute="Identifier" lineEndContext="#stay">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" lookAhead="true" />
-        <RegExpr attribute="Identifier" context="#pop" String="\s*#?[a-zA-Z0-9]*" />
+        <DetectSpaces />
+        <Detect2Chars attribute="Comment" context="#pop#pop#pop" char="*" char1="/" endRegion="BlockComment" />
         <DetectChar attribute="Types" context="ML_types1" char="'" />
         <DetectChar attribute="Types" context="ML_types2" char="&quot;" />
       </context>
       <context name="ML_types1" attribute="Types" lineEndContext="#stay">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" lookAhead="true" />
+        <Detect2Chars attribute="Comment" context="#pop#pop#pop#pop" char="*" char1="/" endRegion="BlockComment" />
         <DetectChar attribute="Types" context="#pop#pop" char="'" />
       </context>
       <context name="ML_types2" attribute="Types" lineEndContext="#stay">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" lookAhead="true" />
+        <Detect2Chars attribute="Comment" context="#pop#pop#pop#pop" char="*" char1="/" endRegion="BlockComment" />
         <DetectChar attribute="Types" context="#pop#pop" char="&quot;" />
       </context>
 
+      <context name="ML_FindNextLine" attribute="Comment" lineEndContext="#pop" fallthroughContext="#pop">
+        <DetectSpaces />
+        <Detect2Chars attribute="Comment" context="#pop!ML_End_BlockComment" char="*" char1="/" endRegion="VerbatimBlock" lookAhead="1"/>
+        <Detect2Chars attribute="Comment" context="ML_VerbatimPrefix" char="*" char1="*" lookAhead="true" />
+        <DetectChar attribute="Comment" context="#pop" char="*" />
+      </context>
+      <context name="ML_VerbatimPrefix" attribute="Comment" lineEndContext="#stay">
+        <DetectChar attribute="Comment" context="#pop" char="*" />
+      </context>
+
+      <context name="ML_End_BlockComment" attribute="Comment" lineEndContext="#stay">
+        <Detect2Chars attribute="Error" context="#pop#pop#pop" char="*" char1="/" endRegion="BlockComment"/>
+      </context>
+
+      <context name="ML_Code" attribute="Code" lineEndContext="ML_FindNextLine">
+        <Detect2Chars attribute="Comment" context="ML_End_BlockComment" char="*" char1="/" endRegion="VerbatimBlock" lookAhead="1"/>
+        <WordDetect attribute="Tags" context="#pop" String="\endcode" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@endcode" endRegion="VerbatimBlock" />
+      </context>
+
+      <context name="ML_Verbatim" attribute="Verbatim" lineEndContext="ML_FindNextLine">
+        <Detect2Chars attribute="Comment" context="ML_End_BlockComment" char="*" char1="/" endRegion="VerbatimBlock" lookAhead="1"/>
+        <WordDetect attribute="Tags" context="#pop" String="\endverbatim" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@endverbatim" endRegion="VerbatimBlock" />
+      </context>
+
+      <context name="ML_Formula" attribute="Formulas" lineEndContext="ML_FindNextLine">
+        <Detect2Chars attribute="Comment" context="ML_End_BlockComment" char="*" char1="/" endRegion="VerbatimBlock" lookAhead="1"/>
+        <WordDetect attribute="Tags" context="#pop" String="\f]" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@f]" endRegion="VerbatimBlock" />
+        <!-- TODO: How to force LaTeX math context here?? -->
+        <!-- <IncludeRules context="##LaTeX" /> -->
+      </context>
+
+      <context name="ML_FormulaShort" attribute="Formulas" lineEndContext="ML_FindNextLine">
+        <Detect2Chars attribute="Comment" context="ML_End_BlockComment" char="*" char1="/" endRegion="VerbatimBlock" lookAhead="1"/>
+        <WordDetect attribute="Tags" context="#pop" String="\f$" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@f$" endRegion="VerbatimBlock" />
+        <!-- TODO: How to force LaTeX math context here?? -->
+        <!-- <IncludeRules context="##LaTeX" /> -->
+      </context>
+
+      <context name="ML_FormulaEnv" attribute="Word" lineEndContext="ML_FindNextLine">
+        <DetectChar attribute="Tags" context="#pop!ML_FormulaEnvStart" char="}" />
+        <Detect2Chars attribute="Comment" context="ML_End_BlockComment" char="*" char1="/" endRegion="VerbatimBlock" lookAhead="1"/>
+      </context>
+
+      <context name="ML_FormulaEnvStart" attribute="Formulas" lineEndContext="ML_FindNextLine" fallthroughContext="#pop!ML_FormulaEnvFormula">
+        <DetectSpaces attribute="Comment" />
+        <DetectChar attribute="Tags" context="#pop!ML_FormulaEnvFormula" char="{" />
+        <Detect2Chars attribute="Comment" context="ML_End_BlockComment" char="*" char1="/" endRegion="VerbatimBlock" lookAhead="1"/>
+      </context>
+
+      <context name="ML_FormulaEnvFormula" attribute="Formulas" lineEndContext="ML_FindNextLine">
+        <Detect2Chars attribute="Comment" context="ML_End_BlockComment" char="*" char1="/" endRegion="VerbatimBlock" lookAhead="1"/>
+        <WordDetect attribute="Tags" context="#pop" String="\f}" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@f}" endRegion="VerbatimBlock" />
+        <!-- TODO: How to force LaTeX math context here?? -->
+        <!-- <IncludeRules context="##LaTeX" /> -->
+      </context>
+
+      <context name="ML_Msc" attribute="Message Sequence Chart" lineEndContext="ML_FindNextLine">
+        <Detect2Chars attribute="Comment" context="ML_End_BlockComment" char="*" char1="/" endRegion="VerbatimBlock" lookAhead="1"/>
+        <WordDetect attribute="Tags" context="#pop" String="\endmsc" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@endmsc" endRegion="VerbatimBlock" />
+      </context>
+
+      <context name="ML_Dot" attribute="Dot Graph" lineEndContext="ML_FindNextLine">
+        <Detect2Chars attribute="Comment" context="ML_End_BlockComment" char="*" char1="/" endRegion="VerbatimBlock" lookAhead="1"/>
+        <WordDetect attribute="Tags" context="#pop" String="\enddot" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@enddot" endRegion="VerbatimBlock" />
+      </context>
+
       <!-- NOTE: all contexts beginning with SL_ are for singleline comments -->
+      <context attribute="Comment" lineEndContext="#pop" name="SL_StartTag">
+        <keyword attribute="Tags" context="#pop!SL_TagWord" String="TagWord" />
+        <keyword attribute="Tags" context="#pop!SL_TagParam" String="TagParam" />
+        <keyword attribute="Tags" context="#pop!SL_TagWordWord" String="TagWordWord" />
+        <keyword attribute="Tags" context="#pop!SL_TagString" String="TagString" />
+        <keyword attribute="Tags" context="#pop!SL_TagWordString" String="TagWordString" />
+        <WordDetect attribute="Tags" context="#pop!SL_Code" String="\code" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Code" String="@code" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Verbatim" String="\verbatim" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Verbatim" String="@verbatim" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Formula" String="\f[" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Formula" String="@f[" beginRegion="VerbatimBlock" />
+        <StringDetect attribute="Tags" context="#pop!SL_FormulaShort" String="\f$" beginRegion="VerbatimBlock" />
+        <StringDetect attribute="Tags" context="#pop!SL_FormulaShort" String="@f$" beginRegion="VerbatimBlock" />
+        <StringDetect attribute="Tags" context="#pop!SL_FormulaEnv" String="\f{" beginRegion="VerbatimBlock" />
+        <StringDetect attribute="Tags" context="#pop!SL_FormulaEnv" String="@f{" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Msc" String="\msc" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Msc" String="@msc" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Dot" String="\dot" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Dot" String="@dot" beginRegion="VerbatimBlock" />
+        <IncludeRules context="Inc_OtherTag" />
+      </context>
+      <context attribute="Comment" lineEndContext="#pop" name="SL_StartHTMLTag">
+        <Detect2Chars attribute="Comment" context="#pop" char="&lt;" char1="&lt;" />
+        <RegExpr attribute="HTML Tag" context="#pop!SL_htmltag" String="&lt;\/?[-\w0-9._:@]+" />
+        <StringDetect attribute="HTML Comment" context="#pop!SL_htmlcomment" String="&lt;!--" />
+        <DetectChar attribute="Comment" context="#pop" char="&lt;" />
+      </context>
+
       <!-- tag contexts -->
       <context attribute="Comment" lineEndContext="#pop" name="SL_TagWord">
         <DetectSpaces />
-        <keyword attribute="Tags" context="#pop" String="TagWord" lookAhead="true" />
-        <RegExpr attribute="Word" context="#pop" String="\S(?=&wordsep;)" />
-        <RegExpr attribute="Word" context="#stay" String="\S" />
+        <keyword attribute="Tags" context="#pop!SL_TagWord" String="TagWord" />
+        <IncludeRules context="SL_Inc_Word" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="SL_TagParam">
         <DetectSpaces />
-        <StringDetect attribute="Tags" context="SL_Tag2ndWord" String="[in]" />
-        <StringDetect attribute="Tags" context="SL_Tag2ndWord" String="[out]" />
-        <StringDetect attribute="Tags" context="SL_Tag2ndWord" String="[in,out]" />
-        <RegExpr attribute="Word" context="#pop" String="\S(?=&wordsep;)" />
-        <RegExpr attribute="Word" context="#stay" String="\S" />
+        <StringDetect attribute="Tags" context="#pop!SL_TagWord" String="[in]" />
+        <StringDetect attribute="Tags" context="#pop!SL_TagWord" String="[out]" />
+        <StringDetect attribute="Tags" context="#pop!SL_TagWord" String="[in,out]" />
+        <IncludeRules context="SL_Inc_Word" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="SL_TagWordWord">
         <DetectSpaces />
-        <RegExpr attribute="Word" context="SL_Tag2ndWord" String="\S(?=&wordsep;)" />
-        <RegExpr attribute="Word" context="#stay" String="\S" />
-      </context>
-      <!-- TODO for kate 2.x, convert references to "#pop!SL_TagWord" -->
-      <context attribute="Comment" lineEndContext="#pop#pop" name="SL_Tag2ndWord">
-        <DetectSpaces />
-        <RegExpr attribute="Word" context="#pop#pop" String="\S(?=&wordsep;)" />
-        <RegExpr attribute="Word" context="#stay" String="\S" />
+        <RegExpr attribute="Word" context="#pop!SL_TagWord" String="&sl_word;" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="SL_TagString">
         <DetectSpaces />
         <StringDetect attribute="HTML Comment" context="SL_htmlcomment" String="&lt;!--" />
         <Detect2Chars attribute="Comment" context="#stay" char="&lt;" char1="&lt;" />
         <RegExpr attribute="HTML Tag" context="SL_htmltag" String="&lt;\/?[-\w0-9._:@]+" />
-        <RegExpr attribute="Description" context="#stay" String="." />
+        <RegExpr attribute="Description" context="#stay" String="&lt;?[^&lt;\s]+" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="SL_TagWordString">
         <DetectSpaces />
-        <RegExpr attribute="Word" context="#pop" String="\S(?=&wordsep;)" />
-        <RegExpr attribute="Word" context="#stay" String="\S" />
+        <IncludeRules context="SL_Inc_Word" />
       </context>
+      <context name="SL_Inc_Word" attribute="Word" lineEndContext="#pop">
+        <RegExpr attribute="Word" context="#pop" String="&sl_word;" />
+      </context>
 
       <!-- html contexts -->
       <context name="SL_htmltag" attribute="Identifier" lineEndContext="#pop">
         <Detect2Chars attribute="HTML Tag" context="#pop" char="/" char1="&gt;" />
         <DetectChar attribute="HTML Tag" context="#pop" char="&gt;" />
-        <RegExpr attribute="Identifier" context="SL_identifiers" String="\s*=\s*" />
+        <DetectSpaces />
+        <DetectChar attribute="Identifier" context="SL_identifiers" char="=" />
       </context>
       <context name="SL_htmlcomment" attribute="HTML Comment" lineEndContext="#pop">
+        <DetectSpaces />
         <IncludeRules context="##Alerts" />
+        <DetectIdentifier />
         <StringDetect attribute="HTML Comment" context="#pop" String="--&gt;" />
       </context>
       <context name="SL_identifiers" attribute="Identifier" lineEndContext="#pop">
-        <RegExpr attribute="Identifier" context="#pop" String="\s*#?[a-zA-Z0-9]*" />
+        <DetectSpaces />
         <DetectChar attribute="Types" context="SL_types1" char="'" />
         <DetectChar attribute="Types" context="SL_types2" char="&quot;" />
       </context>
@@ -411,52 +514,90 @@
         <DetectChar attribute="Types" context="#pop#pop" char="&quot;" />
       </context>
 
-      <context attribute="Comment" name="SL_DetectEnv" lineEndContext="#pop">
-        <RegExpr attribute="Tags" context="Code" String="[@\\]code\b" beginRegion="Code" />
-        <RegExpr attribute="Tags" context="Verbatim" String="[@\\]verbatim\b" beginRegion="Verbatim" />
-        <RegExpr attribute="Tags" context="Formula" String="[@\\]f\[" beginRegion="Formula" />
-        <RegExpr attribute="Tags" context="Msc" String="[@\\]msc\b" beginRegion="Msc" />
-        <RegExpr attribute="Tags" context="Dot" String="[@\\]dot\b" beginRegion="Dot" />
-        <keyword attribute="Note" context="#stay" String="Note" />
-        <keyword attribute="Warning" context="#stay" String="Warning" />
-        <keyword attribute="Attention" context="#stay" String="Attention" />
-        <keyword attribute="Todo" context="#stay" String="Todo" />
-        <RegExpr attribute="Entities" context="#stay" String="&amp;[A-Za-z]+&#59;" />
+      <context name="SL_FindNextLine" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop#pop#pop">
+        <DetectSpaces />
+        <StringDetect attribute="Comment" context="#pop" String="///" />
+        <StringDetect attribute="Comment" context="#pop" String="//!" />
+        <RegExpr attribute="Comment" context="#pop#pop#pop" String="." lookAhead="true" endRegion="VerbatimBlock" />
       </context>
 
-      <context attribute="Comment" name="SL_DetectComment" lineEndContext="#pop">
-        <Detect2Chars attribute="Comment" context="#pop#pop" char="*" char1="/" endRegion="BlockComment" />
-        <DetectChar attribute="Comment" context="#stay" char="*" />
-        <StringDetect attribute="Comment" context="#stay" String="///" />
+      <context name="SL_Code" attribute="Code" lineEndContext="SL_FindNextLine">
+        <WordDetect attribute="Tags" context="#pop" String="\endcode" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@endcode" endRegion="VerbatimBlock" />
       </context>
 
-      <context attribute="Code" lineEndContext="#stay" name="Code">
-        <IncludeRules context="SL_DetectComment" />
-        <RegExpr attribute="Tags" context="#pop" String="[@\\]endcode\b" endRegion="Code" />
+      <context name="SL_Verbatim" attribute="Verbatim" lineEndContext="SL_FindNextLine">
+        <WordDetect attribute="Tags" context="#pop" String="\endverbatim" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@endverbatim" endRegion="VerbatimBlock" />
       </context>
 
-      <context attribute="Verbatim" lineEndContext="#stay" name="Verbatim">
-        <IncludeRules context="SL_DetectComment" />
-        <RegExpr attribute="Tags" context="#pop" String="[@\\]endverbatim\b" endRegion="Verbatim" />
+      <context name="SL_Formula" attribute="Formulas" lineEndContext="SL_FindNextLine">
+        <WordDetect attribute="Tags" context="#pop" String="\f]" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@f]" endRegion="VerbatimBlock" />
+        <!-- TODO: How to force LaTeX math context here?? -->
+        <!-- <IncludeRules context="##LaTeX" /> -->
       </context>
 
-      <context attribute="Formulas" lineEndContext="#stay" name="Formula">
-        <IncludeRules context="SL_DetectComment" />
-        <RegExpr attribute="Tags" context="#pop" String="[@\\]f\]" endRegion="Formula" />
+      <context name="SL_FormulaShort" attribute="Formulas" lineEndContext="SL_FindNextLine">
+        <StringDetect attribute="Tags" context="#pop" String="\f$" endRegion="VerbatimBlock" />
+        <StringDetect attribute="Tags" context="#pop" String="@f$" endRegion="VerbatimBlock" />
         <!-- TODO: How to force LaTeX math context here?? -->
         <!-- <IncludeRules context="##LaTeX" /> -->
       </context>
 
-      <context attribute="Message Sequence Chart" lineEndContext="#stay" name="Msc">
-        <IncludeRules context="SL_DetectComment" />
-        <RegExpr attribute="Tags" context="#pop" String="[@\\]endmsc\b" endRegion="Msc" />
+      <context name="SL_FormulaEnv" attribute="Word" lineEndContext="SL_FindNextLine">
+        <DetectChar attribute="Tags" context="#pop!SL_FormulaEnvStart" char="}" />
       </context>
 
-      <context attribute="Dot Graph" lineEndContext="#stay" name="Dot">
-        <IncludeRules context="SL_DetectComment" />
-        <RegExpr attribute="Tags" context="#pop" String="[@\\]enddot\b" endRegion="Dot" />
+      <context name="SL_FormulaEnvStart" attribute="Formulas" lineEndContext="SL_FindNextLine" fallthroughContext="#pop!SL_FormulaEnvFormula">
+        <DetectSpaces attribute="Comment" />
+        <DetectChar attribute="Tags" context="#pop!SL_FormulaEnvFormula" char="{" />
       </context>
 
+      <context name="SL_FormulaEnvFormula" attribute="Formulas" lineEndContext="SL_FindNextLine">
+        <StringDetect attribute="Tags" context="#pop" String="\f}" endRegion="VerbatimBlock" />
+        <StringDetect attribute="Tags" context="#pop" String="@f}" endRegion="VerbatimBlock" />
+        <!-- TODO: How to force LaTeX math context here?? -->
+        <!-- <IncludeRules context="##LaTeX" /> -->
+      </context>
+
+      <context name="SL_Msc" attribute="Message Sequence Chart" lineEndContext="SL_FindNextLine">
+        <WordDetect attribute="Tags" context="#pop" String="\endmsc" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@endmsc" endRegion="VerbatimBlock" />
+      </context>
+
+      <context name="SL_Dot" attribute="Dot Graph" lineEndContext="SL_FindNextLine">
+        <WordDetect attribute="Tags" context="#pop" String="\enddot" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@enddot" endRegion="VerbatimBlock" />
+      </context>
+
+      <context name="Entities" attribute="Word" lineEndContext="#stay">
+        <RegExpr attribute="Entities" context="#pop" String="&amp;[A-Za-z]+&#59;" />
+        <DetectChar attribute="Comment" context="#pop" char="&amp;" />
+      </context>
+
+      <context name="Inc_OtherTag" attribute="Comment" lineEndContext="#pop">
+        <keyword attribute="Note" context="#pop" String="Note" />
+        <keyword attribute="Warning" context="#pop" String="Warning" />
+        <keyword attribute="Attention" context="#pop" String="Attention" />
+        <keyword attribute="Todo" context="#pop" String="Todo" />
+        <keyword attribute="Tags" context="#pop" String="TagOnly" />
+        <Detect2Chars attribute="Region" context="#pop" char="@" char1="{" beginRegion="Group" />
+        <Detect2Chars attribute="Region" context="#pop" char="@" char1="}" endRegion="Group" />
+        <Detect2Chars attribute="Tags" context="#pop!LanguageId" char="\" char1="~" />
+        <Detect2Chars attribute="Tags" context="#pop!LanguageId" char="@" char1="~" />
+        <keyword attribute="Error" context="#pop" String="TagEnd" />
+        <RegExpr attribute="Error" context="#pop" String="[@\\]f[]}]" />
+        <RegExpr attribute="Tags" context="#pop" String="[@\\](?:[#$%&amp;&lt;&gt;&quot;@\\.]|::|---?)(?=&wordsep;)" />
+        <RegExpr attribute="Custom Tags" context="#pop" String="[@\\](?:[^@\\ \t\*]|\*(?!/))+" />
+        <DetectChar attribute="Comment" context="#pop" char="\" />
+        <DetectChar attribute="Comment" context="#pop" char="@" />
+      </context>
+
+      <context name="LanguageId" attribute="Word" lineEndContext="#pop" fallthroughContext="#pop">
+        <DetectIdentifier />
+      </context>
+
   </contexts>
     <itemDatas>
       <itemData name="Normal Text"  defStyleNum="dsNormal" />
@@ -480,10 +621,11 @@
       <itemData name="Warning"      defStyleNum="dsWarning" bold="1" italic="0" />
       <itemData name="Attention"    defStyleNum="dsAnnotation" bold="1" italic="0" />
       <itemData name="Todo"         defStyleNum="dsAnnotation" bold="1" italic="0" />
+      <itemData name="Error"        defStyleNum="dsError" />
     </itemDatas>
   </highlighting>
   <general>
-    <keywords casesensitive="1" weakDeliminator="\$~" />
+    <keywords casesensitive="1" weakDeliminator="\$" />
   </general>
 </language>
 <!-- kate: indent-width 2; -->
diff --git a/syntax/doxygenlua.xml b/syntax/doxygenlua.xml
--- a/syntax/doxygenlua.xml
+++ b/syntax/doxygenlua.xml
@@ -2,20 +2,22 @@
 <!DOCTYPE language SYSTEM "language.dtd"
 [
     <!ENTITY wordsep "([][,?;()]|\.$|\.?\s)">     <!-- things that end a TagWord -->
+    <!ENTITY sl_word ".*?(?=&wordsep;)">
 ]>
 <!--
 sed -E '
-  s/<Detect2Chars(.*)char="\*" char1="\/"(.*)/<StringDetect\1String="]%1]" dynamic="true"\2/
-  s/ (name="ML_|name="BlockComment")/ dynamic="true" \1/
+  /LineContinue/d
+  /name="(ML_|BlockComment")/,/<\/context>/d
+  /\/\/\/| ml_word /d
+  s#//!#\x2d-!#
 ' doxygen.xml > doxygenlua.xml
 
 + edit
 - <language>
 - "Normal Text" context
-- grep '\\\*' doxygenlua.xml
 -->
 <language name="DoxygenLua"
-          version="6"
+          version="8"
           kateversion="5.0"
           section="Markup"
           extensions=""
@@ -52,10 +54,6 @@
       <item>\endrtfonly</item>       <item>@endrtfonly</item>
       <item>\endsecreflist</item>    <item>@endsecreflist</item>
       <item>\endxmlonly</item>       <item>@endxmlonly</item>
-      <item>\f[</item>               <item>@f[</item>
-      <item>\f]</item>               <item>@f]</item>
-      <item>\f$</item>               <item>@f$</item>
-      <!-- TODO Add @f{environment}{ and @f} -->
       <item>\hideinitializer</item>  <item>@hideinitializer</item>
       <item>\htmlonly</item>         <item>@htmlonly</item>
       <!-- TODO @internal is a candidate to be handled separately, cuz may introduce folding region -->
@@ -94,21 +92,6 @@
       <item>\test</item>             <item>@test</item>
       <item>\version</item>          <item>@version</item>
       <item>\xmlonly</item>          <item>@xmlonly</item>
-      <!-- TODO Introduce separate context for @~ ? -->
-      <item>\#</item>                <item>@#</item>
-      <item>\$</item>                <item>@$</item>
-      <item>\%</item>                <item>@%</item>
-      <item>\&amp;</item>            <item>@&amp;</item>
-      <item>\&gt;</item>             <item>@&gt;</item>
-      <item>\&lt;</item>             <item>@&lt;</item>
-      <item>\&quot;</item>           <item>@&quot;</item>
-      <item>\::</item>               <item>@::</item>
-      <item>\@</item>                <item>@@</item>
-      <item>\\</item>                <item>@\</item>
-      <item>\~</item>                <item>@~</item>
-      <item>\.</item>                <item>@.</item>
-      <item>\--</item>               <item>@--</item>
-      <item>\---</item>              <item>@---</item>
     </list>
 
     <list name="TagWord">
@@ -212,6 +195,12 @@
       <item>\var</item>              <item>@var</item>
       <item>\vhdlflow</item>         <item>@vhdlflow</item>
     </list>
+    <list name="TagEnd">
+      <item>\endcode</item>          <item>@endcode</item>
+      <item>\endverbatim</item>      <item>@endverbatim</item>
+      <item>\endmsc</item>           <item>@endmsc</item>
+      <item>\enddot</item>           <item>@enddot</item>
+    </list>
     <list name="Note">
       <item>\note</item>             <item>@note</item>
     </list>
@@ -241,174 +230,98 @@
       TODO Not all commands are handled properly nowadays :( Need few more contexts...
     -->
       <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
+        <StringDetect attribute="Comment" context="LineComment" String="--!" />
+        <StringDetect attribute="Comment" context="LineComment" String="---" />
         <RegExpr attribute="Region" context="#stay" String="--\s*@\{\s*$" beginRegion="MemberGroup" />
-        <RegExpr attribute="Region" context="#stay" String="--\s*@\}\s*$" endRegion="MemberGroup" />
-        <RegExpr attribute="Comment" context="BlockComment" String="--\[(=*)\[" beginRegion="BlockComment" dynamic="true" />
-        <Detect2Chars attribute="Comment" context="LineComment" char="-" char1="-" />
+        <RegExpr attribute="Region" context="#stay" String="--\s*@\}\s*$"   endRegion="MemberGroup" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="LineComment">
-        <LineContinue attribute="Comment" context="#stay" />
         <DetectSpaces />
         <IncludeRules context="##Alerts" />
-        <IncludeRules context="SL_DetectEnv" />
-        <keyword attribute="Tags" context="#stay" String="TagOnly" />
-        <keyword attribute="Tags" context="SL_TagWord" String="TagWord" />
-        <keyword attribute="Tags" context="SL_TagParam" String="TagParam" />
-        <keyword attribute="Tags" context="SL_TagWordWord" String="TagWordWord" />
-        <keyword attribute="Tags" context="SL_TagString" String="TagString" />
-        <keyword attribute="Tags" context="SL_TagWordString" String="TagWordString" />
-        <RegExpr attribute="Custom Tags" context="#stay" String="[@\\][^@\\ \t]+" />
         <DetectIdentifier />
-        <StringDetect attribute="HTML Comment" context="SL_htmlcomment" String="&lt;!--" />
-        <Detect2Chars attribute="Comment" context="#stay" char="&lt;" char1="&lt;" />
-        <RegExpr attribute="HTML Tag" context="SL_htmltag" String="&lt;\/?[-\w0-9._:@]+" />
-      </context>
-      <context attribute="Comment" lineEndContext="#stay" dynamic="true" name="BlockComment">
-        <DetectSpaces />
-        <StringDetect attribute="Comment" context="#pop" String="]%1]" dynamic="true" endRegion="BlockComment" />
-        <IncludeRules context="##Alerts" />
-        <Detect2Chars attribute="Region" context="#stay" char="@" char1="{" beginRegion="Group" />
-        <Detect2Chars attribute="Region" context="#stay" char="@" char1="}" endRegion="Group" />
-        <IncludeRules context="SL_DetectEnv" />
-        <keyword attribute="Tags" context="#stay" String="TagOnly" />
-        <keyword attribute="Tags" context="ML_TagWord" String="TagWord" />
-        <keyword attribute="Tags" context="ML_TagParam" String="TagParam" />
-        <keyword attribute="Tags" context="ML_TagWordWord" String="TagWordWord" />
-        <keyword attribute="Tags" context="ML_TagString" String="TagString" />
-        <keyword attribute="Tags" context="ML_TagWordString" String="TagWordString" />
-        <RegExpr attribute="Custom Tags" context="#stay" String="[@\\]([^@\\ \t])+" />
-        <DetectIdentifier />
-        <RegExpr attribute="Tags" context="#stay" String="\\(&lt;|&gt;)" />
-        <Detect2Chars attribute="Comment" context="#stay" char="&lt;" char1="&lt;" />
-        <RegExpr attribute="HTML Tag" context="ML_htmltag" String="&lt;\/?[-\w0-9._:@]+" />
-        <StringDetect attribute="HTML Comment" context="ML_htmlcomment" String="&lt;!--" />
-      </context>
-
-      <!-- NOTE: all contexts beginning with ML_ are for multiline comments
-                 The following contexts contain a Detect2Chars that looks for a */ sequence
-                 to end multiline comments. Singleline comments do not have this limitation -
-                 that's why all contexts are copy&pasted and the line <Detect2Chars ... */> is removed.
-                 <IncludeRules context="acontext"> could be used instead but it would make context switching
-                 much more complex and very hard to understand! (But use IncludeRules where the rules don't
-                 refer to another SL_*/ML_* context, to help maintainability.)
-      -->
-      <!-- tag contexts -->
-      <context attribute="Comment" lineEndContext="#pop" dynamic="true" name="ML_TagWord">
-        <StringDetect attribute="Comment" context="#pop" String="]%1]" dynamic="true" lookAhead="true" />
-        <IncludeRules context="SL_TagWord" />
-      </context>
-      <context attribute="Comment" lineEndContext="#pop" dynamic="true" name="ML_TagParam">
-        <StringDetect attribute="Comment" context="#pop" String="]%1]" dynamic="true" lookAhead="true" />
-        <DetectSpaces />
-        <StringDetect attribute="Tags" context="ML_Tag2ndWord" String="[in]" />
-        <StringDetect attribute="Tags" context="ML_Tag2ndWord" String="[out]" />
-        <StringDetect attribute="Tags" context="ML_Tag2ndWord" String="[in,out]" />
-        <RegExpr attribute="Word" context="#pop" String="\S(?=&wordsep;)" />
-        <RegExpr attribute="Word" context="#stay" String="\S" />
-      </context>
-      <context attribute="Comment" lineEndContext="#pop" dynamic="true" name="ML_TagWordWord">
-        <StringDetect attribute="Comment" context="#pop" String="]%1]" dynamic="true" lookAhead="true" />
-        <DetectSpaces />
-        <RegExpr attribute="Word" context="ML_Tag2ndWord" String="\S(?=&wordsep;)" />
-        <RegExpr attribute="Word" context="#stay" String="\S" />
-      </context>
-      <!-- TODO for kate 2.x, convert references to "#pop!ML_TagWord" -->
-      <context attribute="Comment" lineEndContext="#pop#pop" dynamic="true" name="ML_Tag2ndWord">
-        <StringDetect attribute="Comment" context="#pop#pop" String="]%1]" dynamic="true" lookAhead="true" />
-        <IncludeRules context="SL_Tag2ndWord" />
-      </context>
-      <context attribute="Comment" lineEndContext="#pop" dynamic="true" name="ML_TagString">
-        <DetectSpaces />
-        <StringDetect attribute="Comment" context="#pop" String="]%1]" dynamic="true" lookAhead="true" />
-        <StringDetect attribute="HTML Comment" context="ML_htmlcomment" String="&lt;!--" />
-        <Detect2Chars attribute="Comment" context="#stay" char="&lt;" char1="&lt;" />
-        <RegExpr attribute="HTML Tag" context="ML_htmltag" String="&lt;\/?[-\w0-9._:@]+" />
-        <RegExpr attribute="Description" context="#stay" String="." />
-      </context>
-      <context attribute="Comment" lineEndContext="#pop" dynamic="true" name="ML_TagWordString">
-        <StringDetect attribute="Comment" context="#pop" String="]%1]" dynamic="true" lookAhead="true" />
-        <IncludeRules context="SL_TagWordString" />
+        <DetectChar attribute="Comment" context="SL_StartTag" char="\" lookAhead="true" />
+        <DetectChar attribute="Comment" context="SL_StartTag" char="@" lookAhead="true" />
+        <DetectChar attribute="Comment" context="SL_StartHTMLTag" char="&lt;" lookAhead="true" />
+        <DetectChar attribute="Comment" context="Entities" char="&amp;" lookAhead="true" />
       </context>
 
-      <!-- html contexts -->
-      <context dynamic="true" name="ML_htmltag" attribute="Identifier" lineEndContext="#stay">
-        <StringDetect attribute="Comment" context="#pop" String="]%1]" dynamic="true" lookAhead="true" />
-        <Detect2Chars attribute="HTML Tag" context="#pop" char="/" char1="&gt;" />
-        <DetectChar attribute="HTML Tag" context="#pop" char="&gt;" />
-        <RegExpr attribute="Identifier" context="ML_identifiers" String="\s*=\s*" />
-      </context>
-      <context dynamic="true" name="ML_htmlcomment" attribute="HTML Comment" lineEndContext="#stay">
-        <StringDetect attribute="Comment" context="#pop" String="]%1]" dynamic="true" lookAhead="true" />
-        <IncludeRules context="##Alerts" />
-        <StringDetect attribute="HTML Comment" context="#pop" String="--&gt;" />
-      </context>
-      <context dynamic="true" name="ML_identifiers" attribute="Identifier" lineEndContext="#stay">
-        <StringDetect attribute="Comment" context="#pop" String="]%1]" dynamic="true" lookAhead="true" />
-        <RegExpr attribute="Identifier" context="#pop" String="\s*#?[a-zA-Z0-9]*" />
-        <DetectChar attribute="Types" context="ML_types1" char="'" />
-        <DetectChar attribute="Types" context="ML_types2" char="&quot;" />
-      </context>
-      <context dynamic="true" name="ML_types1" attribute="Types" lineEndContext="#stay">
-        <StringDetect attribute="Comment" context="#pop" String="]%1]" dynamic="true" lookAhead="true" />
-        <DetectChar attribute="Types" context="#pop#pop" char="'" />
+      <!-- NOTE: all contexts beginning with SL_ are for singleline comments -->
+      <context attribute="Comment" lineEndContext="#pop" name="SL_StartTag">
+        <keyword attribute="Tags" context="#pop!SL_TagWord" String="TagWord" />
+        <keyword attribute="Tags" context="#pop!SL_TagParam" String="TagParam" />
+        <keyword attribute="Tags" context="#pop!SL_TagWordWord" String="TagWordWord" />
+        <keyword attribute="Tags" context="#pop!SL_TagString" String="TagString" />
+        <keyword attribute="Tags" context="#pop!SL_TagWordString" String="TagWordString" />
+        <WordDetect attribute="Tags" context="#pop!SL_Code" String="\code" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Code" String="@code" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Verbatim" String="\verbatim" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Verbatim" String="@verbatim" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Formula" String="\f[" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Formula" String="@f[" beginRegion="VerbatimBlock" />
+        <StringDetect attribute="Tags" context="#pop!SL_FormulaShort" String="\f$" beginRegion="VerbatimBlock" />
+        <StringDetect attribute="Tags" context="#pop!SL_FormulaShort" String="@f$" beginRegion="VerbatimBlock" />
+        <StringDetect attribute="Tags" context="#pop!SL_FormulaEnv" String="\f{" beginRegion="VerbatimBlock" />
+        <StringDetect attribute="Tags" context="#pop!SL_FormulaEnv" String="@f{" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Msc" String="\msc" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Msc" String="@msc" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Dot" String="\dot" beginRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop!SL_Dot" String="@dot" beginRegion="VerbatimBlock" />
+        <IncludeRules context="Inc_OtherTag" />
       </context>
-      <context dynamic="true" name="ML_types2" attribute="Types" lineEndContext="#stay">
-        <StringDetect attribute="Comment" context="#pop" String="]%1]" dynamic="true" lookAhead="true" />
-        <DetectChar attribute="Types" context="#pop#pop" char="&quot;" />
+      <context attribute="Comment" lineEndContext="#pop" name="SL_StartHTMLTag">
+        <Detect2Chars attribute="Comment" context="#pop" char="&lt;" char1="&lt;" />
+        <RegExpr attribute="HTML Tag" context="#pop!SL_htmltag" String="&lt;\/?[-\w0-9._:@]+" />
+        <StringDetect attribute="HTML Comment" context="#pop!SL_htmlcomment" String="&lt;!--" />
+        <DetectChar attribute="Comment" context="#pop" char="&lt;" />
       </context>
 
-      <!-- NOTE: all contexts beginning with SL_ are for singleline comments -->
       <!-- tag contexts -->
       <context attribute="Comment" lineEndContext="#pop" name="SL_TagWord">
         <DetectSpaces />
-        <keyword attribute="Tags" context="#pop" String="TagWord" lookAhead="true" />
-        <RegExpr attribute="Word" context="#pop" String="\S(?=&wordsep;)" />
-        <RegExpr attribute="Word" context="#stay" String="\S" />
+        <keyword attribute="Tags" context="#pop!SL_TagWord" String="TagWord" />
+        <IncludeRules context="SL_Inc_Word" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="SL_TagParam">
         <DetectSpaces />
-        <StringDetect attribute="Tags" context="SL_Tag2ndWord" String="[in]" />
-        <StringDetect attribute="Tags" context="SL_Tag2ndWord" String="[out]" />
-        <StringDetect attribute="Tags" context="SL_Tag2ndWord" String="[in,out]" />
-        <RegExpr attribute="Word" context="#pop" String="\S(?=&wordsep;)" />
-        <RegExpr attribute="Word" context="#stay" String="\S" />
+        <StringDetect attribute="Tags" context="#pop!SL_TagWord" String="[in]" />
+        <StringDetect attribute="Tags" context="#pop!SL_TagWord" String="[out]" />
+        <StringDetect attribute="Tags" context="#pop!SL_TagWord" String="[in,out]" />
+        <IncludeRules context="SL_Inc_Word" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="SL_TagWordWord">
         <DetectSpaces />
-        <RegExpr attribute="Word" context="SL_Tag2ndWord" String="\S(?=&wordsep;)" />
-        <RegExpr attribute="Word" context="#stay" String="\S" />
-      </context>
-      <!-- TODO for kate 2.x, convert references to "#pop!SL_TagWord" -->
-      <context attribute="Comment" lineEndContext="#pop#pop" name="SL_Tag2ndWord">
-        <DetectSpaces />
-        <RegExpr attribute="Word" context="#pop#pop" String="\S(?=&wordsep;)" />
-        <RegExpr attribute="Word" context="#stay" String="\S" />
+        <RegExpr attribute="Word" context="#pop!SL_TagWord" String="&sl_word;" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="SL_TagString">
         <DetectSpaces />
         <StringDetect attribute="HTML Comment" context="SL_htmlcomment" String="&lt;!--" />
         <Detect2Chars attribute="Comment" context="#stay" char="&lt;" char1="&lt;" />
         <RegExpr attribute="HTML Tag" context="SL_htmltag" String="&lt;\/?[-\w0-9._:@]+" />
-        <RegExpr attribute="Description" context="#stay" String="." />
+        <RegExpr attribute="Description" context="#stay" String="&lt;?[^&lt;\s]+" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="SL_TagWordString">
         <DetectSpaces />
-        <RegExpr attribute="Word" context="#pop" String="\S(?=&wordsep;)" />
-        <RegExpr attribute="Word" context="#stay" String="\S" />
+        <IncludeRules context="SL_Inc_Word" />
       </context>
+      <context name="SL_Inc_Word" attribute="Word" lineEndContext="#pop">
+        <RegExpr attribute="Word" context="#pop" String="&sl_word;" />
+      </context>
 
       <!-- html contexts -->
       <context name="SL_htmltag" attribute="Identifier" lineEndContext="#pop">
         <Detect2Chars attribute="HTML Tag" context="#pop" char="/" char1="&gt;" />
         <DetectChar attribute="HTML Tag" context="#pop" char="&gt;" />
-        <RegExpr attribute="Identifier" context="SL_identifiers" String="\s*=\s*" />
+        <DetectSpaces />
+        <DetectChar attribute="Identifier" context="SL_identifiers" char="=" />
       </context>
       <context name="SL_htmlcomment" attribute="HTML Comment" lineEndContext="#pop">
+        <DetectSpaces />
         <IncludeRules context="##Alerts" />
+        <DetectIdentifier />
         <StringDetect attribute="HTML Comment" context="#pop" String="--&gt;" />
       </context>
       <context name="SL_identifiers" attribute="Identifier" lineEndContext="#pop">
-        <RegExpr attribute="Identifier" context="#pop" String="\s*#?[a-zA-Z0-9]*" />
+        <DetectSpaces />
         <DetectChar attribute="Types" context="SL_types1" char="'" />
         <DetectChar attribute="Types" context="SL_types2" char="&quot;" />
       </context>
@@ -419,59 +332,96 @@
         <DetectChar attribute="Types" context="#pop#pop" char="&quot;" />
       </context>
 
-      <context attribute="Comment" name="SL_DetectEnv" lineEndContext="#pop">
-        <RegExpr attribute="Tags" context="Code" String="[@\\]code\b" beginRegion="Code" />
-        <RegExpr attribute="Tags" context="Verbatim" String="[@\\]verbatim\b" beginRegion="Verbatim" />
-        <RegExpr attribute="Tags" context="Formula" String="[@\\]f\[" beginRegion="Formula" />
-        <RegExpr attribute="Tags" context="Msc" String="[@\\]msc\b" beginRegion="Msc" />
-        <RegExpr attribute="Tags" context="Dot" String="[@\\]dot\b" beginRegion="Dot" />
-        <keyword attribute="Note" context="#stay" String="Note" />
-        <keyword attribute="Warning" context="#stay" String="Warning" />
-        <keyword attribute="Attention" context="#stay" String="Attention" />
-        <keyword attribute="Todo" context="#stay" String="Todo" />
-        <RegExpr attribute="Entities" context="#stay" String="&amp;[A-Za-z]+&#59;" />
+      <context name="SL_FindNextLine" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="#pop#pop#pop">
+        <DetectSpaces />
+        <StringDetect attribute="Comment" context="#pop" String="--!" />
+        <RegExpr attribute="Comment" context="#pop#pop#pop" String="." lookAhead="true" endRegion="VerbatimBlock" />
       </context>
 
-      <context attribute="Comment" name="SL_DetectComment" lineEndContext="#pop">
-        <StringDetect attribute="Comment" context="#pop#pop" String="]%1]" dynamic="true" endRegion="BlockComment" />
-        <DetectChar attribute="Comment" context="#stay" char="*" />
-        <StringDetect attribute="Comment" context="#stay" String="///" />
+      <context name="SL_Code" attribute="Code" lineEndContext="SL_FindNextLine">
+        <WordDetect attribute="Tags" context="#pop" String="\endcode" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@endcode" endRegion="VerbatimBlock" />
       </context>
 
-      <context attribute="Code" lineEndContext="#stay" name="Code">
-        <IncludeRules context="SL_DetectComment" />
-        <RegExpr attribute="Tags" context="#pop" String="[@\\]endcode\b" endRegion="Code" />
+      <context name="SL_Verbatim" attribute="Verbatim" lineEndContext="SL_FindNextLine">
+        <WordDetect attribute="Tags" context="#pop" String="\endverbatim" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@endverbatim" endRegion="VerbatimBlock" />
       </context>
 
-      <context attribute="Verbatim" lineEndContext="#stay" name="Verbatim">
-        <IncludeRules context="SL_DetectComment" />
-        <RegExpr attribute="Tags" context="#pop" String="[@\\]endverbatim\b" endRegion="Verbatim" />
+      <context name="SL_Formula" attribute="Formulas" lineEndContext="SL_FindNextLine">
+        <WordDetect attribute="Tags" context="#pop" String="\f]" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@f]" endRegion="VerbatimBlock" />
+        <!-- TODO: How to force LaTeX math context here?? -->
+        <!-- <IncludeRules context="##LaTeX" /> -->
       </context>
 
-      <context attribute="Formulas" lineEndContext="#stay" name="Formula">
-        <IncludeRules context="SL_DetectComment" />
-        <RegExpr attribute="Tags" context="#pop" String="[@\\]f\]" endRegion="Formula" />
+      <context name="SL_FormulaShort" attribute="Formulas" lineEndContext="SL_FindNextLine">
+        <StringDetect attribute="Tags" context="#pop" String="\f$" endRegion="VerbatimBlock" />
+        <StringDetect attribute="Tags" context="#pop" String="@f$" endRegion="VerbatimBlock" />
         <!-- TODO: How to force LaTeX math context here?? -->
         <!-- <IncludeRules context="##LaTeX" /> -->
       </context>
 
-      <context attribute="Message Sequence Chart" lineEndContext="#stay" name="Msc">
-        <IncludeRules context="SL_DetectComment" />
-        <RegExpr attribute="Tags" context="#pop" String="[@\\]endmsc\b" endRegion="Msc" />
+      <context name="SL_FormulaEnv" attribute="Word" lineEndContext="SL_FindNextLine">
+        <DetectChar attribute="Tags" context="#pop!SL_FormulaEnvStart" char="}" />
       </context>
 
-      <context attribute="Dot Graph" lineEndContext="#stay" name="Dot">
-        <IncludeRules context="SL_DetectComment" />
-        <RegExpr attribute="Tags" context="#pop" String="[@\\]enddot\b" endRegion="Dot" />
+      <context name="SL_FormulaEnvStart" attribute="Formulas" lineEndContext="SL_FindNextLine" fallthroughContext="#pop!SL_FormulaEnvFormula">
+        <DetectSpaces attribute="Comment" />
+        <DetectChar attribute="Tags" context="#pop!SL_FormulaEnvFormula" char="{" />
       </context>
 
+      <context name="SL_FormulaEnvFormula" attribute="Formulas" lineEndContext="SL_FindNextLine">
+        <StringDetect attribute="Tags" context="#pop" String="\f}" endRegion="VerbatimBlock" />
+        <StringDetect attribute="Tags" context="#pop" String="@f}" endRegion="VerbatimBlock" />
+        <!-- TODO: How to force LaTeX math context here?? -->
+        <!-- <IncludeRules context="##LaTeX" /> -->
+      </context>
+
+      <context name="SL_Msc" attribute="Message Sequence Chart" lineEndContext="SL_FindNextLine">
+        <WordDetect attribute="Tags" context="#pop" String="\endmsc" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@endmsc" endRegion="VerbatimBlock" />
+      </context>
+
+      <context name="SL_Dot" attribute="Dot Graph" lineEndContext="SL_FindNextLine">
+        <WordDetect attribute="Tags" context="#pop" String="\enddot" endRegion="VerbatimBlock" />
+        <WordDetect attribute="Tags" context="#pop" String="@enddot" endRegion="VerbatimBlock" />
+      </context>
+
+      <context name="Entities" attribute="Word" lineEndContext="#stay">
+        <RegExpr attribute="Entities" context="#pop" String="&amp;[A-Za-z]+&#59;" />
+        <DetectChar attribute="Comment" context="#pop" char="&amp;" />
+      </context>
+
+      <context name="Inc_OtherTag" attribute="Comment" lineEndContext="#pop">
+        <keyword attribute="Note" context="#pop" String="Note" />
+        <keyword attribute="Warning" context="#pop" String="Warning" />
+        <keyword attribute="Attention" context="#pop" String="Attention" />
+        <keyword attribute="Todo" context="#pop" String="Todo" />
+        <keyword attribute="Tags" context="#pop" String="TagOnly" />
+        <Detect2Chars attribute="Region" context="#pop" char="@" char1="{" beginRegion="Group" />
+        <Detect2Chars attribute="Region" context="#pop" char="@" char1="}" endRegion="Group" />
+        <Detect2Chars attribute="Tags" context="#pop!LanguageId" char="\" char1="~" />
+        <Detect2Chars attribute="Tags" context="#pop!LanguageId" char="@" char1="~" />
+        <keyword attribute="Error" context="#pop" String="TagEnd" />
+        <RegExpr attribute="Error" context="#pop" String="[@\\]f[]}]" />
+        <RegExpr attribute="Tags" context="#pop" String="[@\\](?:[#$%&amp;&lt;&gt;&quot;@\\.]|::|---?)(?=&wordsep;)" />
+        <RegExpr attribute="Custom Tags" context="#pop" String="[@\\](?:[^@\\ \t\*]|\*(?!/))+" />
+        <DetectChar attribute="Comment" context="#pop" char="\" />
+        <DetectChar attribute="Comment" context="#pop" char="@" />
+      </context>
+
+      <context name="LanguageId" attribute="Word" lineEndContext="#pop" fallthroughContext="#pop">
+        <DetectIdentifier />
+      </context>
+
   </contexts>
     <itemDatas>
       <itemData name="Normal Text"  defStyleNum="dsNormal" />
       <itemData name="Tags"         defStyleNum="dsAnnotation" bold="1" />
       <itemData name="Custom Tags"  defStyleNum="dsAnnotation" />
       <itemData name="Word"         defStyleNum="dsCommentVar" bold="1" italic="0" />
-      <itemData name="HTML Tag"     defStyleNum="dsKeyword" color="#000000" bold="1" italic="0" />
+      <itemData name="HTML Tag"     defStyleNum="dsKeyword" bold="1" italic="0" />
       <itemData name="Entities"     defStyleNum="dsOthers" color="#4086C0" bold="1" italic="1" />
       <itemData name="Description"  defStyleNum="dsDocumentation" />
       <itemData name="Comment"      defStyleNum="dsComment" />
@@ -488,10 +438,11 @@
       <itemData name="Warning"      defStyleNum="dsWarning" bold="1" italic="0" />
       <itemData name="Attention"    defStyleNum="dsAnnotation" bold="1" italic="0" />
       <itemData name="Todo"         defStyleNum="dsAnnotation" bold="1" italic="0" />
+      <itemData name="Error"        defStyleNum="dsError" />
     </itemDatas>
   </highlighting>
   <general>
-    <keywords casesensitive="1" weakDeliminator="\$~" />
+    <keywords casesensitive="1" weakDeliminator="\$" />
   </general>
 </language>
 <!-- kate: indent-width 2; -->
diff --git a/syntax/dtd.xml b/syntax/dtd.xml
--- a/syntax/dtd.xml
+++ b/syntax/dtd.xml
@@ -3,7 +3,7 @@
   <!ENTITY nmtoken "[\-\w\d\.:_]+">
   <!ENTITY entref  "(#[0-9]+|#[xX][0-9A-Fa-f]+|&nmtoken;);">
 ]>
-<language name="DTD" version="2" kateversion="3.4" section="Markup" extensions="*.dtd" mimetype="application/xml-dtd" author="Andriy Lesyuk (s-andy@in.if.ua)" license="LGPL">
+<language name="DTD" version="3" kateversion="3.4" section="Markup" extensions="*.dtd" mimetype="application/xml-dtd" author="Andriy Lesyuk (s-andy@in.if.ua)" license="LGPL">
   <highlighting>
 
     <list name="Category">
@@ -46,6 +46,7 @@
         <DetectSpaces />
         <StringDetect attribute="Comment" context="#pop" String="--&gt;" endRegion="comment" />
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
         <DetectIdentifier />
       </context>
 
@@ -101,10 +102,9 @@
 
   <general>
     <comments>
-      <comment name="multiLine" start="&lt;!--" end="--&gt;" />
+      <comment name="multiLine" start="&lt;!--" end="--&gt;" region="comment" />
     </comments>
   </general>
 
 </language>
-<!-- kate: indent-width 2; indent-mode normal; tab-indents on; -->
-
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/eiffel.xml b/syntax/eiffel.xml
--- a/syntax/eiffel.xml
+++ b/syntax/eiffel.xml
@@ -10,7 +10,7 @@
 
 Author of version 1.02: Sebastian Vuorinen
 -->
-<language name="Eiffel" version="2" kateversion="5.0" section="Sources" extensions="*.e" mimetype="text/x-eiffel-src" author="Sebastian Vuorinen" license="">
+<language name="Eiffel" version="3" kateversion="5.0" section="Sources" extensions="*.e" mimetype="text/x-eiffel-src" author="Sebastian Vuorinen" license="">
 	<highlighting>
 		<list name="keywords">
 			<item>agent</item>
@@ -97,7 +97,11 @@
 				<DetectChar attribute = "String" char = "&quot;" context="#pop" />
 			</context>
 
-			<context name = "Documentation" attribute="Comment" lineEndContext="#pop" />
+			<context name = "Documentation" attribute="Comment" lineEndContext="#pop">
+				<DetectSpaces />
+				<IncludeRules context="##Alerts" />
+				<IncludeRules context="##Modelines" />
+			</context>
 		</contexts>
 
 		<itemDatas>
@@ -118,8 +122,9 @@
 
 	<general>
 		<comments>
-			<comment name="singleLine" start="--" />
+			<comment name="singleLine" start="--" position="afterwhitespace" />
 		</comments>
 		<keywords casesensitive="1" />
 	</general>
 </language>
+<!-- kate: replace-tabs off; -->
diff --git a/syntax/elixir.xml b/syntax/elixir.xml
--- a/syntax/elixir.xml
+++ b/syntax/elixir.xml
@@ -30,7 +30,7 @@
           name="Elixir"
           section="Sources"
           style="elixir"
-          version="5">
+          version="6">
   <highlighting>
     <list name="control-flow">
       <item>catch</item>
@@ -180,6 +180,9 @@
         <RegExpr String="\w(?!\w)" attribute="Substitution" context="#pop"/>
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="General Comment">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
       <context attribute="MarkdownCode" lineEndContext="#stay" name="Markdown Code">
         <RegExpr String="^\s*\`\`\`\s*$" attribute="MarkdownCode" context="#pop"/>
@@ -223,3 +226,4 @@
     <keywords casesensitive="1" weakDeliminator="!?"/>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/elm.xml b/syntax/elm.xml
--- a/syntax/elm.xml
+++ b/syntax/elm.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Elm" version="2" kateversion="5.0" section="Sources" extensions="*.elm" author="Bonghyun Kim (bonghyun.d.kim@gmail.com)" license="MIT" style="elm">
+<language name="Elm" version="4" kateversion="5.0" section="Sources" extensions="*.elm" author="Bonghyun Kim (bonghyun.d.kim@gmail.com)" license="MIT" style="elm">
   <highlighting>
     <list name="declarations">
       <item>type</item>
@@ -38,9 +38,9 @@
     </list>
     <contexts>
       <context attribute="Normal" lineEndContext="#stay" name="code">
-        <Detect2Chars attribute="Comment" context="comments" char="{" char1="-" />
+        <Detect2Chars attribute="Comment" context="comments" char="{" char1="-" beginRegion="BlockComment" />
         <Detect2Chars attribute="Comment" context="comment" char="-" char1="-" />
-        <StringDetect attribute="Comment" context="documentation" String="{-|" />
+        <StringDetect attribute="Comment" context="documentation" String="{-|" beginRegion="Documentation" />
 
         <keyword attribute="Keyword"          context="#stay" String="declarations" />
         <keyword attribute="Keyword"          context="#stay" String="letExpressions" />
@@ -56,7 +56,7 @@
         <RegExpr attribute="Name"         context="#stay" String="(\b[a-z]\w*|\b_\b)" />
         <RegExpr attribute="Operator"         context="#stay" String="(-&gt;|::|\/\/|\.\.|&amp;&amp;|\|\||\+\+|\|&gt;|&lt;\||&gt;&gt;|&lt;&lt;|==|\/=|&lt;=|&gt;=)" />
         <RegExpr attribute="Operator"         context="#stay" String="[+-\/*%=&gt;&lt;^\|!]" />
-        <RegExpr attribute="Operator"         context="#stay" String="[@\#$&amp;~?]" />
+        <AnyChar attribute="Operator"         context="#stay" String="@#$&amp;~?" />
 
         <RegExpr attribute="Type"             context="#stay" String="\b[A-Z][\w]*" />
 
@@ -69,10 +69,16 @@
         <RegExpr attribute="String"     context="multilineString" String="&quot;&quot;&quot;"/>
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="comment">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
       <context attribute="Comment" lineEndContext="#stay" name="comments">
-        <Detect2Chars attribute="Comment" context="comments" char="{" char1="-" />
-        <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" />
+        <Detect2Chars attribute="Comment" context="comments" char="{" char1="-" beginRegion="BlockComment" />
+        <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" endRegion="BlockComment" />
+        <DetectSpaces />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
       <context attribute="String" lineEndContext="#stay" name="string">
         <RegExpr attribute="String" context="#stay" String="\\." />
@@ -108,7 +114,7 @@
       </context>
       <context attribute="Comment" lineEndContext="#stay" name="documentation">
         <WordDetect attribute="Comment" context="#stay" String="@docs" />
-        <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" />
+        <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" endRegion="Documentation" />
       </context>
     </contexts>
 
@@ -135,9 +141,10 @@
   <general>
     <folding indentationsensitive="1"/>
     <comments>
-      <comment name="singleLine" start="--" />
-      <comment name="multiLine" start="{-" end="-}" />
+      <comment name="singleLine" start="--" position="afterwhitespace" />
+      <comment name="multiLine" start="{-" end="-}" region="BlockComment" />
     </comments>
     <keywords casesensitive="1" />
 </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/erlang.xml b/syntax/erlang.xml
--- a/syntax/erlang.xml
+++ b/syntax/erlang.xml
@@ -36,7 +36,7 @@
                                    - fixed highlighting problem when '@' at end of atom/variable
 -->
 
-<language name="Erlang" version="3" kateversion="5.0" section="Scripts" extensions="*.erl" mimetype="" author="Bill Ross (bill@emailme.net.au)" license="LGPLv2">
+<language name="Erlang" version="4" kateversion="5.0" section="Scripts" extensions="*.erl" mimetype="" author="Bill Ross (bill@emailme.net.au)" license="LGPLv2">
   <highlighting>
     <list name="keywords">
       <!-- ====== s3.8 p 24 of erlang spec ===== -->
@@ -213,13 +213,14 @@
 
       <!-- finish off the atom in quoted string (allow for escaped single quotes -->
       <context name="stringquote" attribute="String" lineEndContext="#pop">
-        <RegExpr attribute="String" context="#pop" String="(?:\\&quot;|[^&quot;])*&quot;" />
+        <RegExpr attribute="String" context="#pop" String="(?:(?:\\&quot;)?[^&quot;]*)*&quot;" />
       </context>
       
       <!-- finish off the comment (allows for alerts) -->
       <context name="comment" attribute="Comment" lineEndContext="#pop">
         <DetectSpaces />
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
         <DetectIdentifier />
       </context>
 
diff --git a/syntax/fasm.xml b/syntax/fasm.xml
--- a/syntax/fasm.xml
+++ b/syntax/fasm.xml
@@ -1,897 +1,1750 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE language SYSTEM "language.dtd">
-<!--
-"Intel x86 (FASM)" is based on ver. 1.3 of "Intel x86 (NASM)" by Nicola Gigante and Bogdan Drozdowski
-
-Known issues:
-* Does not include all 64-bit registers and instructions
-* "near" and "far" as in "jmp near MyLabel" is unhandeled.
-* Confuses and,or,not,xor,shl instructions,with operators with same name, e.g. "2 shl 4"
-* May confuse ah,bh,ch,dh with hexadecimal numbers.
-
-Notes:
-* "used" and "defined" are treated opperators and are not highlighted.
--->
-
-<language name="Intel x86 (FASM)" section="Assembler" version="2" kateversion="5.0" extensions="*.asm;*.inc;*.fasm" mimetype="" author="rCX (rCX12@yahoo.com)" license="GPL">
-  <highlighting>
-    <list name="registers">
-      <!-- General purpose registers -->
-      <item>rax</item>
-      <item>eax</item>
-      <item>ax</item>
-      <item>ah</item>
-      <item>al</item>
-      <item>rbx</item>
-      <item>ebx</item>
-      <item>bx</item>
-      <item>bh</item>
-      <item>bl</item>
-      <item>rcx</item>
-      <item>ecx</item>
-      <item>cx</item>
-      <item>ch</item>
-      <item>cl</item>
-      <item>rdx</item>
-      <item>edx</item>
-      <item>dx</item>
-      <item>dh</item>
-      <item>dl</item>
-      <item>rbp</item>
-      <item>ebp</item>
-      <item>bp</item>
-      <item>rsi</item>
-      <item>esi</item>
-      <item>si</item>
-      <item>rdi</item>
-      <item>edi</item>
-      <item>di</item>
-      <item>rsp</item>
-      <item>esp</item>
-      <item>sp</item>
-      <item>r8</item>
-      <item>r9</item>
-      <item>r10</item>
-      <item>r11</item>
-      <item>r12</item>
-      <item>r13</item>
-      <item>r14</item>
-      <item>r15</item>
-      <!-- Segmentation registers -->
-      <item>cs</item>
-      <item>ds</item>
-      <item>es</item>
-      <item>fs</item>
-      <item>gs</item>
-      <item>ss</item>
-      <!-- Control registers -->
-      <item>cr0</item>
-      <!--<item>cr1</item>-->
-      <item>cr2</item>
-      <item>cr3</item>
-      <item>cr4</item>
-      <!-- Debug registers -->
-      <item>dr0</item>
-      <item>dr1</item>
-      <item>dr2</item>
-      <item>dr3</item>
-      <item>dr6</item>
-      <item>dr7</item>
-      <!-- x87 FPU Registers -->
-      <item>st</item>
-      <!-- MMX registers -->
-      <item>mm0</item>
-      <item>mm1</item>
-      <item>mm2</item>
-      <item>mm3</item>
-      <item>mm4</item>
-      <item>mm5</item>
-      <item>mm6</item>
-      <item>mm7</item>
-      <!-- XMM registers -->
-      <item>xmm0</item>
-      <item>xmm1</item>
-      <item>xmm2</item>
-      <item>xmm3</item>
-      <item>xmm4</item>
-      <item>xmm5</item>
-      <item>xmm6</item>
-      <item>xmm7</item>
-    </list>
-    <list name="instructions">
-      <item>aaa</item>
-      <item>aad</item>
-      <item>aam</item>
-      <item>aas</item>
-      <item>adc</item>
-      <item>add</item>
-      <item>addpd</item>
-      <item>addps</item>
-      <item>addsd</item>
-      <item>addss</item>
-      <item>addsubpd</item>
-      <item>addsubps</item>
-      <item>and</item>
-      <item>andnpd</item>
-      <item>andnps</item>
-      <item>andpd</item>
-      <item>andps</item>
-      <item>arpl</item>
-      <item>bound</item>
-      <item>bsf</item>
-      <item>bsr</item>
-      <item>bswap</item>
-      <item>bt</item>
-      <item>btc</item>
-      <item>btr</item>
-      <item>bts</item>
-      <item>call</item>
-      <item>cbw</item>
-      <item>cwde</item>
-      <item>cwd</item>
-      <item>cdq</item>
-      <item>cdqe</item>
-      <item>cqo</item>
-      <item>clc</item>
-      <item>cld</item>
-      <item>clgi</item>
-      <item>cli</item>
-      <item>clts</item>
-      <item>clflush</item>
-      <item>cmc</item>
-      <item>cmova</item>
-      <item>cmovae</item>
-      <item>cmovb</item>
-      <item>cmovbe</item>
-      <item>cmovc</item>
-      <item>cmove</item>
-      <item>cmovg</item>
-      <item>cmovge</item>
-      <item>cmovl</item>
-      <item>cmovle</item>
-      <item>cmovna</item>
-      <item>cmovnae</item>
-      <item>cmovnb</item>
-      <item>cmovnbe</item>
-      <item>cmovnc</item>
-      <item>cmovne</item>
-      <item>cmovng</item>
-      <item>cmovnge</item>
-      <item>cmovnl</item>
-      <item>cmovnle</item>
-      <item>cmovno</item>
-      <item>cmovnp</item>
-      <item>cmovns</item>
-      <item>cmovnz</item>
-      <item>cmovo</item>
-      <item>cmovp</item>
-      <item>cmovpe</item>
-      <item>cmovpo</item>
-      <item>cmovs</item>
-      <item>cmovz</item>
-      <item>cmp</item>
-      <item>cmpeqpd</item>
-      <item>cmpeqps</item>
-      <item>cmpeqsd</item>
-      <item>cmpeqss</item>
-      <item>cmplepd</item>
-      <item>cmpleps</item>
-      <item>cmplesd</item>
-      <item>cmpless</item>
-      <item>cmpltpd</item>
-      <item>cmpltps</item>
-      <item>cmpltsd</item>
-      <item>cmpltss</item>
-      <item>cmpneqpd</item>
-      <item>cmpneqps</item>
-      <item>cmpneqsd</item>
-      <item>cmpneqss</item>
-      <item>cmpnlepd</item>
-      <item>cmpnleps</item>
-      <item>cmpnlesd</item>
-      <item>cmpnless</item>
-      <item>cmpnltpd</item>
-      <item>cmpnltps</item>
-      <item>cmpnltsd</item>
-      <item>cmpnltss</item>
-      <item>cmpordpd</item>
-      <item>cmpordps</item>
-      <item>cmpordsd</item>
-      <item>cmpordss</item>
-      <item>cmppd</item>
-      <item>cmpps</item>
-      <item>cmps</item>
-      <item>cmpsb</item>
-      <item>cmpsd</item>
-      <item>cmpss</item>
-      <item>cmpsw</item>
-      <item>cmpunordpd</item>
-      <item>cmpunordps</item>
-      <item>cmpunordsd</item>
-      <item>cmpunordss</item>
-      <item>cmpxchg</item>
-      <item>cmpxchg486</item>
-      <item>cmpxchg8b</item>
-      <item>cmpxchg16b</item>
-      <item>comisd</item>
-      <item>comiss</item>
-      <item>cpuid</item>
-      <item>cvtdq2pd</item>
-      <item>cvtdq2ps</item>
-      <item>cvtpd2dq</item>
-      <item>cvtpd2pi</item>
-      <item>cvtpd2ps</item>
-      <item>cvtpi2pd</item>
-      <item>cvtpi2ps</item>
-      <item>cvtps2dq</item>
-      <item>cvtps2pd</item>
-      <item>cvtps2pi</item>
-      <item>cvtsd2si</item>
-      <item>cvtsd2ss</item>
-      <item>cvtsi2sd</item>
-      <item>cvtsi2ss</item>
-      <item>cvtss2sd</item>
-      <item>cvtss2si</item>
-      <item>cvttpd2dq</item>
-      <item>cvttpd2pi</item>
-      <item>cvttps2dq</item>
-      <item>cvttps2pi</item>
-      <item>cvttsd2si</item>
-      <item>cvttss2si</item>
-      <item>daa</item>
-      <item>das</item>
-      <item>dec</item>
-      <item>div</item>
-      <item>divpd</item>
-      <item>divps</item>
-      <item>divsd</item>
-      <item>divss</item>
-      <item>emms</item>
-      <item>enter</item>
-      <item>f2xm1</item>
-      <item>fabs</item>
-      <item>fadd</item>
-      <item>faddp</item>
-      <item>fbld</item>
-      <item>fbstp</item>
-      <item>fchs</item>
-      <item>fclex</item>
-      <item>fnclex</item>
-      <item>fcmovb</item>
-      <item>fcmovbe</item>
-      <item>fcmove</item>
-      <item>fcmovnb</item>
-      <item>fcmovnbe</item>
-      <item>fcmovne</item>
-      <item>fcmovnu</item>
-      <item>fcmovu</item>
-      <item>fcom</item>
-      <item>fcomp</item>
-      <item>fcompp</item>
-      <item>fcomi</item>
-      <item>fcomip</item>
-      <item>fcos</item>
-      <item>fdecstp</item>
-      <item>fdisi</item>
-      <item>feni</item>
-      <item>fdiv</item>
-      <item>fdivr</item>
-      <item>fdivp</item>
-      <item>fdivrp</item>
-      <item>femms</item>
-      <item>ffree</item>
-      <item>ffreep</item>
-      <item>fiadd</item>
-      <item>ficom</item>
-      <item>ficomp</item>
-      <item>fidiv</item>
-      <item>fidivr</item>
-      <item>fild</item>
-      <item>fimul</item>
-      <item>fincstp</item>
-      <item>finit</item>
-      <item>fist</item>
-      <item>fistp</item>
-      <item>fisttp</item>
-      <item>fisub</item>
-      <item>fisubr</item>
-      <item>fld</item>
-      <item>fld1</item>
-      <item>fldl2e</item>
-      <item>fldl2t</item>
-      <item>fldlg2</item>
-      <item>fldln2</item>
-      <item>fldcw</item>
-      <item>fldenv</item>
-      <item>fldpi</item>
-      <item>fldz</item>
-      <item>fmul</item>
-      <item>fmulp</item>
-      <item>fndisi</item>
-      <item>fneni</item>
-      <item>fninit</item>
-      <item>fnop</item>
-      <item>fnsave</item>
-      <item>fnstcw</item>
-      <item>fnstenv</item>
-      <item>fnstsw</item>
-      <item>fnwait</item>
-      <item>fpatan</item>
-      <item>fptan</item>
-      <item>fprem</item>
-      <item>fprem1</item>
-      <item>frndint</item>
-      <item>frstor</item>
-      <item>fsave</item>
-      <item>fscale</item>
-      <item>fsetpm</item>
-      <item>fsin</item>
-      <item>fsincos</item>
-      <item>fsqrt</item>
-      <item>fst</item>
-      <item>fstp</item>
-      <item>fstcw</item>
-      <item>fstenv</item>
-      <item>fstsw</item>
-      <item>fsub</item>
-      <item>fsubr</item>
-      <item>fsubp</item>
-      <item>fsubrp</item>
-      <item>ftst</item>
-      <item>fucom</item>
-      <item>fucomp</item>
-      <item>fucompp</item>
-      <item>fucomi</item>
-      <item>fucomip</item>
-      <item>fwait</item>
-      <item>fxam</item>
-      <item>fxch</item>
-      <item>fxrstor</item>
-      <item>fxsave</item>
-      <item>fxtract</item>
-      <item>fyl2x</item>
-      <item>fyl2xp1</item>
-      <item>haddpd</item>
-      <item>haddps</item>
-      <item>hlt</item>
-      <item>hsubpd</item>
-      <item>hsubps</item>
-      <item>ibts</item>
-      <item>idiv</item>
-      <item>imul</item>
-      <item>in</item>
-      <item>inc</item>
-      <item>ins</item>
-      <item>insb</item>
-      <item>insd</item>
-      <item>insw</item>
-      <item>int</item>
-      <item>int1</item>
-      <item>int3</item>
-      <item>into</item>
-      <item>invd</item>
-      <item>invlpg</item>
-      <item>invlpga</item>
-      <item>iret</item>
-      <item>iretd</item>
-      <item>iretq</item>
-      <item>iretw</item>
-      <item>ja</item>
-      <item>jae</item>
-      <item>jb</item>
-      <item>jbe</item>
-      <item>jc</item>
-      <item>je</item>
-      <item>jg</item>
-      <item>jge</item>
-      <item>jl</item>
-      <item>jle</item>
-      <item>jna</item>
-      <item>jnae</item>
-      <item>jnb</item>
-      <item>jnbe</item>
-      <item>jnc</item>
-      <item>jne</item>
-      <item>jng</item>
-      <item>jnge</item>
-      <item>jnl</item>
-      <item>jnle</item>
-      <item>jno</item>
-      <item>jnp</item>
-      <item>jns</item>
-      <item>jnz</item>
-      <item>jo</item>
-      <item>jp</item>
-      <item>jpe</item>
-      <item>jpo</item>
-      <item>js</item>
-      <item>jz</item>
-      <item>jcxz</item>
-      <item>jecxz</item>
-      <item>jrcxz</item>
-      <item>jmp</item>
-      <item>lahf</item>
-      <item>lar</item>
-      <item>lddqu</item>
-      <item>ldmxcsr</item>
-      <item>lds</item>
-      <item>les</item>
-      <item>lea</item>
-      <item>leave</item>
-      <item>lfence</item>
-      <item>lfs</item>
-      <item>lgdt</item>
-      <item>lgs</item>
-      <item>lidt</item>
-      <item>lldt</item>
-      <item>lmsw</item>
-      <item>loadall</item>
-      <item>loadall286</item>
-      <item>lods</item>
-      <item>lodsb</item>
-      <item>lodsd</item>
-      <item>lodsq</item>
-      <item>lodsw</item>
-      <item>loop</item>
-      <item>loope</item>
-      <item>loopne</item>
-      <item>loopnz</item>
-      <item>loopz</item>
-      <item>lsl</item>
-      <item>lss</item>
-      <item>ltr</item>
-      <item>maskmovdqu</item>
-      <item>maskmovq</item>
-      <item>maxpd</item>
-      <item>maxps</item>
-      <item>maxsd</item>
-      <item>maxss</item>
-      <item>mfence</item>
-      <item>minpd</item>
-      <item>minps</item>
-      <item>minsd</item>
-      <item>minss</item>
-      <item>monitor</item>
-      <item>mov</item>
-      <item>movapd</item>
-      <item>movaps</item>
-      <item>movd</item>
-      <item>movddup</item>
-      <item>movdq2q</item>
-      <item>movdqa</item>
-      <item>movdqu</item>
-      <item>movhlps</item>
-      <item>movhpd</item>
-      <item>movhps</item>
-      <item>movlhps</item>
-      <item>movlpd</item>
-      <item>movlps</item>
-      <item>movmskpd</item>
-      <item>movmskps</item>
-      <item>movntdq</item>
-      <item>movnti</item>
-      <item>movntpd</item>
-      <item>movntps</item>
-      <item>movntq</item>
-      <item>movq</item>
-      <item>movq2dq</item>
-      <item>movs</item>
-      <item>movsb</item>
-      <item>movsd</item>
-      <item>movshdup</item>
-      <item>movsldup</item>
-      <item>movsq</item>
-      <item>movss</item>
-      <item>movsx</item>
-      <item>movsxd</item>
-      <item>movsw</item>
-      <item>movupd</item>
-      <item>movups</item>
-      <item>movzx</item>
-      <item>mul</item>
-      <item>mulpd</item>
-      <item>mulps</item>
-      <item>mulsd</item>
-      <item>mulss</item>
-      <item>mwait</item>
-      <item>neg</item>
-      <item>nop</item>
-      <item>not</item>
-      <item>or</item>
-      <item>orpd</item>
-      <item>orps</item>
-      <item>out</item>
-      <item>outs</item>
-      <item>outsb</item>
-      <item>outsw</item>
-      <item>outsd</item>
-      <item>packssdw</item>
-      <item>packsswb</item>
-      <item>packuswb</item>
-      <item>paddb</item>
-      <item>paddd</item>
-      <item>paddq</item>
-      <item>paddsb</item>
-      <item>paddsw</item>
-      <item>paddusb</item>
-      <item>paddusw</item>
-      <item>paddw</item>
-      <item>pand</item>
-      <item>pandn</item>
-      <item>pause</item>
-      <item>pavgb</item>
-      <item>pavgusb</item>
-      <item>pavgw</item>
-      <item>pcmpeqb</item>
-      <item>pcmpeqw</item>
-      <item>pcmpeqd</item>
-      <item>pcmpgtb</item>
-      <item>pcmpgtw</item>
-      <item>pcmpgtd</item>
-      <item>pdistib</item>
-      <item>pextrw</item>
-      <item>pf2id</item>
-      <item>pf2iw</item>
-      <item>pfacc</item>
-      <item>pfadd</item>
-      <item>pfcmpeq</item>
-      <item>pfcmpge</item>
-      <item>pfcmpgt</item>
-      <item>pfmax</item>
-      <item>pfmin</item>
-      <item>pfmul</item>
-      <item>pfnacc</item>
-      <item>pfpnacc</item>
-      <item>pfrcp</item>
-      <item>pfrcpit1</item>
-      <item>pfrcpit2</item>
-      <item>pfrsqit1</item>
-      <item>pfrsqrt</item>
-      <item>pfsub</item>
-      <item>pfsubr</item>
-      <item>pi2fd</item>
-      <item>pi2fw</item>
-      <item>pinsrw</item>
-      <item>pmachriw</item>
-      <item>pmaddwd</item>
-      <item>pmagw</item>
-      <item>pmaxsw</item>
-      <item>pmaxub</item>
-      <item>pminsw</item>
-      <item>pminub</item>
-      <item>pmovmskb</item>
-      <item>pmulhrw</item>
-      <item>pmulhuw</item>
-      <item>pmulhw</item>
-      <item>pmullw</item>
-      <item>pmuludq</item>
-      <item>pmvgezb</item>
-      <item>pmvlzb</item>
-      <item>pmvnzb</item>
-      <item>pmvzb</item>
-      <item>pop</item>
-      <item>popa</item>
-      <item>popaw</item>
-      <item>popad</item>
-      <item>popf</item>
-      <item>popfw</item>
-      <item>popfd</item>
-      <item>popfq</item>
-      <item>por</item>
-      <item>prefetch</item>
-      <item>prefetchnta</item>
-      <item>prefetcht0</item>
-      <item>prefetcht1</item>
-      <item>prefetcht2</item>
-      <item>prefetchw</item>
-      <item>psadbw</item>
-      <item>pshufd</item>
-      <item>pshufhw</item>
-      <item>pshuflw</item>
-      <item>pshufw</item>
-      <item>pslld</item>
-      <item>pslldq</item>
-      <item>psllq</item>
-      <item>psllw</item>
-      <item>psrad</item>
-      <item>psraw</item>
-      <item>psrld</item>
-      <item>psrldq</item>
-      <item>psrlq</item>
-      <item>psrlw</item>
-      <item>psubb</item>
-      <item>psubd</item>
-      <item>psubq</item>
-      <item>psubsb</item>
-      <item>psubsiw</item>
-      <item>psubsw</item>
-      <item>psubusb</item>
-      <item>psubusw</item>
-      <item>psubw</item>
-      <item>pswapd</item>
-      <item>punpckhbw</item>
-      <item>punpckhdq</item>
-      <item>punpckhqdq</item>
-      <item>punpckhwd</item>
-      <item>punpcklbw</item>
-      <item>punpckldq</item>
-      <item>punpcklqdq</item>
-      <item>punpcklwd</item>
-      <item>push</item>
-      <item>pusha</item>
-      <item>pushad</item>
-      <item>pushaw</item>
-      <item>pushf</item>
-      <item>pushfd</item>
-      <item>pushfq</item>
-      <item>pushfw</item>
-      <item>pxor</item>
-      <item>rcl</item>
-      <item>rcr</item>
-      <item>rcpps</item>
-      <item>rcpss</item>
-      <item>rdmsr</item>
-      <item>rdpmc</item>
-      <item>rdshr</item>
-      <item>rdtsc</item>
-      <item>rdtscp</item>
-      <item>ret</item>
-      <item>retf</item>
-      <item>retn</item>
-      <item>rol</item>
-      <item>ror</item>
-      <item>rsdc</item>
-      <item>rsldt</item>
-      <item>rsm</item>
-      <item>rsqrtps</item>
-      <item>rsqrtss</item>
-      <item>rsts</item>
-      <item>sahf</item>
-      <item>sal</item>
-      <item>sar</item>
-      <item>salc</item>
-      <item>sbb</item>
-      <item>scas</item>
-      <item>scasb</item>
-      <item>scasd</item>
-      <item>scasq</item>
-      <item>scasw</item>
-      <item>seta</item>
-      <item>setae</item>
-      <item>setb</item>
-      <item>setbe</item>
-      <item>setc</item>
-      <item>sete</item>
-      <item>setg</item>
-      <item>setge</item>
-      <item>setl</item>
-      <item>setle</item>
-      <item>setna</item>
-      <item>setnae</item>
-      <item>setnb</item>
-      <item>setnbe</item>
-      <item>setnc</item>
-      <item>setne</item>
-      <item>setng</item>
-      <item>setnge</item>
-      <item>setnl</item>
-      <item>setnle</item>
-      <item>setno</item>
-      <item>setnp</item>
-      <item>setns</item>
-      <item>setnz</item>
-      <item>seto</item>
-      <item>setp</item>
-      <item>setpe</item>
-      <item>setpo</item>
-      <item>sets</item>
-      <item>setz</item>
-      <item>sfence</item>
-      <item>sgdt</item>
-      <item>shl</item>
-      <item>shld</item>
-      <item>shr</item>
-      <item>shrd</item>
-      <item>shufpd</item>
-      <item>shufps</item>
-      <item>sidt</item>
-      <item>skinit</item>
-      <item>sldt</item>
-      <item>smi</item>
-      <item>smint</item>
-      <item>smintold</item>
-      <item>smsw</item>
-      <item>sqrtpd</item>
-      <item>sqrtps</item>
-      <item>sqrtsd</item>
-      <item>sqrtss</item>
-      <item>stc</item>
-      <item>std</item>
-      <item>stgi</item>
-      <item>sti</item>
-      <item>stmxcsr</item>
-      <item>stos</item>
-      <item>stosb</item>
-      <item>stosd</item>
-      <item>stosq</item>
-      <item>stosw</item>
-      <item>str</item>
-      <item>sub</item>
-      <item>subpd</item>
-      <item>subps</item>
-      <item>subsd</item>
-      <item>subss</item>
-      <item>svdc</item>
-      <item>svldt</item>
-      <item>svts</item>
-      <item>swapgs</item>
-      <item>syscall</item>
-      <item>sysenter</item>
-      <item>sysexit</item>
-      <item>sysret</item>
-      <item>test</item>
-      <item>ucomisd</item>
-      <item>ucomiss</item>
-      <item>ud0</item>
-      <item>ud1</item>
-      <item>ud2</item>
-      <item>umov</item>
-      <item>unpckhpd</item>
-      <item>unpckhps</item>
-      <item>unpcklpd</item>
-      <item>unpcklps</item>
-      <item>verr</item>
-      <item>verw</item>
-      <item>vmload</item>
-      <item>vmmcall</item>
-      <item>vmrun</item>
-      <item>vmsave</item>
-      <item>wait</item>
-      <item>wbinvd</item>
-      <item>wrmsr</item>
-      <item>wrshr</item>
-      <item>xadd</item>
-      <item>xbts</item>
-      <item>xchg</item>
-      <item>xlat</item>
-      <item>xlatb</item>
-      <item>xor</item>
-      <item>xorpd</item>
-      <item>xorps</item>
-    </list>
-
-    <list name="Data">
-      <!-- Initialized data (1.2.2)-->
-      <item>db</item>
-      <item>dw</item>
-      <item>du</item>
-      <item>dd</item>
-      <item>dp</item>
-      <item>df</item>
-      <item>dq</item>
-      <item>dt</item>
-      <!-- Uninitialized data (1.2.2)-->
-      <item>rb</item>
-      <item>rw</item>
-      <item>rd</item>
-      <item>rp</item>
-      <item>rf</item>
-      <item>rq</item>
-      <item>rt</item>
-      <!-- binary file include (1.2.2)-->
-      <item>file</item>
-      <!-- operand size from (1.2.1)-->
-      <item>byte</item>
-      <item>word</item>
-      <item>dword</item>
-      <item>pword</item>
-      <item>qword</item>
-      <item>tbyte</item>
-      <item>tword</item>
-      <item>dqword</item>
-      <item>ptr</item>
-    </list>
-
-    <list name="Preprocessor Keywords"> <!-- Contains keywords for macros, structures, etc... -->
-      <item>append</item>
-      <item>at</item>   <!-- As in "virtual at"-->
-      <item>break</item>
-      <item>common</item>
-      <item>display</item>
-      <item>else</item>
-      <item>end</item> <!-- As in "end if"-->
-      <item>equ</item>
-      <item>fix</item>
-      <item>foward</item>
-      <item>if</item>
-      <item>irp</item>
-      <item>irps</item>
-      <item>label</item>
-      <item>local</item>
-      <item>match</item>
-      <item>macro</item>
-      <item>purge</item>
-      <item>repeat</item>
-      <item>rept</item>
-      <item>reverse</item>
-      <item>restore</item>
-      <item>struc</item>
-      <item>times</item>
-      <item>while</item>
-      <item>virtual</item>
-    </list>
-
-    <list name="Instruction-like Keywords"> <!-- Contains instruction-like keywords -->
-      <item>align</item>
-      <item>entry</item>
-      <item>extrn</item>
-      <item>format</item>
-      <item>include</item>
-      <item>invoke</item>
-      <item>data</item>
-      <item>load</item>
-      <item>from</item>
-      <item>heap</item>
-      <item>org</item>
-      <item>proc</item>
-      <item>public</item>
-      <item>section</item>
-      <item>segment</item>
-      <item>stack</item>
-      <item>store</item>
-      <item>use16</item>
-      <item>use32</item>
-      <item>use64</item>
-    </list>
-
-    <contexts>
-      <context name="Normal" attribute="Normal Text" lineEndContext="#stay">
-        <keyword attribute="Registers" context="#stay" String="registers"/>
-        <keyword attribute="Data" context="#stay" String="Data"/>
-        <keyword attribute="Instructions" context="#stay" String="instructions"/>
-        <keyword attribute="Instructions" context="#stay" String="Instruction-like Keywords"/>
-        <keyword attribute="Preprocessor" context="#stay" String="Preprocessor Keywords"/>
-        <DetectChar attribute="Comment" context="Comment" char=";"/>
-        <AnyChar attribute="String" context="String" String="&quot;'"/>
-        <RegExpr attribute="Label" context="#stay" String="^\s*[A-Za-z0-9@_.$?]+:"/>
-        <!-- Conditional instructions -->
-        <RegExpr attribute="Instructions" context="#stay" String="(cmov|fcmov|j|loop|set)(a|ae|b|be|c|e|g|ge|l|le|na|nae|nb|nbe|nc|ne|ng|nge|nl|nle|no|np|ns|nz|o|p|pe|po|s|z)"/>
-        <!-- hexadecimal numbers -->
-        <RegExpr attribute="BaseN" context="#stay" insensitive="true" String="(^|[ \t,]+)((\$|0x){1}[0-9]+[a-f0-9]*|[a-f0-9]+h)([ \t,]+|$)"/>
-        <!-- octal and binary numbers -->
-        <RegExpr attribute="BaseN" context="#stay" insensitive="true" String="(^|[ \t,]+)([0-7]+(q|o)|[01]+b)([ \t,]+|$)"/>
-        <DetectChar attribute="Number" context="#stay" char="$"/>
-        <HlCOct attribute="BaseN" context="#stay"/>
-        <HlCHex attribute="BaseN" context="#stay"/>
-        <Float attribute="Float" context="#stay"/>
-        <Int attribute="Number" context="#stay"/>
-        <HlCChar attribute="Char" context="#stay"/>
-      </context>
-      <context name="Comment" attribute="Comment" lineEndContext="#pop"/>
-      <context name="String" attribute="String" lineEndContext="#pop">
-        <AnyChar attribute="String" context="#pop" String="&quot;'"/>
-      </context>
-    </contexts>
-
-    <itemDatas>
-      <itemData name="Normal Text" defStyleNum="dsNormal"/>
-      <itemData name="Registers" defStyleNum="dsKeyword"/>
-      <itemData name="Instructions" defStyleNum="dsBuiltIn"/>
-      <itemData name="Comment" defStyleNum="dsComment"/>
-      <itemData name="Label" defStyleNum="dsFunction"/>
-      <itemData name="Data" defStyleNum="dsDataType"/>
-      <itemData name="BaseN" defStyleNum="dsBaseN"/>
-      <itemData name="Float" defStyleNum="dsFloat"/>
-      <itemData name="Number" defStyleNum="dsDecVal"/>
-      <itemData name="Char" defStyleNum="dsChar"/>
-      <itemData name="String" defStyleNum="dsString"/>
-      <itemData name="Preprocessor" defStyleNum="dsPreprocessor"/>
-    </itemDatas>
-  </highlighting>
-  <general>
-    <keywords casesensitive="0"/>
-    <comments>
-      <comment name="singleLine" start=";"/>
+<!DOCTYPE language SYSTEM "language.dtd"
+[
+    <!ENTITY float "[0-9]++(?:\.[0-9]*+(?:e[-+]?[0-9]*+)?|(?=f\b)|e[-+]?[0-9]++\b)">
+
+    <!ENTITY hex_cont "[0-9a-f]*+(?=h)">
+    <!ENTITY oct_hex_cont "[0-7]*+(?:&hex_cont;|(?=[oqh]))">
+    <!ENTITY hex "[0-9]&hex_cont;">
+    <!ENTITY oct_hex "[0-7]&oct_hex_cont;">
+    <!ENTITY bin_oct_hex "[01]*+(?:&oct_hex_cont;|(?=[byoqh]))">
+    <!ENTITY baseN "0x[0-9a-f]*+|&bin_oct_hex;|&oct_hex;|&hex;">
+
+    <!ENTITY number "[0-9]*+(?:to[0-9]+|(?=d?))">
+]>
+<language name="Intel x86 (FASM)" section="Assembler" version="4" kateversion="5.62" extensions="*.asm;*.inc;*.fasm" mimetype="" author="rCX (rCX12@yahoo.com)" license="GPL">
+  <highlighting>
+    <list name="registers">
+      <!-- General purpose registers -->
+      <item>rax</item>
+      <item>eax</item>
+      <item>ax</item>
+      <item>ah</item>
+      <item>al</item>
+      <item>rbx</item>
+      <item>ebx</item>
+      <item>bx</item>
+      <item>bh</item>
+      <item>bl</item>
+      <item>rcx</item>
+      <item>ecx</item>
+      <item>cx</item>
+      <item>ch</item>
+      <item>cl</item>
+      <item>rdx</item>
+      <item>edx</item>
+      <item>dx</item>
+      <item>dh</item>
+      <item>dl</item>
+      <item>rbp</item>
+      <item>ebp</item>
+      <item>bp</item>
+      <item>rsi</item>
+      <item>esi</item>
+      <item>si</item>
+      <item>rdi</item>
+      <item>edi</item>
+      <item>di</item>
+      <item>rsp</item>
+      <item>esp</item>
+      <item>sp</item>
+      <item>r8</item>
+      <item>r9</item>
+      <item>r10</item>
+      <item>r11</item>
+      <item>r12</item>
+      <item>r13</item>
+      <item>r14</item>
+      <item>r15</item>
+      <!-- Segmentation registers -->
+      <item>cs</item>
+      <item>ds</item>
+      <item>es</item>
+      <item>fs</item>
+      <item>gs</item>
+      <item>ss</item>
+      <!-- Control registers -->
+      <item>cr0</item>
+      <!--<item>cr1</item>-->
+      <item>cr2</item>
+      <item>cr3</item>
+      <item>cr4</item>
+      <!-- Debug registers -->
+      <item>dr0</item>
+      <item>dr1</item>
+      <item>dr2</item>
+      <item>dr3</item>
+      <item>dr6</item>
+      <item>dr7</item>
+      <!-- x87 FPU Registers -->
+      <item>st0</item>
+      <item>st1</item>
+      <item>st2</item>
+      <item>st3</item>
+      <item>st4</item>
+      <item>st5</item>
+      <item>st6</item>
+      <item>st7</item>
+      <!-- MMX registers -->
+      <item>mm0</item>
+      <item>mm1</item>
+      <item>mm2</item>
+      <item>mm3</item>
+      <item>mm4</item>
+      <item>mm5</item>
+      <item>mm6</item>
+      <item>mm7</item>
+      <!-- SEE registers -->
+      <item>xmm0</item>
+      <item>xmm1</item>
+      <item>xmm2</item>
+      <item>xmm3</item>
+      <item>xmm4</item>
+      <item>xmm5</item>
+      <item>xmm6</item>
+      <item>xmm7</item>
+      <!-- AVX registers -->
+      <item>ymm0</item>
+      <item>ymm1</item>
+      <item>ymm2</item>
+      <item>ymm3</item>
+      <item>ymm4</item>
+      <item>ymm5</item>
+      <item>ymm6</item>
+      <item>ymm7</item>
+      <!-- AVX-512 registers -->
+      <item>zmm0</item>
+      <item>zmm1</item>
+      <item>zmm2</item>
+      <item>zmm3</item>
+      <item>zmm4</item>
+      <item>zmm5</item>
+      <item>zmm6</item>
+      <item>zmm7</item>
+      <!-- Opmask registers -->
+      <item>k0</item>
+      <item>k1</item>
+      <item>k2</item>
+      <item>k3</item>
+      <item>k4</item>
+      <item>k5</item>
+      <item>k6</item>
+      <item>k7</item>
+      <!-- Bounds -->
+      <item>bnd0</item>
+      <item>bnd1</item>
+      <item>bnd2</item>
+      <item>bnd3</item>
+    </list>
+
+    <list name="branch instructions">
+      <item>call</item>
+      <item>ja</item>
+      <item>jae</item>
+      <item>jb</item>
+      <item>jbe</item>
+      <item>jc</item>
+      <item>je</item>
+      <item>jg</item>
+      <item>jge</item>
+      <item>jl</item>
+      <item>jle</item>
+      <item>jmp</item>
+      <item>jna</item>
+      <item>jnae</item>
+      <item>jnb</item>
+      <item>jnbe</item>
+      <item>jnc</item>
+      <item>jne</item>
+      <item>jng</item>
+      <item>jnge</item>
+      <item>jnl</item>
+      <item>jnle</item>
+      <item>jno</item>
+      <item>jnp</item>
+      <item>jns</item>
+      <item>jnz</item>
+      <item>jo</item>
+      <item>jp</item>
+      <item>jpe</item>
+      <item>jpo</item>
+      <item>js</item>
+      <item>jz</item>
+      <item>jcxz</item>
+      <item>jecxz</item>
+      <item>loop</item>
+      <item>loopd</item>
+      <item>loope</item>
+      <item>looped</item>
+      <item>loopew</item>
+      <item>loopne</item>
+      <item>loopned</item>
+      <item>loopnew</item>
+      <item>loopnz</item>
+      <item>loopnzd</item>
+      <item>loopnzw</item>
+      <item>loopw</item>
+      <item>loopz</item>
+      <item>loopzd</item>
+      <item>loopzw</item>
+      <item>loopnz</item>
+      <item>loopnzd</item>
+      <item>loopnzw</item>
+      <item>loopz</item>
+      <item>loopzw</item>
+      <item>ret</item>
+      <item>retd</item>
+      <item>retf</item>
+      <item>retfd</item>
+      <item>retfw</item>
+      <item>retn</item>
+      <item>retnd</item>
+      <item>retnw</item>
+      <item>retw</item>
+      <item>iret</item>
+      <item>iretd</item>
+      <item>iretq</item>
+      <item>iretw</item>
+      <item>rsm</item>
+      <item>syscall</item>
+      <item>sysenter</item>
+      <item>sysexit</item>
+      <item>sysret</item>
+      <item>syscallq</item>
+      <item>sysretq</item>
+    </list>
+
+    <list name="instructions">
+      <item>aaa</item>
+      <item>aad</item>
+      <item>aam</item>
+      <item>aas</item>
+      <item>adc</item>
+      <item>add</item>
+      <item>addpd</item>
+      <item>addps</item>
+      <item>addsd</item>
+      <item>addss</item>
+      <item>addsubpd</item>
+      <item>addsubps</item>
+      <item>aesdec</item>
+      <item>aesdeclast</item>
+      <item>aesenc</item>
+      <item>aesenclast</item>
+      <item>aesimc</item>
+      <item>aeskeygenassist</item>
+      <item>and</item>
+      <item>andn</item>
+      <item>andnpd</item>
+      <item>andnps</item>
+      <item>andpd</item>
+      <item>andps</item>
+      <item>arpl</item>
+      <item>bextr</item>
+      <item>blcfill</item>
+      <item>blci</item>
+      <item>blcic</item>
+      <item>blcmsk</item>
+      <item>blcs</item>
+      <item>blendpd</item>
+      <item>blendps</item>
+      <item>blendvpd</item>
+      <item>blendvps</item>
+      <item>blsfill</item>
+      <item>blsi</item>
+      <item>blsic</item>
+      <item>blsmsk</item>
+      <item>blsr</item>
+      <item>bndldx</item>
+      <item>bndmk</item>
+      <item>bndstx</item>
+      <item>bound</item>
+      <item>bsf</item>
+      <item>bsr</item>
+      <item>bswap</item>
+      <item>bt</item>
+      <item>btc</item>
+      <item>btr</item>
+      <item>bts</item>
+      <item>bzhi</item>
+      <item>cbw</item>
+      <item>cdq</item>
+      <item>cdqe</item>
+      <item>clc</item>
+      <item>cld</item>
+      <item>clflush</item>
+      <item>clgi</item>
+      <item>cli</item>
+      <item>clts</item>
+      <item>cmc</item>
+      <item>cmov</item>
+      <item>cmova</item>
+      <item>cmovae</item>
+      <item>cmovb</item>
+      <item>cmovbe</item>
+      <item>cmovc</item>
+      <item>cmove</item>
+      <item>cmovg</item>
+      <item>cmovge</item>
+      <item>cmovl</item>
+      <item>cmovle</item>
+      <item>cmovna</item>
+      <item>cmovnae</item>
+      <item>cmovnb</item>
+      <item>cmovnbe</item>
+      <item>cmovnc</item>
+      <item>cmovne</item>
+      <item>cmovng</item>
+      <item>cmovnge</item>
+      <item>cmovnl</item>
+      <item>cmovnle</item>
+      <item>cmovno</item>
+      <item>cmovnp</item>
+      <item>cmovns</item>
+      <item>cmovnz</item>
+      <item>cmovo</item>
+      <item>cmovp</item>
+      <item>cmovpe</item>
+      <item>cmovpo</item>
+      <item>cmovs</item>
+      <item>cmovz</item>
+      <item>cmp</item>
+      <item>cmpeq</item>
+      <item>cmpeqpd</item>
+      <item>cmpeqps</item>
+      <item>cmpeqsd</item>
+      <item>cmpeqss</item>
+      <item>cmple</item>
+      <item>cmplepd</item>
+      <item>cmpleps</item>
+      <item>cmplesd</item>
+      <item>cmpless</item>
+      <item>cmplt</item>
+      <item>cmpltpd</item>
+      <item>cmpltps</item>
+      <item>cmpltsd</item>
+      <item>cmpltss</item>
+      <item>cmpneq</item>
+      <item>cmpneqpd</item>
+      <item>cmpneqps</item>
+      <item>cmpneqsd</item>
+      <item>cmpneqss</item>
+      <item>cmpnle</item>
+      <item>cmpnlepd</item>
+      <item>cmpnleps</item>
+      <item>cmpnlesd</item>
+      <item>cmpnless</item>
+      <item>cmpnlt</item>
+      <item>cmpnltpd</item>
+      <item>cmpnltps</item>
+      <item>cmpnltsd</item>
+      <item>cmpnltss</item>
+      <item>cmpord</item>
+      <item>cmpordpd</item>
+      <item>cmpordps</item>
+      <item>cmpordsd</item>
+      <item>cmpordss</item>
+      <item>cmppd</item>
+      <item>cmpps</item>
+      <item>cmps</item>
+      <item>cmpsb</item>
+      <item>cmpsd</item>
+      <item>cmpsq</item>
+      <item>cmpss</item>
+      <item>cmpsw</item>
+      <item>cmpunord</item>
+      <item>cmpunordpd</item>
+      <item>cmpunordps</item>
+      <item>cmpunordsd</item>
+      <item>cmpunordss</item>
+      <item>cmpxchg16b</item>
+      <item>cmpxchg486</item>
+      <item>cmpxchg8b</item>
+      <item>cmpxchg</item>
+      <item>comisd</item>
+      <item>comiss</item>
+      <item>compare</item>
+      <item>cpuid</item>
+      <item>cqo</item>
+      <item>crc32</item>
+      <item>cvtdq2pd</item>
+      <item>cvtdq2ps</item>
+      <item>cvtpd2dq</item>
+      <item>cvtpd2pi</item>
+      <item>cvtpd2ps</item>
+      <item>cvtpi2pd</item>
+      <item>cvtpi2ps</item>
+      <item>cvtps2dq</item>
+      <item>cvtps2pd</item>
+      <item>cvtps2pi</item>
+      <item>cvtsd2si</item>
+      <item>cvtsd2ss</item>
+      <item>cvtsi2sd</item>
+      <item>cvtsi2ss</item>
+      <item>cvtss2sd</item>
+      <item>cvtss2si</item>
+      <item>cvttpd2dq</item>
+      <item>cvttpd2pi</item>
+      <item>cvttps2dq</item>
+      <item>cvttps2pi</item>
+      <item>cvttsd2si</item>
+      <item>cvttss2si</item>
+      <item>cwd</item>
+      <item>cwde</item>
+      <item>daa</item>
+      <item>das</item>
+      <item>dec</item>
+      <item>div</item>
+      <item>divpd</item>
+      <item>divps</item>
+      <item>divsd</item>
+      <item>divss</item>
+      <item>dppd</item>
+      <item>dpps</item>
+      <item>emms</item>
+      <item>enter</item>
+      <item>extractps</item>
+      <item>extrq</item>
+      <item>f2xm1</item>
+      <item>fabs</item>
+      <item>fadd</item>
+      <item>faddp</item>
+      <item>fbld</item>
+      <item>fbstp</item>
+      <item>fchs</item>
+      <item>fclex</item>
+      <item>fcmovb</item>
+      <item>fcmovbe</item>
+      <item>fcmove</item>
+      <item>fcmovnb</item>
+      <item>fcmovnbe</item>
+      <item>fcmovne</item>
+      <item>fcmovnu</item>
+      <item>fcmovu</item>
+      <item>fcom</item>
+      <item>fcomi</item>
+      <item>fcomip</item>
+      <item>fcomp</item>
+      <item>fcompp</item>
+      <item>fcos</item>
+      <item>fdecstp</item>
+      <item>fdisi</item>
+      <item>fdiv</item>
+      <item>fdivp</item>
+      <item>fdivr</item>
+      <item>fdivrp</item>
+      <item>femms</item>
+      <item>feni</item>
+      <item>ffree</item>
+      <item>ffreep</item>
+      <item>fiadd</item>
+      <item>ficom</item>
+      <item>ficomp</item>
+      <item>fidiv</item>
+      <item>fidivr</item>
+      <item>fild</item>
+      <item>fimul</item>
+      <item>fincstp</item>
+      <item>finit</item>
+      <item>fist</item>
+      <item>fistp</item>
+      <item>fisttp</item>
+      <item>fisub</item>
+      <item>fisubr</item>
+      <item>fld1</item>
+      <item>fld</item>
+      <item>fldcw</item>
+      <item>fldenv</item>
+      <item>fldenvd</item>
+      <item>fldenvw</item>
+      <item>fldl2e</item>
+      <item>fldl2t</item>
+      <item>fldlg2</item>
+      <item>fldln2</item>
+      <item>fldpi</item>
+      <item>fldz</item>
+      <item>fmul</item>
+      <item>fmulp</item>
+      <item>fnclex</item>
+      <item>fndisi</item>
+      <item>fneni</item>
+      <item>fninit</item>
+      <item>fnop</item>
+      <item>fnsave</item>
+      <item>fnsaved</item>
+      <item>fnsavew</item>
+      <item>fnstcw</item>
+      <item>fnstenv</item>
+      <item>fnstenvd</item>
+      <item>fnstenvw</item>
+      <item>fnstsw</item>
+      <item>fnwait</item>
+      <item>fpatan</item>
+      <item>fprem1</item>
+      <item>fprem</item>
+      <item>fptan</item>
+      <item>frndint</item>
+      <item>frstor</item>
+      <item>frstord</item>
+      <item>frstorw</item>
+      <item>fsave</item>
+      <item>fsaved</item>
+      <item>fsavew</item>
+      <item>fscale</item>
+      <item>fsetpm</item>
+      <item>fsin</item>
+      <item>fsincos</item>
+      <item>fsqrt</item>
+      <item>fst</item>
+      <item>fstcw</item>
+      <item>fstenv</item>
+      <item>fstenvd</item>
+      <item>fstenvw</item>
+      <item>fstp</item>
+      <item>fstsw</item>
+      <item>fsub</item>
+      <item>fsubp</item>
+      <item>fsubr</item>
+      <item>fsubrp</item>
+      <item>ftst</item>
+      <item>fucom</item>
+      <item>fucomi</item>
+      <item>fucomip</item>
+      <item>fucomp</item>
+      <item>fucompp</item>
+      <item>fwait</item>
+      <item>fxam</item>
+      <item>fxch</item>
+      <item>fxrstor64</item>
+      <item>fxrstor</item>
+      <item>fxsave64</item>
+      <item>fxsave</item>
+      <item>fxtract</item>
+      <item>fyl2x</item>
+      <item>fyl2xp1</item>
+      <item>getsec</item>
+      <item>haddpd</item>
+      <item>haddps</item>
+      <item>hlt</item>
+      <item>hsubpd</item>
+      <item>hsubps</item>
+      <item>ibts</item>
+      <item>idiv</item>
+      <item>imul</item>
+      <item>in</item>
+      <item>inc</item>
+      <item>ins</item>
+      <item>insb</item>
+      <item>insd</item>
+      <item>insertps</item>
+      <item>insertq</item>
+      <item>insw</item>
+      <item>int1</item>
+      <item>int3</item>
+      <item>int</item>
+      <item>into</item>
+      <item>invd</item>
+      <item>invept</item>
+      <item>invlpg</item>
+      <item>invlpga</item>
+      <item>invpcid</item>
+      <item>invvpid</item>
+      <item>lahf</item>
+      <item>lar</item>
+      <item>lddqu</item>
+      <item>ldmxcsr</item>
+      <item>lds</item>
+      <item>lea</item>
+      <item>leave</item>
+      <item>les</item>
+      <item>lfence</item>
+      <item>lfs</item>
+      <item>lgdt</item>
+      <item>lgs</item>
+      <item>lidt</item>
+      <item>lldt</item>
+      <item>lmsw</item>
+      <item>loadall286</item>
+      <item>loadall</item>
+      <item>lock</item>
+      <item>lods</item>
+      <item>lodsb</item>
+      <item>lodsd</item>
+      <item>lodsq</item>
+      <item>lodsw</item>
+      <item>lsl</item>
+      <item>lss</item>
+      <item>ltr</item>
+      <item>lzcnt</item>
+      <item>maskmovdqu</item>
+      <item>maskmovq</item>
+      <item>maxpd</item>
+      <item>maxps</item>
+      <item>maxsd</item>
+      <item>maxss</item>
+      <item>mfence</item>
+      <item>minpd</item>
+      <item>minps</item>
+      <item>minsd</item>
+      <item>minss</item>
+      <item>monitor</item>
+      <item>mov</item>
+      <item>movapd</item>
+      <item>movaps</item>
+      <item>movbe</item>
+      <item>movd</item>
+      <item>movddup</item>
+      <item>movdq2q</item>
+      <item>movdqa</item>
+      <item>movdqu</item>
+      <item>movhlps</item>
+      <item>movhpd</item>
+      <item>movhps</item>
+      <item>movlhps</item>
+      <item>movlpd</item>
+      <item>movlps</item>
+      <item>movmskpd</item>
+      <item>movmskps</item>
+      <item>movntdq</item>
+      <item>movntdqa</item>
+      <item>movnti</item>
+      <item>movntpd</item>
+      <item>movntps</item>
+      <item>movntq</item>
+      <item>movntsd</item>
+      <item>movntss</item>
+      <item>movq2dq</item>
+      <item>movq</item>
+      <item>movs</item>
+      <item>movsb</item>
+      <item>movsd</item>
+      <item>movshdup</item>
+      <item>movsldup</item>
+      <item>movsq</item>
+      <item>movss</item>
+      <item>movsw</item>
+      <item>movsx</item>
+      <item>movsxd</item>
+      <item>movupd</item>
+      <item>movups</item>
+      <item>movzx</item>
+      <item>mpsadbw</item>
+      <item>mul</item>
+      <item>mulpd</item>
+      <item>mulps</item>
+      <item>mulsd</item>
+      <item>mulss</item>
+      <item>mulx</item>
+      <item>mwait</item>
+      <item>neg</item>
+      <item>nop</item>
+      <item>not</item>
+      <item>or</item>
+      <item>orpd</item>
+      <item>orps</item>
+      <item>out</item>
+      <item>outs</item>
+      <item>outsb</item>
+      <item>outsd</item>
+      <item>outsw</item>
+      <item>pabsb</item>
+      <item>pabsd</item>
+      <item>pabsw</item>
+      <item>packssdw</item>
+      <item>packsswb</item>
+      <item>packusdw</item>
+      <item>packuswb</item>
+      <item>paddb</item>
+      <item>paddd</item>
+      <item>paddq</item>
+      <item>paddsb</item>
+      <item>paddsw</item>
+      <item>paddusb</item>
+      <item>paddusw</item>
+      <item>paddw</item>
+      <item>palignr</item>
+      <item>pand</item>
+      <item>pandn</item>
+      <item>pause</item>
+      <item>pavgb</item>
+      <item>pavgusb</item>
+      <item>pavgw</item>
+      <item>pblendvb</item>
+      <item>pblendw</item>
+      <item>pclmulqdq</item>
+      <item>pcmpeqb</item>
+      <item>pcmpeqd</item>
+      <item>pcmpeqq</item>
+      <item>pcmpeqw</item>
+      <item>pcmpestri</item>
+      <item>pcmpestrm</item>
+      <item>pcmpgtb</item>
+      <item>pcmpgtd</item>
+      <item>pcmpgtq</item>
+      <item>pcmpgtw</item>
+      <item>pcmpistri</item>
+      <item>pcmpistrm</item>
+      <item>pdep</item>
+      <item>pdistib</item>
+      <item>pext</item>
+      <item>pextrb</item>
+      <item>pextrd</item>
+      <item>pextrq</item>
+      <item>pextrw</item>
+      <item>pf2id</item>
+      <item>pf2iw</item>
+      <item>pfacc</item>
+      <item>pfadd</item>
+      <item>pfcmpeq</item>
+      <item>pfcmpge</item>
+      <item>pfcmpgt</item>
+      <item>pfmax</item>
+      <item>pfmin</item>
+      <item>pfmul</item>
+      <item>pfnacc</item>
+      <item>pfpnacc</item>
+      <item>pfrcp</item>
+      <item>pfrcpit1</item>
+      <item>pfrcpit2</item>
+      <item>pfrsqit1</item>
+      <item>pfrsqrt</item>
+      <item>pfsub</item>
+      <item>pfsubr</item>
+      <item>phaddd</item>
+      <item>phaddsw</item>
+      <item>phaddw</item>
+      <item>phminposuw</item>
+      <item>phsubd</item>
+      <item>phsubsw</item>
+      <item>phsubw</item>
+      <item>pi2fd</item>
+      <item>pi2fw</item>
+      <item>pinsrb</item>
+      <item>pinsrd</item>
+      <item>pinsrq</item>
+      <item>pinsrw</item>
+      <item>pmachriw</item>
+      <item>pmaddubsw</item>
+      <item>pmaddwd</item>
+      <item>pmagw</item>
+      <item>pmaxsb</item>
+      <item>pmaxsd</item>
+      <item>pmaxsw</item>
+      <item>pmaxub</item>
+      <item>pmaxud</item>
+      <item>pmaxuw</item>
+      <item>pminsb</item>
+      <item>pminsd</item>
+      <item>pminsw</item>
+      <item>pminub</item>
+      <item>pminud</item>
+      <item>pminuw</item>
+      <item>pmovmskb</item>
+      <item>pmovsxbd</item>
+      <item>pmovsxbq</item>
+      <item>pmovsxbw</item>
+      <item>pmovsxdq</item>
+      <item>pmovsxwd</item>
+      <item>pmovsxwq</item>
+      <item>pmovzxbd</item>
+      <item>pmovzxbq</item>
+      <item>pmovzxbw</item>
+      <item>pmovzxdq</item>
+      <item>pmovzxwd</item>
+      <item>pmovzxwq</item>
+      <item>pmuldq</item>
+      <item>pmulhrsw</item>
+      <item>pmulhrw</item>
+      <item>pmulhuw</item>
+      <item>pmulhw</item>
+      <item>pmulld</item>
+      <item>pmullw</item>
+      <item>pmuludq</item>
+      <item>pmvgezb</item>
+      <item>pmvlzb</item>
+      <item>pmvnzb</item>
+      <item>pmvzb</item>
+      <item>pop</item>
+      <item>popa</item>
+      <item>popad</item>
+      <item>popaw</item>
+      <item>popcnt</item>
+      <item>popd</item>
+      <item>popf</item>
+      <item>popfd</item>
+      <item>popfq</item>
+      <item>popfw</item>
+      <item>popw</item>
+      <item>por</item>
+      <item>prefetch</item>
+      <item>prefetchnta</item>
+      <item>prefetcht0</item>
+      <item>prefetcht1</item>
+      <item>prefetcht2</item>
+      <item>prefetchw</item>
+      <item>psadbw</item>
+      <item>pshufb</item>
+      <item>pshufd</item>
+      <item>pshufhw</item>
+      <item>pshuflw</item>
+      <item>pshufw</item>
+      <item>psignb</item>
+      <item>psignd</item>
+      <item>psignw</item>
+      <item>pslld</item>
+      <item>pslldq</item>
+      <item>psllq</item>
+      <item>psllw</item>
+      <item>psrad</item>
+      <item>psraw</item>
+      <item>psrld</item>
+      <item>psrldq</item>
+      <item>psrlq</item>
+      <item>psrlw</item>
+      <item>psubb</item>
+      <item>psubd</item>
+      <item>psubq</item>
+      <item>psubsb</item>
+      <item>psubsiw</item>
+      <item>psubsw</item>
+      <item>psubusb</item>
+      <item>psubusw</item>
+      <item>psubw</item>
+      <item>pswapd</item>
+      <item>ptest</item>
+      <item>punpckhbw</item>
+      <item>punpckhdq</item>
+      <item>punpckhqdq</item>
+      <item>punpckhwd</item>
+      <item>punpcklbw</item>
+      <item>punpckldq</item>
+      <item>punpcklqdq</item>
+      <item>punpcklwd</item>
+      <item>push</item>
+      <item>pusha</item>
+      <item>pushad</item>
+      <item>pushaw</item>
+      <item>pushd</item>
+      <item>pushf</item>
+      <item>pushfd</item>
+      <item>pushfq</item>
+      <item>pushfw</item>
+      <item>pushw</item>
+      <item>pxor</item>
+      <item>rcl</item>
+      <item>rcpps</item>
+      <item>rcpss</item>
+      <item>rcr</item>
+      <item>rdfsbase</item>
+      <item>rdgsbase</item>
+      <item>rdmsr</item>
+      <item>rdmsrq</item>
+      <item>rdpmc</item>
+      <item>rdrand</item>
+      <item>rdshr</item>
+      <item>rdtsc</item>
+      <item>rdtscp</item>
+      <item>rol</item>
+      <item>ror</item>
+      <item>rorx</item>
+      <item>roundpd</item>
+      <item>roundps</item>
+      <item>roundsd</item>
+      <item>roundss</item>
+      <item>rsdc</item>
+      <item>rsldt</item>
+      <item>rsm</item>
+      <item>rsqrtps</item>
+      <item>rsqrtss</item>
+      <item>rsts</item>
+      <item>sahf</item>
+      <item>sal</item>
+      <item>salc</item>
+      <item>sar</item>
+      <item>sarx</item>
+      <item>sbb</item>
+      <item>scas</item>
+      <item>scasb</item>
+      <item>scasd</item>
+      <item>scasq</item>
+      <item>scasw</item>
+      <item>set</item>
+      <item>seta</item>
+      <item>setae</item>
+      <item>setb</item>
+      <item>setbe</item>
+      <item>setc</item>
+      <item>sete</item>
+      <item>setg</item>
+      <item>setge</item>
+      <item>setl</item>
+      <item>setle</item>
+      <item>setna</item>
+      <item>setnae</item>
+      <item>setnb</item>
+      <item>setnbe</item>
+      <item>setnc</item>
+      <item>setne</item>
+      <item>setng</item>
+      <item>setnge</item>
+      <item>setnl</item>
+      <item>setnle</item>
+      <item>setno</item>
+      <item>setnp</item>
+      <item>setns</item>
+      <item>setnz</item>
+      <item>seto</item>
+      <item>setp</item>
+      <item>setpe</item>
+      <item>setpo</item>
+      <item>sets</item>
+      <item>setz</item>
+      <item>sfence</item>
+      <item>sgdt</item>
+      <item>shl</item>
+      <item>shld</item>
+      <item>shlx</item>
+      <item>shr</item>
+      <item>shrd</item>
+      <item>shrx</item>
+      <item>shufpd</item>
+      <item>shufps</item>
+      <item>sidt</item>
+      <item>skinit</item>
+      <item>sldt</item>
+      <item>smi</item>
+      <item>smint</item>
+      <item>smintold</item>
+      <item>smsw</item>
+      <item>sqrtpd</item>
+      <item>sqrtps</item>
+      <item>sqrtsd</item>
+      <item>sqrtss</item>
+      <item>stc</item>
+      <item>std</item>
+      <item>stgi</item>
+      <item>sti</item>
+      <item>stmxcsr</item>
+      <item>stos</item>
+      <item>stosb</item>
+      <item>stosd</item>
+      <item>stosq</item>
+      <item>stosw</item>
+      <item>str</item>
+      <item>sub</item>
+      <item>subpd</item>
+      <item>subps</item>
+      <item>subsd</item>
+      <item>subss</item>
+      <item>svdc</item>
+      <item>svldt</item>
+      <item>svts</item>
+      <item>swapgs</item>
+      <item>t1mskc</item>
+      <item>test</item>
+      <item>tzcnt</item>
+      <item>tzmsk</item>
+      <item>ucomisd</item>
+      <item>ucomiss</item>
+      <item>ud0</item>
+      <item>ud1</item>
+      <item>ud2</item>
+      <item>umov</item>
+      <item>unpckhpd</item>
+      <item>unpckhps</item>
+      <item>unpcklpd</item>
+      <item>unpcklps</item>
+      <item>vaesenc</item>
+      <item>vaesenclast</item>
+      <item>vaesimc</item>
+      <item>vblendvpd</item>
+      <item>vblendvps</item>
+      <item>vbroadcastf128</item>
+      <item>vbroadcasti128</item>
+      <item>vbroadcastsd</item>
+      <item>vbroadcastss</item>
+      <item>vcomisd</item>
+      <item>vcomiss</item>
+      <item>vcvtdq2pd</item>
+      <item>vcvtdq2ps</item>
+      <item>vcvtpd2dq</item>
+      <item>vcvtpd2ps</item>
+      <item>vcvtph2ps</item>
+      <item>vcvtps2dq</item>
+      <item>vcvtps2pd</item>
+      <item>vcvtps2ph</item>
+      <item>vcvtsd2si</item>
+      <item>vcvtsd2ss</item>
+      <item>vcvtsi2sd</item>
+      <item>vcvtsi2ss</item>
+      <item>vcvtss2sd</item>
+      <item>vcvtss2si</item>
+      <item>vcvttpd2dq</item>
+      <item>vcvttps2dq</item>
+      <item>vcvttsd2si</item>
+      <item>vcvttss2si</item>
+      <item>vdppd</item>
+      <item>verr</item>
+      <item>verw</item>
+      <item>vextractf128</item>
+      <item>vextracti128</item>
+      <item>vextractps</item>
+      <item>vfm132pd</item>
+      <item>vfm132ps</item>
+      <item>vfm132sd</item>
+      <item>vfm132ss</item>
+      <item>vfm213pd</item>
+      <item>vfm213ps</item>
+      <item>vfm213sd</item>
+      <item>vfm213ss</item>
+      <item>vfm231pd</item>
+      <item>vfm231ps</item>
+      <item>vfm231sd</item>
+      <item>vfm231ss</item>
+      <item>vfmaddpd</item>
+      <item>vfmaddsub132pd</item>
+      <item>vfmaddsub132ps</item>
+      <item>vfmaddsub213pd</item>
+      <item>vfmaddsub213ps</item>
+      <item>vfmaddsub231pd</item>
+      <item>vfmaddsub231ps</item>
+      <item>vfmsubadd132pd</item>
+      <item>vfmsubadd132ps</item>
+      <item>vfmsubadd213pd</item>
+      <item>vfmsubadd213ps</item>
+      <item>vfmsubadd231pd</item>
+      <item>vfmsubadd231ps</item>
+      <item>vfmsubss</item>
+      <item>vfnm132pd</item>
+      <item>vfnm132ps</item>
+      <item>vfnm132sd</item>
+      <item>vfnm132ss</item>
+      <item>vfnm213pd</item>
+      <item>vfnm213ps</item>
+      <item>vfnm213sd</item>
+      <item>vfnm213ss</item>
+      <item>vfnm231pd</item>
+      <item>vfnm231ps</item>
+      <item>vfnm231sd</item>
+      <item>vfnm231ss</item>
+      <item>vfrczpd</item>
+      <item>vfrczps</item>
+      <item>vfrczsd</item>
+      <item>vfrczss</item>
+      <item>vgatherdpd</item>
+      <item>vgatherdps</item>
+      <item>vgatherqpd</item>
+      <item>vgatherqps</item>
+      <item>vinsertf128</item>
+      <item>vinserti128</item>
+      <item>vinsertps</item>
+      <item>vlddqu</item>
+      <item>vldmxcsr</item>
+      <item>vmaskmovdqu</item>
+      <item>vmaskmovpd</item>
+      <item>vmaskmovps</item>
+      <item>vmcall</item>
+      <item>vmclear</item>
+      <item>vmlaunch</item>
+      <item>vmload</item>
+      <item>vmmcall</item>
+      <item>vmovapd</item>
+      <item>vmovaps</item>
+      <item>vmovd</item>
+      <item>vmovddup</item>
+      <item>vmovdqa</item>
+      <item>vmovdqu</item>
+      <item>vmovhlps</item>
+      <item>vmovhpd</item>
+      <item>vmovhps</item>
+      <item>vmovlhps</item>
+      <item>vmovlpd</item>
+      <item>vmovlps</item>
+      <item>vmovmskpd</item>
+      <item>vmovmskps</item>
+      <item>vmovntdq</item>
+      <item>vmovntdqa</item>
+      <item>vmovntpd</item>
+      <item>vmovntps</item>
+      <item>vmovq</item>
+      <item>vmovsd</item>
+      <item>vmovshdup</item>
+      <item>vmovsldup</item>
+      <item>vmovss</item>
+      <item>vmovupd</item>
+      <item>vmovups</item>
+      <item>vmptrld</item>
+      <item>vmptrst</item>
+      <item>vmread</item>
+      <item>vmresume</item>
+      <item>vmrun</item>
+      <item>vmsave</item>
+      <item>vmwrite</item>
+      <item>vmxoff</item>
+      <item>vmxon</item>
+      <item>vpabsb</item>
+      <item>vpabsd</item>
+      <item>vpabsw</item>
+      <item>vpackssdw</item>
+      <item>vpacksswb</item>
+      <item>vpackusdw</item>
+      <item>vpackuswb</item>
+      <item>vpaddb</item>
+      <item>vpaddd</item>
+      <item>vpaddq</item>
+      <item>vpaddsb</item>
+      <item>vpaddsw</item>
+      <item>vpaddusb</item>
+      <item>vpaddusw</item>
+      <item>vpaddw</item>
+      <item>vpalignr</item>
+      <item>vpand</item>
+      <item>vpandn</item>
+      <item>vpause</item>
+      <item>vpavgb</item>
+      <item>vpavgusb</item>
+      <item>vpavgw</item>
+      <item>vpblendvb</item>
+      <item>vpblendw</item>
+      <item>vpbroadcastb</item>
+      <item>vpbroadcastd</item>
+      <item>vpbroadcastq</item>
+      <item>vpbroadcastw</item>
+      <item>vpclmulqdq</item>
+      <item>vpcmov</item>
+      <item>vpcmpeqb</item>
+      <item>vpcmpeqd</item>
+      <item>vpcmpeqq</item>
+      <item>vpcmpeqw</item>
+      <item>vpcmpestri</item>
+      <item>vpcmpestrm</item>
+      <item>vpcmpgtb</item>
+      <item>vpcmpgtd</item>
+      <item>vpcmpgtq</item>
+      <item>vpcmpgtw</item>
+      <item>vpcmpistri</item>
+      <item>vpcmpistrm</item>
+      <item>vpcomb</item>
+      <item>vpcomd</item>
+      <item>vfmadd132ps</item>
+      <item>vfnmadd132ps</item>
+      <item>vfmsub132ps</item>
+      <item>vfnmsub132ps</item>
+      <item>vfmadd213ps</item>
+      <item>vfnmadd213ps</item>
+      <item>vfmsub213ps</item>
+      <item>vfnmsub213ps</item>
+      <item>vfmadd231ps</item>
+      <item>vfnmadd231ps</item>
+      <item>vfmsub231ps</item>
+      <item>vfnmsub231ps</item>
+      <item>vfmadd132pd</item>
+      <item>vfnmadd132pd</item>
+      <item>vfmsub132pd</item>
+      <item>vfnmsub132pd</item>
+      <item>vfmadd213pd</item>
+      <item>vfnmadd213pd</item>
+      <item>vfmsub213pd</item>
+      <item>vfnmsub213pd</item>
+      <item>vfmadd231pd</item>
+      <item>vfnmadd231pd</item>
+      <item>vfmsub231pd</item>
+      <item>vfnmsub231pd</item>
+      <item>vfmadd132ss</item>
+      <item>vfnmadd132ss</item>
+      <item>vfmsub132ss</item>
+      <item>vfnmsub132ss</item>
+      <item>vfmadd213ss</item>
+      <item>vfnmadd213ss</item>
+      <item>vfmsub213ss</item>
+      <item>vfnmsub213ss</item>
+      <item>vfmadd231ss</item>
+      <item>vfnmadd231ss</item>
+      <item>vfmsub231ss</item>
+      <item>vfnmsub231ss</item>
+      <item>vfmadd132sd</item>
+      <item>vfnmadd132sd</item>
+      <item>vfmsub132sd</item>
+      <item>vfnmsub132sd</item>
+      <item>vfmadd213sd</item>
+      <item>vfnmadd213sd</item>
+      <item>vfmsub213sd</item>
+      <item>vfnmsub213sd</item>
+      <item>vfmadd231sd</item>
+      <item>vfnmadd231sd</item>
+      <item>vfmsub231sd</item>
+      <item>vfnmsub231sd</item>
+      <item>vpcomeqb</item>
+      <item>vpcomeqd</item>
+      <item>vpcomeqq</item>
+      <item>vpcomequb</item>
+      <item>vpcomequd</item>
+      <item>vpcomequq</item>
+      <item>vpcomequw</item>
+      <item>vpcomeqw</item>
+      <item>vpcomfalseb</item>
+      <item>vpcomfalsed</item>
+      <item>vpcomfalseq</item>
+      <item>vpcomfalseub</item>
+      <item>vpcomfalseud</item>
+      <item>vpcomfalseuq</item>
+      <item>vpcomfalseuw</item>
+      <item>vpcomfalsew</item>
+      <item>vpcomgeb</item>
+      <item>vpcomged</item>
+      <item>vpcomgeq</item>
+      <item>vpcomgeub</item>
+      <item>vpcomgeud</item>
+      <item>vpcomgeuq</item>
+      <item>vpcomgeuw</item>
+      <item>vpcomgew</item>
+      <item>vpcomgtb</item>
+      <item>vpcomgtd</item>
+      <item>vpcomgtq</item>
+      <item>vpcomgtub</item>
+      <item>vpcomgtud</item>
+      <item>vpcomgtuq</item>
+      <item>vpcomgtuw</item>
+      <item>vpcomgtw</item>
+      <item>vpcomleb</item>
+      <item>vpcomled</item>
+      <item>vpcomleq</item>
+      <item>vpcomleub</item>
+      <item>vpcomleud</item>
+      <item>vpcomleuq</item>
+      <item>vpcomleuw</item>
+      <item>vpcomlew</item>
+      <item>vpcomltb</item>
+      <item>vpcomltd</item>
+      <item>vpcomltq</item>
+      <item>vpcomltub</item>
+      <item>vpcomltud</item>
+      <item>vpcomltuq</item>
+      <item>vpcomltuw</item>
+      <item>vpcomltw</item>
+      <item>vpcomneqb</item>
+      <item>vpcomneqd</item>
+      <item>vpcomneqq</item>
+      <item>vpcomnequb</item>
+      <item>vpcomnequd</item>
+      <item>vpcomnequq</item>
+      <item>vpcomnequw</item>
+      <item>vpcomneqw</item>
+      <item>vpcomq</item>
+      <item>vpcomtrueb</item>
+      <item>vpcomtrued</item>
+      <item>vpcomtrueq</item>
+      <item>vpcomtrueub</item>
+      <item>vpcomtrueud</item>
+      <item>vpcomtrueuq</item>
+      <item>vpcomtrueuw</item>
+      <item>vpcomtruew</item>
+      <item>vpcomub</item>
+      <item>vpcomud</item>
+      <item>vpcomuq</item>
+      <item>vpcomuw</item>
+      <item>vpcomw</item>
+      <item>vpdep</item>
+      <item>vpdistib</item>
+      <item>vperm2f128</item>
+      <item>vperm2i128</item>
+      <item>vpermd</item>
+      <item>vpermil2pd</item>
+      <item>vpermil2ps</item>
+      <item>vpermilpd</item>
+      <item>vpermilps</item>
+      <item>vpermpd</item>
+      <item>vpermps</item>
+      <item>vpermq</item>
+      <item>vpext</item>
+      <item>vpextrb</item>
+      <item>vpextrd</item>
+      <item>vpextrq</item>
+      <item>vpextrw</item>
+      <item>vpf2id</item>
+      <item>vpf2iw</item>
+      <item>vpfacc</item>
+      <item>vpfadd</item>
+      <item>vpfcmpeq</item>
+      <item>vpfcmpge</item>
+      <item>vpfcmpgt</item>
+      <item>vpfmax</item>
+      <item>vpfmin</item>
+      <item>vpfmul</item>
+      <item>vpfnacc</item>
+      <item>vpfpnacc</item>
+      <item>vpfrcp</item>
+      <item>vpfrcpit1</item>
+      <item>vpfrcpit2</item>
+      <item>vpfrsqit1</item>
+      <item>vpfrsqrt</item>
+      <item>vpfsub</item>
+      <item>vpfsubr</item>
+      <item>vpgatherdd</item>
+      <item>vscatterdpd</item>
+      <item>vscatterdps</item>
+      <item>vscatterqpd</item>
+      <item>vscatterqps</item>
+      <item>vpscatterdd</item>
+      <item>vpscatterdq</item>
+      <item>vpscatterqd</item>
+      <item>vpscatterqq</item>
+      <item>vpgatherdq</item>
+      <item>vpgatherqd</item>
+      <item>vpgatherqq</item>
+      <item>vphaddbd</item>
+      <item>vphaddbq</item>
+      <item>vphaddbw</item>
+      <item>vphaddd</item>
+      <item>vphadddq</item>
+      <item>vphaddsw</item>
+      <item>vphaddubd</item>
+      <item>vphaddubq</item>
+      <item>vphaddubw</item>
+      <item>vphaddudq</item>
+      <item>vphadduwd</item>
+      <item>vphadduwq</item>
+      <item>vphaddw</item>
+      <item>vphaddwd</item>
+      <item>vphaddwq</item>
+      <item>vphminposuw</item>
+      <item>vphsubbw</item>
+      <item>vphsubd</item>
+      <item>vphsubdq</item>
+      <item>vphsubsw</item>
+      <item>vphsubw</item>
+      <item>vphsubwd</item>
+      <item>vpi2fd</item>
+      <item>vpi2fw</item>
+      <item>vpinsrb</item>
+      <item>vpinsrd</item>
+      <item>vpinsrq</item>
+      <item>vpinsrw</item>
+      <item>vpmachriw</item>
+      <item>vpmacsdd</item>
+      <item>vpmacsdqh</item>
+      <item>vpmacsdql</item>
+      <item>vpmacssdd</item>
+      <item>vpmacssdqh</item>
+      <item>vpmacssdql</item>
+      <item>vpmacsswd</item>
+      <item>vpmacssww</item>
+      <item>vpmacswd</item>
+      <item>vpmacsww</item>
+      <item>vpmadcsswd</item>
+      <item>vpmadcswd</item>
+      <item>vpmaddubsw</item>
+      <item>vpmaddwd</item>
+      <item>vpmagw</item>
+      <item>vpmaskmovd</item>
+      <item>vpmaskmovq</item>
+      <item>vpmaxsb</item>
+      <item>vpmaxsd</item>
+      <item>vpmaxsw</item>
+      <item>vpmaxub</item>
+      <item>vpmaxud</item>
+      <item>vpmaxuw</item>
+      <item>vpminsb</item>
+      <item>vpminsd</item>
+      <item>vpminsw</item>
+      <item>vpminub</item>
+      <item>vpminud</item>
+      <item>vpminuw</item>
+      <item>vpmovmskb</item>
+      <item>vpmovsxbd</item>
+      <item>vpmovsxbq</item>
+      <item>vpmovsxbw</item>
+      <item>vpmovsxdq</item>
+      <item>vpmovsxwd</item>
+      <item>vpmovsxwq</item>
+      <item>vpmovzxbd</item>
+      <item>vpmovzxbq</item>
+      <item>vpmovzxbw</item>
+      <item>vpmovzxdq</item>
+      <item>vpmovzxwd</item>
+      <item>vpmovzxwq</item>
+      <item>vpmuldq</item>
+      <item>vpmulhrsw</item>
+      <item>vpmulhrw</item>
+      <item>vpmulhuw</item>
+      <item>vpmulhw</item>
+      <item>vpmulld</item>
+      <item>vpmullw</item>
+      <item>vpmuludq</item>
+      <item>vpmvgezb</item>
+      <item>vpmvlzb</item>
+      <item>vpmvnzb</item>
+      <item>vpmvzb</item>
+      <item>vpor</item>
+      <item>vpperm</item>
+      <item>vprefetch</item>
+      <item>vprefetchnta</item>
+      <item>vprefetcht0</item>
+      <item>vprefetcht1</item>
+      <item>vprefetcht2</item>
+      <item>vprefetchw</item>
+      <item>vprotb</item>
+      <item>vprotd</item>
+      <item>vprotq</item>
+      <item>vprotw</item>
+      <item>vpsadbw</item>
+      <item>vpshab</item>
+      <item>vpshad</item>
+      <item>vpshaq</item>
+      <item>vpshaw</item>
+      <item>vpshlb</item>
+      <item>vpshld</item>
+      <item>vpshlq</item>
+      <item>vpshlw</item>
+      <item>vpshufb</item>
+      <item>vpshufd</item>
+      <item>vpshufhw</item>
+      <item>vpshuflw</item>
+      <item>vpshufw</item>
+      <item>vpsignb</item>
+      <item>vpsignd</item>
+      <item>vpsignw</item>
+      <item>vpslld</item>
+      <item>vpslldq</item>
+      <item>vpsllq</item>
+      <item>vpsllvd</item>
+      <item>vpsllvq</item>
+      <item>vpsllw</item>
+      <item>vpsrad</item>
+      <item>vpsravd</item>
+      <item>vpsraw</item>
+      <item>vpsrld</item>
+      <item>vpsrldq</item>
+      <item>vpsrlq</item>
+      <item>vpsrlvd</item>
+      <item>vpsrlvq</item>
+      <item>vpsrlw</item>
+      <item>vpsubb</item>
+      <item>vpsubd</item>
+      <item>vpsubq</item>
+      <item>vpsubsb</item>
+      <item>vpsubsiw</item>
+      <item>vpsubsw</item>
+      <item>vpsubusb</item>
+      <item>vpsubusw</item>
+      <item>vpsubw</item>
+      <item>vpswapd</item>
+      <item>vptest</item>
+      <item>vpunpckhbw</item>
+      <item>vpunpckhdq</item>
+      <item>vpunpckhqdq</item>
+      <item>vpunpckhwd</item>
+      <item>vpunpcklbw</item>
+      <item>vpunpckldq</item>
+      <item>vpunpcklqdq</item>
+      <item>vpunpcklwd</item>
+      <item>vpxor</item>
+      <item>vrcpps</item>
+      <item>vroundpd</item>
+      <item>vroundps</item>
+      <item>vrsqrtps</item>
+      <item>vsqrtpd</item>
+      <item>vsqrtps</item>
+      <item>vstmxcsr</item>
+      <item>vtestpd</item>
+      <item>vtestps</item>
+      <item>vzeroall</item>
+      <item>vzeroupper</item>
+      <item>wait</item>
+      <item>wbinvd</item>
+      <item>wrfsbase</item>
+      <item>wrgsbase</item>
+      <item>wrmsr</item>
+      <item>wrmsrq</item>
+      <item>wrshr</item>
+      <item>xabort</item>
+      <item>xacquire</item>
+      <item>xadd</item>
+      <item>xbegin</item>
+      <item>xbts</item>
+      <item>xchg</item>
+      <item>xend</item>
+      <item>xgetbv</item>
+      <item>xlat</item>
+      <item>xlatb</item>
+      <item>xor</item>
+      <item>xorpd</item>
+      <item>xorps</item>
+      <item>xrelease</item>
+      <item>xrstor64</item>
+      <item>xrstor</item>
+      <item>xsave64</item>
+      <item>xsave</item>
+      <item>xsaveopt64</item>
+      <item>xsaveopt</item>
+      <item>xsetbv</item>
+      <item>xtest</item>
+    </list>
+
+    <list name="repeat prefixes">
+      <item>rep</item>
+      <item>repe</item>
+      <item>repz</item>
+      <item>repne</item>
+      <item>repnz</item>
+    </list>
+
+    <list name="operators">
+      <item>used</item>
+      <item>defined</item>
+
+      <item>mod</item>
+      <item>and</item>
+      <item>or</item>
+      <item>xor</item>
+      <item>not</item>
+      <item>shl</item>
+      <item>shr</item>
+      <item>bsf</item>
+      <item>bsr</item>
+      <item>rva</item>
+      <item>plt</item>
+      <!-- jump and call operand -->
+      <item>far</item>
+      <item>near</item>
+      <item>short</item>
+    </list>
+
+    <list name="Data">
+      <!-- Initialized data (1.2.2)-->
+      <item>db</item>
+      <item>dw</item>
+      <item>du</item>
+      <item>dd</item>
+      <item>dp</item>
+      <item>df</item>
+      <item>dq</item>
+      <item>dt</item>
+      <!-- Uninitialized data (1.2.2)-->
+      <item>rb</item>
+      <item>rw</item>
+      <item>rd</item>
+      <item>rp</item>
+      <item>rf</item>
+      <item>rq</item>
+      <item>rt</item>
+      <!-- binary file include (1.2.2)-->
+      <item>file</item>
+      <!-- operand size from (1.2.1)-->
+      <item>byte</item>
+      <item>word</item>
+      <item>dword</item>
+      <item>fword</item>
+      <item>pword</item>
+      <item>qword</item>
+      <item>tbyte</item>
+      <item>tword</item>
+      <item>dqword</item>
+      <item>xword</item>
+      <item>qqword</item>
+      <item>yword</item>
+      <item>dqqword</item>
+      <item>zword</item>
+      <item>ptr</item>
+    </list>
+
+    <list name="Preprocessor Keywords"> <!-- Contains keywords for macros, structures, etc... -->
+      <item>assert</item>
+      <item>append</item>
+      <item>at</item>   <!-- As in "virtual at"-->
+      <item>break</item>
+      <item>calminstruction</item>
+      <item>common</item>
+      <item>display</item>
+      <item>else</item>
+      <item>end</item> <!-- As in "end if"-->
+      <item>equ</item>
+      <item>err</item>
+      <item>fix</item>
+      <item>foward</item>
+      <item>if</item>
+      <item>iterate</item>
+      <item>irp</item>
+      <item>irps</item>
+      <item>label</item>
+      <item>local</item>
+      <item>match</item>
+      <item>macro</item>
+      <item>postpone</item>
+      <item>purge</item>
+      <item>repeat</item>
+      <item>rept</item>
+      <item>reverse</item>
+      <item>restore</item>
+      <item>restruc</item>
+      <item>struc</item>
+      <item>times</item>
+      <item>while</item>
+      <item>virtual</item>
+      <item>namespace</item>
+    </list>
+
+    <list name="Instruction-like Keywords"> <!-- Contains instruction-like keywords -->
+      <item>align</item>
+      <item>entry</item>
+      <item>extrn</item>
+      <item>format</item>
+      <item>include</item>
+      <item>invoke</item>
+      <item>data</item>
+      <item>load</item>
+      <item>from</item>
+      <item>heap</item>
+      <item>org</item>
+      <item>proc</item>
+      <item>public</item>
+      <item>section</item>
+      <item>segment</item>
+      <item>stack</item>
+      <item>store</item>
+      <item>use16</item>
+      <item>use32</item>
+      <item>use64</item>
+    </list>
+
+    <contexts>
+      <context name="Normal" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="Instruction">
+        <DetectSpaces attribute="Normal Text"/>
+        <RegExpr attribute="Label" context="Instruction" String="(?:(?:\.|@@|&#37;&#37;)(?:\.@)?)?[A-Za-z_][A-Za-z0-9_.]*+:|\.:|@@:" firstNonSpace="1"/>
+      </context>
+
+      <context name="Instruction" attribute="Normal Text" lineEndContext="#pop">
+        <DetectSpaces attribute="Normal Text"/>
+        <DetectChar attribute="Comment" context="#pop!Comment" char=";"/>
+        <keyword attribute="Instructions" context="#pop!Operand" String="instructions"/>
+        <keyword attribute="Branch Instructions" context="#pop!Operand" String="branch instructions"/>
+        <keyword attribute="Data" context="#pop!Operand" String="Data"/>
+        <keyword attribute="Preprocessor" context="#pop!Preprocessor" String="Preprocessor Keywords" lookAhead="1"/>
+        <keyword attribute="Instructions" context="#pop!Operand" String="Instruction-like Keywords"/>
+        <keyword attribute="Instructions" context="#stay" String="repeat prefixes"/>
+        <DetectIdentifier attribute="Unknown Instructions" context="UnknownInstruction"/>
+        <LineContinue attribute="Symbol" context="#pop!Operand"/>
+        <AnyChar attribute="Symbol" context="#stay" String="{}"/>
+      </context>
+      <context name="UnknownInstruction" attribute="Unknown Instructions" lineEndContext="#pop#pop" fallthroughContext="#pop#pop!Operand">
+        <DetectChar attribute="Symbol" context="#stay" char="."/>
+        <DetectIdentifier attribute="Unknown Instructions" context="#stay"/>
+      </context>
+
+      <context name="Operand" attribute="Normal Text" lineEndContext="#pop">
+        <DetectSpaces attribute="Normal Text"/>
+        <DetectChar attribute="Symbol" context="Dollar" char="$"/>
+        <LineContinue attribute="Symbol"/>
+        <AnyChar attribute="Symbol" context="#stay" String=",.+-=/*%~$!?&lt;>()[]{}:|&amp;#`\"/>
+        <DetectChar attribute="String" context="SQString" char="'"/>
+        <DetectChar attribute="String" context="DQString" char="&quot;"/>
+        <DetectChar attribute="Label" context="@Label" char="@"/>
+        <DetectChar attribute="Comment" context="#pop!Comment" char=";"/>
+        <AnyChar attribute="Number" context="Number" String="0123456789" lookAhead="1"/>
+        <keyword attribute="Registers" context="#stay" String="registers"/>
+        <keyword attribute="Data" context="#stay" String="Data"/>
+        <keyword attribute="Operators" context="#stay" String="operators"/>
+        <DetectIdentifier attribute="Normal Text" context="#stay"/>
+      </context>
+      <context name="@Label" attribute="Label" lineEndContext="#pop" fallthroughContext="#pop">
+        <AnyChar attribute="Label" context="#pop" String="bfr"/>
+        <RegExpr attribute="Error" context="#pop" String="."/>
+      </context>
+
+      <context name="Dollar" attribute="Symbol" lineEndContext="#pop" fallthroughContext="#pop">
+        <AnyChar attribute="BaseN" context="#pop!$Hex" String="0123456789"/>
+        <AnyChar attribute="Symbol" context="#pop" String="$@%"/>
+      </context>
+      <context name="$Hex" attribute="BaseN" lineEndContext="#pop" fallthroughContext="#pop">
+        <RegExpr attribute="BaseN" context="#pop!CheckNumberSuffix" String="[0-9a-fA-F_]*"/>
+      </context>
+
+      <context name="Number" attribute="Number" lineEndContext="#pop">
+        <Detect2Chars attribute="Radix" context="#pop!$Hex" char="0" char1="x"/>
+        <Detect2Chars attribute="Radix" context="#pop!$Hex" char="0" char1="X"/>
+        <RegExpr attribute="Float" context="#pop!FloatSuffix" insensitive="1" String="&float;"/>
+        <RegExpr attribute="BaseN" context="#pop!BaseSuffix" insensitive="1" String="&baseN;"/>
+        <RegExpr attribute="Number" context="#pop!NumberSuffix" insensitive="1" String="&number;"/>
+      </context>
+      <context name="FloatSuffix" attribute="Float" lineEndContext="#pop" fallthroughContext="#pop!CheckNumberSuffix">
+        <AnyChar attribute="Radix" context="#pop!CheckNumberSuffix" String="fF"/>
+      </context>
+      <context name="BaseSuffix" attribute="BaseN" lineEndContext="#pop" fallthroughContext="#pop!CheckNumberSuffix">
+        <AnyChar attribute="Radix" context="#pop!CheckNumberSuffix" String="byoqhBYOQH"/>
+      </context>
+      <context name="NumberSuffix" attribute="Number" lineEndContext="#pop" fallthroughContext="#pop!CheckNumberSuffix">
+        <AnyChar attribute="Radix" context="#pop!CheckNumberSuffix" String="dD"/>
+      </context>
+      <context name="CheckNumberSuffix" attribute="Number" lineEndContext="#pop" fallthroughContext="#pop">
+        <DetectSpaces attribute="Normal Text" context="#pop"/>
+        <AnyChar attribute="Symbol" context="#pop" String=",.+-=/*%~!?&lt;>()[]{}:|&amp;#`"/>
+        <RegExpr attribute="Error" context="#pop" String="[\d\w]+"/>
+      </context>
+
+      <context name="SQString" attribute="String" lineEndContext="#pop">
+        <LineContinue attribute="Symbol"/>
+        <DetectChar attribute="String" context="#pop" char="'"/>
+      </context>
+      <context name="DQString" attribute="String" lineEndContext="#pop">
+        <LineContinue attribute="Symbol"/>
+        <DetectChar attribute="String" context="#pop" char="&quot;"/>
+      </context>
+
+      <context name="Preprocessor" attribute="Preprocessor" lineEndContext="#pop">
+        <WordDetect attribute="Preprocessor" context="#pop!Preprocessor.prefix" String="end"/>
+        <WordDetect attribute="Preprocessor" context="#pop!Preprocessor.prefix" String="else"/>
+        <WordDetect attribute="Preprocessor" context="#pop!Preprocessor.virtual" String="virtual"/>
+        <DetectIdentifier attribute="Preprocessor" context="#pop!PreprocessorOperand"/>
+      </context>
+
+      <context name="PreprocessorOperand" attribute="Preprocessor" lineEndContext="#pop">
+        <DetectChar attribute="Symbol" context="#pop" char="{"/>
+        <IncludeRules context="Operand"/>
+      </context>
+
+      <context name="Preprocessor.virtual" attribute="Preprocessor" lineEndContext="#pop" fallthroughContext="#pop!Operand">
+        <DetectSpaces attribute="Normal Text" context="#stay"/>
+        <WordDetect attribute="Preprocessor" context="#pop!Operand" String="at"/>
+      </context>
+      <context name="Preprocessor.prefix" attribute="Preprocessor" lineEndContext="#pop" fallthroughContext="#pop!PreprocessorOperand">
+        <DetectSpaces attribute="Normal Text"/>
+        <keyword attribute="Preprocessor" context="#pop!PreprocessorOperand" String="Preprocessor Keywords"/>
+        <DetectIdentifier attribute="Normal Text" context="#pop!PreprocessorOperand"/>
+      </context>
+
+      <context name="Comment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces attribute="Comment"/>
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+        <DetectIdentifier attribute="Comment"/>
+      </context>
+
+    </contexts>
+
+    <itemDatas>
+      <itemData name="Normal Text" defStyleNum="dsNormal"/>
+      <itemData name="Registers" defStyleNum="dsKeyword"/>
+      <itemData name="Instructions" defStyleNum="dsBuiltIn"/>
+      <itemData name="Branch Instructions" defStyleNum="dsControlFlow"/>
+      <itemData name="Unknown Instructions" defStyleNum="dsNormal"/>
+      <itemData name="Operators" defStyleNum="dsOperator"/>
+      <itemData name="Comment" defStyleNum="dsComment"/>
+      <itemData name="Label" defStyleNum="dsFunction"/>
+      <itemData name="Data" defStyleNum="dsDataType"/>
+      <itemData name="BaseN" defStyleNum="dsBaseN"/>
+      <itemData name="Float" defStyleNum="dsFloat"/>
+      <itemData name="Number" defStyleNum="dsDecVal"/>
+      <itemData name="Radix" defStyleNum="dsBaseN"/>
+      <itemData name="String" defStyleNum="dsString"/>
+      <itemData name="Preprocessor" defStyleNum="dsPreprocessor"/>
+      <itemData name="Symbol" defStyleNum="dsOperator"/>
+      <itemData name="Error" defStyleNum="dsError"/>
+    </itemDatas>
+  </highlighting>
+  <general>
+    <keywords casesensitive="0"/>
+    <comments>
+      <comment name="singleLine" start=";" position="afterwhitespace"/>
     </comments>
   </general>
 </language>
diff --git a/syntax/fortran-fixed.xml b/syntax/fortran-fixed.xml
new file mode 100644
--- /dev/null
+++ b/syntax/fortran-fixed.xml
@@ -0,0 +1,592 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<language name="Fortran (Fixed Format)" version="7" kateversion="5.44" section="Sources" extensions="*.f;*.F;*.for;*.FOR;*.fpp;*.FPP;" mimetype="text/x-fortran-src" casesensitive="0" author="Franchin Matteo (fnch@libero.it)" license="MIT" priority="9">
+<!-- by Franchin Matteo, fnch@libero.it -->
+<!-- NOTE: Keep in sync with the "Fortran (Free Format)" highlighter! (fortran-free.xml) -->
+  <highlighting>
+
+<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->
+<!-- *                              L I S T S                            *  -->
+<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->
+    <list name="keywords">
+      <item>allocate</item>
+      <item>break</item>
+      <item>call</item>
+      <item>common</item>
+      <item>continue</item>
+      <item>cycle</item>
+      <item>deallocate</item>
+      <item>forall</item>
+      <item>where</item>
+      <item>elsewhere</item>
+      <item>equivalence</item>
+      <item>exit</item>
+      <item>external</item>
+      <item>for</item>
+      <item>go</item>
+      <item>goto</item>
+      <item>if</item>
+      <item>implicit</item>
+      <item>include</item>
+      <item>interface</item>
+      <item>intrinsic</item>
+      <item>namelist</item>
+      <item>none</item>
+      <item>nullify</item>
+      <item>operator</item>
+      <item>assignment</item>
+      <item>pause</item>
+      <item>procedure</item>
+      <item>pure</item>
+      <item>elemental</item>
+      <item>record</item>
+      <item>recursive</item>
+      <item>result</item>
+      <item>return</item>
+      <item>stop</item>
+      <item>to</item>
+      <item>use</item>
+      <item>only</item>
+      <item>entry</item>
+      <item>while</item>
+      <!-- Others keywords:
+           case, default, select, selectcase,
+           contains, do, elseif, else, then -->
+    </list>
+    <list name="io_functions">
+      <item>access</item>
+      <item>backspace</item>
+      <item>close</item>
+      <item>inquire</item>
+      <item>open</item>
+      <item>print</item>
+      <item>read</item>
+      <item>rewind</item>
+      <item>write</item>
+      <item>format</item>
+    </list>
+    <!-- Keywords inside read(...), write(...), backspace(...),
+          rewind(...), endfile(...), close(...) -->
+    <list name="io_keywords">
+      <item>unit</item>
+      <item>end</item>
+      <item>err</item>
+      <item>fmt</item>
+      <item>iostat</item>
+      <item>status</item>
+      <item>advance</item>
+      <item>size</item>
+      <item>eor</item>
+    </list>
+    <!-- Keywords inside open(...) -->
+    <list name="open_keywords">
+      <item>unit</item>
+      <item>iostat</item>
+      <item>err</item>
+      <item>file</item>
+      <item>status</item>
+      <item>access</item>
+      <item>form</item>
+      <item>recl</item>
+      <item>blank</item>
+      <item>position</item>
+      <item>action</item>
+      <item>delim</item>
+      <item>pad</item>
+    </list>
+    <!-- Keywords inside inquire(...) -->
+    <list name="inquire_keywords">
+      <item>unit</item>
+      <item>iostat</item>
+      <item>err</item>
+      <item>file</item>
+      <item>exist</item>
+      <item>opened</item>
+      <item>number</item>
+      <item>named</item>
+      <item>name</item>
+      <item>access</item>
+      <item>sequential</item>
+      <item>direct</item>
+      <item>form</item>
+      <item>formatted</item>
+      <item>unformatted</item>
+      <item>recl</item>
+      <item>nextrec</item>
+      <item>blank</item>
+      <item>position</item>
+      <item>action</item>
+      <item>read</item>
+      <item>write</item>
+      <item>readwrite</item>
+      <item>delim</item>
+      <item>pad</item>
+    </list>
+    <list name="types">
+      <item>parameter</item>
+      <item>save</item>
+      <item>pointer</item>
+      <item>public</item>
+      <item>private</item>
+      <item>target</item>
+      <item>allocatable</item>
+      <item>optional</item>
+      <item>sequence</item>
+      <!-- Others types: double, precision -->
+    </list>
+
+<!-- There are 4 types of intrinsic procedures in Fortran 90:
+   1) Elemental procedures (elemental_procs);
+   2) Inquiry functions (inquiry_fn);
+   3) Transformational functions (transform_fn);
+   4) Non elemental subroutines (non_elem_subr);
+  Often mathematical functions have one generic form and many specific names!
+  If you use the generic form, the compiler will select the right function
+  to use depending on the type of the arguments.
+  But you can use also the specific names!
+  -->
+
+<!-- E L E M E N T A L    P R O C E D U R E S -->
+    <list name="elemental_procs">
+    <!-- Elemental functions that may convert -->
+      <item>abs</item>   <!-- Generic form: abs -->
+      <item>cabs</item>  <!-- Specific names for abs -->
+      <item>dabs</item>
+      <item>iabs</item>
+      <item>aimag</item>
+      <item>aint</item>  <!-- Generic form: aint -->
+      <item>dint</item>  <!-- Specific name for aint -->
+      <item>anint</item> <!-- Generic form: anint -->
+      <item>dnint</item> <!-- Specific name for anint -->
+      <item>ceiling</item>
+      <item>cmplx</item>
+      <item>dcmplx</item> <!-- (non standard) -->
+      <item>dimag</item>  <!-- (non standard) -->
+      <item>floor</item>
+      <item>nint</item>  <!-- Generic form: nint -->
+      <item>idnint</item><!-- Specific name for nint -->
+      <item>int</item>   <!-- Generic form: int -->
+      <item>idint</item> <!-- Specific names for int -->
+      <item>ifix</item>
+      <item>real</item>  <!-- Generic form: real -->
+      <item>float</item> <!-- Specific names for real -->
+      <item>sngl</item>
+      <item>dble</item>
+      <item>dreal</item> <!-- (non standard) -->
+      <item>aprime</item> <!-- 5 functions from fortran.xml -->
+      <item>dconjg</item> <!-- I don't know if they really belong to -->
+      <item>dfloat</item> <!-- the fortran 90/95 standard! -->
+      <item>ddmim</item>
+      <item>rand</item>
+    <!-- Elemental functions that do not convert -->
+      <item>modulo</item>
+      <item>conjg</item>
+      <item>dprod</item>  <!-- dprod(x, y) is the specific name for x*y -->
+      <item>dim</item>    <!-- Generic form: dim -->
+      <item>ddim</item>   <!-- Specific names for dim -->
+      <item>idim</item>
+      <item>max</item>    <!-- Generic form: max -->
+      <item>amax0</item>  <!-- Specific names for max -->
+      <item>amax1</item>
+      <item>max0</item>
+      <item>max1</item>
+      <item>dmax1</item>
+      <item>min</item>    <!-- Generic form: min -->
+      <item>amin0</item>  <!-- Specific names for min -->
+      <item>amin1</item>
+      <item>min0</item>
+      <item>min1</item>
+      <item>dmin1</item>
+      <item>mod</item>    <!-- Generic form: mod -->
+      <item>amod</item>   <!-- Specific names for mod -->
+      <item>dmod</item>
+      <item>sign</item>   <!-- Generic form: sign -->
+      <item>dsign</item>  <!-- Specific names for sign -->
+      <item>isign</item>
+    <!-- Elemental mathematical functions -->
+      <item>acos</item>    <!-- Generic form: acos -->
+      <item>dacos</item>   <!-- Specific names for acos -->
+      <item>asin</item>    <!-- Generic form: asin -->
+      <item>dasin</item>   <!-- Specific names for asin -->
+      <item>atan</item>    <!-- Generic form: atan -->
+      <item>datan</item>   <!-- Specific names for atan -->
+      <item>atan2</item>   <!-- Generic form: atan2 -->
+      <item>datan2</item>  <!-- Specific names for atan2 -->
+      <item>cos</item>     <!-- Generic form: cos -->
+      <item>ccos</item>    <!-- Specific names for cos -->
+      <item>dcos</item>
+      <item>cosh</item>    <!-- Generic form: cosh -->
+      <item>dcosh</item>   <!-- Specific names for cosh -->
+      <item>exp</item>     <!-- Generic form: exp -->
+      <item>cexp</item>    <!-- Specific names for exp -->
+      <item>dexp</item>
+      <item>log</item>     <!-- Generic form: log -->
+      <item>alog</item>    <!-- Specific names for log -->
+      <item>dlog</item>
+      <item>clog</item>
+      <item>log10</item>   <!-- Generic form: log10 -->
+      <item>alog10</item>  <!-- Specific names for log10 -->
+      <item>dlog10</item>
+      <item>sin</item>     <!-- Generic form: sin -->
+      <item>csin</item>    <!-- Specific names for sin -->
+      <item>dsin</item>
+      <item>sinh</item>    <!-- Generic form: sinh -->
+      <item>dsinh</item>   <!-- Specific name for sinh -->
+      <item>sqrt</item>    <!-- Generic form: sqrt -->
+      <item>csqrt</item>   <!-- Specific names for sqrt -->
+      <item>dsqrt</item>
+      <item>tan</item>     <!-- Generic form: tan -->
+      <item>dtan</item>    <!-- Generic form: dtan -->
+      <item>tanh</item>    <!-- Generic form: tanh -->
+      <item>dtanh</item>   <!-- Specific names for tanh -->
+    <!-- Elemental character and logical functions -->
+    <!-- Character-integer conversions -->
+      <item>achar</item>
+      <item>char</item>
+      <item>iachar</item>
+      <item>ichar</item>
+    <!-- Lexical comparison functions -->
+      <item>lge</item>
+      <item>lgt</item>
+      <item>lle</item>
+      <item>llt</item>
+    <!-- String-handling elemental functions -->
+      <item>adjustl</item>
+      <item>adjustr</item>
+      <item>index</item>
+      <item>len_trim</item>
+      <item>scan</item>
+      <item>verify</item>
+    <!-- Logical conversion -->
+      <item>logical</item>
+    <!-- Elemental functions to manipulate reals -->
+      <item>exponent</item>
+      <item>fraction</item>
+      <item>nearest</item>
+      <item>rrspacing</item>
+      <item>scale</item>
+      <item>set_exponent</item>
+      <item>spacing</item>
+    <!-- Bit manipulation elemental functions -->
+      <item>btest</item>
+      <item>iand</item>
+      <item>ibclr</item>
+      <item>ibits</item>
+      <item>ibset</item>
+      <item>ieor</item>
+      <item>ior</item>
+      <item>ishft</item>
+      <item>ishftc</item>
+      <item>not</item>
+    <!-- Bit manipulation elemental subroutine -->
+      <item>mvbits</item>
+    <!-- Merge elemental function -->
+      <item>merge</item>
+    </list>
+
+<!-- I N Q U I R Y    F U N C T I O N S -->
+    <list name="inquiry_fn">
+    <!-- Inquiry functions for any type -->
+      <item>associated</item>
+      <item>present</item>
+      <item>kind</item>
+    <!-- String-handling inquiry function -->
+      <item>len</item>
+    <!-- Numeric inquiry functions -->
+      <item>digits</item>
+      <item>epsilon</item>
+      <item>huge</item>
+      <item>maxexponent</item>
+      <item>minexponent</item>
+      <item>precision</item>
+      <item>radix</item>
+      <item>range</item>
+      <item>tiny</item>
+    <!-- Bit inquiry function -->
+      <item>bit_size</item>
+    <!-- Array inquiry functions -->
+      <item>allocated</item>
+      <item>lbound</item>
+      <item>ubound</item>
+      <item>shape</item>
+      <item>size</item>
+    </list>
+
+<!-- T R A N S F O R M A T I O N A L    F U N C T I O N S -->
+    <list name="transform_fn">
+    <!-- String-handling transformational functions -->
+      <item>repeat</item>
+      <item>trim</item>
+    <!-- Transformational functions for kind values -->
+      <item>selected_int_kind</item>
+      <item>selected_real_kind</item>
+    <!-- Transfer function -->
+      <item>transfer</item>
+    <!-- Vector and matrix multiplication functions -->
+      <item>dot_product</item>
+      <item>matmul</item>
+    <!-- Transformational functions that reduce arrays -->
+      <item>all</item>
+      <item>any</item>
+      <item>count</item>
+      <item>maxval</item>
+      <item>minval</item>
+      <item>product</item>
+      <item>sum</item>
+    <!-- Packing and unpacking arrays -->
+      <item>pack</item>
+      <item>unpack</item>
+    <!-- Transformational function for reshaping an array -->
+      <item>reshape</item>
+    <!-- Transformational function for replication -->
+      <item>spread</item>
+    <!-- Array shifting functions -->
+      <item>cshift</item>
+      <item>eoshift</item>
+    <!-- Matrix transpose -->
+      <item>transpose</item>
+    <!-- Transformational functions for geometric location -->
+      <item>maxloc</item>
+      <item>minloc</item>
+    </list>
+
+<!-- N O N    E L E M E N T A L    S U B R O U T I N E S -->
+    <list name="non_elem_subr">
+    <!-- Real time clock -->
+      <item>date_and_time</item>
+      <item>system_clock</item>
+    <!-- Random numbers -->
+      <item>random_number</item>
+      <item>random_seed</item>
+    </list>
+
+<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->
+<!-- *                           C O N T E X T S                         *  -->
+<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->
+    <contexts>
+      <context attribute="Normal Text" lineEndContext="#stay" name="default" >
+        <IncludeRules context="find_preprocessor" />
+        <IncludeRules context="find_comments" />
+        <IncludeRules context="find_strings" />
+        <IncludeRules context="find_decls" />
+        <IncludeRules context="find_intrinsics" />
+        <IncludeRules context="find_io_stmnts" />
+        <IncludeRules context="find_op_and_log" />
+        <IncludeRules context="find_numbers" />
+        <IncludeRules context="find_continue" />
+        <IncludeRules context="find_symbols" />
+        <IncludeRules context="find_begin_stmnts" />
+        <IncludeRules context="find_end_stmnts" />
+        <IncludeRules context="find_mid_stmnts" />
+      </context>
+<!--************************END OF THE MAIN CONTEXT*************************-->
+
+
+<!-- IMPORTANT: If you modify something, do it also in "fortran-free.xml"! -->
+
+<!-- This context highlights preprocessor lines -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_preprocessor">
+        <DetectChar attribute="Preprocessor" context="preprocessor" char="#" column="0"/>
+        <StringDetect attribute="Preprocessor" context="preprocessor" String="cDEC$" column="0"/>
+        <StringDetect attribute="Preprocessor" context="preprocessor" String="CDEC$" column="0"/>
+      </context>
+      <context attribute="Preprocessor" lineEndContext="#pop" name="preprocessor" />
+
+<!-- This context highlights operators and the logical values .true. .false. -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_op_and_log">
+        <StringDetect attribute="Logical" context="#stay" String=".true." insensitive="true"/>
+        <StringDetect attribute="Logical" context="#stay" String=".false." insensitive="true"/>
+        <RegExpr attribute="Operator" context="#stay" String="\.[A-Za-z]+\."/>
+        <Detect2Chars attribute="Operator" context="#stay" char="=" char1="="/>
+        <Detect2Chars attribute="Operator" context="#stay" char="/" char1="="/>
+        <Detect2Chars attribute="Operator" context="#stay" char="&lt;" char1="="/>
+        <Detect2Chars attribute="Operator" context="#stay" char="&gt;" char1="="/>
+        <AnyChar attribute="Operator" context="#stay" String="&lt;&gt;"/>
+      </context>
+
+<!-- This context highlights comments -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_comments">
+        <AnyChar attribute="Comment" context="comment" String="cC*" column="0"/>
+        <DetectChar attribute="Comment" context="comment" char="!"/>
+        <RegExpr attribute="Comment" context="comment" String="." column="72" />
+      </context>
+
+      <context attribute="Comment" lineEndContext="#pop" name="comment">
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
+
+<!-- This context highlights symbols -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_symbols">
+        <Detect2Chars attribute="Keyword" context="#stay" char="*" char1="*"/>
+        <Detect2Chars attribute="Keyword" context="#stay" char="(" char1="/"/>
+        <Detect2Chars attribute="Keyword" context="#stay" char="/" char1=")"/>
+        <AnyChar attribute="Keyword" context="#stay" String="&amp;+-*/=?[]^{|}~"/>
+        <AnyChar attribute="Symbol" context="#stay" String="(),"/>
+      </context>
+
+<!-- This context highlights the continuation character -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_continue">
+        <RegExpr attribute="Continuation character" context="#stay" String="^     [^0-9\s]" column="0"/>
+      </context>
+
+<!-- This context highlights items inside the parentesis of a function -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="inside_func_paren">
+        <DetectChar attribute="Normal Text" context="inside_func_paren" char="("/>
+        <DetectChar attribute="Normal Text" context="#pop" char=")"/>
+        <IncludeRules context="find_strings" />
+        <IncludeRules context="find_intrinsics" />
+        <IncludeRules context="find_numbers" />
+      </context>
+
+<!-- The following two contexts match input/output statements -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_io_stmnts">
+        <RegExpr attribute="IO Function" context="find_io_paren" String="\b(?:read|write|backspace|rewind|end\s*file|close|open|inquire)\s*[(]" insensitive="true"/>
+        <RegExpr attribute="IO Function" context="format_stmnt" String="\bformat\s*[(]" insensitive="true"/>
+        <RegExpr attribute="IO Function" context="#stay" String="\bend\s*file\b" insensitive="true"/>
+        <keyword attribute="IO Function" context="#stay" String="io_functions"/>
+      </context>
+<!-- This context matches parenthesis for the read, write, ... statements -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_io_paren">
+        <DetectChar attribute="IO Function" context="#stay" char="*"/>
+        <DetectChar attribute="Normal Text" context="inside_func_paren" char="("/>
+        <DetectChar attribute="IO Function" context="#pop" char=")"/>
+        <keyword attribute="IO Function"  context="#stay" String="io_keywords"/>
+        <keyword attribute="IO Function"  context="#stay" String="inquire_keywords"/>
+        <keyword attribute="IO Function"  context="#stay" String="open_keywords"/>
+        <IncludeRules context="find_strings" />
+        <IncludeRules context="find_intrinsics" />
+        <IncludeRules context="find_numbers" />
+        <IncludeRules context="find_symbols" />
+      </context>
+<!-- This context highlights the text inside the parenthesis of fortran statement -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="format_stmnt">
+        <DetectChar attribute="IO Function" context="format_stmnt" char="("/>
+        <DetectChar attribute="IO Function" context="#pop" char=")"/>
+        <RegExpr attribute="IO Function" context="#stay" String="[0-9]*/" insensitive="true"/>
+        <DetectChar attribute="IO Function" context="#stay" char=":"/>
+        <IncludeRules context="find_strings" />
+        <IncludeRules context="find_symbols" />
+      </context>
+
+<!-- The following context matches the begin of program units -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_begin_stmnts">
+        <RegExpr attribute="Keyword" context="#stay" String="\bmodule\s+procedure\b" insensitive="true"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\b(?:subroutine|function|block\s*data|program|module)\b" insensitive="true" beginRegion="Routine"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\b(?:then|do|select\s+case)\b" insensitive="true" beginRegion="Block"/>
+      </context>
+<!-- The following context matches the end of program units -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_end_stmnts">
+        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(?:subroutine|function|block\s*data|program|module)\b" insensitive="true" endRegion="Routine"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(?:do|if)\b" insensitive="true" endRegion="Block"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(?:select|where|forall|interface)\b" insensitive="true"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\belse\s*if\b" insensitive="true" endRegion="Block"/>
+        <WordDetect attribute="Keyword" context="#stay" String="end" insensitive="true" endRegion="Routine"/>
+      </context>
+<!-- The following context matches the mid of program units -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_mid_stmnts">
+        <WordDetect attribute="Keyword" context="#stay" String="else" insensitive="true" endRegion="Block" beginRegion="Block"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\bcase(?:\s+default)?\b" insensitive="true" endRegion="Block" beginRegion="Block"/>
+        <WordDetect attribute="Keyword" context="#stay" String="contains" insensitive="true" endRegion="Routine" beginRegion="Routine"/>
+      </context>
+
+<!-- The following two contexts match declarations -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_decls">
+        <RegExpr attribute="Data Type" context="#stay" String="\b(?:integer|real|complex)[\*]\d{1,2}" insensitive="true"/>
+        <RegExpr attribute="Data Type" context="#stay" String="\bend\s*type\b" insensitive="true"/>
+        <keyword attribute="Data Type" context="#stay" String="types"/>
+        <WordDetect attribute="Data Type" context="#stay" String="data" firstNonSpace="true" insensitive="true"/>
+        <!--<RegExpr attribute="Data Type" context="find_paren" String="real\s*[(]" firstNonSpace="true" insensitive="true"/>
+        <RegExpr attribute="Data Type" context="#stay" String="real(?![\w\*])" firstNonSpace="true" insensitive="true"/>-->
+        <RegExpr attribute="Data Type" context="#stay" String="\bcharacter[*][0-9]+\b" insensitive="true"/>
+        <RegExpr attribute="Data Type" context="find_paren" String="\b(?:type|integer|real|complex|character|logical|intent|dimension)\s*[(]" insensitive="true"/>
+        <RegExpr attribute="Data Type" context="#stay" String="\b(?:type|integer|real|complex|character|logical|double\s*precision|intent|dimension)\b" insensitive="true"/>
+        <Detect2Chars attribute="Data Type" context="#stay" char=":" char1=":"/>
+      </context>
+<!-- This context matches parenthesis in data type declarations, such as in 'real(...)'-->
+      <context attribute="Data Type" lineEndContext="#pop" name="find_paren">
+        <DetectChar attribute="Data Type" context="find_paren" char="("/>
+        <DetectChar attribute="Data Type" context="#pop" char=")"/>
+      </context>
+
+<!-- The following context matches intrinsic procedures -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_intrinsics">
+        <keyword attribute="Keyword" context="#stay" String="keywords"/>
+      <!-- INTRINSIC PROCEDURES -->
+        <keyword attribute="Elemental Procedure"       context="#stay" String="elemental_procs"/>
+        <keyword attribute="Inquiry Function"          context="#stay" String="inquiry_fn"/>
+        <keyword attribute="Transformational Function" context="#stay" String="transform_fn"/>
+        <keyword attribute="Non elemental subroutine"  context="#stay" String="non_elem_subr"/>
+      </context>
+
+<!-- The following context matches integer and real numbers -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_numbers">
+        <!-- Floating-point numbers with optional kind -->
+        <RegExpr attribute="Float" context="#stay" String="[0-9]*\.[0-9]+(?:[de][+-]?[0-9]+)?(?:[_](?:[0-9]+|[a-z][\w_]*))?" insensitive="true"/>
+        <RegExpr attribute="Float" context="#stay" String="\b[0-9]+\.[0-9]*(?:[de][+-]?[0-9]+)?(?:[_](?:[0-9]+|[a-z][\w_]*))?(?![a-z])" insensitive="true"/>
+        <RegExpr attribute="Float" context="#stay" String="\b[0-9]+[de][+-]?[0-9]+(?:[_](?:[0-9]+|[a-z][\w_]*))?" insensitive="true"/>
+        <!-- Integers with optional kind specifier -->
+        <RegExpr attribute="Decimal" context="#stay" String="\b[0-9]+(?:[_](?:[0-9]+|[a-zA-Z][\w_]*))?"/>
+        <!-- Integers in binary, octal and hexadecimal notations -->
+        <RegExpr attribute="Decimal" context="#stay" String="\b[bozx](?:[&apos;][0-9a-f]+[&apos;]|[&quot;][0-9a-f]+[&quot;])" insensitive="true"/>
+      </context>
+
+<!-- The following four contexts implement the complex string multi-line declarations -->
+      <!-- Matches STRINGS (there are 2 types of strings: '...' and "...") -->
+      <context attribute="String" lineEndContext="#stay" name="find_strings">
+        <DetectChar attribute="String" context="string_1" char="&apos;"/>
+        <DetectChar attribute="String" context="string_2" char="&quot;"/>
+      </context>
+
+      <context attribute="String" lineEndContext="#stay" name="string_1" fallthrough="true" fallthroughContext="#pop">
+        <RegExpr attribute="String" context="#pop" String="[^&apos;]*&apos;"/>
+        <RegExpr attribute="Keyword" context="end_of_string" String="&amp;\s*$"/>
+        <RegExpr attribute="String" context="end_of_string" String=".*(?=&amp;\s*$)"/>
+      </context>
+
+      <context attribute="String" lineEndContext="#stay" name="string_2" fallthrough="true" fallthroughContext="#pop">
+        <RegExpr attribute="String" context="#pop" String="[^&quot;]*&quot;"/>
+        <RegExpr attribute="Keyword" context="end_of_string" String="&amp;\s*$"/>
+        <RegExpr attribute="String" context="end_of_string" String=".*(?=&amp;\s*$)"/>
+      </context>
+
+      <context attribute="String" lineEndContext="#stay" name="end_of_string" fallthrough="true" fallthroughContext="#pop#pop">
+        <DetectSpaces />
+        <RegExpr attribute="Keyword" context="#stay" String="&amp;\s*$"/>
+        <DetectChar attribute="Keyword" context="#pop" char="&amp;" firstNonSpace="true"/>
+        <AnyChar attribute="Comment" context="comment" String="cC*" column="0"/>
+        <DetectChar attribute="Comment" context="comment" char="!" firstNonSpace="true"/>
+      </context>
+    </contexts>
+
+<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->
+<!-- *             S T Y L E   I T E M   D E F I N I T I O N S           *  -->
+<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->
+    <itemDatas>
+      <itemData name="Normal Text" defStyleNum="dsNormal"/>
+      <itemData name="Keyword" defStyleNum="dsKeyword"/>
+      <itemData name="Data Type" defStyleNum="dsDataType"/>
+      <itemData name="Decimal" defStyleNum="dsDecVal"/>
+      <itemData name="Float" defStyleNum="dsFloat"/>
+      <itemData name="String" defStyleNum="dsString"/>
+      <itemData name="Comment" defStyleNum="dsComment"/>
+      <itemData name="Symbol" defStyleNum="dsNormal"/>
+      <itemData name="Preprocessor" defStyleNum="dsOthers"/>
+      <itemData name="Operator" defStyleNum="dsOperator" bold="1" italic="0"/>
+      <itemData name="Logical" defStyleNum="dsConstant" bold="1" italic="0"/>
+      <itemData name="IO Function" defStyleNum="dsFunction" bold="0" italic="0"/>
+      <itemData name="Elemental Procedure" defStyleNum="dsBuiltIn" bold="1" italic="0"/>
+      <itemData name="Continuation character" defStyleNum="dsBuiltIn" bold="1" italic="0"/>
+      <itemData name="Inquiry Function" defStyleNum="dsFunction" bold="1" italic="1"/>
+      <itemData name="Transformational Function" defStyleNum="dsFunction" bold="1" italic="0"/>
+      <itemData name="Non elemental subroutine" defStyleNum="dsFunction" bold="1" italic="0"/>
+    </itemDatas>
+  </highlighting>
+  <general>
+    <comments>
+      <comment name="singleLine" start="c"/>
+    </comments>
+    <keywords casesensitive="0"/>
+  </general>
+</language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/fortran-free.xml b/syntax/fortran-free.xml
new file mode 100644
--- /dev/null
+++ b/syntax/fortran-free.xml
@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<language name="Fortran (Free Format)" version="3" kateversion="5.53" section="Sources" extensions="*.f90;*.F90;*.f95;*.F95;*.f03;*.F03;*.f08;*.F08;" mimetype="text/x-fortran-src" casesensitive="0" author="Franchin Matteo (fnch@libero.it), Janus Weil" license="MIT" priority="10">
+<!-- Original author: Franchin Matteo (fnch@libero.it).
+     Adaptation to free & fixed format: Janus Weil.
+-->
+<!-- NOTE: Keep in sync with the "Fortran (Fixed Format)" highlighter! (fortran-fixed.xml) -->
+  <highlighting>
+
+<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->
+<!-- *                              L I S T S                            *  -->
+<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->
+    <list name="keywords">
+      <include>keywords##Fortran (Fixed Format)</include>
+      <item>associate</item>
+      <item>import</item>
+      <item>impure</item>
+    </list>
+    <list name="io_functions">
+      <include>io_functions##Fortran (Fixed Format)</include>
+    </list>
+    <!-- Keywords inside read(...), write(...), backspace(...),
+          rewind(...), endfile(...), close(...) -->
+    <list name="io_keywords">
+      <include>io_keywords##Fortran (Fixed Format)</include>
+    </list>
+    <!-- Keywords inside open(...) -->
+    <list name="open_keywords">
+      <include>open_keywords##Fortran (Fixed Format)</include>
+    </list>
+    <!-- Keywords inside inquire(...) -->
+    <list name="inquire_keywords">
+      <include>inquire_keywords##Fortran (Fixed Format)</include>
+    </list>
+    <list name="types">
+      <include>types##Fortran (Fixed Format)</include>
+      <item>abstract</item>
+      <item>asynchronous</item>
+      <item>bind</item>
+      <item>contiguous</item>
+      <item>deferred</item>
+      <item>enum</item>
+      <item>enumerator</item>
+      <item>final</item>
+      <item>generic</item>
+      <item>nopass</item>
+      <item>non_overridable</item>
+      <item>protected</item>
+      <item>value</item>
+      <item>volatile</item>
+    </list>
+
+<!-- There are 4 types of intrinsic procedures in Fortran 90:
+   1) Elemental procedures (elemental_procs);
+   2) Inquiry functions (inquiry_fn);
+   3) Transformational functions (transform_fn);
+   4) Non elemental subroutines (non_elem_subr);
+  Often mathematical functions have one generic form and many specific names!
+  If you use the generic form, the compiler will select the right function
+  to use depending on the type of the arguments.
+  But you can use also the specific names!
+  -->
+
+<!-- E L E M E N T A L    P R O C E D U R E S -->
+    <list name="elemental_procs">
+      <include>elemental_procs##Fortran (Fixed Format)</include>
+    <!-- Elemental mathematical functions -->
+      <item>acosh</item>
+      <item>asinh</item>
+      <item>atanh</item>
+      <item>bessel_j0</item>
+      <item>bessel_j1</item>
+      <item>bessel_jn</item>
+      <item>bessel_y0</item>
+      <item>bessel_y1</item>
+      <item>bessel_yn</item>
+      <item>erf</item>
+      <item>erfc</item>
+      <item>erfc_scaled</item>
+      <item>gamma</item>
+      <item>log_gamma</item>
+      <item>hypot</item>
+    </list>
+
+<!-- I N Q U I R Y    F U N C T I O N S -->
+    <list name="inquiry_fn">
+      <include>inquiry_fn##Fortran (Fixed Format)</include>
+    <!-- Inquiry functions for any type -->
+      <item>extends_type_of</item>
+      <item>same_type_as</item>
+      <item>storage_size</item>
+    <!-- Coarray inquiry functions -->
+      <item>lcobound</item>
+      <item>ucobound</item>
+      <item>image_index</item>
+    </list>
+
+<!-- T R A N S F O R M A T I O N A L    F U N C T I O N S -->
+    <list name="transform_fn">
+      <include>transform_fn##Fortran (Fixed Format)</include>
+    <!-- Transformational functions for kind values -->
+      <item>selected_char_kind</item>
+    <!-- Transformational functions that reduce arrays -->
+      <item>parity</item>
+      <item>iall</item>
+      <item>iany</item>
+      <item>iparity</item>
+    <!-- Coarray transformational functions -->
+      <item>num_images</item>
+      <item>this_image</item>
+    </list>
+
+<!-- N O N    E L E M E N T A L    S U B R O U T I N E S -->
+    <list name="non_elem_subr">
+      <include>non_elem_subr##Fortran (Fixed Format)</include>
+    <!-- Real time clock -->
+      <item>cpu_time</item>
+    <!-- System commands -->
+      <item>execute_command_line</item>
+      <item>get_environment_variable</item>
+    </list>
+
+<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->
+<!-- *                           C O N T E X T S                         *  -->
+<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->
+    <contexts>
+      <context attribute="Normal Text" lineEndContext="#stay" name="default" >
+        <IncludeRules context="find_strings" />
+        <IncludeRules context="find_io_stmnts" />
+        <IncludeRules context="find_op_and_log##Fortran (Fixed Format)" />
+        <IncludeRules context="find_numbers##Fortran (Fixed Format)" />
+        <IncludeRules context="find_preprocessor##Fortran (Fixed Format)" />
+        <IncludeRules context="find_comments" />
+        <IncludeRules context="find_symbols##Fortran (Fixed Format)" />
+        <IncludeRules context="find_begin_stmnts" />
+        <IncludeRules context="find_mid_stmnts" />
+        <IncludeRules context="find_end_stmnts" />
+        <IncludeRules context="find_decls" />
+        <IncludeRules context="find_intrinsics" />
+      </context>
+<!--************************END OF THE MAIN CONTEXT*************************-->
+
+
+<!-- IMPORTANT: If you modify something, do it also in "fortran-fixed.xml"! -->
+
+<!-- This context highlights comments -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_comments">
+        <DetectChar attribute="Comment" context="comment" char="!"/>
+      </context>
+      <context attribute="Comment" lineEndContext="#pop" name="comment">
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
+
+<!-- This context highlights items inside the parentesis of a function -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="inside_func_paren">
+      <!-- inside_func_paren##Fortran (Fixed Format) -->
+        <DetectChar attribute="Normal Text" context="inside_func_paren" char="("/>
+        <DetectChar attribute="Normal Text" context="#pop" char=")"/>
+        <IncludeRules context="find_strings" />
+        <IncludeRules context="find_intrinsics" />
+        <IncludeRules context="find_numbers##Fortran (Fixed Format)" />
+      </context>
+
+<!-- The following two contexts match input/output statements -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_io_stmnts">
+        <RegExpr attribute="IO Function" context="find_io_paren" String="\b(?:flush|wait)\s*[(]" insensitive="true"/>
+      <!-- find_io_stmnts##Fortran (Fixed Format) -->
+        <RegExpr attribute="IO Function" context="find_io_paren" String="\b(?:read|write|backspace|rewind|end\s*file|close|open|inquire)\s*[(]" insensitive="true"/>
+        <RegExpr attribute="IO Function" context="format_stmnt" String="\bformat\s*[(]" insensitive="true"/>
+        <RegExpr attribute="IO Function" context="#stay" String="\bend\s*file\b" insensitive="true"/>
+        <keyword attribute="IO Function" context="#stay" String="io_functions"/>
+      </context>
+<!-- This context matches parenthesis for the read, write, ... statements -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_io_paren">
+      <!-- find_io_paren##Fortran (Fixed Format) -->
+        <DetectChar attribute="IO Function" context="#stay" char="*"/>
+        <DetectChar attribute="Normal Text" context="inside_func_paren" char="("/>
+        <DetectChar attribute="IO Function" context="#pop" char=")"/>
+        <keyword attribute="IO Function"  context="#stay" String="io_keywords"/>
+        <keyword attribute="IO Function"  context="#stay" String="inquire_keywords"/>
+        <keyword attribute="IO Function"  context="#stay" String="open_keywords"/>
+        <IncludeRules context="find_strings" />
+        <IncludeRules context="find_intrinsics" />
+        <IncludeRules context="find_numbers##Fortran (Fixed Format)" />
+        <IncludeRules context="find_symbols##Fortran (Fixed Format)" />
+      </context>
+<!-- This context highlights the text inside the parenthesis of fortran statement -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="format_stmnt">
+        <DetectChar attribute="IO Function" context="format_stmnt" char="("/>
+        <DetectChar attribute="IO Function" context="#pop" char=")"/>
+        <IncludeRules context="find_strings" />
+        <IncludeRules context="format_stmnt##Fortran (Fixed Format)" />
+      </context>
+
+<!-- FIXME: beginRegion/endRegion don't work well with IncludeRules. When this is corrected, use IncludeRules instead of replicating rules. -->
+<!-- The following context matches the begin of program units -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_begin_stmnts">
+        <WordDetect attribute="Keyword" context="#stay" String="submodule" insensitive="true" beginRegion="Routine"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\b(?:do\s*[,\s]\s*concurrent|select\s+type|block|critical)\b" insensitive="true" beginRegion="Block"/>
+      <!-- Here IncludeRules: find_begin_stmnts##Fortran (Fixed Format) -->
+        <RegExpr attribute="Keyword" context="#stay" String="\bmodule\s+procedure\b" insensitive="true"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\b(?:subroutine|function|block\s*data|program|module)\b" insensitive="true" beginRegion="Routine"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\b(?:then|do|select\s+case)\b" insensitive="true" beginRegion="Block"/>
+      </context>
+<!-- The following context matches the end of program units -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_end_stmnts">
+        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(?:procedure|submodule)\b" insensitive="true" endRegion="Routine"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(?:block|critical)\b" insensitive="true" endRegion="Block"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(?:associate)\b" insensitive="true"/>
+        <RegExpr attribute="Data Type" context="#stay" String="\bend\s*(?:type|enum)\b" insensitive="true"/>
+      <!-- Here IncludeRules: find_end_stmnts##Fortran (Fixed Format) -->
+        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(?:subroutine|function|block\s*data|program|module)\b" insensitive="true" endRegion="Routine"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(?:do|if)\b" insensitive="true" endRegion="Block"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\bend\s*(?:select|where|forall|interface)\b" insensitive="true"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\belse\s*if\b" insensitive="true" endRegion="Block"/>
+        <WordDetect attribute="Keyword" context="#stay" String="end" insensitive="true" endRegion="Routine"/>
+      </context>
+<!-- The following context matches the mid of program units -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_mid_stmnts">
+        <RegExpr attribute="Keyword" context="#stay" String="\b(?:type\s+is|class\s+(?:is|default))\b" insensitive="true" endRegion="Block" beginRegion="Block"/>
+      <!-- Here IncludeRules: find_mid_stmnts##Fortran (Fixed Format) -->
+        <WordDetect attribute="Keyword" context="#stay" String="else" insensitive="true" endRegion="Block" beginRegion="Block"/>
+        <RegExpr attribute="Keyword" context="#stay" String="\bcase(?:\s+default)?\b" insensitive="true" endRegion="Block" beginRegion="Block"/>
+        <WordDetect attribute="Keyword" context="#stay" String="contains" insensitive="true" endRegion="Routine" beginRegion="Routine"/>
+      </context>
+
+<!-- The following two contexts match declarations -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_decls">
+        <RegExpr attribute="Data Type" context="find_paren" String="\b(?:class|extends|procedure|pass|codimension)\s*[(]" insensitive="true"/>
+        <WordDetect attribute="Data Type" context="#stay" String="codimension" insensitive="true"/>
+        <WordDetect attribute="Data Type" context="#stay" String="procedure" insensitive="true"/>
+        <WordDetect attribute="Data Type" context="#stay" String="pass" insensitive="true"/>
+      <!-- find_decls##Fortran (Fixed Format) -->
+        <keyword attribute="Data Type" context="#stay" String="types"/>
+        <!--<RegExpr attribute="Data Type" context="find_paren" String="real\s*[(]" firstNonSpace="true" insensitive="true"/>-->
+        <RegExpr attribute="Data Type" context="find_paren" String="\b(?:type|integer|real|complex|character|logical|intent|dimension)\s*[(]" insensitive="true"/>
+        <IncludeRules context="find_decls##Fortran (Fixed Format)"/>
+      </context>
+<!-- This context matches parenthesis in data type declarations, such as in 'real(...)'-->
+      <context attribute="Data Type" lineEndContext="#pop" name="find_paren">
+      <!-- find_paren##Fortran (Fixed Format) -->
+        <DetectChar attribute="Data Type" context="find_paren" char="("/>
+        <DetectChar attribute="Data Type" context="find_paren" char="["/>
+        <DetectChar attribute="Data Type" context="#pop" char=")"/>
+        <DetectChar attribute="Data Type" context="#pop" char="]"/>
+      </context>
+
+<!-- The following context matches intrinsic procedures -->
+      <context attribute="Normal Text" lineEndContext="#stay" name="find_intrinsics">
+      <!-- find_intrinsics##Fortran (Fixed Format) -->
+        <keyword attribute="Keyword" context="#stay" String="keywords"/>
+      <!-- INTRINSIC PROCEDURES -->
+        <keyword attribute="Elemental Procedure"       context="#stay" String="elemental_procs"/>
+        <keyword attribute="Inquiry Function"          context="#stay" String="inquiry_fn"/>
+        <keyword attribute="Transformational Function" context="#stay" String="transform_fn"/>
+        <keyword attribute="Non elemental subroutine"  context="#stay" String="non_elem_subr"/>
+      </context>
+
+<!-- The following four contexts implement the complex string multi-line declarations -->
+<!-- NOTE: Contexts replicated from "Fortran (Fixed Format)" -->
+      <!-- Matches STRINGS (there are 2 types of strings: '...' and "...") -->
+      <context attribute="String" lineEndContext="#stay" name="find_strings">
+        <DetectChar attribute="String" context="string_1" char="&apos;"/>
+        <DetectChar attribute="String" context="string_2" char="&quot;"/>
+      </context>
+
+      <context attribute="String" lineEndContext="#stay" name="string_1" fallthrough="true" fallthroughContext="#pop">
+        <RegExpr attribute="String" context="#pop" String="[^&apos;]*&apos;"/>
+        <RegExpr attribute="Keyword" context="end_of_string" String="&amp;\s*$"/>
+        <RegExpr attribute="String" context="end_of_string" String=".*(?=&amp;\s*$)"/>
+      </context>
+
+      <context attribute="String" lineEndContext="#stay" name="string_2" fallthrough="true" fallthroughContext="#pop">
+        <RegExpr attribute="String" context="#pop" String="[^&quot;]*&quot;"/>
+        <RegExpr attribute="Keyword" context="end_of_string" String="&amp;\s*$"/>
+        <RegExpr attribute="String" context="end_of_string" String=".*(?=&amp;\s*$)"/>
+      </context>
+
+      <context attribute="String" lineEndContext="#stay" name="end_of_string" fallthrough="true" fallthroughContext="#pop#pop">
+        <DetectSpaces />
+        <RegExpr attribute="Keyword" context="#stay" String="&amp;\s*$"/>
+        <DetectChar attribute="Keyword" context="#pop" char="&amp;" firstNonSpace="true"/>
+        <DetectChar attribute="Comment" context="comment" char="!" firstNonSpace="true"/>
+      </context>
+    </contexts>
+
+<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->
+<!-- *             S T Y L E   I T E M   D E F I N I T I O N S           *  -->
+<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  -->
+    <itemDatas>
+      <itemData name="Normal Text" defStyleNum="dsNormal"/>
+      <itemData name="Keyword" defStyleNum="dsKeyword"/>
+      <itemData name="Data Type" defStyleNum="dsDataType"/>
+      <itemData name="String" defStyleNum="dsString"/>
+      <itemData name="Comment" defStyleNum="dsComment"/>
+      <itemData name="IO Function" defStyleNum="dsFunction" bold="0" italic="0"/>
+      <itemData name="Elemental Procedure" defStyleNum="dsBuiltIn" bold="1" italic="0"/>
+      <itemData name="Inquiry Function" defStyleNum="dsFunction" bold="1" italic="1"/>
+      <itemData name="Transformational Function" defStyleNum="dsFunction" bold="1" italic="0"/>
+      <itemData name="Non elemental subroutine" defStyleNum="dsFunction" bold="1" italic="0"/>
+    </itemDatas>
+  </highlighting>
+  <general>
+    <comments>
+      <comment name="singleLine" start="!"/>
+    </comments>
+    <keywords casesensitive="0"/>
+  </general>
+</language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/fsharp.xml b/syntax/fsharp.xml
--- a/syntax/fsharp.xml
+++ b/syntax/fsharp.xml
@@ -9,7 +9,7 @@
 <!ENTITY ESC    "(\\[ntbr'&quot;\\]|\\[0-9]{3}|\\x[0-9A-Fa-f]{2})"> <!-- OCaml character code escapes. -->
 <!ENTITY DEC    "[0-9][0-9_]*">                                     <!-- Decimal digits with underscores. -->
 ]>
-<language name="FSharp" version="5" kateversion="5.0" section="Sources" extensions="*.fs;*.fsi;*.fsx" mimetype="" priority="10" author="Bas Bossink (bas.bossink@gmail.com)" license="LGPL">
+<language name="FSharp" version="6" kateversion="5.0" section="Sources" extensions="*.fs;*.fsi;*.fsx" mimetype="" priority="10" author="Bas Bossink (bas.bossink@gmail.com)" license="LGPL">
 
   <highlighting>
     <list name="keywords">
@@ -190,11 +190,18 @@
         <RegExpr attribute="Decimal" context="#stay" String="-?&DEC;" />
       </context>
 
-      <context attribute="Comment" lineEndContext="#pop" name="Singleline Comment"/>
+      <context attribute="Comment" lineEndContext="#pop" name="Singleline Comment">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
+      </context>
       <context attribute="Comment" lineEndContext="#stay" name="Multiline Comment">
         <!-- Support for nested comments -->
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1=")" endRegion="comment" />
         <Detect2Chars attribute="Comment" context="Multiline Comment" char="(" char1="*" beginRegion="comment" />
+        <DetectSpaces />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
 
       <context attribute="String" lineEndContext="#stay" name="String Constant">
@@ -275,8 +282,7 @@
     <keywords casesensitive="1" />
     <comments>
       <comment name="singleLine" start="//" />
-      <comment name="singleLine" start="///" />
-      <comment name="multiLine" start="(*" end="*)" />
+      <comment name="multiLine" start="(*" end="*)" region="comment" />
     </comments>
   </general>
 </language>
diff --git a/syntax/glsl.xml b/syntax/glsl.xml
--- a/syntax/glsl.xml
+++ b/syntax/glsl.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="GLSL" section="3D" extensions="*.glsl;*.vert;*.vs;*.frag;*.fs;*.geom;*.gs;*.tcs;*.tes" mimetype="text/x-glslsrc" version="4" kateversion="5.0" author="Oliver Richers (o.richers@tu-bs.de)" license="LGPL">
+<language name="GLSL" section="3D" extensions="*.glsl;*.vert;*.vs;*.frag;*.fs;*.geom;*.gs;*.tcs;*.tes" mimetype="text/x-glslsrc" version="6" kateversion="5.0" author="Oliver Richers (o.richers@tu-bs.de)" license="LGPL">
 	<highlighting>
 		<list name="keywords">
 			<item>break</item>
@@ -176,11 +176,6 @@
 			<item>readonly</item>
 			<item>writeonly</item>
 		</list>
-		<list name="attention">
-			<item>FIXME</item>
-			<item>TODO</item>
-			<item>BUG</item>
-		</list>
 		<list name="stdlib">
 			<!-- see also: https://www.opengl.org/sdk/docs/man4/ -->
 			<item>abs</item>
@@ -1173,18 +1168,22 @@
 				<DetectChar attribute="Preprocessor" context="Preprocessor" char="#" firstNonSpace="true"/>
 				<RegExpr attribute="Function" context="#stay" String="\b[_\w][_\w\d]*(?=[\s]*[(])" />
 				
-				<RegExpr attribute="Symbol" context="Member" String="[.]{1,1}" />
-				<AnyChar attribute="Symbol" context="#stay" String=".+-/*%&lt;&gt;[]()^|&amp;~=!:;,?&#59;" />
+				<DetectChar attribute="Symbol" context="Member" char="." />
+				<AnyChar attribute="Symbol" context="#stay" String="+-/*%&lt;&gt;[]()^|&amp;~=!:;,?&#59;" />
 			</context>
 			<context name="Member" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
 				<RegExpr attribute="Function" context="#pop" String="\b[_\w][_\w\d]*(?=[\s]*)" />
 			</context>
 			<context name="Commentar 1" attribute="Comment" lineEndContext="#pop">
-				<keyword attribute="Alert" context="#stay" String="attention" />
+				<DetectSpaces />
+				<IncludeRules context="##Alerts" />
+				<IncludeRules context="##Modelines" />
 			</context>
 			<context name="Commentar 2" attribute="Comment" lineEndContext="#stay">
 				<Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
-				<keyword attribute="Alert" context="#stay" String="attention" />
+				<DetectSpaces />
+				<IncludeRules context="##Alerts" />
+				<IncludeRules context="##Modelines" />
 			</context>
 			<context name="Preprocessor" attribute="Preprocessor" lineEndContext="#pop">
 			</context>
@@ -1204,14 +1203,14 @@
 			<itemData name="Symbol"         defStyleNum="dsNormal"/>
 			<itemData name="Preprocessor"   defStyleNum="dsPreprocessor"/>
 			<itemData name="Comment"        defStyleNum="dsComment"/>
-			<itemData name="Alert"          defStyleNum="dsAlert" />
 		</itemDatas>
 	</highlighting>
 	<general>
 		<comments>
 			<comment name="singleLine" start="//" />
-			<comment name="multiLine" start="/*" end="*/" />
+			<comment name="multiLine" start="/*" end="*/" region="Comment" />
 		</comments>
 		<keywords casesensitive="1" />
 	</general>
 </language>
+<!-- kate: replace-tabs off; -->
diff --git a/syntax/gnuassembler.xml b/syntax/gnuassembler.xml
--- a/syntax/gnuassembler.xml
+++ b/syntax/gnuassembler.xml
@@ -43,7 +43,7 @@
 
 -->
 
-<language name="GNU Assembler" version="3" kateversion="5.0" section="Assembler" extensions="*.s;*.S" mimetype="text/x-asm" author="John Zaitseff (J.Zaitseff@zap.org.au), Roland Pabel (roland@pabel.name), Miquel Sabaté (mikisabate@gmail.com)" license="GPLv2+">
+<language name="GNU Assembler" version="4" kateversion="5.0" section="Assembler" extensions="*.s;*.S" mimetype="text/x-asm" author="John Zaitseff (J.Zaitseff@zap.org.au), Roland Pabel (roland@pabel.name), Miquel Sabaté (mikisabate@gmail.com)" license="GPLv2+">
   <highlighting>
     <list name="keywords">
       <item>.abort</item>
@@ -250,16 +250,20 @@
         <RegExpr      attribute="Preprocessor" context="Preprocessor" String="#\s*endif" insensitive="true" endRegion="PP" firstNonSpace="true" />
         <RegExpr      attribute="Preprocessor" context="Define" String="#\s*define.*((?=\\))" insensitive="true" firstNonSpace="true" />
         <RegExpr      attribute="Preprocessor" context="Preprocessor" String="#\s*(?:el(?:se|if)|include(?:_next)?|define|undef|line|error|warning|pragma)" firstNonSpace="true" />
-        <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="*" />
+        <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="*" beginRegion="BlockComment" />
         <AnyChar      attribute="Comment" context="Commentar 2" String="@;#" />
         <AnyChar      attribute="Symbol" context="#stay" String="!#%&amp;*()+,-&lt;=&gt;?/:[]^{|}~" />
       </context>
       <context attribute="Comment" lineEndContext="#stay" name="Commentar 1">
+        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="BlockComment" />
+        <DetectSpaces />
         <IncludeRules context="##Alerts" />
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" />
+        <IncludeRules context="##Modelines" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="Commentar 2" >
+        <DetectSpaces />
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
       <context attribute="String" lineEndContext="#pop" name="String">
         <LineContinue  attribute="String" context="Some Context" />
@@ -293,11 +297,10 @@
 
   <general>
     <comments>
-      <!--<comment name="singleLine" start=";" />
-      <comment name="singleLine" start="@" />
-      <comment name="singleLine" start="#" />-->
-      <comment name="multiLine"  start="/*" end="*/" />
+      <comment name="singleLine" start="#" position="afterwhitespace" />
+      <comment name="multiLine"  start="/*" end="*/" region="BlockComment" />
     </comments>
     <keywords casesensitive="1" weakDeliminator="_.$" />
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/go.xml b/syntax/go.xml
--- a/syntax/go.xml
+++ b/syntax/go.xml
@@ -26,7 +26,7 @@
 -->
 
 
-<language name="Go" version="4" kateversion="5.0" section="Sources" indenter="cstyle" extensions="*.go" author="Miquel Sabaté (mikisabate@gmail.com)" license="GPLv2+">
+<language name="Go" version="5" kateversion="5.0" section="Sources" indenter="cstyle" extensions="*.go" author="Miquel Sabaté (mikisabate@gmail.com)" license="GPLv2+">
     <highlighting>
     <list name="keywords">
 <!-- Keywords have been taken from The Go Programming Language Specification -> Keywords section -->
@@ -111,7 +111,7 @@
         <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1" />
         <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1"   />
         <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/"   />
-        <Detect2Chars attribute="Comment" context="Commentar 2" char="/" char1="*"   />
+        <Detect2Chars attribute="Comment" context="Commentar 2" char="/" char1="*" beginRegion="Comment" />
         <Int attribute="Decimal" context="#stay" />
         <Float attribute="Float" context="#stay" />
         <HlCOct attribute="Octal" context="#stay"/>
@@ -126,6 +126,7 @@
         <LineContinue attribute="Comment" context="#stay"/>
         <DetectSpaces />
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
         <DetectIdentifier />
       </context>
 
@@ -133,6 +134,7 @@
         <DetectSpaces />
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
         <DetectIdentifier />
       </context>
 
@@ -173,3 +175,4 @@
     <keywords casesensitive="1" additionalDeliminator="'&quot;" />
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/graphql.xml b/syntax/graphql.xml
new file mode 100644
--- /dev/null
+++ b/syntax/graphql.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<!--
+  GraphQL: https://graphql.org/
+  Synatx: https://github.com/graphql/graphql-spec/blob/master/spec/Section%202%20- -%20Language.md
+     and: https://github.com/graphql/graphql-spec/blob/master/spec/Appendix%20B%20- -%20Grammar%20Summary.md
+-->
+<language name="GraphQL" section="Other" version="2" kateversion="2.4" extensions="*.graphql" author="Volker Krause (vkrause@kde.org)" license="MIT">
+  <highlighting>
+    <list name="listKeywords">
+      <item>enum</item>
+      <item>extend</item>
+      <item>fragment</item>
+      <item>implements</item>
+      <item>input</item>
+      <item>interface</item>
+      <item>mutation</item>
+      <item>on</item>
+      <item>query</item>
+      <item>scalar</item>
+      <item>schema</item>
+      <item>subscription</item>
+      <item>type</item>
+      <item>union</item>
+    </list>
+   <list name="listConstants">
+      <item>null</item>
+      <item>true</item>
+      <item>false</item>
+    </list>
+    <list name="listTypes">
+      <item>Boolean</item>
+      <item>Float</item>
+      <item>ID</item>
+      <item>Int</item>
+      <item>String</item>
+    </list>
+
+    <contexts>
+      <context name="ctxNormal" lineEndContext="#stay" attribute="Normal">
+        <DetectChar char="{" beginRegion="RegionBrace"/>
+        <DetectChar char="}" endRegion="RegionBrace"/>
+        <Float attribute="Float"/>
+        <Int attribute="Decimal"/>
+        <keyword String="listKeywords" attribute="Keyword"/>
+        <keyword String="listConstants" attribute="Constant"/>
+        <keyword String="listTypes" attribute="Type"/>
+        <StringDetect attribute="String" context="ctxBlockString" String="&quot;&quot;&quot;"/>
+        <DetectChar attribute="String" context="ctxString" char="&quot;"/>
+        <DetectChar attribute="Comment" context="ctxComment" char="#"/>
+        <RegExpr String="\$[_A-Za-z][_0-9A-Za-z]*" attribute="Variable"/>
+        <RegExpr String="@[_A-Za-z][_0-9A-Za-z]*" attribute="Directive"/>
+      </context>
+
+      <context name="ctxString" attribute="String" lineEndContext="#pop">
+        <HlCStringChar attribute="Special Character" context="#stay"/>
+        <DetectChar attribute="String" context="#pop" char="&quot;"/>
+      </context>
+      <context name="ctxBlockString" attribute="String" lineEndContext="#stay">
+        <HlCStringChar attribute="Special Character" context="#stay"/>
+        <StringDetect attribute="String" context="#pop" String="&quot;&quot;&quot;"/>
+      </context>
+
+      <context name="ctxComment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
+    </contexts>
+
+    <itemDatas>
+      <itemData name="Normal" defStyleNum="dsNormal" spellChecking="false"/>
+      <itemData name="Keyword" defStyleNum="dsKeyword" spellChecking="false"/>
+      <itemData name="Variable" defStyleNum="dsVariable" spellChecking="false"/>
+      <itemData name="Decimal" defStyleNum="dsDecVal"/>
+      <itemData name="Float" defStyleNum="dsFloat"/>
+      <itemData name="String" defStyleNum="dsString"/>
+      <itemData name="Special Character" defStyleNum="dsChar" spellChecking="false"/>
+      <itemData name="Constant" defStyleNum="dsConstant" spellChecking="false"/>
+      <itemData name="Type" defStyleNum="dsDataType" spellChecking="false"/>
+      <itemData name="Directive" defStyleNum="dsAttribute" spellChecking="false"/>
+      <itemData name="Comment" defStyleNum="dsComment"/>
+    </itemDatas>
+  </highlighting>
+  <general>
+    <comments>
+      <comment name="singleLine" start="#"/>
+    </comments>
+  </general>
+</language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/groovy.xml b/syntax/groovy.xml
new file mode 100644
--- /dev/null
+++ b/syntax/groovy.xml
@@ -0,0 +1,3894 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<!--
+    Based on the java syntax file 1.19 by Alfredo Luiz Foltran Fialho (alfoltran@ig.com.br)
+-->
+<language name="Groovy" version="8" kateversion="5.0" section="Sources" extensions="*.groovy;*.gradle;*.gvy;Jenkinsfile" license="LGPL" author="Chris Reeves (chris@ev-soft.net)">
+	<highlighting>
+		<list name="java15">
+			<item>ACTIVE</item>
+			<item>ACTIVITY_COMPLETED</item>
+			<item>ACTIVITY_REQUIRED</item>
+			<item>ARG_IN</item>
+			<item>ARG_INOUT</item>
+			<item>ARG_OUT</item>
+			<item>AWTError</item>
+			<item>AWTEvent</item>
+			<item>AWTEventListener</item>
+			<item>AWTEventListenerProxy</item>
+			<item>AWTEventMulticaster</item>
+			<item>AWTException</item>
+			<item>AWTKeyStroke</item>
+			<item>AWTPermission</item>
+			<item>AbstractAction</item>
+			<item>AbstractBorder</item>
+			<item>AbstractButton</item>
+			<item>AbstractCellEditor</item>
+			<item>AbstractCollection</item>
+			<item>AbstractColorChooserPanel</item>
+			<item>AbstractDocument</item>
+			<item>AbstractDocument.AttributeContext</item>
+			<item>AbstractDocument.Content</item>
+			<item>AbstractDocument.ElementEdit</item>
+			<item>AbstractExecutorService</item>
+			<item>AbstractInterruptibleChannel</item>
+			<item>AbstractLayoutCache</item>
+			<item>AbstractLayoutCache.NodeDimensions</item>
+			<item>AbstractList</item>
+			<item>AbstractListModel</item>
+			<item>AbstractMap</item>
+			<item>AbstractMethodError</item>
+			<item>AbstractPreferences</item>
+			<item>AbstractQueue</item>
+			<item>AbstractQueuedSynchronizer</item>
+			<item>AbstractSelectableChannel</item>
+			<item>AbstractSelectionKey</item>
+			<item>AbstractSelector</item>
+			<item>AbstractSequentialList</item>
+			<item>AbstractSet</item>
+			<item>AbstractSpinnerModel</item>
+			<item>AbstractTableModel</item>
+			<item>AbstractUndoableEdit</item>
+			<item>AbstractWriter</item>
+			<item>AccessControlContext</item>
+			<item>AccessControlException</item>
+			<item>AccessController</item>
+			<item>AccessException</item>
+			<item>Accessible</item>
+			<item>AccessibleAction</item>
+			<item>AccessibleAttributeSequence</item>
+			<item>AccessibleBundle</item>
+			<item>AccessibleComponent</item>
+			<item>AccessibleContext</item>
+			<item>AccessibleEditableText</item>
+			<item>AccessibleExtendedComponent</item>
+			<item>AccessibleExtendedTable</item>
+			<item>AccessibleExtendedText</item>
+			<item>AccessibleHyperlink</item>
+			<item>AccessibleHypertext</item>
+			<item>AccessibleIcon</item>
+			<item>AccessibleKeyBinding</item>
+			<item>AccessibleObject</item>
+			<item>AccessibleRelation</item>
+			<item>AccessibleRelationSet</item>
+			<item>AccessibleResourceBundle</item>
+			<item>AccessibleRole</item>
+			<item>AccessibleSelection</item>
+			<item>AccessibleState</item>
+			<item>AccessibleStateSet</item>
+			<item>AccessibleStreamable</item>
+			<item>AccessibleTable</item>
+			<item>AccessibleTableModelChange</item>
+			<item>AccessibleText</item>
+			<item>AccessibleTextSequence</item>
+			<item>AccessibleValue</item>
+			<item>AccountException</item>
+			<item>AccountExpiredException</item>
+			<item>AccountLockedException</item>
+			<item>AccountNotFoundException</item>
+			<item>Acl</item>
+			<item>AclEntry</item>
+			<item>AclNotFoundException</item>
+			<item>Action</item>
+			<item>ActionEvent</item>
+			<item>ActionListener</item>
+			<item>ActionMap</item>
+			<item>ActionMapUIResource</item>
+			<item>Activatable</item>
+			<item>ActivateFailedException</item>
+			<item>ActivationDesc</item>
+			<item>ActivationException</item>
+			<item>ActivationGroup</item>
+			<item>ActivationGroupDesc</item>
+			<item>ActivationGroupDesc.CommandEnvironment</item>
+			<item>ActivationGroupID</item>
+			<item>ActivationGroup_Stub</item>
+			<item>ActivationID</item>
+			<item>ActivationInstantiator</item>
+			<item>ActivationMonitor</item>
+			<item>ActivationSystem</item>
+			<item>Activator</item>
+			<item>ActiveEvent</item>
+			<item>ActivityCompletedException</item>
+			<item>ActivityRequiredException</item>
+			<item>AdapterActivator</item>
+			<item>AdapterActivatorOperations</item>
+			<item>AdapterAlreadyExists</item>
+			<item>AdapterAlreadyExistsHelper</item>
+			<item>AdapterInactive</item>
+			<item>AdapterInactiveHelper</item>
+			<item>AdapterManagerIdHelper</item>
+			<item>AdapterNameHelper</item>
+			<item>AdapterNonExistent</item>
+			<item>AdapterNonExistentHelper</item>
+			<item>AdapterStateHelper</item>
+			<item>AddressHelper</item>
+			<item>Adjustable</item>
+			<item>AdjustmentEvent</item>
+			<item>AdjustmentListener</item>
+			<item>Adler32</item>
+			<item>AffineTransform</item>
+			<item>AffineTransformOp</item>
+			<item>AlgorithmParameterGenerator</item>
+			<item>AlgorithmParameterGeneratorSpi</item>
+			<item>AlgorithmParameterSpec</item>
+			<item>AlgorithmParameters</item>
+			<item>AlgorithmParametersSpi</item>
+			<item>AllPermission</item>
+			<item>AlphaComposite</item>
+			<item>AlreadyBound</item>
+			<item>AlreadyBoundException</item>
+			<item>AlreadyBoundHelper</item>
+			<item>AlreadyBoundHolder</item>
+			<item>AlreadyConnectedException</item>
+			<item>AncestorEvent</item>
+			<item>AncestorListener</item>
+			<item>AnnotatedElement</item>
+			<item>Annotation</item>
+			<item>Annotation</item>
+			<item>AnnotationFormatError</item>
+			<item>AnnotationTypeMismatchException</item>
+			<item>Any</item>
+			<item>AnyHolder</item>
+			<item>AnySeqHelper</item>
+			<item>AnySeqHelper</item>
+			<item>AnySeqHolder</item>
+			<item>AppConfigurationEntry</item>
+			<item>AppConfigurationEntry.LoginModuleControlFlag</item>
+			<item>Appendable</item>
+			<item>Applet</item>
+			<item>AppletContext</item>
+			<item>AppletInitializer</item>
+			<item>AppletStub</item>
+			<item>ApplicationException</item>
+			<item>Arc2D</item>
+			<item>Arc2D.Double</item>
+			<item>Arc2D.Float</item>
+			<item>Area</item>
+			<item>AreaAveragingScaleFilter</item>
+			<item>ArithmeticException</item>
+			<item>Array</item>
+			<item>Array</item>
+			<item>ArrayBlockingQueue</item>
+			<item>ArrayIndexOutOfBoundsException</item>
+			<item>ArrayList</item>
+			<item>ArrayStoreException</item>
+			<item>ArrayType</item>
+			<item>Arrays</item>
+			<item>AssertionError</item>
+			<item>AsyncBoxView</item>
+			<item>AsynchronousCloseException</item>
+			<item>AtomicBoolean</item>
+			<item>AtomicInteger</item>
+			<item>AtomicIntegerArray</item>
+			<item>AtomicIntegerFieldUpdater</item>
+			<item>AtomicLong</item>
+			<item>AtomicLongArray</item>
+			<item>AtomicLongFieldUpdater</item>
+			<item>AtomicMarkableReference</item>
+			<item>AtomicReference</item>
+			<item>AtomicReferenceArray</item>
+			<item>AtomicReferenceFieldUpdater</item>
+			<item>AtomicStampedReference</item>
+			<item>Attr</item>
+			<item>Attribute</item>
+			<item>Attribute</item>
+			<item>Attribute</item>
+			<item>AttributeChangeNotification</item>
+			<item>AttributeChangeNotificationFilter</item>
+			<item>AttributeException</item>
+			<item>AttributeInUseException</item>
+			<item>AttributeList</item>
+			<item>AttributeList</item>
+			<item>AttributeList</item>
+			<item>AttributeListImpl</item>
+			<item>AttributeModificationException</item>
+			<item>AttributeNotFoundException</item>
+			<item>AttributeSet</item>
+			<item>AttributeSet</item>
+			<item>AttributeSet.CharacterAttribute</item>
+			<item>AttributeSet.ColorAttribute</item>
+			<item>AttributeSet.FontAttribute</item>
+			<item>AttributeSet.ParagraphAttribute</item>
+			<item>AttributeSetUtilities</item>
+			<item>AttributeValueExp</item>
+			<item>AttributedCharacterIterator</item>
+			<item>AttributedCharacterIterator.Attribute</item>
+			<item>AttributedString</item>
+			<item>Attributes</item>
+			<item>Attributes</item>
+			<item>Attributes</item>
+			<item>Attributes.Name</item>
+			<item>Attributes2</item>
+			<item>Attributes2Impl</item>
+			<item>AttributesImpl</item>
+			<item>AudioClip</item>
+			<item>AudioFileFormat</item>
+			<item>AudioFileFormat.Type</item>
+			<item>AudioFileReader</item>
+			<item>AudioFileWriter</item>
+			<item>AudioFormat</item>
+			<item>AudioFormat.Encoding</item>
+			<item>AudioInputStream</item>
+			<item>AudioPermission</item>
+			<item>AudioSystem</item>
+			<item>AuthPermission</item>
+			<item>AuthProvider</item>
+			<item>AuthenticationException</item>
+			<item>AuthenticationException</item>
+			<item>AuthenticationNotSupportedException</item>
+			<item>Authenticator</item>
+			<item>Authenticator.RequestorType</item>
+			<item>AuthorizeCallback</item>
+			<item>Autoscroll</item>
+			<item>BAD_CONTEXT</item>
+			<item>BAD_INV_ORDER</item>
+			<item>BAD_OPERATION</item>
+			<item>BAD_PARAM</item>
+			<item>BAD_POLICY</item>
+			<item>BAD_POLICY_TYPE</item>
+			<item>BAD_POLICY_VALUE</item>
+			<item>BAD_QOS</item>
+			<item>BAD_TYPECODE</item>
+			<item>BMPImageWriteParam</item>
+			<item>BackingStoreException</item>
+			<item>BadAttributeValueExpException</item>
+			<item>BadBinaryOpValueExpException</item>
+			<item>BadKind</item>
+			<item>BadLocationException</item>
+			<item>BadPaddingException</item>
+			<item>BadStringOperationException</item>
+			<item>BandCombineOp</item>
+			<item>BandedSampleModel</item>
+			<item>BaseRowSet</item>
+			<item>BasicArrowButton</item>
+			<item>BasicAttribute</item>
+			<item>BasicAttributes</item>
+			<item>BasicBorders</item>
+			<item>BasicBorders.ButtonBorder</item>
+			<item>BasicBorders.FieldBorder</item>
+			<item>BasicBorders.MarginBorder</item>
+			<item>BasicBorders.MenuBarBorder</item>
+			<item>BasicBorders.RadioButtonBorder</item>
+			<item>BasicBorders.RolloverButtonBorder</item>
+			<item>BasicBorders.SplitPaneBorder</item>
+			<item>BasicBorders.ToggleButtonBorder</item>
+			<item>BasicButtonListener</item>
+			<item>BasicButtonUI</item>
+			<item>BasicCheckBoxMenuItemUI</item>
+			<item>BasicCheckBoxUI</item>
+			<item>BasicColorChooserUI</item>
+			<item>BasicComboBoxEditor</item>
+			<item>BasicComboBoxEditor.UIResource</item>
+			<item>BasicComboBoxRenderer</item>
+			<item>BasicComboBoxRenderer.UIResource</item>
+			<item>BasicComboBoxUI</item>
+			<item>BasicComboPopup</item>
+			<item>BasicControl</item>
+			<item>BasicDesktopIconUI</item>
+			<item>BasicDesktopPaneUI</item>
+			<item>BasicDirectoryModel</item>
+			<item>BasicEditorPaneUI</item>
+			<item>BasicFileChooserUI</item>
+			<item>BasicFormattedTextFieldUI</item>
+			<item>BasicGraphicsUtils</item>
+			<item>BasicHTML</item>
+			<item>BasicIconFactory</item>
+			<item>BasicInternalFrameTitlePane</item>
+			<item>BasicInternalFrameUI</item>
+			<item>BasicLabelUI</item>
+			<item>BasicListUI</item>
+			<item>BasicLookAndFeel</item>
+			<item>BasicMenuBarUI</item>
+			<item>BasicMenuItemUI</item>
+			<item>BasicMenuUI</item>
+			<item>BasicOptionPaneUI</item>
+			<item>BasicOptionPaneUI.ButtonAreaLayout</item>
+			<item>BasicPanelUI</item>
+			<item>BasicPasswordFieldUI</item>
+			<item>BasicPermission</item>
+			<item>BasicPopupMenuSeparatorUI</item>
+			<item>BasicPopupMenuUI</item>
+			<item>BasicProgressBarUI</item>
+			<item>BasicRadioButtonMenuItemUI</item>
+			<item>BasicRadioButtonUI</item>
+			<item>BasicRootPaneUI</item>
+			<item>BasicScrollBarUI</item>
+			<item>BasicScrollPaneUI</item>
+			<item>BasicSeparatorUI</item>
+			<item>BasicSliderUI</item>
+			<item>BasicSpinnerUI</item>
+			<item>BasicSplitPaneDivider</item>
+			<item>BasicSplitPaneUI</item>
+			<item>BasicStroke</item>
+			<item>BasicTabbedPaneUI</item>
+			<item>BasicTableHeaderUI</item>
+			<item>BasicTableUI</item>
+			<item>BasicTextAreaUI</item>
+			<item>BasicTextFieldUI</item>
+			<item>BasicTextPaneUI</item>
+			<item>BasicTextUI</item>
+			<item>BasicTextUI.BasicCaret</item>
+			<item>BasicTextUI.BasicHighlighter</item>
+			<item>BasicToggleButtonUI</item>
+			<item>BasicToolBarSeparatorUI</item>
+			<item>BasicToolBarUI</item>
+			<item>BasicToolTipUI</item>
+			<item>BasicTreeUI</item>
+			<item>BasicViewportUI</item>
+			<item>BatchUpdateException</item>
+			<item>BeanContext</item>
+			<item>BeanContextChild</item>
+			<item>BeanContextChildComponentProxy</item>
+			<item>BeanContextChildSupport</item>
+			<item>BeanContextContainerProxy</item>
+			<item>BeanContextEvent</item>
+			<item>BeanContextMembershipEvent</item>
+			<item>BeanContextMembershipListener</item>
+			<item>BeanContextProxy</item>
+			<item>BeanContextServiceAvailableEvent</item>
+			<item>BeanContextServiceProvider</item>
+			<item>BeanContextServiceProviderBeanInfo</item>
+			<item>BeanContextServiceRevokedEvent</item>
+			<item>BeanContextServiceRevokedListener</item>
+			<item>BeanContextServices</item>
+			<item>BeanContextServicesListener</item>
+			<item>BeanContextServicesSupport</item>
+			<item>BeanContextServicesSupport.BCSSServiceProvider</item>
+			<item>BeanContextSupport</item>
+			<item>BeanContextSupport.BCSIterator</item>
+			<item>BeanDescriptor</item>
+			<item>BeanInfo</item>
+			<item>Beans</item>
+			<item>BevelBorder</item>
+			<item>Bidi</item>
+			<item>BigDecimal</item>
+			<item>BigInteger</item>
+			<item>BinaryRefAddr</item>
+			<item>BindException</item>
+			<item>Binding</item>
+			<item>Binding</item>
+			<item>BindingHelper</item>
+			<item>BindingHolder</item>
+			<item>BindingIterator</item>
+			<item>BindingIteratorHelper</item>
+			<item>BindingIteratorHolder</item>
+			<item>BindingIteratorOperations</item>
+			<item>BindingIteratorPOA</item>
+			<item>BindingListHelper</item>
+			<item>BindingListHolder</item>
+			<item>BindingType</item>
+			<item>BindingTypeHelper</item>
+			<item>BindingTypeHolder</item>
+			<item>BitSet</item>
+			<item>Blob</item>
+			<item>BlockView</item>
+			<item>BlockingQueue</item>
+			<item>Book</item>
+			<item>Boolean</item>
+			<item>BooleanControl</item>
+			<item>BooleanControl.Type</item>
+			<item>BooleanHolder</item>
+			<item>BooleanSeqHelper</item>
+			<item>BooleanSeqHolder</item>
+			<item>Border</item>
+			<item>BorderFactory</item>
+			<item>BorderLayout</item>
+			<item>BorderUIResource</item>
+			<item>BorderUIResource.BevelBorderUIResource</item>
+			<item>BorderUIResource.CompoundBorderUIResource</item>
+			<item>BorderUIResource.EmptyBorderUIResource</item>
+			<item>BorderUIResource.EtchedBorderUIResource</item>
+			<item>BorderUIResource.LineBorderUIResource</item>
+			<item>BorderUIResource.MatteBorderUIResource</item>
+			<item>BorderUIResource.TitledBorderUIResource</item>
+			<item>BoundedRangeModel</item>
+			<item>Bounds</item>
+			<item>Bounds</item>
+			<item>Box</item>
+			<item>Box.Filler</item>
+			<item>BoxLayout</item>
+			<item>BoxView</item>
+			<item>BoxedValueHelper</item>
+			<item>BreakIterator</item>
+			<item>BrokenBarrierException</item>
+			<item>Buffer</item>
+			<item>BufferCapabilities</item>
+			<item>BufferCapabilities.FlipContents</item>
+			<item>BufferOverflowException</item>
+			<item>BufferStrategy</item>
+			<item>BufferUnderflowException</item>
+			<item>BufferedImage</item>
+			<item>BufferedImageFilter</item>
+			<item>BufferedImageOp</item>
+			<item>BufferedInputStream</item>
+			<item>BufferedOutputStream</item>
+			<item>BufferedReader</item>
+			<item>BufferedWriter</item>
+			<item>Button</item>
+			<item>ButtonGroup</item>
+			<item>ButtonModel</item>
+			<item>ButtonUI</item>
+			<item>Byte</item>
+			<item>ByteArrayInputStream</item>
+			<item>ByteArrayOutputStream</item>
+			<item>ByteBuffer</item>
+			<item>ByteChannel</item>
+			<item>ByteHolder</item>
+			<item>ByteLookupTable</item>
+			<item>ByteOrder</item>
+			<item>CDATASection</item>
+			<item>CMMException</item>
+			<item>CODESET_INCOMPATIBLE</item>
+			<item>COMM_FAILURE</item>
+			<item>CRC32</item>
+			<item>CRL</item>
+			<item>CRLException</item>
+			<item>CRLSelector</item>
+			<item>CSS</item>
+			<item>CSS.Attribute</item>
+			<item>CTX_RESTRICT_SCOPE</item>
+			<item>CacheRequest</item>
+			<item>CacheResponse</item>
+			<item>CachedRowSet</item>
+			<item>Calendar</item>
+			<item>Callable</item>
+			<item>CallableStatement</item>
+			<item>Callback</item>
+			<item>CallbackHandler</item>
+			<item>CancelablePrintJob</item>
+			<item>CancellationException</item>
+			<item>CancelledKeyException</item>
+			<item>CannotProceed</item>
+			<item>CannotProceedException</item>
+			<item>CannotProceedHelper</item>
+			<item>CannotProceedHolder</item>
+			<item>CannotRedoException</item>
+			<item>CannotUndoException</item>
+			<item>Canvas</item>
+			<item>CardLayout</item>
+			<item>Caret</item>
+			<item>CaretEvent</item>
+			<item>CaretListener</item>
+			<item>CellEditor</item>
+			<item>CellEditorListener</item>
+			<item>CellRendererPane</item>
+			<item>CertPath</item>
+			<item>CertPath.CertPathRep</item>
+			<item>CertPathBuilder</item>
+			<item>CertPathBuilderException</item>
+			<item>CertPathBuilderResult</item>
+			<item>CertPathBuilderSpi</item>
+			<item>CertPathParameters</item>
+			<item>CertPathTrustManagerParameters</item>
+			<item>CertPathValidator</item>
+			<item>CertPathValidatorException</item>
+			<item>CertPathValidatorResult</item>
+			<item>CertPathValidatorSpi</item>
+			<item>CertSelector</item>
+			<item>CertStore</item>
+			<item>CertStoreException</item>
+			<item>CertStoreParameters</item>
+			<item>CertStoreSpi</item>
+			<item>Certificate</item>
+			<item>Certificate</item>
+			<item>Certificate</item>
+			<item>Certificate.CertificateRep</item>
+			<item>CertificateEncodingException</item>
+			<item>CertificateEncodingException</item>
+			<item>CertificateException</item>
+			<item>CertificateException</item>
+			<item>CertificateExpiredException</item>
+			<item>CertificateExpiredException</item>
+			<item>CertificateFactory</item>
+			<item>CertificateFactorySpi</item>
+			<item>CertificateNotYetValidException</item>
+			<item>CertificateNotYetValidException</item>
+			<item>CertificateParsingException</item>
+			<item>CertificateParsingException</item>
+			<item>ChangeEvent</item>
+			<item>ChangeListener</item>
+			<item>ChangedCharSetException</item>
+			<item>Channel</item>
+			<item>ChannelBinding</item>
+			<item>Channels</item>
+			<item>CharArrayReader</item>
+			<item>CharArrayWriter</item>
+			<item>CharBuffer</item>
+			<item>CharConversionException</item>
+			<item>CharHolder</item>
+			<item>CharSeqHelper</item>
+			<item>CharSeqHolder</item>
+			<item>CharSequence</item>
+			<item>Character</item>
+			<item>Character.Subset</item>
+			<item>Character.UnicodeBlock</item>
+			<item>CharacterCodingException</item>
+			<item>CharacterData</item>
+			<item>CharacterIterator</item>
+			<item>Charset</item>
+			<item>CharsetDecoder</item>
+			<item>CharsetEncoder</item>
+			<item>CharsetProvider</item>
+			<item>Checkbox</item>
+			<item>CheckboxGroup</item>
+			<item>CheckboxMenuItem</item>
+			<item>CheckedInputStream</item>
+			<item>CheckedOutputStream</item>
+			<item>Checksum</item>
+			<item>Choice</item>
+			<item>ChoiceCallback</item>
+			<item>ChoiceFormat</item>
+			<item>Chromaticity</item>
+			<item>Cipher</item>
+			<item>CipherInputStream</item>
+			<item>CipherOutputStream</item>
+			<item>CipherSpi</item>
+			<item>Class</item>
+			<item>ClassCastException</item>
+			<item>ClassCircularityError</item>
+			<item>ClassDefinition</item>
+			<item>ClassDesc</item>
+			<item>ClassFileTransformer</item>
+			<item>ClassFormatError</item>
+			<item>ClassLoader</item>
+			<item>ClassLoaderRepository</item>
+			<item>ClassLoadingMXBean</item>
+			<item>ClassNotFoundException</item>
+			<item>ClientRequestInfo</item>
+			<item>ClientRequestInfoOperations</item>
+			<item>ClientRequestInterceptor</item>
+			<item>ClientRequestInterceptorOperations</item>
+			<item>Clip</item>
+			<item>Clipboard</item>
+			<item>ClipboardOwner</item>
+			<item>Clob</item>
+			<item>CloneNotSupportedException</item>
+			<item>Cloneable</item>
+			<item>Closeable</item>
+			<item>ClosedByInterruptException</item>
+			<item>ClosedChannelException</item>
+			<item>ClosedSelectorException</item>
+			<item>CodeSets</item>
+			<item>CodeSigner</item>
+			<item>CodeSource</item>
+			<item>Codec</item>
+			<item>CodecFactory</item>
+			<item>CodecFactoryHelper</item>
+			<item>CodecFactoryOperations</item>
+			<item>CodecOperations</item>
+			<item>CoderMalfunctionError</item>
+			<item>CoderResult</item>
+			<item>CodingErrorAction</item>
+			<item>CollationElementIterator</item>
+			<item>CollationKey</item>
+			<item>Collator</item>
+			<item>Collection</item>
+			<item>CollectionCertStoreParameters</item>
+			<item>Collections</item>
+			<item>Color</item>
+			<item>ColorChooserComponentFactory</item>
+			<item>ColorChooserUI</item>
+			<item>ColorConvertOp</item>
+			<item>ColorModel</item>
+			<item>ColorSelectionModel</item>
+			<item>ColorSpace</item>
+			<item>ColorSupported</item>
+			<item>ColorType</item>
+			<item>ColorUIResource</item>
+			<item>ComboBoxEditor</item>
+			<item>ComboBoxModel</item>
+			<item>ComboBoxUI</item>
+			<item>ComboPopup</item>
+			<item>Comment</item>
+			<item>CommunicationException</item>
+			<item>Comparable</item>
+			<item>Comparator</item>
+			<item>CompilationMXBean</item>
+			<item>Compiler</item>
+			<item>CompletionService</item>
+			<item>CompletionStatus</item>
+			<item>CompletionStatusHelper</item>
+			<item>Component</item>
+			<item>ComponentAdapter</item>
+			<item>ComponentColorModel</item>
+			<item>ComponentEvent</item>
+			<item>ComponentIdHelper</item>
+			<item>ComponentInputMap</item>
+			<item>ComponentInputMapUIResource</item>
+			<item>ComponentListener</item>
+			<item>ComponentOrientation</item>
+			<item>ComponentSampleModel</item>
+			<item>ComponentUI</item>
+			<item>ComponentView</item>
+			<item>Composite</item>
+			<item>CompositeContext</item>
+			<item>CompositeData</item>
+			<item>CompositeDataSupport</item>
+			<item>CompositeName</item>
+			<item>CompositeType</item>
+			<item>CompositeView</item>
+			<item>CompoundBorder</item>
+			<item>CompoundControl</item>
+			<item>CompoundControl.Type</item>
+			<item>CompoundEdit</item>
+			<item>CompoundName</item>
+			<item>Compression</item>
+			<item>ConcurrentHashMap</item>
+			<item>ConcurrentLinkedQueue</item>
+			<item>ConcurrentMap</item>
+			<item>ConcurrentModificationException</item>
+			<item>Condition</item>
+			<item>Configuration</item>
+			<item>ConfigurationException</item>
+			<item>ConfirmationCallback</item>
+			<item>ConnectException</item>
+			<item>ConnectException</item>
+			<item>ConnectIOException</item>
+			<item>Connection</item>
+			<item>ConnectionEvent</item>
+			<item>ConnectionEventListener</item>
+			<item>ConnectionPendingException</item>
+			<item>ConnectionPoolDataSource</item>
+			<item>ConsoleHandler</item>
+			<item>Constructor</item>
+			<item>Container</item>
+			<item>ContainerAdapter</item>
+			<item>ContainerEvent</item>
+			<item>ContainerListener</item>
+			<item>ContainerOrderFocusTraversalPolicy</item>
+			<item>ContentHandler</item>
+			<item>ContentHandler</item>
+			<item>ContentHandlerFactory</item>
+			<item>ContentModel</item>
+			<item>Context</item>
+			<item>Context</item>
+			<item>ContextList</item>
+			<item>ContextNotEmptyException</item>
+			<item>ContextualRenderedImageFactory</item>
+			<item>Control</item>
+			<item>Control</item>
+			<item>Control.Type</item>
+			<item>ControlFactory</item>
+			<item>ControllerEventListener</item>
+			<item>ConvolveOp</item>
+			<item>CookieHandler</item>
+			<item>CookieHolder</item>
+			<item>Copies</item>
+			<item>CopiesSupported</item>
+			<item>CopyOnWriteArrayList</item>
+			<item>CopyOnWriteArraySet</item>
+			<item>CountDownLatch</item>
+			<item>CounterMonitor</item>
+			<item>CounterMonitorMBean</item>
+			<item>CredentialException</item>
+			<item>CredentialExpiredException</item>
+			<item>CredentialNotFoundException</item>
+			<item>CropImageFilter</item>
+			<item>CubicCurve2D</item>
+			<item>CubicCurve2D.Double</item>
+			<item>CubicCurve2D.Float</item>
+			<item>Currency</item>
+			<item>Current</item>
+			<item>Current</item>
+			<item>Current</item>
+			<item>CurrentHelper</item>
+			<item>CurrentHelper</item>
+			<item>CurrentHelper</item>
+			<item>CurrentHolder</item>
+			<item>CurrentOperations</item>
+			<item>CurrentOperations</item>
+			<item>CurrentOperations</item>
+			<item>Cursor</item>
+			<item>CustomMarshal</item>
+			<item>CustomValue</item>
+			<item>Customizer</item>
+			<item>CyclicBarrier</item>
+			<item>DATA_CONVERSION</item>
+			<item>DESKeySpec</item>
+			<item>DESedeKeySpec</item>
+			<item>DGC</item>
+			<item>DHGenParameterSpec</item>
+			<item>DHKey</item>
+			<item>DHParameterSpec</item>
+			<item>DHPrivateKey</item>
+			<item>DHPrivateKeySpec</item>
+			<item>DHPublicKey</item>
+			<item>DHPublicKeySpec</item>
+			<item>DISCARDING</item>
+			<item>DOMConfiguration</item>
+			<item>DOMError</item>
+			<item>DOMErrorHandler</item>
+			<item>DOMException</item>
+			<item>DOMImplementation</item>
+			<item>DOMImplementationLS</item>
+			<item>DOMImplementationList</item>
+			<item>DOMImplementationRegistry</item>
+			<item>DOMImplementationSource</item>
+			<item>DOMLocator</item>
+			<item>DOMLocator</item>
+			<item>DOMResult</item>
+			<item>DOMSource</item>
+			<item>DOMStringList</item>
+			<item>DSAKey</item>
+			<item>DSAKeyPairGenerator</item>
+			<item>DSAParameterSpec</item>
+			<item>DSAParams</item>
+			<item>DSAPrivateKey</item>
+			<item>DSAPrivateKeySpec</item>
+			<item>DSAPublicKey</item>
+			<item>DSAPublicKeySpec</item>
+			<item>DTD</item>
+			<item>DTDConstants</item>
+			<item>DTDHandler</item>
+			<item>DataBuffer</item>
+			<item>DataBufferByte</item>
+			<item>DataBufferDouble</item>
+			<item>DataBufferFloat</item>
+			<item>DataBufferInt</item>
+			<item>DataBufferShort</item>
+			<item>DataBufferUShort</item>
+			<item>DataFlavor</item>
+			<item>DataFormatException</item>
+			<item>DataInput</item>
+			<item>DataInputStream</item>
+			<item>DataInputStream</item>
+			<item>DataLine</item>
+			<item>DataLine.Info</item>
+			<item>DataOutput</item>
+			<item>DataOutputStream</item>
+			<item>DataOutputStream</item>
+			<item>DataSource</item>
+			<item>DataTruncation</item>
+			<item>DatabaseMetaData</item>
+			<item>DatagramChannel</item>
+			<item>DatagramPacket</item>
+			<item>DatagramSocket</item>
+			<item>DatagramSocketImpl</item>
+			<item>DatagramSocketImplFactory</item>
+			<item>DatatypeConfigurationException</item>
+			<item>DatatypeConstants</item>
+			<item>DatatypeConstants.Field</item>
+			<item>DatatypeFactory</item>
+			<item>Date</item>
+			<item>Date</item>
+			<item>DateFormat</item>
+			<item>DateFormat.Field</item>
+			<item>DateFormatSymbols</item>
+			<item>DateFormatter</item>
+			<item>DateTimeAtCompleted</item>
+			<item>DateTimeAtCreation</item>
+			<item>DateTimeAtProcessing</item>
+			<item>DateTimeSyntax</item>
+			<item>DebugGraphics</item>
+			<item>DecimalFormat</item>
+			<item>DecimalFormatSymbols</item>
+			<item>DeclHandler</item>
+			<item>DefaultBoundedRangeModel</item>
+			<item>DefaultButtonModel</item>
+			<item>DefaultCaret</item>
+			<item>DefaultCellEditor</item>
+			<item>DefaultColorSelectionModel</item>
+			<item>DefaultComboBoxModel</item>
+			<item>DefaultDesktopManager</item>
+			<item>DefaultEditorKit</item>
+			<item>DefaultEditorKit.BeepAction</item>
+			<item>DefaultEditorKit.CopyAction</item>
+			<item>DefaultEditorKit.CutAction</item>
+			<item>DefaultEditorKit.DefaultKeyTypedAction</item>
+			<item>DefaultEditorKit.InsertBreakAction</item>
+			<item>DefaultEditorKit.InsertContentAction</item>
+			<item>DefaultEditorKit.InsertTabAction</item>
+			<item>DefaultEditorKit.PasteAction</item>
+			<item>DefaultFocusManager</item>
+			<item>DefaultFocusTraversalPolicy</item>
+			<item>DefaultFormatter</item>
+			<item>DefaultFormatterFactory</item>
+			<item>DefaultHandler</item>
+			<item>DefaultHandler2</item>
+			<item>DefaultHighlighter</item>
+			<item>DefaultHighlighter.DefaultHighlightPainter</item>
+			<item>DefaultKeyboardFocusManager</item>
+			<item>DefaultListCellRenderer</item>
+			<item>DefaultListCellRenderer.UIResource</item>
+			<item>DefaultListModel</item>
+			<item>DefaultListSelectionModel</item>
+			<item>DefaultLoaderRepository</item>
+			<item>DefaultLoaderRepository</item>
+			<item>DefaultMenuLayout</item>
+			<item>DefaultMetalTheme</item>
+			<item>DefaultMutableTreeNode</item>
+			<item>DefaultPersistenceDelegate</item>
+			<item>DefaultSingleSelectionModel</item>
+			<item>DefaultStyledDocument</item>
+			<item>DefaultStyledDocument.AttributeUndoableEdit</item>
+			<item>DefaultStyledDocument.ElementSpec</item>
+			<item>DefaultTableCellRenderer</item>
+			<item>DefaultTableCellRenderer.UIResource</item>
+			<item>DefaultTableColumnModel</item>
+			<item>DefaultTableModel</item>
+			<item>DefaultTextUI</item>
+			<item>DefaultTreeCellEditor</item>
+			<item>DefaultTreeCellRenderer</item>
+			<item>DefaultTreeModel</item>
+			<item>DefaultTreeSelectionModel</item>
+			<item>DefinitionKind</item>
+			<item>DefinitionKindHelper</item>
+			<item>Deflater</item>
+			<item>DeflaterOutputStream</item>
+			<item>DelayQueue</item>
+			<item>Delayed</item>
+			<item>Delegate</item>
+			<item>Delegate</item>
+			<item>Delegate</item>
+			<item>DelegationPermission</item>
+			<item>Deprecated</item>
+			<item>Descriptor</item>
+			<item>DescriptorAccess</item>
+			<item>DescriptorSupport</item>
+			<item>DesignMode</item>
+			<item>DesktopIconUI</item>
+			<item>DesktopManager</item>
+			<item>DesktopPaneUI</item>
+			<item>Destination</item>
+			<item>DestroyFailedException</item>
+			<item>Destroyable</item>
+			<item>Dialog</item>
+			<item>Dictionary</item>
+			<item>DigestException</item>
+			<item>DigestInputStream</item>
+			<item>DigestOutputStream</item>
+			<item>Dimension</item>
+			<item>Dimension2D</item>
+			<item>DimensionUIResource</item>
+			<item>DirContext</item>
+			<item>DirObjectFactory</item>
+			<item>DirStateFactory</item>
+			<item>DirStateFactory.Result</item>
+			<item>DirectColorModel</item>
+			<item>DirectoryManager</item>
+			<item>DisplayMode</item>
+			<item>DnDConstants</item>
+			<item>Doc</item>
+			<item>DocAttribute</item>
+			<item>DocAttributeSet</item>
+			<item>DocFlavor</item>
+			<item>DocFlavor.BYTE_ARRAY</item>
+			<item>DocFlavor.CHAR_ARRAY</item>
+			<item>DocFlavor.INPUT_STREAM</item>
+			<item>DocFlavor.READER</item>
+			<item>DocFlavor.SERVICE_FORMATTED</item>
+			<item>DocFlavor.STRING</item>
+			<item>DocFlavor.URL</item>
+			<item>DocPrintJob</item>
+			<item>Document</item>
+			<item>Document</item>
+			<item>DocumentBuilder</item>
+			<item>DocumentBuilderFactory</item>
+			<item>DocumentEvent</item>
+			<item>DocumentEvent.ElementChange</item>
+			<item>DocumentEvent.EventType</item>
+			<item>DocumentFilter</item>
+			<item>DocumentFilter.FilterBypass</item>
+			<item>DocumentFragment</item>
+			<item>DocumentHandler</item>
+			<item>DocumentListener</item>
+			<item>DocumentName</item>
+			<item>DocumentParser</item>
+			<item>DocumentType</item>
+			<item>Documented</item>
+			<item>DomainCombiner</item>
+			<item>DomainManager</item>
+			<item>DomainManagerOperations</item>
+			<item>Double</item>
+			<item>DoubleBuffer</item>
+			<item>DoubleHolder</item>
+			<item>DoubleSeqHelper</item>
+			<item>DoubleSeqHolder</item>
+			<item>DragGestureEvent</item>
+			<item>DragGestureListener</item>
+			<item>DragGestureRecognizer</item>
+			<item>DragSource</item>
+			<item>DragSourceAdapter</item>
+			<item>DragSourceContext</item>
+			<item>DragSourceDragEvent</item>
+			<item>DragSourceDropEvent</item>
+			<item>DragSourceEvent</item>
+			<item>DragSourceListener</item>
+			<item>DragSourceMotionListener</item>
+			<item>Driver</item>
+			<item>DriverManager</item>
+			<item>DriverPropertyInfo</item>
+			<item>DropTarget</item>
+			<item>DropTarget.DropTargetAutoScroller</item>
+			<item>DropTargetAdapter</item>
+			<item>DropTargetContext</item>
+			<item>DropTargetDragEvent</item>
+			<item>DropTargetDropEvent</item>
+			<item>DropTargetEvent</item>
+			<item>DropTargetListener</item>
+			<item>DuplicateFormatFlagsException</item>
+			<item>DuplicateName</item>
+			<item>DuplicateNameHelper</item>
+			<item>Duration</item>
+			<item>DynAny</item>
+			<item>DynAny</item>
+			<item>DynAnyFactory</item>
+			<item>DynAnyFactoryHelper</item>
+			<item>DynAnyFactoryOperations</item>
+			<item>DynAnyHelper</item>
+			<item>DynAnyOperations</item>
+			<item>DynAnySeqHelper</item>
+			<item>DynArray</item>
+			<item>DynArray</item>
+			<item>DynArrayHelper</item>
+			<item>DynArrayOperations</item>
+			<item>DynEnum</item>
+			<item>DynEnum</item>
+			<item>DynEnumHelper</item>
+			<item>DynEnumOperations</item>
+			<item>DynFixed</item>
+			<item>DynFixed</item>
+			<item>DynFixedHelper</item>
+			<item>DynFixedOperations</item>
+			<item>DynSequence</item>
+			<item>DynSequence</item>
+			<item>DynSequenceHelper</item>
+			<item>DynSequenceOperations</item>
+			<item>DynStruct</item>
+			<item>DynStruct</item>
+			<item>DynStructHelper</item>
+			<item>DynStructOperations</item>
+			<item>DynUnion</item>
+			<item>DynUnion</item>
+			<item>DynUnionHelper</item>
+			<item>DynUnionOperations</item>
+			<item>DynValue</item>
+			<item>DynValue</item>
+			<item>DynValueBox</item>
+			<item>DynValueBoxOperations</item>
+			<item>DynValueCommon</item>
+			<item>DynValueCommonOperations</item>
+			<item>DynValueHelper</item>
+			<item>DynValueOperations</item>
+			<item>DynamicImplementation</item>
+			<item>DynamicImplementation</item>
+			<item>DynamicMBean</item>
+			<item>ECField</item>
+			<item>ECFieldF2m</item>
+			<item>ECFieldFp</item>
+			<item>ECGenParameterSpec</item>
+			<item>ECKey</item>
+			<item>ECParameterSpec</item>
+			<item>ECPoint</item>
+			<item>ECPrivateKey</item>
+			<item>ECPrivateKeySpec</item>
+			<item>ECPublicKey</item>
+			<item>ECPublicKeySpec</item>
+			<item>ENCODING_CDR_ENCAPS</item>
+			<item>EOFException</item>
+			<item>EditorKit</item>
+			<item>Element</item>
+			<item>Element</item>
+			<item>Element</item>
+			<item>ElementIterator</item>
+			<item>ElementType</item>
+			<item>Ellipse2D</item>
+			<item>Ellipse2D.Double</item>
+			<item>Ellipse2D.Float</item>
+			<item>EllipticCurve</item>
+			<item>EmptyBorder</item>
+			<item>EmptyStackException</item>
+			<item>EncodedKeySpec</item>
+			<item>Encoder</item>
+			<item>Encoding</item>
+			<item>EncryptedPrivateKeyInfo</item>
+			<item>Entity</item>
+			<item>Entity</item>
+			<item>EntityReference</item>
+			<item>EntityResolver</item>
+			<item>EntityResolver2</item>
+			<item>Enum</item>
+			<item>EnumConstantNotPresentException</item>
+			<item>EnumControl</item>
+			<item>EnumControl.Type</item>
+			<item>EnumMap</item>
+			<item>EnumSet</item>
+			<item>EnumSyntax</item>
+			<item>Enumeration</item>
+			<item>Environment</item>
+			<item>Error</item>
+			<item>ErrorHandler</item>
+			<item>ErrorListener</item>
+			<item>ErrorManager</item>
+			<item>EtchedBorder</item>
+			<item>Event</item>
+			<item>EventContext</item>
+			<item>EventDirContext</item>
+			<item>EventHandler</item>
+			<item>EventListener</item>
+			<item>EventListenerList</item>
+			<item>EventListenerProxy</item>
+			<item>EventObject</item>
+			<item>EventQueue</item>
+			<item>EventSetDescriptor</item>
+			<item>Exception</item>
+			<item>ExceptionDetailMessage</item>
+			<item>ExceptionInInitializerError</item>
+			<item>ExceptionList</item>
+			<item>ExceptionListener</item>
+			<item>Exchanger</item>
+			<item>ExecutionException</item>
+			<item>Executor</item>
+			<item>ExecutorCompletionService</item>
+			<item>ExecutorService</item>
+			<item>Executors</item>
+			<item>ExemptionMechanism</item>
+			<item>ExemptionMechanismException</item>
+			<item>ExemptionMechanismSpi</item>
+			<item>ExpandVetoException</item>
+			<item>ExportException</item>
+			<item>Expression</item>
+			<item>ExtendedRequest</item>
+			<item>ExtendedResponse</item>
+			<item>Externalizable</item>
+			<item>FREE_MEM</item>
+			<item>FactoryConfigurationError</item>
+			<item>FailedLoginException</item>
+			<item>FeatureDescriptor</item>
+			<item>Fidelity</item>
+			<item>Field</item>
+			<item>FieldNameHelper</item>
+			<item>FieldNameHelper</item>
+			<item>FieldPosition</item>
+			<item>FieldView</item>
+			<item>File</item>
+			<item>FileCacheImageInputStream</item>
+			<item>FileCacheImageOutputStream</item>
+			<item>FileChannel</item>
+			<item>FileChannel.MapMode</item>
+			<item>FileChooserUI</item>
+			<item>FileDescriptor</item>
+			<item>FileDialog</item>
+			<item>FileFilter</item>
+			<item>FileFilter</item>
+			<item>FileHandler</item>
+			<item>FileImageInputStream</item>
+			<item>FileImageOutputStream</item>
+			<item>FileInputStream</item>
+			<item>FileLock</item>
+			<item>FileLockInterruptionException</item>
+			<item>FileNameMap</item>
+			<item>FileNotFoundException</item>
+			<item>FileOutputStream</item>
+			<item>FilePermission</item>
+			<item>FileReader</item>
+			<item>FileSystemView</item>
+			<item>FileView</item>
+			<item>FileWriter</item>
+			<item>FilenameFilter</item>
+			<item>Filter</item>
+			<item>FilterInputStream</item>
+			<item>FilterOutputStream</item>
+			<item>FilterReader</item>
+			<item>FilterWriter</item>
+			<item>FilteredImageSource</item>
+			<item>FilteredRowSet</item>
+			<item>Finishings</item>
+			<item>FixedHeightLayoutCache</item>
+			<item>FixedHolder</item>
+			<item>FlatteningPathIterator</item>
+			<item>FlavorEvent</item>
+			<item>FlavorException</item>
+			<item>FlavorListener</item>
+			<item>FlavorMap</item>
+			<item>FlavorTable</item>
+			<item>Float</item>
+			<item>FloatBuffer</item>
+			<item>FloatControl</item>
+			<item>FloatControl.Type</item>
+			<item>FloatHolder</item>
+			<item>FloatSeqHelper</item>
+			<item>FloatSeqHolder</item>
+			<item>FlowLayout</item>
+			<item>FlowView</item>
+			<item>FlowView.FlowStrategy</item>
+			<item>Flushable</item>
+			<item>FocusAdapter</item>
+			<item>FocusEvent</item>
+			<item>FocusListener</item>
+			<item>FocusManager</item>
+			<item>FocusTraversalPolicy</item>
+			<item>Font</item>
+			<item>FontFormatException</item>
+			<item>FontMetrics</item>
+			<item>FontRenderContext</item>
+			<item>FontUIResource</item>
+			<item>FormSubmitEvent</item>
+			<item>FormSubmitEvent.MethodType</item>
+			<item>FormView</item>
+			<item>Format</item>
+			<item>Format.Field</item>
+			<item>FormatConversionProvider</item>
+			<item>FormatFlagsConversionMismatchException</item>
+			<item>FormatMismatch</item>
+			<item>FormatMismatchHelper</item>
+			<item>Formattable</item>
+			<item>FormattableFlags</item>
+			<item>Formatter</item>
+			<item>Formatter</item>
+			<item>FormatterClosedException</item>
+			<item>ForwardRequest</item>
+			<item>ForwardRequest</item>
+			<item>ForwardRequestHelper</item>
+			<item>ForwardRequestHelper</item>
+			<item>Frame</item>
+			<item>Future</item>
+			<item>FutureTask</item>
+			<item>GSSContext</item>
+			<item>GSSCredential</item>
+			<item>GSSException</item>
+			<item>GSSManager</item>
+			<item>GSSName</item>
+			<item>GZIPInputStream</item>
+			<item>GZIPOutputStream</item>
+			<item>GapContent</item>
+			<item>GarbageCollectorMXBean</item>
+			<item>GatheringByteChannel</item>
+			<item>GaugeMonitor</item>
+			<item>GaugeMonitorMBean</item>
+			<item>GeneralPath</item>
+			<item>GeneralSecurityException</item>
+			<item>GenericArrayType</item>
+			<item>GenericDeclaration</item>
+			<item>GenericSignatureFormatError</item>
+			<item>GlyphJustificationInfo</item>
+			<item>GlyphMetrics</item>
+			<item>GlyphVector</item>
+			<item>GlyphView</item>
+			<item>GlyphView.GlyphPainter</item>
+			<item>GradientPaint</item>
+			<item>GraphicAttribute</item>
+			<item>Graphics</item>
+			<item>Graphics2D</item>
+			<item>GraphicsConfigTemplate</item>
+			<item>GraphicsConfiguration</item>
+			<item>GraphicsDevice</item>
+			<item>GraphicsEnvironment</item>
+			<item>GrayFilter</item>
+			<item>GregorianCalendar</item>
+			<item>GridBagConstraints</item>
+			<item>GridBagLayout</item>
+			<item>GridLayout</item>
+			<item>Group</item>
+			<item>Guard</item>
+			<item>GuardedObject</item>
+			<item>HOLDING</item>
+			<item>HTML</item>
+			<item>HTML.Attribute</item>
+			<item>HTML.Tag</item>
+			<item>HTML.UnknownTag</item>
+			<item>HTMLDocument</item>
+			<item>HTMLDocument.Iterator</item>
+			<item>HTMLEditorKit</item>
+			<item>HTMLEditorKit.HTMLFactory</item>
+			<item>HTMLEditorKit.HTMLTextAction</item>
+			<item>HTMLEditorKit.InsertHTMLTextAction</item>
+			<item>HTMLEditorKit.LinkController</item>
+			<item>HTMLEditorKit.Parser</item>
+			<item>HTMLEditorKit.ParserCallback</item>
+			<item>HTMLFrameHyperlinkEvent</item>
+			<item>HTMLWriter</item>
+			<item>Handler</item>
+			<item>HandlerBase</item>
+			<item>HandshakeCompletedEvent</item>
+			<item>HandshakeCompletedListener</item>
+			<item>HasControls</item>
+			<item>HashAttributeSet</item>
+			<item>HashDocAttributeSet</item>
+			<item>HashMap</item>
+			<item>HashPrintJobAttributeSet</item>
+			<item>HashPrintRequestAttributeSet</item>
+			<item>HashPrintServiceAttributeSet</item>
+			<item>HashSet</item>
+			<item>Hashtable</item>
+			<item>HeadlessException</item>
+			<item>HierarchyBoundsAdapter</item>
+			<item>HierarchyBoundsListener</item>
+			<item>HierarchyEvent</item>
+			<item>HierarchyListener</item>
+			<item>Highlighter</item>
+			<item>Highlighter.Highlight</item>
+			<item>Highlighter.HighlightPainter</item>
+			<item>HostnameVerifier</item>
+			<item>HttpRetryException</item>
+			<item>HttpURLConnection</item>
+			<item>HttpsURLConnection</item>
+			<item>HyperlinkEvent</item>
+			<item>HyperlinkEvent.EventType</item>
+			<item>HyperlinkListener</item>
+			<item>ICC_ColorSpace</item>
+			<item>ICC_Profile</item>
+			<item>ICC_ProfileGray</item>
+			<item>ICC_ProfileRGB</item>
+			<item>IDLEntity</item>
+			<item>IDLType</item>
+			<item>IDLTypeHelper</item>
+			<item>IDLTypeOperations</item>
+			<item>ID_ASSIGNMENT_POLICY_ID</item>
+			<item>ID_UNIQUENESS_POLICY_ID</item>
+			<item>IIOByteBuffer</item>
+			<item>IIOException</item>
+			<item>IIOImage</item>
+			<item>IIOInvalidTreeException</item>
+			<item>IIOMetadata</item>
+			<item>IIOMetadataController</item>
+			<item>IIOMetadataFormat</item>
+			<item>IIOMetadataFormatImpl</item>
+			<item>IIOMetadataNode</item>
+			<item>IIOParam</item>
+			<item>IIOParamController</item>
+			<item>IIOReadProgressListener</item>
+			<item>IIOReadUpdateListener</item>
+			<item>IIOReadWarningListener</item>
+			<item>IIORegistry</item>
+			<item>IIOServiceProvider</item>
+			<item>IIOWriteProgressListener</item>
+			<item>IIOWriteWarningListener</item>
+			<item>IMPLICIT_ACTIVATION_POLICY_ID</item>
+			<item>IMP_LIMIT</item>
+			<item>INACTIVE</item>
+			<item>INITIALIZE</item>
+			<item>INTERNAL</item>
+			<item>INTF_REPOS</item>
+			<item>INVALID_ACTIVITY</item>
+			<item>INVALID_TRANSACTION</item>
+			<item>INV_FLAG</item>
+			<item>INV_IDENT</item>
+			<item>INV_OBJREF</item>
+			<item>INV_POLICY</item>
+			<item>IOException</item>
+			<item>IOR</item>
+			<item>IORHelper</item>
+			<item>IORHolder</item>
+			<item>IORInfo</item>
+			<item>IORInfoOperations</item>
+			<item>IORInterceptor</item>
+			<item>IORInterceptorOperations</item>
+			<item>IORInterceptor_3_0</item>
+			<item>IORInterceptor_3_0Helper</item>
+			<item>IORInterceptor_3_0Holder</item>
+			<item>IORInterceptor_3_0Operations</item>
+			<item>IRObject</item>
+			<item>IRObjectOperations</item>
+			<item>Icon</item>
+			<item>IconUIResource</item>
+			<item>IconView</item>
+			<item>IdAssignmentPolicy</item>
+			<item>IdAssignmentPolicyOperations</item>
+			<item>IdAssignmentPolicyValue</item>
+			<item>IdUniquenessPolicy</item>
+			<item>IdUniquenessPolicyOperations</item>
+			<item>IdUniquenessPolicyValue</item>
+			<item>IdentifierHelper</item>
+			<item>Identity</item>
+			<item>IdentityHashMap</item>
+			<item>IdentityScope</item>
+			<item>IllegalAccessError</item>
+			<item>IllegalAccessException</item>
+			<item>IllegalArgumentException</item>
+			<item>IllegalBlockSizeException</item>
+			<item>IllegalBlockingModeException</item>
+			<item>IllegalCharsetNameException</item>
+			<item>IllegalClassFormatException</item>
+			<item>IllegalComponentStateException</item>
+			<item>IllegalFormatCodePointException</item>
+			<item>IllegalFormatConversionException</item>
+			<item>IllegalFormatException</item>
+			<item>IllegalFormatFlagsException</item>
+			<item>IllegalFormatPrecisionException</item>
+			<item>IllegalFormatWidthException</item>
+			<item>IllegalMonitorStateException</item>
+			<item>IllegalPathStateException</item>
+			<item>IllegalSelectorException</item>
+			<item>IllegalStateException</item>
+			<item>IllegalThreadStateException</item>
+			<item>Image</item>
+			<item>ImageCapabilities</item>
+			<item>ImageConsumer</item>
+			<item>ImageFilter</item>
+			<item>ImageGraphicAttribute</item>
+			<item>ImageIO</item>
+			<item>ImageIcon</item>
+			<item>ImageInputStream</item>
+			<item>ImageInputStreamImpl</item>
+			<item>ImageInputStreamSpi</item>
+			<item>ImageObserver</item>
+			<item>ImageOutputStream</item>
+			<item>ImageOutputStreamImpl</item>
+			<item>ImageOutputStreamSpi</item>
+			<item>ImageProducer</item>
+			<item>ImageReadParam</item>
+			<item>ImageReader</item>
+			<item>ImageReaderSpi</item>
+			<item>ImageReaderWriterSpi</item>
+			<item>ImageTranscoder</item>
+			<item>ImageTranscoderSpi</item>
+			<item>ImageTypeSpecifier</item>
+			<item>ImageView</item>
+			<item>ImageWriteParam</item>
+			<item>ImageWriter</item>
+			<item>ImageWriterSpi</item>
+			<item>ImagingOpException</item>
+			<item>ImplicitActivationPolicy</item>
+			<item>ImplicitActivationPolicyOperations</item>
+			<item>ImplicitActivationPolicyValue</item>
+			<item>IncompatibleClassChangeError</item>
+			<item>IncompleteAnnotationException</item>
+			<item>InconsistentTypeCode</item>
+			<item>InconsistentTypeCode</item>
+			<item>InconsistentTypeCodeHelper</item>
+			<item>IndexColorModel</item>
+			<item>IndexOutOfBoundsException</item>
+			<item>IndexedPropertyChangeEvent</item>
+			<item>IndexedPropertyDescriptor</item>
+			<item>IndirectionException</item>
+			<item>Inet4Address</item>
+			<item>Inet6Address</item>
+			<item>InetAddress</item>
+			<item>InetSocketAddress</item>
+			<item>Inflater</item>
+			<item>InflaterInputStream</item>
+			<item>InheritableThreadLocal</item>
+			<item>Inherited</item>
+			<item>InitialContext</item>
+			<item>InitialContextFactory</item>
+			<item>InitialContextFactoryBuilder</item>
+			<item>InitialDirContext</item>
+			<item>InitialLdapContext</item>
+			<item>InlineView</item>
+			<item>InputContext</item>
+			<item>InputEvent</item>
+			<item>InputMap</item>
+			<item>InputMapUIResource</item>
+			<item>InputMethod</item>
+			<item>InputMethodContext</item>
+			<item>InputMethodDescriptor</item>
+			<item>InputMethodEvent</item>
+			<item>InputMethodHighlight</item>
+			<item>InputMethodListener</item>
+			<item>InputMethodRequests</item>
+			<item>InputMismatchException</item>
+			<item>InputSource</item>
+			<item>InputStream</item>
+			<item>InputStream</item>
+			<item>InputStream</item>
+			<item>InputStreamReader</item>
+			<item>InputSubset</item>
+			<item>InputVerifier</item>
+			<item>Insets</item>
+			<item>InsetsUIResource</item>
+			<item>InstanceAlreadyExistsException</item>
+			<item>InstanceNotFoundException</item>
+			<item>InstantiationError</item>
+			<item>InstantiationException</item>
+			<item>Instrument</item>
+			<item>Instrumentation</item>
+			<item>InsufficientResourcesException</item>
+			<item>IntBuffer</item>
+			<item>IntHolder</item>
+			<item>Integer</item>
+			<item>IntegerSyntax</item>
+			<item>Interceptor</item>
+			<item>InterceptorOperations</item>
+			<item>InternalError</item>
+			<item>InternalFrameAdapter</item>
+			<item>InternalFrameEvent</item>
+			<item>InternalFrameFocusTraversalPolicy</item>
+			<item>InternalFrameListener</item>
+			<item>InternalFrameUI</item>
+			<item>InternationalFormatter</item>
+			<item>InterruptedException</item>
+			<item>InterruptedIOException</item>
+			<item>InterruptedNamingException</item>
+			<item>InterruptibleChannel</item>
+			<item>IntrospectionException</item>
+			<item>IntrospectionException</item>
+			<item>Introspector</item>
+			<item>Invalid</item>
+			<item>InvalidActivityException</item>
+			<item>InvalidAddress</item>
+			<item>InvalidAddressHelper</item>
+			<item>InvalidAddressHolder</item>
+			<item>InvalidAlgorithmParameterException</item>
+			<item>InvalidApplicationException</item>
+			<item>InvalidAttributeIdentifierException</item>
+			<item>InvalidAttributeValueException</item>
+			<item>InvalidAttributeValueException</item>
+			<item>InvalidAttributesException</item>
+			<item>InvalidClassException</item>
+			<item>InvalidDnDOperationException</item>
+			<item>InvalidKeyException</item>
+			<item>InvalidKeyException</item>
+			<item>InvalidKeySpecException</item>
+			<item>InvalidMarkException</item>
+			<item>InvalidMidiDataException</item>
+			<item>InvalidName</item>
+			<item>InvalidName</item>
+			<item>InvalidName</item>
+			<item>InvalidNameException</item>
+			<item>InvalidNameHelper</item>
+			<item>InvalidNameHelper</item>
+			<item>InvalidNameHolder</item>
+			<item>InvalidObjectException</item>
+			<item>InvalidOpenTypeException</item>
+			<item>InvalidParameterException</item>
+			<item>InvalidParameterSpecException</item>
+			<item>InvalidPolicy</item>
+			<item>InvalidPolicyHelper</item>
+			<item>InvalidPreferencesFormatException</item>
+			<item>InvalidPropertiesFormatException</item>
+			<item>InvalidRelationIdException</item>
+			<item>InvalidRelationServiceException</item>
+			<item>InvalidRelationTypeException</item>
+			<item>InvalidRoleInfoException</item>
+			<item>InvalidRoleValueException</item>
+			<item>InvalidSearchControlsException</item>
+			<item>InvalidSearchFilterException</item>
+			<item>InvalidSeq</item>
+			<item>InvalidSlot</item>
+			<item>InvalidSlotHelper</item>
+			<item>InvalidTargetObjectTypeException</item>
+			<item>InvalidTransactionException</item>
+			<item>InvalidTypeForEncoding</item>
+			<item>InvalidTypeForEncodingHelper</item>
+			<item>InvalidValue</item>
+			<item>InvalidValue</item>
+			<item>InvalidValueHelper</item>
+			<item>InvocationEvent</item>
+			<item>InvocationHandler</item>
+			<item>InvocationTargetException</item>
+			<item>InvokeHandler</item>
+			<item>IstringHelper</item>
+			<item>ItemEvent</item>
+			<item>ItemListener</item>
+			<item>ItemSelectable</item>
+			<item>Iterable</item>
+			<item>Iterator</item>
+			<item>IvParameterSpec</item>
+			<item>JApplet</item>
+			<item>JButton</item>
+			<item>JCheckBox</item>
+			<item>JCheckBoxMenuItem</item>
+			<item>JColorChooser</item>
+			<item>JComboBox</item>
+			<item>JComboBox.KeySelectionManager</item>
+			<item>JComponent</item>
+			<item>JDesktopPane</item>
+			<item>JDialog</item>
+			<item>JEditorPane</item>
+			<item>JFileChooser</item>
+			<item>JFormattedTextField</item>
+			<item>JFormattedTextField.AbstractFormatter</item>
+			<item>JFormattedTextField.AbstractFormatterFactory</item>
+			<item>JFrame</item>
+			<item>JInternalFrame</item>
+			<item>JInternalFrame.JDesktopIcon</item>
+			<item>JLabel</item>
+			<item>JLayeredPane</item>
+			<item>JList</item>
+			<item>JMException</item>
+			<item>JMRuntimeException</item>
+			<item>JMXAuthenticator</item>
+			<item>JMXConnectionNotification</item>
+			<item>JMXConnector</item>
+			<item>JMXConnectorFactory</item>
+			<item>JMXConnectorProvider</item>
+			<item>JMXConnectorServer</item>
+			<item>JMXConnectorServerFactory</item>
+			<item>JMXConnectorServerMBean</item>
+			<item>JMXConnectorServerProvider</item>
+			<item>JMXPrincipal</item>
+			<item>JMXProviderException</item>
+			<item>JMXServerErrorException</item>
+			<item>JMXServiceURL</item>
+			<item>JMenu</item>
+			<item>JMenuBar</item>
+			<item>JMenuItem</item>
+			<item>JOptionPane</item>
+			<item>JPEGHuffmanTable</item>
+			<item>JPEGImageReadParam</item>
+			<item>JPEGImageWriteParam</item>
+			<item>JPEGQTable</item>
+			<item>JPanel</item>
+			<item>JPasswordField</item>
+			<item>JPopupMenu</item>
+			<item>JPopupMenu.Separator</item>
+			<item>JProgressBar</item>
+			<item>JRadioButton</item>
+			<item>JRadioButtonMenuItem</item>
+			<item>JRootPane</item>
+			<item>JScrollBar</item>
+			<item>JScrollPane</item>
+			<item>JSeparator</item>
+			<item>JSlider</item>
+			<item>JSpinner</item>
+			<item>JSpinner.DateEditor</item>
+			<item>JSpinner.DefaultEditor</item>
+			<item>JSpinner.ListEditor</item>
+			<item>JSpinner.NumberEditor</item>
+			<item>JSplitPane</item>
+			<item>JTabbedPane</item>
+			<item>JTable</item>
+			<item>JTable.PrintMode</item>
+			<item>JTableHeader</item>
+			<item>JTextArea</item>
+			<item>JTextComponent</item>
+			<item>JTextComponent.KeyBinding</item>
+			<item>JTextField</item>
+			<item>JTextPane</item>
+			<item>JToggleButton</item>
+			<item>JToggleButton.ToggleButtonModel</item>
+			<item>JToolBar</item>
+			<item>JToolBar.Separator</item>
+			<item>JToolTip</item>
+			<item>JTree</item>
+			<item>JTree.DynamicUtilTreeNode</item>
+			<item>JTree.EmptySelectionModel</item>
+			<item>JViewport</item>
+			<item>JWindow</item>
+			<item>JarEntry</item>
+			<item>JarException</item>
+			<item>JarFile</item>
+			<item>JarInputStream</item>
+			<item>JarOutputStream</item>
+			<item>JarURLConnection</item>
+			<item>JdbcRowSet</item>
+			<item>JobAttributes</item>
+			<item>JobAttributes.DefaultSelectionType</item>
+			<item>JobAttributes.DestinationType</item>
+			<item>JobAttributes.DialogType</item>
+			<item>JobAttributes.MultipleDocumentHandlingType</item>
+			<item>JobAttributes.SidesType</item>
+			<item>JobHoldUntil</item>
+			<item>JobImpressions</item>
+			<item>JobImpressionsCompleted</item>
+			<item>JobImpressionsSupported</item>
+			<item>JobKOctets</item>
+			<item>JobKOctetsProcessed</item>
+			<item>JobKOctetsSupported</item>
+			<item>JobMediaSheets</item>
+			<item>JobMediaSheetsCompleted</item>
+			<item>JobMediaSheetsSupported</item>
+			<item>JobMessageFromOperator</item>
+			<item>JobName</item>
+			<item>JobOriginatingUserName</item>
+			<item>JobPriority</item>
+			<item>JobPrioritySupported</item>
+			<item>JobSheets</item>
+			<item>JobState</item>
+			<item>JobStateReason</item>
+			<item>JobStateReasons</item>
+			<item>JoinRowSet</item>
+			<item>Joinable</item>
+			<item>KerberosKey</item>
+			<item>KerberosPrincipal</item>
+			<item>KerberosTicket</item>
+			<item>Kernel</item>
+			<item>Key</item>
+			<item>KeyAdapter</item>
+			<item>KeyAgreement</item>
+			<item>KeyAgreementSpi</item>
+			<item>KeyAlreadyExistsException</item>
+			<item>KeyEvent</item>
+			<item>KeyEventDispatcher</item>
+			<item>KeyEventPostProcessor</item>
+			<item>KeyException</item>
+			<item>KeyFactory</item>
+			<item>KeyFactorySpi</item>
+			<item>KeyGenerator</item>
+			<item>KeyGeneratorSpi</item>
+			<item>KeyListener</item>
+			<item>KeyManagementException</item>
+			<item>KeyManager</item>
+			<item>KeyManagerFactory</item>
+			<item>KeyManagerFactorySpi</item>
+			<item>KeyPair</item>
+			<item>KeyPairGenerator</item>
+			<item>KeyPairGeneratorSpi</item>
+			<item>KeyRep</item>
+			<item>KeyRep.Type</item>
+			<item>KeySpec</item>
+			<item>KeyStore</item>
+			<item>KeyStore.Builder</item>
+			<item>KeyStore.CallbackHandlerProtection</item>
+			<item>KeyStore.Entry</item>
+			<item>KeyStore.LoadStoreParameter</item>
+			<item>KeyStore.PasswordProtection</item>
+			<item>KeyStore.PrivateKeyEntry</item>
+			<item>KeyStore.ProtectionParameter</item>
+			<item>KeyStore.SecretKeyEntry</item>
+			<item>KeyStore.TrustedCertificateEntry</item>
+			<item>KeyStoreBuilderParameters</item>
+			<item>KeyStoreException</item>
+			<item>KeyStoreSpi</item>
+			<item>KeyStroke</item>
+			<item>KeyboardFocusManager</item>
+			<item>Keymap</item>
+			<item>LDAPCertStoreParameters</item>
+			<item>LIFESPAN_POLICY_ID</item>
+			<item>LOCATION_FORWARD</item>
+			<item>LSException</item>
+			<item>LSInput</item>
+			<item>LSLoadEvent</item>
+			<item>LSOutput</item>
+			<item>LSParser</item>
+			<item>LSParserFilter</item>
+			<item>LSProgressEvent</item>
+			<item>LSResourceResolver</item>
+			<item>LSSerializer</item>
+			<item>LSSerializerFilter</item>
+			<item>Label</item>
+			<item>LabelUI</item>
+			<item>LabelView</item>
+			<item>LanguageCallback</item>
+			<item>LastOwnerException</item>
+			<item>LayeredHighlighter</item>
+			<item>LayeredHighlighter.LayerPainter</item>
+			<item>LayoutFocusTraversalPolicy</item>
+			<item>LayoutManager</item>
+			<item>LayoutManager2</item>
+			<item>LayoutQueue</item>
+			<item>LdapContext</item>
+			<item>LdapName</item>
+			<item>LdapReferralException</item>
+			<item>Lease</item>
+			<item>Level</item>
+			<item>LexicalHandler</item>
+			<item>LifespanPolicy</item>
+			<item>LifespanPolicyOperations</item>
+			<item>LifespanPolicyValue</item>
+			<item>LimitExceededException</item>
+			<item>Line</item>
+			<item>Line.Info</item>
+			<item>Line2D</item>
+			<item>Line2D.Double</item>
+			<item>Line2D.Float</item>
+			<item>LineBorder</item>
+			<item>LineBreakMeasurer</item>
+			<item>LineEvent</item>
+			<item>LineEvent.Type</item>
+			<item>LineListener</item>
+			<item>LineMetrics</item>
+			<item>LineNumberInputStream</item>
+			<item>LineNumberReader</item>
+			<item>LineUnavailableException</item>
+			<item>LinkException</item>
+			<item>LinkLoopException</item>
+			<item>LinkRef</item>
+			<item>LinkageError</item>
+			<item>LinkedBlockingQueue</item>
+			<item>LinkedHashMap</item>
+			<item>LinkedHashSet</item>
+			<item>LinkedList</item>
+			<item>List</item>
+			<item>List</item>
+			<item>ListCellRenderer</item>
+			<item>ListDataEvent</item>
+			<item>ListDataListener</item>
+			<item>ListIterator</item>
+			<item>ListModel</item>
+			<item>ListResourceBundle</item>
+			<item>ListSelectionEvent</item>
+			<item>ListSelectionListener</item>
+			<item>ListSelectionModel</item>
+			<item>ListUI</item>
+			<item>ListView</item>
+			<item>ListenerNotFoundException</item>
+			<item>LoaderHandler</item>
+			<item>LocalObject</item>
+			<item>Locale</item>
+			<item>LocateRegistry</item>
+			<item>Locator</item>
+			<item>Locator2</item>
+			<item>Locator2Impl</item>
+			<item>LocatorImpl</item>
+			<item>Lock</item>
+			<item>LockSupport</item>
+			<item>LogManager</item>
+			<item>LogRecord</item>
+			<item>LogStream</item>
+			<item>Logger</item>
+			<item>LoggingMXBean</item>
+			<item>LoggingPermission</item>
+			<item>LoginContext</item>
+			<item>LoginException</item>
+			<item>LoginModule</item>
+			<item>Long</item>
+			<item>LongBuffer</item>
+			<item>LongHolder</item>
+			<item>LongLongSeqHelper</item>
+			<item>LongLongSeqHolder</item>
+			<item>LongSeqHelper</item>
+			<item>LongSeqHolder</item>
+			<item>LookAndFeel</item>
+			<item>LookupOp</item>
+			<item>LookupTable</item>
+			<item>MARSHAL</item>
+			<item>MBeanAttributeInfo</item>
+			<item>MBeanConstructorInfo</item>
+			<item>MBeanException</item>
+			<item>MBeanFeatureInfo</item>
+			<item>MBeanInfo</item>
+			<item>MBeanNotificationInfo</item>
+			<item>MBeanOperationInfo</item>
+			<item>MBeanParameterInfo</item>
+			<item>MBeanPermission</item>
+			<item>MBeanRegistration</item>
+			<item>MBeanRegistrationException</item>
+			<item>MBeanServer</item>
+			<item>MBeanServerBuilder</item>
+			<item>MBeanServerConnection</item>
+			<item>MBeanServerDelegate</item>
+			<item>MBeanServerDelegateMBean</item>
+			<item>MBeanServerFactory</item>
+			<item>MBeanServerForwarder</item>
+			<item>MBeanServerInvocationHandler</item>
+			<item>MBeanServerNotification</item>
+			<item>MBeanServerNotificationFilter</item>
+			<item>MBeanServerPermission</item>
+			<item>MBeanTrustPermission</item>
+			<item>MGF1ParameterSpec</item>
+			<item>MLet</item>
+			<item>MLetMBean</item>
+			<item>Mac</item>
+			<item>MacSpi</item>
+			<item>MalformedInputException</item>
+			<item>MalformedLinkException</item>
+			<item>MalformedObjectNameException</item>
+			<item>MalformedParameterizedTypeException</item>
+			<item>MalformedURLException</item>
+			<item>ManageReferralControl</item>
+			<item>ManagementFactory</item>
+			<item>ManagementPermission</item>
+			<item>ManagerFactoryParameters</item>
+			<item>Manifest</item>
+			<item>Map</item>
+			<item>Map.Entry</item>
+			<item>MappedByteBuffer</item>
+			<item>MarshalException</item>
+			<item>MarshalledObject</item>
+			<item>MaskFormatter</item>
+			<item>MatchResult</item>
+			<item>Matcher</item>
+			<item>Math</item>
+			<item>MathContext</item>
+			<item>MatteBorder</item>
+			<item>Media</item>
+			<item>MediaName</item>
+			<item>MediaPrintableArea</item>
+			<item>MediaSize</item>
+			<item>MediaSize.Engineering</item>
+			<item>MediaSize.ISO</item>
+			<item>MediaSize.JIS</item>
+			<item>MediaSize.NA</item>
+			<item>MediaSize.Other</item>
+			<item>MediaSizeName</item>
+			<item>MediaTracker</item>
+			<item>MediaTray</item>
+			<item>Member</item>
+			<item>MemoryCacheImageInputStream</item>
+			<item>MemoryCacheImageOutputStream</item>
+			<item>MemoryHandler</item>
+			<item>MemoryImageSource</item>
+			<item>MemoryMXBean</item>
+			<item>MemoryManagerMXBean</item>
+			<item>MemoryNotificationInfo</item>
+			<item>MemoryPoolMXBean</item>
+			<item>MemoryType</item>
+			<item>MemoryUsage</item>
+			<item>Menu</item>
+			<item>MenuBar</item>
+			<item>MenuBarUI</item>
+			<item>MenuComponent</item>
+			<item>MenuContainer</item>
+			<item>MenuDragMouseEvent</item>
+			<item>MenuDragMouseListener</item>
+			<item>MenuElement</item>
+			<item>MenuEvent</item>
+			<item>MenuItem</item>
+			<item>MenuItemUI</item>
+			<item>MenuKeyEvent</item>
+			<item>MenuKeyListener</item>
+			<item>MenuListener</item>
+			<item>MenuSelectionManager</item>
+			<item>MenuShortcut</item>
+			<item>MessageDigest</item>
+			<item>MessageDigestSpi</item>
+			<item>MessageFormat</item>
+			<item>MessageFormat.Field</item>
+			<item>MessageProp</item>
+			<item>MetaEventListener</item>
+			<item>MetaMessage</item>
+			<item>MetalBorders</item>
+			<item>MetalBorders.ButtonBorder</item>
+			<item>MetalBorders.Flush3DBorder</item>
+			<item>MetalBorders.InternalFrameBorder</item>
+			<item>MetalBorders.MenuBarBorder</item>
+			<item>MetalBorders.MenuItemBorder</item>
+			<item>MetalBorders.OptionDialogBorder</item>
+			<item>MetalBorders.PaletteBorder</item>
+			<item>MetalBorders.PopupMenuBorder</item>
+			<item>MetalBorders.RolloverButtonBorder</item>
+			<item>MetalBorders.ScrollPaneBorder</item>
+			<item>MetalBorders.TableHeaderBorder</item>
+			<item>MetalBorders.TextFieldBorder</item>
+			<item>MetalBorders.ToggleButtonBorder</item>
+			<item>MetalBorders.ToolBarBorder</item>
+			<item>MetalButtonUI</item>
+			<item>MetalCheckBoxIcon</item>
+			<item>MetalCheckBoxUI</item>
+			<item>MetalComboBoxButton</item>
+			<item>MetalComboBoxEditor</item>
+			<item>MetalComboBoxEditor.UIResource</item>
+			<item>MetalComboBoxIcon</item>
+			<item>MetalComboBoxUI</item>
+			<item>MetalDesktopIconUI</item>
+			<item>MetalFileChooserUI</item>
+			<item>MetalIconFactory</item>
+			<item>MetalIconFactory.FileIcon16</item>
+			<item>MetalIconFactory.FolderIcon16</item>
+			<item>MetalIconFactory.PaletteCloseIcon</item>
+			<item>MetalIconFactory.TreeControlIcon</item>
+			<item>MetalIconFactory.TreeFolderIcon</item>
+			<item>MetalIconFactory.TreeLeafIcon</item>
+			<item>MetalInternalFrameTitlePane</item>
+			<item>MetalInternalFrameUI</item>
+			<item>MetalLabelUI</item>
+			<item>MetalLookAndFeel</item>
+			<item>MetalMenuBarUI</item>
+			<item>MetalPopupMenuSeparatorUI</item>
+			<item>MetalProgressBarUI</item>
+			<item>MetalRadioButtonUI</item>
+			<item>MetalRootPaneUI</item>
+			<item>MetalScrollBarUI</item>
+			<item>MetalScrollButton</item>
+			<item>MetalScrollPaneUI</item>
+			<item>MetalSeparatorUI</item>
+			<item>MetalSliderUI</item>
+			<item>MetalSplitPaneUI</item>
+			<item>MetalTabbedPaneUI</item>
+			<item>MetalTextFieldUI</item>
+			<item>MetalTheme</item>
+			<item>MetalToggleButtonUI</item>
+			<item>MetalToolBarUI</item>
+			<item>MetalToolTipUI</item>
+			<item>MetalTreeUI</item>
+			<item>Method</item>
+			<item>MethodDescriptor</item>
+			<item>MidiChannel</item>
+			<item>MidiDevice</item>
+			<item>MidiDevice.Info</item>
+			<item>MidiDeviceProvider</item>
+			<item>MidiEvent</item>
+			<item>MidiFileFormat</item>
+			<item>MidiFileReader</item>
+			<item>MidiFileWriter</item>
+			<item>MidiMessage</item>
+			<item>MidiSystem</item>
+			<item>MidiUnavailableException</item>
+			<item>MimeTypeParseException</item>
+			<item>MinimalHTMLWriter</item>
+			<item>MissingFormatArgumentException</item>
+			<item>MissingFormatWidthException</item>
+			<item>MissingResourceException</item>
+			<item>Mixer</item>
+			<item>Mixer.Info</item>
+			<item>MixerProvider</item>
+			<item>ModelMBean</item>
+			<item>ModelMBeanAttributeInfo</item>
+			<item>ModelMBeanConstructorInfo</item>
+			<item>ModelMBeanInfo</item>
+			<item>ModelMBeanInfoSupport</item>
+			<item>ModelMBeanNotificationBroadcaster</item>
+			<item>ModelMBeanNotificationInfo</item>
+			<item>ModelMBeanOperationInfo</item>
+			<item>ModificationItem</item>
+			<item>Modifier</item>
+			<item>Monitor</item>
+			<item>MonitorMBean</item>
+			<item>MonitorNotification</item>
+			<item>MonitorSettingException</item>
+			<item>MouseAdapter</item>
+			<item>MouseDragGestureRecognizer</item>
+			<item>MouseEvent</item>
+			<item>MouseInfo</item>
+			<item>MouseInputAdapter</item>
+			<item>MouseInputListener</item>
+			<item>MouseListener</item>
+			<item>MouseMotionAdapter</item>
+			<item>MouseMotionListener</item>
+			<item>MouseWheelEvent</item>
+			<item>MouseWheelListener</item>
+			<item>MultiButtonUI</item>
+			<item>MultiColorChooserUI</item>
+			<item>MultiComboBoxUI</item>
+			<item>MultiDesktopIconUI</item>
+			<item>MultiDesktopPaneUI</item>
+			<item>MultiDoc</item>
+			<item>MultiDocPrintJob</item>
+			<item>MultiDocPrintService</item>
+			<item>MultiFileChooserUI</item>
+			<item>MultiInternalFrameUI</item>
+			<item>MultiLabelUI</item>
+			<item>MultiListUI</item>
+			<item>MultiLookAndFeel</item>
+			<item>MultiMenuBarUI</item>
+			<item>MultiMenuItemUI</item>
+			<item>MultiOptionPaneUI</item>
+			<item>MultiPanelUI</item>
+			<item>MultiPixelPackedSampleModel</item>
+			<item>MultiPopupMenuUI</item>
+			<item>MultiProgressBarUI</item>
+			<item>MultiRootPaneUI</item>
+			<item>MultiScrollBarUI</item>
+			<item>MultiScrollPaneUI</item>
+			<item>MultiSeparatorUI</item>
+			<item>MultiSliderUI</item>
+			<item>MultiSpinnerUI</item>
+			<item>MultiSplitPaneUI</item>
+			<item>MultiTabbedPaneUI</item>
+			<item>MultiTableHeaderUI</item>
+			<item>MultiTableUI</item>
+			<item>MultiTextUI</item>
+			<item>MultiToolBarUI</item>
+			<item>MultiToolTipUI</item>
+			<item>MultiTreeUI</item>
+			<item>MultiViewportUI</item>
+			<item>MulticastSocket</item>
+			<item>MultipleComponentProfileHelper</item>
+			<item>MultipleComponentProfileHolder</item>
+			<item>MultipleDocumentHandling</item>
+			<item>MultipleMaster</item>
+			<item>MutableAttributeSet</item>
+			<item>MutableComboBoxModel</item>
+			<item>MutableTreeNode</item>
+			<item>NON_EXISTENT</item>
+			<item>NO_IMPLEMENT</item>
+			<item>NO_MEMORY</item>
+			<item>NO_PERMISSION</item>
+			<item>NO_RESOURCES</item>
+			<item>NO_RESPONSE</item>
+			<item>NVList</item>
+			<item>Name</item>
+			<item>NameAlreadyBoundException</item>
+			<item>NameCallback</item>
+			<item>NameClassPair</item>
+			<item>NameComponent</item>
+			<item>NameComponentHelper</item>
+			<item>NameComponentHolder</item>
+			<item>NameDynAnyPair</item>
+			<item>NameDynAnyPairHelper</item>
+			<item>NameDynAnyPairSeqHelper</item>
+			<item>NameHelper</item>
+			<item>NameHolder</item>
+			<item>NameList</item>
+			<item>NameNotFoundException</item>
+			<item>NameParser</item>
+			<item>NameValuePair</item>
+			<item>NameValuePair</item>
+			<item>NameValuePairHelper</item>
+			<item>NameValuePairHelper</item>
+			<item>NameValuePairSeqHelper</item>
+			<item>NamedNodeMap</item>
+			<item>NamedValue</item>
+			<item>NamespaceChangeListener</item>
+			<item>NamespaceContext</item>
+			<item>NamespaceSupport</item>
+			<item>Naming</item>
+			<item>NamingContext</item>
+			<item>NamingContextExt</item>
+			<item>NamingContextExtHelper</item>
+			<item>NamingContextExtHolder</item>
+			<item>NamingContextExtOperations</item>
+			<item>NamingContextExtPOA</item>
+			<item>NamingContextHelper</item>
+			<item>NamingContextHolder</item>
+			<item>NamingContextOperations</item>
+			<item>NamingContextPOA</item>
+			<item>NamingEnumeration</item>
+			<item>NamingEvent</item>
+			<item>NamingException</item>
+			<item>NamingExceptionEvent</item>
+			<item>NamingListener</item>
+			<item>NamingManager</item>
+			<item>NamingSecurityException</item>
+			<item>NavigationFilter</item>
+			<item>NavigationFilter.FilterBypass</item>
+			<item>NegativeArraySizeException</item>
+			<item>NetPermission</item>
+			<item>NetworkInterface</item>
+			<item>NoClassDefFoundError</item>
+			<item>NoConnectionPendingException</item>
+			<item>NoContext</item>
+			<item>NoContextHelper</item>
+			<item>NoInitialContextException</item>
+			<item>NoPermissionException</item>
+			<item>NoRouteToHostException</item>
+			<item>NoServant</item>
+			<item>NoServantHelper</item>
+			<item>NoSuchAlgorithmException</item>
+			<item>NoSuchAttributeException</item>
+			<item>NoSuchElementException</item>
+			<item>NoSuchFieldError</item>
+			<item>NoSuchFieldException</item>
+			<item>NoSuchMethodError</item>
+			<item>NoSuchMethodException</item>
+			<item>NoSuchObjectException</item>
+			<item>NoSuchPaddingException</item>
+			<item>NoSuchProviderException</item>
+			<item>Node</item>
+			<item>NodeChangeEvent</item>
+			<item>NodeChangeListener</item>
+			<item>NodeList</item>
+			<item>NonReadableChannelException</item>
+			<item>NonWritableChannelException</item>
+			<item>NoninvertibleTransformException</item>
+			<item>NotActiveException</item>
+			<item>NotBoundException</item>
+			<item>NotCompliantMBeanException</item>
+			<item>NotContextException</item>
+			<item>NotEmpty</item>
+			<item>NotEmptyHelper</item>
+			<item>NotEmptyHolder</item>
+			<item>NotFound</item>
+			<item>NotFoundHelper</item>
+			<item>NotFoundHolder</item>
+			<item>NotFoundReason</item>
+			<item>NotFoundReasonHelper</item>
+			<item>NotFoundReasonHolder</item>
+			<item>NotOwnerException</item>
+			<item>NotSerializableException</item>
+			<item>NotYetBoundException</item>
+			<item>NotYetConnectedException</item>
+			<item>Notation</item>
+			<item>Notification</item>
+			<item>NotificationBroadcaster</item>
+			<item>NotificationBroadcasterSupport</item>
+			<item>NotificationEmitter</item>
+			<item>NotificationFilter</item>
+			<item>NotificationFilterSupport</item>
+			<item>NotificationListener</item>
+			<item>NotificationResult</item>
+			<item>NullCipher</item>
+			<item>NullPointerException</item>
+			<item>Number</item>
+			<item>NumberFormat</item>
+			<item>NumberFormat.Field</item>
+			<item>NumberFormatException</item>
+			<item>NumberFormatter</item>
+			<item>NumberOfDocuments</item>
+			<item>NumberOfInterveningJobs</item>
+			<item>NumberUp</item>
+			<item>NumberUpSupported</item>
+			<item>NumericShaper</item>
+			<item>OAEPParameterSpec</item>
+			<item>OBJECT_NOT_EXIST</item>
+			<item>OBJ_ADAPTER</item>
+			<item>OMGVMCID</item>
+			<item>ORB</item>
+			<item>ORB</item>
+			<item>ORBIdHelper</item>
+			<item>ORBInitInfo</item>
+			<item>ORBInitInfoOperations</item>
+			<item>ORBInitializer</item>
+			<item>ORBInitializerOperations</item>
+			<item>ObjID</item>
+			<item>Object</item>
+			<item>Object</item>
+			<item>ObjectAlreadyActive</item>
+			<item>ObjectAlreadyActiveHelper</item>
+			<item>ObjectChangeListener</item>
+			<item>ObjectFactory</item>
+			<item>ObjectFactoryBuilder</item>
+			<item>ObjectHelper</item>
+			<item>ObjectHolder</item>
+			<item>ObjectIdHelper</item>
+			<item>ObjectIdHelper</item>
+			<item>ObjectImpl</item>
+			<item>ObjectImpl</item>
+			<item>ObjectInput</item>
+			<item>ObjectInputStream</item>
+			<item>ObjectInputStream.GetField</item>
+			<item>ObjectInputValidation</item>
+			<item>ObjectInstance</item>
+			<item>ObjectName</item>
+			<item>ObjectNotActive</item>
+			<item>ObjectNotActiveHelper</item>
+			<item>ObjectOutput</item>
+			<item>ObjectOutputStream</item>
+			<item>ObjectOutputStream.PutField</item>
+			<item>ObjectReferenceFactory</item>
+			<item>ObjectReferenceFactoryHelper</item>
+			<item>ObjectReferenceFactoryHolder</item>
+			<item>ObjectReferenceTemplate</item>
+			<item>ObjectReferenceTemplateHelper</item>
+			<item>ObjectReferenceTemplateHolder</item>
+			<item>ObjectReferenceTemplateSeqHelper</item>
+			<item>ObjectReferenceTemplateSeqHolder</item>
+			<item>ObjectStreamClass</item>
+			<item>ObjectStreamConstants</item>
+			<item>ObjectStreamException</item>
+			<item>ObjectStreamField</item>
+			<item>ObjectView</item>
+			<item>Observable</item>
+			<item>Observer</item>
+			<item>OceanTheme</item>
+			<item>OctetSeqHelper</item>
+			<item>OctetSeqHolder</item>
+			<item>Oid</item>
+			<item>OpenDataException</item>
+			<item>OpenMBeanAttributeInfo</item>
+			<item>OpenMBeanAttributeInfoSupport</item>
+			<item>OpenMBeanConstructorInfo</item>
+			<item>OpenMBeanConstructorInfoSupport</item>
+			<item>OpenMBeanInfo</item>
+			<item>OpenMBeanInfoSupport</item>
+			<item>OpenMBeanOperationInfo</item>
+			<item>OpenMBeanOperationInfoSupport</item>
+			<item>OpenMBeanParameterInfo</item>
+			<item>OpenMBeanParameterInfoSupport</item>
+			<item>OpenType</item>
+			<item>OpenType</item>
+			<item>OperatingSystemMXBean</item>
+			<item>Operation</item>
+			<item>OperationNotSupportedException</item>
+			<item>OperationsException</item>
+			<item>Option</item>
+			<item>OptionPaneUI</item>
+			<item>OptionalDataException</item>
+			<item>OrientationRequested</item>
+			<item>OutOfMemoryError</item>
+			<item>OutputDeviceAssigned</item>
+			<item>OutputKeys</item>
+			<item>OutputStream</item>
+			<item>OutputStream</item>
+			<item>OutputStream</item>
+			<item>OutputStreamWriter</item>
+			<item>OverlappingFileLockException</item>
+			<item>OverlayLayout</item>
+			<item>Override</item>
+			<item>Owner</item>
+			<item>PBEKey</item>
+			<item>PBEKeySpec</item>
+			<item>PBEParameterSpec</item>
+			<item>PDLOverrideSupported</item>
+			<item>PERSIST_STORE</item>
+			<item>PKCS8EncodedKeySpec</item>
+			<item>PKIXBuilderParameters</item>
+			<item>PKIXCertPathBuilderResult</item>
+			<item>PKIXCertPathChecker</item>
+			<item>PKIXCertPathValidatorResult</item>
+			<item>PKIXParameters</item>
+			<item>POA</item>
+			<item>POAHelper</item>
+			<item>POAManager</item>
+			<item>POAManagerOperations</item>
+			<item>POAOperations</item>
+			<item>PRIVATE_MEMBER</item>
+			<item>PSSParameterSpec</item>
+			<item>PSource</item>
+			<item>PSource.PSpecified</item>
+			<item>PUBLIC_MEMBER</item>
+			<item>Pack200</item>
+			<item>Pack200.Packer</item>
+			<item>Pack200.Unpacker</item>
+			<item>Package</item>
+			<item>PackedColorModel</item>
+			<item>PageAttributes</item>
+			<item>PageAttributes.ColorType</item>
+			<item>PageAttributes.MediaType</item>
+			<item>PageAttributes.OrientationRequestedType</item>
+			<item>PageAttributes.OriginType</item>
+			<item>PageAttributes.PrintQualityType</item>
+			<item>PageFormat</item>
+			<item>PageRanges</item>
+			<item>Pageable</item>
+			<item>PagedResultsControl</item>
+			<item>PagedResultsResponseControl</item>
+			<item>PagesPerMinute</item>
+			<item>PagesPerMinuteColor</item>
+			<item>Paint</item>
+			<item>PaintContext</item>
+			<item>PaintEvent</item>
+			<item>Panel</item>
+			<item>PanelUI</item>
+			<item>Paper</item>
+			<item>ParagraphView</item>
+			<item>ParagraphView</item>
+			<item>Parameter</item>
+			<item>ParameterBlock</item>
+			<item>ParameterDescriptor</item>
+			<item>ParameterMetaData</item>
+			<item>ParameterMode</item>
+			<item>ParameterModeHelper</item>
+			<item>ParameterModeHolder</item>
+			<item>ParameterizedType</item>
+			<item>ParseException</item>
+			<item>ParsePosition</item>
+			<item>Parser</item>
+			<item>Parser</item>
+			<item>ParserAdapter</item>
+			<item>ParserConfigurationException</item>
+			<item>ParserDelegator</item>
+			<item>ParserFactory</item>
+			<item>PartialResultException</item>
+			<item>PasswordAuthentication</item>
+			<item>PasswordCallback</item>
+			<item>PasswordView</item>
+			<item>Patch</item>
+			<item>PathIterator</item>
+			<item>Pattern</item>
+			<item>PatternSyntaxException</item>
+			<item>Permission</item>
+			<item>Permission</item>
+			<item>PermissionCollection</item>
+			<item>Permissions</item>
+			<item>PersistenceDelegate</item>
+			<item>PersistentMBean</item>
+			<item>PhantomReference</item>
+			<item>Pipe</item>
+			<item>Pipe.SinkChannel</item>
+			<item>Pipe.SourceChannel</item>
+			<item>PipedInputStream</item>
+			<item>PipedOutputStream</item>
+			<item>PipedReader</item>
+			<item>PipedWriter</item>
+			<item>PixelGrabber</item>
+			<item>PixelInterleavedSampleModel</item>
+			<item>PlainDocument</item>
+			<item>PlainView</item>
+			<item>Point</item>
+			<item>Point2D</item>
+			<item>Point2D.Double</item>
+			<item>Point2D.Float</item>
+			<item>PointerInfo</item>
+			<item>Policy</item>
+			<item>Policy</item>
+			<item>Policy</item>
+			<item>PolicyError</item>
+			<item>PolicyErrorCodeHelper</item>
+			<item>PolicyErrorHelper</item>
+			<item>PolicyErrorHolder</item>
+			<item>PolicyFactory</item>
+			<item>PolicyFactoryOperations</item>
+			<item>PolicyHelper</item>
+			<item>PolicyHolder</item>
+			<item>PolicyListHelper</item>
+			<item>PolicyListHolder</item>
+			<item>PolicyNode</item>
+			<item>PolicyOperations</item>
+			<item>PolicyQualifierInfo</item>
+			<item>PolicyTypeHelper</item>
+			<item>Polygon</item>
+			<item>PooledConnection</item>
+			<item>Popup</item>
+			<item>PopupFactory</item>
+			<item>PopupMenu</item>
+			<item>PopupMenuEvent</item>
+			<item>PopupMenuListener</item>
+			<item>PopupMenuUI</item>
+			<item>Port</item>
+			<item>Port.Info</item>
+			<item>PortUnreachableException</item>
+			<item>PortableRemoteObject</item>
+			<item>PortableRemoteObjectDelegate</item>
+			<item>Position</item>
+			<item>Position.Bias</item>
+			<item>Predicate</item>
+			<item>PreferenceChangeEvent</item>
+			<item>PreferenceChangeListener</item>
+			<item>Preferences</item>
+			<item>PreferencesFactory</item>
+			<item>PreparedStatement</item>
+			<item>PresentationDirection</item>
+			<item>Principal</item>
+			<item>Principal</item>
+			<item>PrincipalHolder</item>
+			<item>PrintEvent</item>
+			<item>PrintException</item>
+			<item>PrintGraphics</item>
+			<item>PrintJob</item>
+			<item>PrintJobAdapter</item>
+			<item>PrintJobAttribute</item>
+			<item>PrintJobAttributeEvent</item>
+			<item>PrintJobAttributeListener</item>
+			<item>PrintJobAttributeSet</item>
+			<item>PrintJobEvent</item>
+			<item>PrintJobListener</item>
+			<item>PrintQuality</item>
+			<item>PrintRequestAttribute</item>
+			<item>PrintRequestAttributeSet</item>
+			<item>PrintService</item>
+			<item>PrintServiceAttribute</item>
+			<item>PrintServiceAttributeEvent</item>
+			<item>PrintServiceAttributeListener</item>
+			<item>PrintServiceAttributeSet</item>
+			<item>PrintServiceLookup</item>
+			<item>PrintStream</item>
+			<item>PrintWriter</item>
+			<item>Printable</item>
+			<item>PrinterAbortException</item>
+			<item>PrinterException</item>
+			<item>PrinterGraphics</item>
+			<item>PrinterIOException</item>
+			<item>PrinterInfo</item>
+			<item>PrinterIsAcceptingJobs</item>
+			<item>PrinterJob</item>
+			<item>PrinterLocation</item>
+			<item>PrinterMakeAndModel</item>
+			<item>PrinterMessageFromOperator</item>
+			<item>PrinterMoreInfo</item>
+			<item>PrinterMoreInfoManufacturer</item>
+			<item>PrinterName</item>
+			<item>PrinterResolution</item>
+			<item>PrinterState</item>
+			<item>PrinterStateReason</item>
+			<item>PrinterStateReasons</item>
+			<item>PrinterURI</item>
+			<item>PriorityBlockingQueue</item>
+			<item>PriorityQueue</item>
+			<item>PrivateClassLoader</item>
+			<item>PrivateCredentialPermission</item>
+			<item>PrivateKey</item>
+			<item>PrivateMLet</item>
+			<item>PrivilegedAction</item>
+			<item>PrivilegedActionException</item>
+			<item>PrivilegedExceptionAction</item>
+			<item>Process</item>
+			<item>ProcessBuilder</item>
+			<item>ProcessingInstruction</item>
+			<item>ProfileDataException</item>
+			<item>ProfileIdHelper</item>
+			<item>ProgressBarUI</item>
+			<item>ProgressMonitor</item>
+			<item>ProgressMonitorInputStream</item>
+			<item>Properties</item>
+			<item>PropertyChangeEvent</item>
+			<item>PropertyChangeListener</item>
+			<item>PropertyChangeListenerProxy</item>
+			<item>PropertyChangeSupport</item>
+			<item>PropertyDescriptor</item>
+			<item>PropertyEditor</item>
+			<item>PropertyEditorManager</item>
+			<item>PropertyEditorSupport</item>
+			<item>PropertyPermission</item>
+			<item>PropertyResourceBundle</item>
+			<item>PropertyVetoException</item>
+			<item>ProtectionDomain</item>
+			<item>ProtocolException</item>
+			<item>Provider</item>
+			<item>Provider.Service</item>
+			<item>ProviderException</item>
+			<item>Proxy</item>
+			<item>Proxy</item>
+			<item>Proxy.Type</item>
+			<item>ProxySelector</item>
+			<item>PublicKey</item>
+			<item>PushbackInputStream</item>
+			<item>PushbackReader</item>
+			<item>QName</item>
+			<item>QuadCurve2D</item>
+			<item>QuadCurve2D.Double</item>
+			<item>QuadCurve2D.Float</item>
+			<item>Query</item>
+			<item>QueryEval</item>
+			<item>QueryExp</item>
+			<item>Queue</item>
+			<item>QueuedJobCount</item>
+			<item>RC2ParameterSpec</item>
+			<item>RC5ParameterSpec</item>
+			<item>REBIND</item>
+			<item>REQUEST_PROCESSING_POLICY_ID</item>
+			<item>RGBImageFilter</item>
+			<item>RMIClassLoader</item>
+			<item>RMIClassLoaderSpi</item>
+			<item>RMIClientSocketFactory</item>
+			<item>RMIConnection</item>
+			<item>RMIConnectionImpl</item>
+			<item>RMIConnectionImpl_Stub</item>
+			<item>RMIConnector</item>
+			<item>RMIConnectorServer</item>
+			<item>RMICustomMaxStreamFormat</item>
+			<item>RMIFailureHandler</item>
+			<item>RMIIIOPServerImpl</item>
+			<item>RMIJRMPServerImpl</item>
+			<item>RMISecurityException</item>
+			<item>RMISecurityManager</item>
+			<item>RMIServer</item>
+			<item>RMIServerImpl</item>
+			<item>RMIServerImpl_Stub</item>
+			<item>RMIServerSocketFactory</item>
+			<item>RMISocketFactory</item>
+			<item>RSAKey</item>
+			<item>RSAKeyGenParameterSpec</item>
+			<item>RSAMultiPrimePrivateCrtKey</item>
+			<item>RSAMultiPrimePrivateCrtKeySpec</item>
+			<item>RSAOtherPrimeInfo</item>
+			<item>RSAPrivateCrtKey</item>
+			<item>RSAPrivateCrtKeySpec</item>
+			<item>RSAPrivateKey</item>
+			<item>RSAPrivateKeySpec</item>
+			<item>RSAPublicKey</item>
+			<item>RSAPublicKeySpec</item>
+			<item>RTFEditorKit</item>
+			<item>Random</item>
+			<item>RandomAccess</item>
+			<item>RandomAccessFile</item>
+			<item>Raster</item>
+			<item>RasterFormatException</item>
+			<item>RasterOp</item>
+			<item>Rdn</item>
+			<item>ReadOnlyBufferException</item>
+			<item>ReadWriteLock</item>
+			<item>Readable</item>
+			<item>ReadableByteChannel</item>
+			<item>Reader</item>
+			<item>RealmCallback</item>
+			<item>RealmChoiceCallback</item>
+			<item>Receiver</item>
+			<item>Rectangle</item>
+			<item>Rectangle2D</item>
+			<item>Rectangle2D.Double</item>
+			<item>Rectangle2D.Float</item>
+			<item>RectangularShape</item>
+			<item>ReentrantLock</item>
+			<item>ReentrantReadWriteLock</item>
+			<item>ReentrantReadWriteLock.ReadLock</item>
+			<item>ReentrantReadWriteLock.WriteLock</item>
+			<item>Ref</item>
+			<item>RefAddr</item>
+			<item>Reference</item>
+			<item>Reference</item>
+			<item>ReferenceQueue</item>
+			<item>ReferenceUriSchemesSupported</item>
+			<item>Referenceable</item>
+			<item>ReferralException</item>
+			<item>ReflectPermission</item>
+			<item>ReflectionException</item>
+			<item>RefreshFailedException</item>
+			<item>Refreshable</item>
+			<item>Region</item>
+			<item>RegisterableService</item>
+			<item>Registry</item>
+			<item>RegistryHandler</item>
+			<item>RejectedExecutionException</item>
+			<item>RejectedExecutionHandler</item>
+			<item>Relation</item>
+			<item>RelationException</item>
+			<item>RelationNotFoundException</item>
+			<item>RelationNotification</item>
+			<item>RelationService</item>
+			<item>RelationServiceMBean</item>
+			<item>RelationServiceNotRegisteredException</item>
+			<item>RelationSupport</item>
+			<item>RelationSupportMBean</item>
+			<item>RelationType</item>
+			<item>RelationTypeNotFoundException</item>
+			<item>RelationTypeSupport</item>
+			<item>RemarshalException</item>
+			<item>Remote</item>
+			<item>RemoteCall</item>
+			<item>RemoteException</item>
+			<item>RemoteObject</item>
+			<item>RemoteObjectInvocationHandler</item>
+			<item>RemoteRef</item>
+			<item>RemoteServer</item>
+			<item>RemoteStub</item>
+			<item>RenderContext</item>
+			<item>RenderableImage</item>
+			<item>RenderableImageOp</item>
+			<item>RenderableImageProducer</item>
+			<item>RenderedImage</item>
+			<item>RenderedImageFactory</item>
+			<item>Renderer</item>
+			<item>RenderingHints</item>
+			<item>RenderingHints.Key</item>
+			<item>RepaintManager</item>
+			<item>ReplicateScaleFilter</item>
+			<item>RepositoryIdHelper</item>
+			<item>Request</item>
+			<item>RequestInfo</item>
+			<item>RequestInfoOperations</item>
+			<item>RequestProcessingPolicy</item>
+			<item>RequestProcessingPolicyOperations</item>
+			<item>RequestProcessingPolicyValue</item>
+			<item>RequestingUserName</item>
+			<item>RequiredModelMBean</item>
+			<item>RescaleOp</item>
+			<item>ResolutionSyntax</item>
+			<item>ResolveResult</item>
+			<item>Resolver</item>
+			<item>ResourceBundle</item>
+			<item>ResponseCache</item>
+			<item>ResponseHandler</item>
+			<item>Result</item>
+			<item>ResultSet</item>
+			<item>ResultSetMetaData</item>
+			<item>Retention</item>
+			<item>RetentionPolicy</item>
+			<item>ReverbType</item>
+			<item>Robot</item>
+			<item>Role</item>
+			<item>RoleInfo</item>
+			<item>RoleInfoNotFoundException</item>
+			<item>RoleList</item>
+			<item>RoleNotFoundException</item>
+			<item>RoleResult</item>
+			<item>RoleStatus</item>
+			<item>RoleUnresolved</item>
+			<item>RoleUnresolvedList</item>
+			<item>RootPaneContainer</item>
+			<item>RootPaneUI</item>
+			<item>RoundRectangle2D</item>
+			<item>RoundRectangle2D.Double</item>
+			<item>RoundRectangle2D.Float</item>
+			<item>RoundingMode</item>
+			<item>RowMapper</item>
+			<item>RowSet</item>
+			<item>RowSetEvent</item>
+			<item>RowSetInternal</item>
+			<item>RowSetListener</item>
+			<item>RowSetMetaData</item>
+			<item>RowSetMetaDataImpl</item>
+			<item>RowSetReader</item>
+			<item>RowSetWarning</item>
+			<item>RowSetWriter</item>
+			<item>RuleBasedCollator</item>
+			<item>RunTime</item>
+			<item>RunTimeOperations</item>
+			<item>Runnable</item>
+			<item>Runtime</item>
+			<item>RuntimeErrorException</item>
+			<item>RuntimeException</item>
+			<item>RuntimeMBeanException</item>
+			<item>RuntimeMXBean</item>
+			<item>RuntimeOperationsException</item>
+			<item>RuntimePermission</item>
+			<item>SAXException</item>
+			<item>SAXNotRecognizedException</item>
+			<item>SAXNotSupportedException</item>
+			<item>SAXParseException</item>
+			<item>SAXParser</item>
+			<item>SAXParserFactory</item>
+			<item>SAXResult</item>
+			<item>SAXSource</item>
+			<item>SAXTransformerFactory</item>
+			<item>SERVANT_RETENTION_POLICY_ID</item>
+			<item>SQLData</item>
+			<item>SQLException</item>
+			<item>SQLInput</item>
+			<item>SQLInputImpl</item>
+			<item>SQLOutput</item>
+			<item>SQLOutputImpl</item>
+			<item>SQLPermission</item>
+			<item>SQLWarning</item>
+			<item>SSLContext</item>
+			<item>SSLContextSpi</item>
+			<item>SSLEngine</item>
+			<item>SSLEngineResult</item>
+			<item>SSLEngineResult.HandshakeStatus</item>
+			<item>SSLEngineResult.Status</item>
+			<item>SSLException</item>
+			<item>SSLHandshakeException</item>
+			<item>SSLKeyException</item>
+			<item>SSLPeerUnverifiedException</item>
+			<item>SSLPermission</item>
+			<item>SSLProtocolException</item>
+			<item>SSLServerSocket</item>
+			<item>SSLServerSocketFactory</item>
+			<item>SSLSession</item>
+			<item>SSLSessionBindingEvent</item>
+			<item>SSLSessionBindingListener</item>
+			<item>SSLSessionContext</item>
+			<item>SSLSocket</item>
+			<item>SSLSocketFactory</item>
+			<item>SUCCESSFUL</item>
+			<item>SYNC_WITH_TRANSPORT</item>
+			<item>SYSTEM_EXCEPTION</item>
+			<item>SampleModel</item>
+			<item>Sasl</item>
+			<item>SaslClient</item>
+			<item>SaslClientFactory</item>
+			<item>SaslException</item>
+			<item>SaslServer</item>
+			<item>SaslServerFactory</item>
+			<item>Savepoint</item>
+			<item>Scanner</item>
+			<item>ScatteringByteChannel</item>
+			<item>ScheduledExecutorService</item>
+			<item>ScheduledFuture</item>
+			<item>ScheduledThreadPoolExecutor</item>
+			<item>Schema</item>
+			<item>SchemaFactory</item>
+			<item>SchemaFactoryLoader</item>
+			<item>SchemaViolationException</item>
+			<item>ScrollBarUI</item>
+			<item>ScrollPane</item>
+			<item>ScrollPaneAdjustable</item>
+			<item>ScrollPaneConstants</item>
+			<item>ScrollPaneLayout</item>
+			<item>ScrollPaneLayout.UIResource</item>
+			<item>ScrollPaneUI</item>
+			<item>Scrollable</item>
+			<item>Scrollbar</item>
+			<item>SealedObject</item>
+			<item>SearchControls</item>
+			<item>SearchResult</item>
+			<item>SecretKey</item>
+			<item>SecretKeyFactory</item>
+			<item>SecretKeyFactorySpi</item>
+			<item>SecretKeySpec</item>
+			<item>SecureCacheResponse</item>
+			<item>SecureClassLoader</item>
+			<item>SecureRandom</item>
+			<item>SecureRandomSpi</item>
+			<item>Security</item>
+			<item>SecurityException</item>
+			<item>SecurityManager</item>
+			<item>SecurityPermission</item>
+			<item>Segment</item>
+			<item>SelectableChannel</item>
+			<item>SelectionKey</item>
+			<item>Selector</item>
+			<item>SelectorProvider</item>
+			<item>Semaphore</item>
+			<item>SeparatorUI</item>
+			<item>Sequence</item>
+			<item>SequenceInputStream</item>
+			<item>Sequencer</item>
+			<item>Sequencer.SyncMode</item>
+			<item>SerialArray</item>
+			<item>SerialBlob</item>
+			<item>SerialClob</item>
+			<item>SerialDatalink</item>
+			<item>SerialException</item>
+			<item>SerialJavaObject</item>
+			<item>SerialRef</item>
+			<item>SerialStruct</item>
+			<item>Serializable</item>
+			<item>SerializablePermission</item>
+			<item>Servant</item>
+			<item>ServantActivator</item>
+			<item>ServantActivatorHelper</item>
+			<item>ServantActivatorOperations</item>
+			<item>ServantActivatorPOA</item>
+			<item>ServantAlreadyActive</item>
+			<item>ServantAlreadyActiveHelper</item>
+			<item>ServantLocator</item>
+			<item>ServantLocatorHelper</item>
+			<item>ServantLocatorOperations</item>
+			<item>ServantLocatorPOA</item>
+			<item>ServantManager</item>
+			<item>ServantManagerOperations</item>
+			<item>ServantNotActive</item>
+			<item>ServantNotActiveHelper</item>
+			<item>ServantObject</item>
+			<item>ServantRetentionPolicy</item>
+			<item>ServantRetentionPolicyOperations</item>
+			<item>ServantRetentionPolicyValue</item>
+			<item>ServerCloneException</item>
+			<item>ServerError</item>
+			<item>ServerException</item>
+			<item>ServerIdHelper</item>
+			<item>ServerNotActiveException</item>
+			<item>ServerRef</item>
+			<item>ServerRequest</item>
+			<item>ServerRequestInfo</item>
+			<item>ServerRequestInfoOperations</item>
+			<item>ServerRequestInterceptor</item>
+			<item>ServerRequestInterceptorOperations</item>
+			<item>ServerRuntimeException</item>
+			<item>ServerSocket</item>
+			<item>ServerSocketChannel</item>
+			<item>ServerSocketFactory</item>
+			<item>ServiceContext</item>
+			<item>ServiceContextHelper</item>
+			<item>ServiceContextHolder</item>
+			<item>ServiceContextListHelper</item>
+			<item>ServiceContextListHolder</item>
+			<item>ServiceDetail</item>
+			<item>ServiceDetailHelper</item>
+			<item>ServiceIdHelper</item>
+			<item>ServiceInformation</item>
+			<item>ServiceInformationHelper</item>
+			<item>ServiceInformationHolder</item>
+			<item>ServiceNotFoundException</item>
+			<item>ServicePermission</item>
+			<item>ServiceRegistry</item>
+			<item>ServiceRegistry.Filter</item>
+			<item>ServiceUI</item>
+			<item>ServiceUIFactory</item>
+			<item>ServiceUnavailableException</item>
+			<item>Set</item>
+			<item>SetOfIntegerSyntax</item>
+			<item>SetOverrideType</item>
+			<item>SetOverrideTypeHelper</item>
+			<item>Severity</item>
+			<item>Shape</item>
+			<item>ShapeGraphicAttribute</item>
+			<item>SheetCollate</item>
+			<item>Short</item>
+			<item>ShortBuffer</item>
+			<item>ShortBufferException</item>
+			<item>ShortHolder</item>
+			<item>ShortLookupTable</item>
+			<item>ShortMessage</item>
+			<item>ShortSeqHelper</item>
+			<item>ShortSeqHolder</item>
+			<item>Sides</item>
+			<item>Signature</item>
+			<item>SignatureException</item>
+			<item>SignatureSpi</item>
+			<item>SignedObject</item>
+			<item>Signer</item>
+			<item>SimpleAttributeSet</item>
+			<item>SimpleBeanInfo</item>
+			<item>SimpleDateFormat</item>
+			<item>SimpleDoc</item>
+			<item>SimpleFormatter</item>
+			<item>SimpleTimeZone</item>
+			<item>SimpleType</item>
+			<item>SinglePixelPackedSampleModel</item>
+			<item>SingleSelectionModel</item>
+			<item>Size2DSyntax</item>
+			<item>SizeLimitExceededException</item>
+			<item>SizeRequirements</item>
+			<item>SizeSequence</item>
+			<item>Skeleton</item>
+			<item>SkeletonMismatchException</item>
+			<item>SkeletonNotFoundException</item>
+			<item>SliderUI</item>
+			<item>Socket</item>
+			<item>SocketAddress</item>
+			<item>SocketChannel</item>
+			<item>SocketException</item>
+			<item>SocketFactory</item>
+			<item>SocketHandler</item>
+			<item>SocketImpl</item>
+			<item>SocketImplFactory</item>
+			<item>SocketOptions</item>
+			<item>SocketPermission</item>
+			<item>SocketSecurityException</item>
+			<item>SocketTimeoutException</item>
+			<item>SoftBevelBorder</item>
+			<item>SoftReference</item>
+			<item>SortControl</item>
+			<item>SortKey</item>
+			<item>SortResponseControl</item>
+			<item>SortedMap</item>
+			<item>SortedSet</item>
+			<item>SortingFocusTraversalPolicy</item>
+			<item>Soundbank</item>
+			<item>SoundbankReader</item>
+			<item>SoundbankResource</item>
+			<item>Source</item>
+			<item>SourceDataLine</item>
+			<item>SourceLocator</item>
+			<item>SpinnerDateModel</item>
+			<item>SpinnerListModel</item>
+			<item>SpinnerModel</item>
+			<item>SpinnerNumberModel</item>
+			<item>SpinnerUI</item>
+			<item>SplitPaneUI</item>
+			<item>Spring</item>
+			<item>SpringLayout</item>
+			<item>SpringLayout.Constraints</item>
+			<item>SslRMIClientSocketFactory</item>
+			<item>SslRMIServerSocketFactory</item>
+			<item>Stack</item>
+			<item>StackOverflowError</item>
+			<item>StackTraceElement</item>
+			<item>StandardMBean</item>
+			<item>StartTlsRequest</item>
+			<item>StartTlsResponse</item>
+			<item>State</item>
+			<item>StateEdit</item>
+			<item>StateEditable</item>
+			<item>StateFactory</item>
+			<item>Statement</item>
+			<item>Statement</item>
+			<item>StreamCorruptedException</item>
+			<item>StreamHandler</item>
+			<item>StreamPrintService</item>
+			<item>StreamPrintServiceFactory</item>
+			<item>StreamResult</item>
+			<item>StreamSource</item>
+			<item>StreamTokenizer</item>
+			<item>Streamable</item>
+			<item>StreamableValue</item>
+			<item>StrictMath</item>
+			<item>String</item>
+			<item>StringBuffer</item>
+			<item>StringBufferInputStream</item>
+			<item>StringBuilder</item>
+			<item>StringCharacterIterator</item>
+			<item>StringContent</item>
+			<item>StringHolder</item>
+			<item>StringIndexOutOfBoundsException</item>
+			<item>StringMonitor</item>
+			<item>StringMonitorMBean</item>
+			<item>StringNameHelper</item>
+			<item>StringReader</item>
+			<item>StringRefAddr</item>
+			<item>StringSelection</item>
+			<item>StringSeqHelper</item>
+			<item>StringSeqHolder</item>
+			<item>StringTokenizer</item>
+			<item>StringValueExp</item>
+			<item>StringValueHelper</item>
+			<item>StringWriter</item>
+			<item>Stroke</item>
+			<item>Struct</item>
+			<item>StructMember</item>
+			<item>StructMemberHelper</item>
+			<item>Stub</item>
+			<item>StubDelegate</item>
+			<item>StubNotFoundException</item>
+			<item>Style</item>
+			<item>StyleConstants</item>
+			<item>StyleConstants.CharacterConstants</item>
+			<item>StyleConstants.ColorConstants</item>
+			<item>StyleConstants.FontConstants</item>
+			<item>StyleConstants.ParagraphConstants</item>
+			<item>StyleContext</item>
+			<item>StyleSheet</item>
+			<item>StyleSheet.BoxPainter</item>
+			<item>StyleSheet.ListPainter</item>
+			<item>StyledDocument</item>
+			<item>StyledEditorKit</item>
+			<item>StyledEditorKit.AlignmentAction</item>
+			<item>StyledEditorKit.BoldAction</item>
+			<item>StyledEditorKit.FontFamilyAction</item>
+			<item>StyledEditorKit.FontSizeAction</item>
+			<item>StyledEditorKit.ForegroundAction</item>
+			<item>StyledEditorKit.ItalicAction</item>
+			<item>StyledEditorKit.StyledTextAction</item>
+			<item>StyledEditorKit.UnderlineAction</item>
+			<item>Subject</item>
+			<item>SubjectDelegationPermission</item>
+			<item>SubjectDomainCombiner</item>
+			<item>SupportedValuesAttribute</item>
+			<item>SuppressWarnings</item>
+			<item>SwingConstants</item>
+			<item>SwingPropertyChangeSupport</item>
+			<item>SwingUtilities</item>
+			<item>SyncFactory</item>
+			<item>SyncFactoryException</item>
+			<item>SyncFailedException</item>
+			<item>SyncProvider</item>
+			<item>SyncProviderException</item>
+			<item>SyncResolver</item>
+			<item>SyncScopeHelper</item>
+			<item>SynchronousQueue</item>
+			<item>SynthConstants</item>
+			<item>SynthContext</item>
+			<item>SynthGraphicsUtils</item>
+			<item>SynthLookAndFeel</item>
+			<item>SynthPainter</item>
+			<item>SynthStyle</item>
+			<item>SynthStyleFactory</item>
+			<item>Synthesizer</item>
+			<item>SysexMessage</item>
+			<item>System</item>
+			<item>SystemColor</item>
+			<item>SystemException</item>
+			<item>SystemFlavorMap</item>
+			<item>TAG_ALTERNATE_IIOP_ADDRESS</item>
+			<item>TAG_CODE_SETS</item>
+			<item>TAG_INTERNET_IOP</item>
+			<item>TAG_JAVA_CODEBASE</item>
+			<item>TAG_MULTIPLE_COMPONENTS</item>
+			<item>TAG_ORB_TYPE</item>
+			<item>TAG_POLICIES</item>
+			<item>TAG_RMI_CUSTOM_MAX_STREAM_FORMAT</item>
+			<item>TCKind</item>
+			<item>THREAD_POLICY_ID</item>
+			<item>TIMEOUT</item>
+			<item>TRANSACTION_MODE</item>
+			<item>TRANSACTION_REQUIRED</item>
+			<item>TRANSACTION_ROLLEDBACK</item>
+			<item>TRANSACTION_UNAVAILABLE</item>
+			<item>TRANSIENT</item>
+			<item>TRANSPORT_RETRY</item>
+			<item>TabExpander</item>
+			<item>TabSet</item>
+			<item>TabStop</item>
+			<item>TabableView</item>
+			<item>TabbedPaneUI</item>
+			<item>TableCellEditor</item>
+			<item>TableCellRenderer</item>
+			<item>TableColumn</item>
+			<item>TableColumnModel</item>
+			<item>TableColumnModelEvent</item>
+			<item>TableColumnModelListener</item>
+			<item>TableHeaderUI</item>
+			<item>TableModel</item>
+			<item>TableModelEvent</item>
+			<item>TableModelListener</item>
+			<item>TableUI</item>
+			<item>TableView</item>
+			<item>TabularData</item>
+			<item>TabularDataSupport</item>
+			<item>TabularType</item>
+			<item>TagElement</item>
+			<item>TaggedComponent</item>
+			<item>TaggedComponentHelper</item>
+			<item>TaggedComponentHolder</item>
+			<item>TaggedProfile</item>
+			<item>TaggedProfileHelper</item>
+			<item>TaggedProfileHolder</item>
+			<item>Target</item>
+			<item>TargetDataLine</item>
+			<item>TargetedNotification</item>
+			<item>Templates</item>
+			<item>TemplatesHandler</item>
+			<item>Text</item>
+			<item>TextAction</item>
+			<item>TextArea</item>
+			<item>TextAttribute</item>
+			<item>TextComponent</item>
+			<item>TextEvent</item>
+			<item>TextField</item>
+			<item>TextHitInfo</item>
+			<item>TextInputCallback</item>
+			<item>TextLayout</item>
+			<item>TextLayout.CaretPolicy</item>
+			<item>TextListener</item>
+			<item>TextMeasurer</item>
+			<item>TextOutputCallback</item>
+			<item>TextSyntax</item>
+			<item>TextUI</item>
+			<item>TexturePaint</item>
+			<item>Thread</item>
+			<item>Thread.State</item>
+			<item>Thread.UncaughtExceptionHandler</item>
+			<item>ThreadDeath</item>
+			<item>ThreadFactory</item>
+			<item>ThreadGroup</item>
+			<item>ThreadInfo</item>
+			<item>ThreadLocal</item>
+			<item>ThreadMXBean</item>
+			<item>ThreadPolicy</item>
+			<item>ThreadPolicyOperations</item>
+			<item>ThreadPolicyValue</item>
+			<item>ThreadPoolExecutor</item>
+			<item>ThreadPoolExecutor.AbortPolicy</item>
+			<item>ThreadPoolExecutor.CallerRunsPolicy</item>
+			<item>ThreadPoolExecutor.DiscardOldestPolicy</item>
+			<item>ThreadPoolExecutor.DiscardPolicy</item>
+			<item>Throwable</item>
+			<item>Tie</item>
+			<item>TileObserver</item>
+			<item>Time</item>
+			<item>TimeLimitExceededException</item>
+			<item>TimeUnit</item>
+			<item>TimeZone</item>
+			<item>TimeoutException</item>
+			<item>Timer</item>
+			<item>Timer</item>
+			<item>Timer</item>
+			<item>TimerAlarmClockNotification</item>
+			<item>TimerMBean</item>
+			<item>TimerNotification</item>
+			<item>TimerTask</item>
+			<item>Timestamp</item>
+			<item>Timestamp</item>
+			<item>TitledBorder</item>
+			<item>TooManyListenersException</item>
+			<item>ToolBarUI</item>
+			<item>ToolTipManager</item>
+			<item>ToolTipUI</item>
+			<item>Toolkit</item>
+			<item>Track</item>
+			<item>TransactionRequiredException</item>
+			<item>TransactionRolledbackException</item>
+			<item>TransactionService</item>
+			<item>TransactionalWriter</item>
+			<item>TransferHandler</item>
+			<item>Transferable</item>
+			<item>TransformAttribute</item>
+			<item>Transformer</item>
+			<item>TransformerConfigurationException</item>
+			<item>TransformerException</item>
+			<item>TransformerFactory</item>
+			<item>TransformerFactoryConfigurationError</item>
+			<item>TransformerHandler</item>
+			<item>Transmitter</item>
+			<item>Transparency</item>
+			<item>TreeCellEditor</item>
+			<item>TreeCellRenderer</item>
+			<item>TreeExpansionEvent</item>
+			<item>TreeExpansionListener</item>
+			<item>TreeMap</item>
+			<item>TreeModel</item>
+			<item>TreeModelEvent</item>
+			<item>TreeModelListener</item>
+			<item>TreeNode</item>
+			<item>TreePath</item>
+			<item>TreeSelectionEvent</item>
+			<item>TreeSelectionListener</item>
+			<item>TreeSelectionModel</item>
+			<item>TreeSet</item>
+			<item>TreeUI</item>
+			<item>TreeWillExpandListener</item>
+			<item>TrustAnchor</item>
+			<item>TrustManager</item>
+			<item>TrustManagerFactory</item>
+			<item>TrustManagerFactorySpi</item>
+			<item>Type</item>
+			<item>TypeCode</item>
+			<item>TypeCodeHolder</item>
+			<item>TypeInfo</item>
+			<item>TypeInfoProvider</item>
+			<item>TypeMismatch</item>
+			<item>TypeMismatch</item>
+			<item>TypeMismatch</item>
+			<item>TypeMismatchHelper</item>
+			<item>TypeMismatchHelper</item>
+			<item>TypeNotPresentException</item>
+			<item>TypeVariable</item>
+			<item>Types</item>
+			<item>UID</item>
+			<item>UIDefaults</item>
+			<item>UIDefaults.ActiveValue</item>
+			<item>UIDefaults.LazyInputMap</item>
+			<item>UIDefaults.LazyValue</item>
+			<item>UIDefaults.ProxyLazyValue</item>
+			<item>UIManager</item>
+			<item>UIManager.LookAndFeelInfo</item>
+			<item>UIResource</item>
+			<item>ULongLongSeqHelper</item>
+			<item>ULongLongSeqHolder</item>
+			<item>ULongSeqHelper</item>
+			<item>ULongSeqHolder</item>
+			<item>UNKNOWN</item>
+			<item>UNKNOWN</item>
+			<item>UNSUPPORTED_POLICY</item>
+			<item>UNSUPPORTED_POLICY_VALUE</item>
+			<item>URI</item>
+			<item>URIException</item>
+			<item>URIResolver</item>
+			<item>URISyntax</item>
+			<item>URISyntaxException</item>
+			<item>URL</item>
+			<item>URLClassLoader</item>
+			<item>URLConnection</item>
+			<item>URLDecoder</item>
+			<item>URLEncoder</item>
+			<item>URLStreamHandler</item>
+			<item>URLStreamHandlerFactory</item>
+			<item>URLStringHelper</item>
+			<item>USER_EXCEPTION</item>
+			<item>UShortSeqHelper</item>
+			<item>UShortSeqHolder</item>
+			<item>UTFDataFormatException</item>
+			<item>UUID</item>
+			<item>UndeclaredThrowableException</item>
+			<item>UndoManager</item>
+			<item>UndoableEdit</item>
+			<item>UndoableEditEvent</item>
+			<item>UndoableEditListener</item>
+			<item>UndoableEditSupport</item>
+			<item>UnexpectedException</item>
+			<item>UnicastRemoteObject</item>
+			<item>UnionMember</item>
+			<item>UnionMemberHelper</item>
+			<item>UnknownEncoding</item>
+			<item>UnknownEncodingHelper</item>
+			<item>UnknownError</item>
+			<item>UnknownException</item>
+			<item>UnknownFormatConversionException</item>
+			<item>UnknownFormatFlagsException</item>
+			<item>UnknownGroupException</item>
+			<item>UnknownHostException</item>
+			<item>UnknownHostException</item>
+			<item>UnknownObjectException</item>
+			<item>UnknownServiceException</item>
+			<item>UnknownUserException</item>
+			<item>UnknownUserExceptionHelper</item>
+			<item>UnknownUserExceptionHolder</item>
+			<item>UnmappableCharacterException</item>
+			<item>UnmarshalException</item>
+			<item>UnmodifiableClassException</item>
+			<item>UnmodifiableSetException</item>
+			<item>UnrecoverableEntryException</item>
+			<item>UnrecoverableKeyException</item>
+			<item>Unreferenced</item>
+			<item>UnresolvedAddressException</item>
+			<item>UnresolvedPermission</item>
+			<item>UnsatisfiedLinkError</item>
+			<item>UnsolicitedNotification</item>
+			<item>UnsolicitedNotificationEvent</item>
+			<item>UnsolicitedNotificationListener</item>
+			<item>UnsupportedAddressTypeException</item>
+			<item>UnsupportedAudioFileException</item>
+			<item>UnsupportedCallbackException</item>
+			<item>UnsupportedCharsetException</item>
+			<item>UnsupportedClassVersionError</item>
+			<item>UnsupportedEncodingException</item>
+			<item>UnsupportedFlavorException</item>
+			<item>UnsupportedLookAndFeelException</item>
+			<item>UnsupportedOperationException</item>
+			<item>UserDataHandler</item>
+			<item>UserException</item>
+			<item>Util</item>
+			<item>UtilDelegate</item>
+			<item>Utilities</item>
+			<item>VMID</item>
+			<item>VM_ABSTRACT</item>
+			<item>VM_CUSTOM</item>
+			<item>VM_NONE</item>
+			<item>VM_TRUNCATABLE</item>
+			<item>Validator</item>
+			<item>ValidatorHandler</item>
+			<item>ValueBase</item>
+			<item>ValueBaseHelper</item>
+			<item>ValueBaseHolder</item>
+			<item>ValueExp</item>
+			<item>ValueFactory</item>
+			<item>ValueHandler</item>
+			<item>ValueHandlerMultiFormat</item>
+			<item>ValueInputStream</item>
+			<item>ValueMember</item>
+			<item>ValueMemberHelper</item>
+			<item>ValueOutputStream</item>
+			<item>VariableHeightLayoutCache</item>
+			<item>Vector</item>
+			<item>VerifyError</item>
+			<item>VersionSpecHelper</item>
+			<item>VetoableChangeListener</item>
+			<item>VetoableChangeListenerProxy</item>
+			<item>VetoableChangeSupport</item>
+			<item>View</item>
+			<item>ViewFactory</item>
+			<item>ViewportLayout</item>
+			<item>ViewportUI</item>
+			<item>VirtualMachineError</item>
+			<item>Visibility</item>
+			<item>VisibilityHelper</item>
+			<item>VoiceStatus</item>
+			<item>Void</item>
+			<item>VolatileImage</item>
+			<item>WCharSeqHelper</item>
+			<item>WCharSeqHolder</item>
+			<item>WStringSeqHelper</item>
+			<item>WStringSeqHolder</item>
+			<item>WStringValueHelper</item>
+			<item>WeakHashMap</item>
+			<item>WeakReference</item>
+			<item>WebRowSet</item>
+			<item>WildcardType</item>
+			<item>Window</item>
+			<item>WindowAdapter</item>
+			<item>WindowConstants</item>
+			<item>WindowEvent</item>
+			<item>WindowFocusListener</item>
+			<item>WindowListener</item>
+			<item>WindowStateListener</item>
+			<item>WrappedPlainView</item>
+			<item>WritableByteChannel</item>
+			<item>WritableRaster</item>
+			<item>WritableRenderedImage</item>
+			<item>WriteAbortedException</item>
+			<item>Writer</item>
+			<item>WrongAdapter</item>
+			<item>WrongAdapterHelper</item>
+			<item>WrongPolicy</item>
+			<item>WrongPolicyHelper</item>
+			<item>WrongTransaction</item>
+			<item>WrongTransactionHelper</item>
+			<item>WrongTransactionHolder</item>
+			<item>X500Principal</item>
+			<item>X500PrivateCredential</item>
+			<item>X509CRL</item>
+			<item>X509CRLEntry</item>
+			<item>X509CRLSelector</item>
+			<item>X509CertSelector</item>
+			<item>X509Certificate</item>
+			<item>X509Certificate</item>
+			<item>X509EncodedKeySpec</item>
+			<item>X509ExtendedKeyManager</item>
+			<item>X509Extension</item>
+			<item>X509KeyManager</item>
+			<item>X509TrustManager</item>
+			<item>XAConnection</item>
+			<item>XADataSource</item>
+			<item>XAException</item>
+			<item>XAResource</item>
+			<item>XMLConstants</item>
+			<item>XMLDecoder</item>
+			<item>XMLEncoder</item>
+			<item>XMLFilter</item>
+			<item>XMLFilterImpl</item>
+			<item>XMLFormatter</item>
+			<item>XMLGregorianCalendar</item>
+			<item>XMLParseException</item>
+			<item>XMLReader</item>
+			<item>XMLReaderAdapter</item>
+			<item>XMLReaderFactory</item>
+			<item>XPath</item>
+			<item>XPathConstants</item>
+			<item>XPathException</item>
+			<item>XPathExpression</item>
+			<item>XPathExpressionException</item>
+			<item>XPathFactory</item>
+			<item>XPathFactoryConfigurationException</item>
+			<item>XPathFunction</item>
+			<item>XPathFunctionException</item>
+			<item>XPathFunctionResolver</item>
+			<item>XPathVariableResolver</item>
+			<item>Xid</item>
+			<item>XmlReader</item>
+			<item>XmlWriter</item>
+			<item>ZipEntry</item>
+			<item>ZipException</item>
+			<item>ZipFile</item>
+			<item>ZipInputStream</item>
+			<item>ZipOutputStream</item>
+			<item>ZoneView</item>
+			<item>_BindingIteratorImplBase</item>
+			<item>_BindingIteratorStub</item>
+			<item>_DynAnyFactoryStub</item>
+			<item>_DynAnyStub</item>
+			<item>_DynArrayStub</item>
+			<item>_DynEnumStub</item>
+			<item>_DynFixedStub</item>
+			<item>_DynSequenceStub</item>
+			<item>_DynStructStub</item>
+			<item>_DynUnionStub</item>
+			<item>_DynValueStub</item>
+			<item>_IDLTypeStub</item>
+			<item>_NamingContextExtStub</item>
+			<item>_NamingContextImplBase</item>
+			<item>_NamingContextStub</item>
+			<item>_PolicyStub</item>
+			<item>_Remote_Stub</item>
+			<item>_ServantActivatorStub</item>
+			<item>_ServantLocatorStub</item>
+
+<!-- 			new classes of jdk 6.0 -->
+
+			<item>AbstractAnnotationValueVisitor6</item>
+			<item>AbstractElementVisitor6</item>
+			<item>AbstractMarshallerImpl</item>
+			<item>AbstractOwnableSynchronizer</item>
+			<item>AbstractProcessor</item>
+			<item>AbstractQueuedLongSynchronizer</item>
+			<item>AbstractScriptEngine</item>
+			<item>AbstractTypeVisitor6</item>
+			<item>AbstractUnmarshallerImpl</item>
+			<item>ActivationDataFlavor</item>
+			<item>AlgorithmMethod</item>
+			<item>AnnotationMirror</item>
+			<item>AnnotationValue</item>
+			<item>AnnotationValueVisitor</item>
+			<item>ArrayDeque</item>
+			<item>AsyncHandler</item>
+			<item>AttachmentMarshaller</item>
+			<item>AttachmentPart</item>
+			<item>AttachmentUnmarshaller</item>
+			<item>Binder</item>
+			<item>BindingProvider</item>
+			<item>Bindings</item>
+			<item>BlockingDeque</item>
+			<item>BreakIteratorProvider</item>
+			<item>C14NMethodParameterSpec</item>
+			<item>CanonicalizationMethod</item>
+			<item>Characters</item>
+			<item>ClientInfoStatus</item>
+			<item>CollapsedStringAdapter</item>
+			<item>CollatorProvider</item>
+			<item>CommandInfo</item>
+			<item>CommandMap</item>
+			<item>CommandObject</item>
+			<item>CommonDataSource</item>
+			<item>Compilable</item>
+			<item>CompiledScript</item>
+			<item>Completion</item>
+			<item>Completions</item>
+			<item>CompositeDataInvocationHandler</item>
+			<item>CompositeDataView</item>
+			<item>ConcurrentNavigableMap</item>
+			<item>ConcurrentSkipListMap</item>
+			<item>ConcurrentSkipListSet</item>
+			<item>ConfigurationSpi</item>
+			<item>Console</item>
+			<item>ConstructorProperties</item>
+			<item>CookieManager</item>
+			<item>CookiePolicy</item>
+			<item>CookieStore</item>
+			<item>CurrencyNameProvider</item>
+			<item>Data</item>
+			<item>DataContentHandler</item>
+			<item>DataContentHandlerFactory</item>
+			<item>DataHandler</item>
+			<item>DatatypeConverter</item>
+			<item>DatatypeConverterInterface</item>
+			<item>DateFormatProvider</item>
+			<item>DateFormatSymbolsProvider</item>
+			<item>DecimalFormatSymbolsProvider</item>
+			<item>DeclaredType</item>
+			<item>DefaultRowSorter</item>
+			<item>DefaultValidationEventHandler</item>
+			<item>DeflaterInputStream</item>
+			<item>Deque</item>
+			<item>DescriptorKey</item>
+			<item>DescriptorRead</item>
+			<item>Desktop</item>
+			<item>Detail</item>
+			<item>DetailEntry</item>
+			<item>Diagnostic</item>
+			<item>DiagnosticCollector</item>
+			<item>DiagnosticListener</item>
+			<item>DigestMethod</item>
+			<item>DigestMethodParameterSpec</item>
+			<item>Dispatch</item>
+			<item>DOMCryptoContext</item>
+			<item>DomHandler</item>
+			<item>DOMSignContext</item>
+			<item>DOMStructure</item>
+			<item>DOMURIReference</item>
+			<item>DOMValidateContext</item>
+			<item>DropMode</item>
+			<item>ElementFilter</item>
+			<item>ElementKind</item>
+			<item>ElementKindVisitor6</item>
+			<item>Elements</item>
+			<item>ElementScanner6</item>
+			<item>ElementVisitor</item>
+			<item>EndDocument</item>
+			<item>EndElement</item>
+			<item>Endpoint</item>
+			<item>EntityDeclaration</item>
+			<item>ErrorType</item>
+			<item>EventException</item>
+			<item>EventFilter</item>
+			<item>EventReaderDelegate</item>
+			<item>EventTarget</item>
+			<item>ExcC14NParameterSpec</item>
+			<item>ExecutableElement</item>
+			<item>ExecutableType</item>
+			<item>FileDataSource</item>
+			<item>FileNameExtensionFilter</item>
+			<item>FileObject</item>
+			<item>Filer</item>
+			<item>FilerException</item>
+			<item>FileTypeMap</item>
+			<item>ForwardingFileObject</item>
+			<item>ForwardingJavaFileManager</item>
+			<item>ForwardingJavaFileObject</item>
+			<item>Generated</item>
+			<item>GridBagLayoutInfo</item>
+			<item>GroupLayout</item>
+			<item>HandlerChain</item>
+			<item>HandlerResolver</item>
+			<item>HexBinaryAdapter</item>
+			<item>HMACParameterSpec</item>
+			<item>Holder</item>
+			<item>HTTPBinding</item>
+			<item>HttpCookie</item>
+			<item>HTTPException</item>
+			<item>IDN</item>
+			<item>ImmutableDescriptor</item>
+			<item>InflaterOutputStream</item>
+			<item>InitParam</item>
+			<item>InterfaceAddress</item>
+			<item>Invocable</item>
+			<item>IOError</item>
+			<item>JavaCompiler</item>
+			<item>JavaFileManager</item>
+			<item>JavaFileObject</item>
+			<item>JAXBContext</item>
+			<item>JAXBElement</item>
+			<item>JAXBException</item>
+			<item>JAXBIntrospector</item>
+			<item>JAXBResult</item>
+			<item>JAXBSource</item>
+			<item>JMX</item>
+			<item>JMXAddressable</item>
+			<item>KeyInfo</item>
+			<item>KeyInfoFactory</item>
+			<item>KeyName</item>
+			<item>KeySelector</item>
+			<item>KeySelectorException</item>
+			<item>KeySelectorResult</item>
+			<item>KeyValue</item>
+			<item>LayoutPath</item>
+			<item>LayoutStyle</item>
+			<item>LinearGradientPaint</item>
+			<item>LinkedBlockingDeque</item>
+			<item>LocaleNameProvider</item>
+			<item>LocaleServiceProvider</item>
+			<item>Location</item>
+			<item>LockInfo</item>
+			<item>LogicalHandler</item>
+			<item>LogicalMessage</item>
+			<item>LogicalMessageContext</item>
+			<item>MailcapCommandMap</item>
+			<item>Marshaller</item>
+			<item>MessageContext</item>
+			<item>MessageFactory</item>
+			<item>Messager</item>
+			<item>MimeHeader</item>
+			<item>MimeHeaders</item>
+			<item>MimeType</item>
+			<item>MimeTypeParameterList</item>
+			<item>MimetypesFileTypeMap</item>
+			<item>MirroredTypeException</item>
+			<item>MirroredTypesException</item>
+			<item>MLetContent</item>
+			<item>MonitorInfo</item>
+			<item>MultipleGradientPaint</item>
+			<item>MutationEvent</item>
+			<item>MXBean</item>
+			<item>Namespace</item>
+			<item>NavigableMap</item>
+			<item>NavigableSet</item>
+			<item>NClob</item>
+			<item>NestingKind</item>
+			<item>NodeSetData</item>
+			<item>NormalizedStringAdapter</item>
+			<item>Normalizer</item>
+			<item>NoSuchMechanismException</item>
+			<item>NotationDeclaration</item>
+			<item>NotIdentifiableEvent</item>
+			<item>NotIdentifiableEventImpl</item>
+			<item>NoType</item>
+			<item>NullType</item>
+			<item>NumberFormatProvider</item>
+			<item>OctetStreamData</item>
+			<item>Oneway</item>
+			<item>OptionChecker</item>
+			<item>PackageElement</item>
+			<item>ParseConversionEvent</item>
+			<item>ParseConversionEventImpl</item>
+			<item>Path2D</item>
+			<item>PGPData</item>
+			<item>PolicySpi</item>
+			<item>PortInfo</item>
+			<item>PostConstruct</item>
+			<item>PreDestroy</item>
+			<item>PrimitiveType</item>
+			<item>PrintConversionEvent</item>
+			<item>PrintConversionEventImpl</item>
+			<item>ProcessingEnvironment</item>
+			<item>Processor</item>
+			<item>PropertyException</item>
+			<item>RadialGradientPaint</item>
+			<item>ReferenceType</item>
+			<item>RequestWrapper</item>
+			<item>Resource</item>
+			<item>Resources</item>
+			<item>Response</item>
+			<item>ResponseWrapper</item>
+			<item>RetrievalMethod</item>
+			<item>RoundEnvironment</item>
+			<item>RowFilter</item>
+			<item>RowId</item>
+			<item>RowIdLifetime</item>
+			<item>RowSorter</item>
+			<item>RowSorterEvent</item>
+			<item>RowSorterListener</item>
+			<item>RunnableFuture</item>
+			<item>RunnableScheduledFuture</item>
+			<item>SAAJMetaFactory</item>
+			<item>SAAJResult</item>
+			<item>SchemaOutputResolver</item>
+			<item>ScriptContext</item>
+			<item>ScriptEngine</item>
+			<item>ScriptEngineFactory</item>
+			<item>ScriptEngineManager</item>
+			<item>ScriptException</item>
+			<item>Service</item>
+			<item>ServiceConfigurationError</item>
+			<item>ServiceDelegate</item>
+			<item>ServiceLoader</item>
+			<item>ServiceMode</item>
+			<item>SignatureMethod</item>
+			<item>SignatureMethodParameterSpec</item>
+			<item>SignatureProperties</item>
+			<item>SignatureProperty</item>
+			<item>SignedInfo</item>
+			<item>SimpleAnnotationValueVisitor6</item>
+			<item>SimpleBindings</item>
+			<item>SimpleElementVisitor6</item>
+			<item>SimpleJavaFileObject</item>
+			<item>SimpleScriptContext</item>
+			<item>SimpleTypeVisitor6</item>
+			<item>SOAPBinding</item>
+			<item>SOAPBinding</item>
+			<item>SOAPBody</item>
+			<item>SOAPBodyElement</item>
+			<item>SOAPConnection</item>
+			<item>SOAPConnectionFactory</item>
+			<item>SOAPConstants</item>
+			<item>SOAPElement</item>
+			<item>SOAPElementFactory</item>
+			<item>SOAPEnvelope</item>
+			<item>SOAPException</item>
+			<item>SOAPFactory</item>
+			<item>SOAPFault</item>
+			<item>SOAPFaultElement</item>
+			<item>SOAPFaultException</item>
+			<item>SOAPHandler</item>
+			<item>SOAPHeader</item>
+			<item>SOAPHeaderElement</item>
+			<item>SOAPMessage</item>
+			<item>SOAPMessageContext</item>
+			<item>SOAPMessageHandler</item>
+			<item>SOAPMessageHandlers</item>
+			<item>SOAPPart</item>
+			<item>SortOrder</item>
+			<item>SourceVersion</item>
+			<item>SplashScreen</item>
+			<item>SQLClientInfoException</item>
+			<item>SQLDataException</item>
+			<item>SQLFeatureNotSupportedException</item>
+			<item>SQLIntegrityConstraintViolationException</item>
+			<item>SQLInvalidAuthorizationSpecException</item>
+			<item>SQLNonTransientConnectionException</item>
+			<item>SQLNonTransientException</item>
+			<item>SQLRecoverableException</item>
+			<item>SQLSyntaxErrorException</item>
+			<item>SQLTimeoutException</item>
+			<item>SQLTransactionRollbackException</item>
+			<item>SQLTransientConnectionException</item>
+			<item>SQLTransientException</item>
+			<item>SQLXML</item>
+			<item>SSLParameters</item>
+			<item>StandardEmitterMBean</item>
+			<item>StandardJavaFileManager</item>
+			<item>StandardLocation</item>
+			<item>StartDocument</item>
+			<item>StartElement</item>
+			<item>StatementEvent</item>
+			<item>StatementEventListener</item>
+			<item>StAXResult</item>
+			<item>StAXSource</item>
+			<item>StreamFilter</item>
+			<item>StreamReaderDelegate</item>
+			<item>SupportedAnnotationTypes</item>
+			<item>SupportedOptions</item>
+			<item>SupportedSourceVersion</item>
+			<item>SwingWorker</item>
+			<item>SystemTray</item>
+			<item>TableRowSorter</item>
+			<item>TableStringConverter</item>
+			<item>TimeZoneNameProvider</item>
+			<item>Tool</item>
+			<item>ToolProvider</item>
+			<item>Transform</item>
+			<item>TransformException</item>
+			<item>TransformParameterSpec</item>
+			<item>TransformService</item>
+			<item>TrayIcon</item>
+			<item>TypeConstraintException</item>
+			<item>TypeElement</item>
+			<item>TypeKind</item>
+			<item>TypeKindVisitor6</item>
+			<item>TypeMirror</item>
+			<item>TypeParameterElement</item>
+			<item>TypeVisitor</item>
+			<item>UIEvent</item>
+			<item>UnknownAnnotationValueException</item>
+			<item>UnknownElementException</item>
+			<item>UnknownTypeException</item>
+			<item>Unmarshaller</item>
+			<item>UnmarshallerHandler</item>
+			<item>UnsupportedDataTypeException</item>
+			<item>URIDereferencer</item>
+			<item>URIParameter</item>
+			<item>URIReference</item>
+			<item>URIReferenceException</item>
+			<item>URLDataSource</item>
+			<item>ValidationEvent</item>
+			<item>ValidationEventCollector</item>
+			<item>ValidationEventHandler</item>
+			<item>ValidationEventImpl</item>
+			<item>ValidationEventLocator</item>
+			<item>ValidationEventLocatorImpl</item>
+			<item>ValidationException</item>
+			<item>VariableElement</item>
+			<item>W3CDomHandler</item>
+			<item>WebEndpoint</item>
+			<item>WebFault</item>
+			<item>WebMethod</item>
+			<item>WebParam</item>
+			<item>WebResult</item>
+			<item>WebService</item>
+			<item>WebServiceClient</item>
+			<item>WebServiceContext</item>
+			<item>WebServiceException</item>
+			<item>WebServicePermission</item>
+			<item>WebServiceProvider</item>
+			<item>WebServiceRef</item>
+			<item>WebServiceRefs</item>
+			<item>Wrapper</item>
+			<item>X509Data</item>
+			<item>X509IssuerSerial</item>
+			<item>XmlAccessOrder</item>
+			<item>XmlAccessorOrder</item>
+			<item>XmlAccessorType</item>
+			<item>XmlAccessType</item>
+			<item>XmlAdapter</item>
+			<item>XmlAnyAttribute</item>
+			<item>XmlAnyElement</item>
+			<item>XmlAttachmentRef</item>
+			<item>XmlAttribute</item>
+			<item>XMLCryptoContext</item>
+			<item>XmlElement</item>
+			<item>XmlElementDecl</item>
+			<item>XmlElementRef</item>
+			<item>XmlElementRefs</item>
+			<item>XmlElements</item>
+			<item>XmlElementWrapper</item>
+			<item>XmlEnum</item>
+			<item>XmlEnumValue</item>
+			<item>XMLEvent</item>
+			<item>XMLEventAllocator</item>
+			<item>XMLEventConsumer</item>
+			<item>XMLEventFactory</item>
+			<item>XMLEventReader</item>
+			<item>XMLEventWriter</item>
+			<item>XmlID</item>
+			<item>XmlIDREF</item>
+			<item>XmlInlineBinaryData</item>
+			<item>XMLInputFactory</item>
+			<item>XmlJavaTypeAdapter</item>
+			<item>XmlJavaTypeAdapters</item>
+			<item>XmlList</item>
+			<item>XmlMimeType</item>
+			<item>XmlMixed</item>
+			<item>XmlNs</item>
+			<item>XmlNsForm</item>
+			<item>XMLObject</item>
+			<item>XMLOutputFactory</item>
+			<item>XmlRegistry</item>
+			<item>XMLReporter</item>
+			<item>XMLResolver</item>
+			<item>XmlRootElement</item>
+			<item>XmlSchema</item>
+			<item>XmlSchemaType</item>
+			<item>XmlSchemaTypes</item>
+			<item>XMLSignature</item>
+			<item>XMLSignatureException</item>
+			<item>XMLSignatureFactory</item>
+			<item>XMLSignContext</item>
+			<item>XMLStreamConstants</item>
+			<item>XMLStreamException</item>
+			<item>XMLStreamReader</item>
+			<item>XMLStreamWriter</item>
+			<item>XMLStructure</item>
+			<item>XmlTransient</item>
+			<item>XmlType</item>
+			<item>XMLValidateContext</item>
+			<item>XmlValue</item>
+			<item>XPathFilter2ParameterSpec</item>
+			<item>XPathFilterParameterSpec</item>
+			<item>XPathType</item>
+			<item>XSLTTransformParameterSpec</item>
+			<item>ZipError</item>
+
+<!-- 			end new classes -->
+		</list>
+		<list name="keywords">
+            <item>as</item>
+            <item>in</item>
+
+			<item>abstract</item>
+			<item>break</item>
+			<item>case</item>
+			<item>catch</item>
+			<item>class</item>
+			<item>continue</item>
+			<item>default</item>
+			<item>do</item>
+			<item>else</item>
+			<item>enum</item>
+			<item>extends</item>
+			<item>false</item>
+			<item>finally</item>
+			<item>for</item>
+			<item>goto</item>
+			<item>if</item>
+			<item>implements</item>
+			<item>instanceof</item>
+			<item>@interface</item>
+			<item>interface</item>
+			<item>native</item>
+			<item>new</item>
+			<item>null</item>
+			<item>private</item>
+			<item>protected</item>
+			<item>public</item>
+			<item>return</item>
+			<item>super</item>
+			<item>strictfp</item>
+			<item>switch</item>
+			<item>synchronized</item>
+			<item>this</item>
+			<item>throws</item>
+			<item>throw</item>
+			<item>transient</item>
+			<item>true</item>
+			<item>try</item>
+			<item>volatile</item>
+			<item>while</item>
+		</list>
+		<list name="types">
+            <item>def</item>
+
+			<item>boolean</item>
+			<item>byte</item>
+			<item>char</item>
+			<item>const</item>
+			<item>double</item>
+			<item>final</item>
+			<item>float</item>
+			<item>int</item>
+			<item>long</item>
+			<item>short</item>
+			<item>static</item>
+			<item>void</item>
+		</list>
+		<contexts>
+			<context attribute="Normal Text" lineEndContext="#stay" name="Normal">
+				<!-- Comment next line if you don't use Javadoc tool -->
+				<IncludeRules context="##Javadoc"/>
+				<keyword attribute="Keyword" context="#stay" String="keywords"/>
+				<keyword attribute="Data Type" context="#stay" String="types"/>
+				<keyword attribute="Java15" context="#stay" String="java15"/>
+				<Float attribute="Float" context="Float Suffixes"/>
+				<HlCOct attribute="Octal" context="#stay"/>
+				<HlCHex attribute="Hex" context="#stay"/>
+				<Int attribute="Decimal" context="Int Suffixes"/>
+				<HlCChar attribute="Char" context="#stay"/>
+				<RegExpr attribute="Char" context="#stay" String="'\\u[0-9a-fA-F]{4}'"/>
+				<RegExpr attribute="Decimal" context="#stay" String="//\s*BEGIN.*$" beginRegion="Region1"/>
+				<RegExpr attribute="Decimal" context="#stay" String="//\s*END.*$" endRegion="Region1"/>
+                <StringDetect attribute="String" String="&apos;&apos;&apos;" context="MultiLineSingleString" beginRegion="MultiLineString"/>
+                <StringDetect attribute="String" String="&quot;&quot;&quot;" context="MultiLineDoubleString" beginRegion="MultiLineString"/>
+                <DetectChar attribute="String" context="SingleString" char="&apos;"/>
+                <DetectChar attribute="String" context="String" char="&quot;"/>
+				<RegExpr attribute="Function" context="EnterPrintf" String="\.(format|printf)\b"/>
+				<Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/"/>
+				<Detect2Chars attribute="Comment" context="Commentar 2" char="/" char1="*" beginRegion="Comment"/>
+				<DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1"/>
+				<DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1"/>
+				<RegExpr attribute="Keyword" context="#stay" String="\.{3,3}\s+" />
+				<RegExpr attribute="Keyword" context="StaticImports" String="\b(import\s+static)\b" />
+				<RegExpr attribute="Keyword" context="Imports" String="\b(package|import)\b" />
+				<RegExpr attribute="Function" context="#stay" String="\b[_\w][_\w\d]*(?=[\s]*(/\*\s*\d+\s*\*/\s*)?[(])" />
+				<DetectChar attribute="Symbol" context="Member" char="." />
+				<DetectChar attribute="Symbol" context="InFunctionCall" char="("/>
+				<AnyChar attribute="Symbol" context="#stay" String=":!%&amp;+,-/*&lt;=&gt;?[]|~^&#59;"/>
+			</context>
+            <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+                <AnyChar String="fF" attribute="Float" context="#pop"/>
+            </context>
+            <context name="Int Suffixes" attribute="Decimal" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+                <StringDetect attribute="Decimal" context="#pop" String="ULL" insensitive="true"/>
+                <StringDetect attribute="Decimal" context="#pop" String="LUL" insensitive="true"/>
+                <StringDetect attribute="Decimal" context="#pop" String="LLU" insensitive="true"/>
+                <StringDetect attribute="Decimal" context="#pop" String="UL" insensitive="true"/>
+                <StringDetect attribute="Decimal" context="#pop" String="LU" insensitive="true"/>
+                <StringDetect attribute="Decimal" context="#pop" String="LL" insensitive="true"/>
+                <StringDetect attribute="Decimal" context="#pop" String="U" insensitive="true"/>
+                <StringDetect attribute="Decimal" context="#pop" String="L" insensitive="true"/>
+            </context>
+			<context attribute="Normal Text" lineEndContext="#stay" name="InFunctionCall">
+				<IncludeRules context="Normal"/>
+				<DetectChar attribute="Symbol" context="#pop" char=")"/>
+			</context>
+			<context attribute="String" lineEndContext="#pop" name="String">
+				<LineContinue attribute="String" context="#stay"/>
+				<HlCStringChar attribute="String Char" context="#stay"/>
+				<RegExpr attribute="String Char" context="#stay" String="\\u[0-9a-fA-F]{4}"/>
+				<DetectChar attribute="String" context="#pop" char="&quot;"/>
+			</context>
+            <context attribute="String" lineEndContext="#pop" name="SingleString">
+                <DetectChar attribute="String" context="#pop" char="&apos;"/>
+            </context>
+            <context attribute="String" lineEndContext="#stay" name="MultiLineSingleString">
+                <StringDetect attribute="String" context="#pop" String="&apos;&apos;&apos;" endRegion="MultiLineString"/>
+            </context>
+            <context attribute="String" lineEndContext="#stay" name="MultiLineDoubleString">
+                <StringDetect attribute="String" context="#pop" String="&quot;&quot;&quot;" endRegion="MultiLineString"/>
+            </context>
+			<context attribute="Normal Text" lineEndContext="#stay" name="EnterPrintf" fallthrough="true" fallthroughContext="#pop">
+				<DetectChar attribute="Symbol" context="Printf" char="("/>
+				<DetectSpaces attribute="Normal Text" context="#stay"/>
+			</context>
+			<context attribute="Normal Text" lineEndContext="#stay" name="Printf">
+				<DetectChar attribute="String" context="PrintfString" char="&quot;"/>
+				<IncludeRules context="InFunctionCall"/>
+			</context>
+			<context attribute="PrintfString" lineEndContext="#pop" name="PrintfString">
+				<LineContinue attribute="String" context="#stay"/>
+				<HlCStringChar attribute="String Char" context="#stay"/>
+				<DetectChar attribute="String" context="#pop" char="&quot;"/>
+				<RegExpr attribute="String Char" context="#stay" String="%(\d+\$)?(-|#|\+|\ |0|,|\()*\d*(\.\d+)?[a-hosxA-CEGHSX]" />
+				<RegExpr attribute="String Char" context="#stay" String="%(\d+\$)?(-|#|\+|\ |0|,|\()*\d*(t|T)(a|A|b|B|c|C|d|D|e|F|h|H|I|j|k|l|L|m|M|N|p|P|Q|r|R|s|S|T|y|Y|z|Z)" />
+				<RegExpr attribute="String Char" context="#stay" String="%(%|n)" />
+			</context>
+			<context attribute="Normal Text" lineEndContext="#pop" name="Member" fallthrough="true" fallthroughContext="#pop">
+				<RegExpr attribute="Function" context="#pop" String="\b[_a-zA-Z]\w*(?=[\s]*)" />
+			</context>
+			<context attribute="Normal Text" lineEndContext="#pop" name="StaticImports">
+				<RegExpr attribute="StaticImports" context="#pop" String="\s*.*;?" />
+			</context>
+			<context attribute="Normal Text" lineEndContext="#pop" name="Imports">
+				<RegExpr attribute="Imports" context="#pop" String="\s*.*;?" />
+			</context>
+			<context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
+				<DetectSpaces />
+				<IncludeRules context="##Alerts"/>
+				<IncludeRules context="##Modelines"/>
+			</context>
+			<context attribute="Comment" lineEndContext="#stay" name="Commentar 2">
+				<Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+				<DetectSpaces />
+				<IncludeRules context="##Alerts"/>
+				<IncludeRules context="##Modelines"/>
+			</context>
+		</contexts>
+		<itemDatas>
+			<itemData name="Normal Text"  defStyleNum="dsNormal"/>
+			<itemData name="Keyword"      defStyleNum="dsKeyword"/>
+			<itemData name="Function"     defStyleNum="dsFunction"/>
+			<itemData name="StaticImports" defStyleNum="dsImport"/>
+			<itemData name="Imports"      defStyleNum="dsImport"/>
+			<itemData name="Data Type"    defStyleNum="dsDataType"/>
+			<itemData name="Decimal"      defStyleNum="dsDecVal"/>
+			<itemData name="Octal"        defStyleNum="dsBaseN"/>
+			<itemData name="Hex"          defStyleNum="dsBaseN"/>
+			<itemData name="Float"        defStyleNum="dsFloat"/>
+			<itemData name="Char"         defStyleNum="dsChar"/>
+			<itemData name="String"       defStyleNum="dsString"/>
+			<itemData name="String Char"  defStyleNum="dsSpecialChar"/>
+			<itemData name="PrintfString" defStyleNum="dsString"/>
+			<itemData name="Comment"      defStyleNum="dsComment"/>
+			<itemData name="Symbol"       defStyleNum="dsNormal"/>
+			<itemData name="Java15"       defStyleNum="dsBuiltIn" bold="1" italic="0"/>
+		</itemDatas>
+	</highlighting>
+	<general>
+		<comments>
+			<comment name="singleLine" start="//"/>
+			<comment name="multiLine" start="/*" end="*/" region="Comment"/>
+		</comments>
+		<keywords casesensitive="1"/>
+	</general>
+</language>
+<!-- kate: replace-tabs off; -->
diff --git a/syntax/hamlet.xml b/syntax/hamlet.xml
--- a/syntax/hamlet.xml
+++ b/syntax/hamlet.xml
@@ -5,7 +5,7 @@
   word character *or* a number, hence the lookahead -->
   <!ENTITY name    "(?![0-9])[\w_:][\w.:_-]*">
 ]>
-<language name="Hamlet" version="3" kateversion="2.4" section="Markup" extensions="*.hamlet" author="Bastian Holst (bastianholst@gmx.de)" license="LGPL" indenter="haskell">
+<language name="Hamlet" version="4" kateversion="2.4" section="Markup" extensions="*.hamlet" author="Bastian Holst (bastianholst@gmx.de)" license="LGPL" indenter="haskell">
 <highlighting>
 <contexts>
   <context attribute="Normal Text" lineEndContext="#pop" name="Normal Text" >
@@ -96,9 +96,7 @@
 </itemDatas>
 </highlighting> 
 <general>
-  <comments>
-    <comment name="singleLine" start="#"/>
-  </comments>
   <keywords casesensitive="1"/>
 </general> 
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/haskell.xml b/syntax/haskell.xml
--- a/syntax/haskell.xml
+++ b/syntax/haskell.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Haskell" version="13" kateversion="5.0" section="Sources" extensions="*.hs;*.chs;*.hs-boot" mimetype="text/x-haskell" author="Nicolas Wu (zenzike@gmail.com)" license="LGPL" indenter="haskell" style="haskell">
+<language name="Haskell" version="14" kateversion="5.0" section="Sources" extensions="*.hs;*.chs;*.hs-boot" mimetype="text/x-haskell" author="Nicolas Wu (zenzike@gmail.com)" license="LGPL" indenter="haskell" style="haskell">
   <highlighting>
   <list name="keywords">
     <item>case</item>
@@ -459,8 +459,8 @@
     <context attribute="Normal" lineEndContext="#stay" name="code">
       <StringDetect attribute="Pragma"  context="pragma" String="{-#"/>
       <StringDetect attribute="Comment" context="#stay" String="{--}"/>
-      <RegExpr attribute="Comment" context="comments" String="\{-[^#]?" />
-      <RegExpr attribute="Comment" context="comment"  String="--[\-]*([^!#\$%&amp;\*\+\./&lt;=&gt;\?@&#92;\^\|\-~:]|$)" />
+      <RegExpr attribute="Comment" context="comments" String="\{-(?=[^#]|$)" beginRegion="BlockComment"/>
+      <RegExpr attribute="Comment" context="comment"  String="--[\-]*(?=[^!#\$%&amp;\*\+\./&lt;=&gt;\?@&#92;\^\|\-~:]|$)" />
       <WordDetect attribute="Keyword" context="import"   String="import" />
       <Detect2Chars attribute="C2HS Directive" context="c2hs directive" char="{" char1="#"/>
       <DetectChar attribute="C Preprocessor" context="C Preprocessor" char="#" column="0"/>
@@ -484,7 +484,7 @@
       <RegExpr    attribute="Octal"   context="#stay" String="0[Oo][0-7]+"/>
       <RegExpr    attribute="Hex"     context="#stay" String="0[Xx][0-9A-Fa-f]+"/>
       <Int        attribute="Decimal" context="#stay" />
-      <RegExpr    attribute="Char"    context="#stay" String="'(\\'|\\[^']+|[^\\\n])'" />
+      <DetectChar attribute="Char"    context="char" char="'" />
       <DetectChar attribute="String"  context="string" char="&quot;" />
 
       <DetectChar attribute="Function Infix" context="infix" char="`"/>
@@ -512,11 +512,15 @@
     </context>
     <context attribute="Comment" lineEndContext="#pop" name="comment">
       <IncludeRules context="Haddock" />
+      <IncludeRules context="##Alerts" />
+      <IncludeRules context="##Modelines" />
     </context>
     <context attribute="Comment" lineEndContext="#stay" name="comments">
-      <Detect2Chars attribute="Comment" context="comment" char="{" char1="-" />
-      <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" />
+      <Detect2Chars attribute="Comment" context="comments" char="{" char1="-" beginRegion="BlockComment" />
+      <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" endRegion="BlockComment" />
       <IncludeRules context="Haddock" />
+      <IncludeRules context="##Alerts" />
+      <IncludeRules context="##Modelines" />
     </context>
     <context attribute="Char" lineEndContext="#pop" name="char">
       <RegExpr attribute="Char" context="#stay" String="\\." />
@@ -535,8 +539,8 @@
       <RegExpr attribute="Type"             context="#stay" String="([A-Z][a-zA-Z0-9_']*\.)*[A-Z][a-zA-Z0-9_']*" />
 
       <RegExpr attribute="Pragma"  context="#stay" String="\{-#.*#-\}"/>
-      <RegExpr attribute="Comment" context="comments" String="\{-[^#]?" />
-      <RegExpr attribute="Comment" context="comment"  String="--([^\-!#\$%&amp;\*\+/&lt;=&gt;\?&#92;@\^\|~\.:].*)?$" />
+      <RegExpr attribute="Comment" context="comments" String="\{-(?=[^#]|$)" beginRegion="BlockComment" />
+      <RegExpr attribute="Comment" context="comment"  String="--(?=[^\-!#\$%&amp;\*\+/&lt;=&gt;\?&#92;@\^\|~\.:]|$)" />
     </context>
 
     <!-- Haddock -->
@@ -642,8 +646,9 @@
     <folding indentationsensitive="1"/>
     <comments>
       <comment name="singleLine" start="--" />
-      <comment name="multiLine" start="{-" end="-}" />
+      <comment name="multiLine" start="{-" end="-}" region="BlockComment" />
     </comments>
     <keywords casesensitive="1" />
 </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/haxe.xml b/syntax/haxe.xml
--- a/syntax/haxe.xml
+++ b/syntax/haxe.xml
@@ -12,7 +12,7 @@
   ========================================================================
 -->
 
-<language name="Haxe" section="Sources" extensions="*.hx;*.Hx;*.hX;*.HX;" mimetype="text/x-hxsrc" version="2" kateversion="2.4" casesensitive="true" author="Chad Joan" license="MIT">
+<language name="Haxe" section="Sources" extensions="*.hx;*.Hx;*.hX;*.HX;" mimetype="text/x-hxsrc" version="3" kateversion="2.4" casesensitive="true" author="Chad Joan" license="MIT">
   <highlighting>
     <list name="keywords">
     
@@ -146,9 +146,16 @@
       </context>
 
       <!-- Comments -->
-      <context attribute="Comment" lineEndContext="#pop" name="CommentLine"/>
+      <context attribute="Comment" lineEndContext="#pop" name="CommentLine">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
       <context attribute="Comment" lineEndContext="#stay" name="CommentBlock">
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="CommentBlock"/>
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
     </contexts>
     <itemDatas>
@@ -174,8 +181,9 @@
   <general>
     <comments>
       <comment name="singleLine" start="//"/>
-      <comment name="multiLine" start="/*" end="*/" />
+      <comment name="multiLine" start="/*" end="*/" region="CommentBlock"/>
     </comments>
     <keywords casesensitive="true"/>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/html.xml b/syntax/html.xml
--- a/syntax/html.xml
+++ b/syntax/html.xml
@@ -3,9 +3,9 @@
 [
 	<!ENTITY name          "[A-Za-z_:][\w.:_-]*">
 	<!ENTITY attributeName "[A-Za-z_:*#\(\[][\)\]\w.:_-]*">
-	<!ENTITY entref        "&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);">
+	<!ENTITY entref        "&amp;(?:#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);">
 ]>
-<language name="HTML" version="10" kateversion="5.53" section="Markup" extensions="*.htm;*.html;*.shtml;*.shtm" mimetype="text/html"  author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL" priority="10">
+<language name="HTML" version="12" kateversion="5.53" section="Markup" extensions="*.htm;*.html;*.shtml;*.shtm" mimetype="text/html"  author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL" priority="10">
 
 <highlighting>
 <contexts>
@@ -33,37 +33,37 @@
   </context>
 
   <context name="FindHTMLTags" attribute="Normal Text" lineEndContext="#stay">
-    <RegExpr attribute="Element" context="El Open" String="&lt;pre\b" insensitive="true" beginRegion="pre" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;div\b" insensitive="true" beginRegion="div" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;table\b" insensitive="true" beginRegion="table" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;ul\b" insensitive="true" beginRegion="ul" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;ol\b" insensitive="true" beginRegion="ol" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;dl\b" insensitive="true" beginRegion="dl" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;article\b" insensitive="true" beginRegion="article" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;aside\b" insensitive="true" beginRegion="aside" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;details\b" insensitive="true" beginRegion="details" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;figure\b" insensitive="true" beginRegion="figure" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;footer\b" insensitive="true" beginRegion="footer" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;header\b" insensitive="true" beginRegion="header" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;main\b" insensitive="true" beginRegion="main" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;nav\b" insensitive="true" beginRegion="nav" />
-    <RegExpr attribute="Element" context="El Open" String="&lt;section\b" insensitive="true" beginRegion="section" />
+    <WordDetect attribute="Element" context="El Open" String="&lt;pre" insensitive="true" beginRegion="pre" />
+    <WordDetect attribute="Element" context="El Open" String="&lt;div" insensitive="true" beginRegion="div" />
+    <WordDetect attribute="Element" context="El Open" String="&lt;table" insensitive="true" beginRegion="table" />
+    <WordDetect attribute="Element" context="El Open" String="&lt;ul" insensitive="true" beginRegion="ul" />
+    <WordDetect attribute="Element" context="El Open" String="&lt;ol" insensitive="true" beginRegion="ol" />
+    <WordDetect attribute="Element" context="El Open" String="&lt;dl" insensitive="true" beginRegion="dl" />
+    <WordDetect attribute="Element" context="El Open" String="&lt;article" insensitive="true" beginRegion="article" />
+    <WordDetect attribute="Element" context="El Open" String="&lt;aside" insensitive="true" beginRegion="aside" />
+    <WordDetect attribute="Element" context="El Open" String="&lt;details" insensitive="true" beginRegion="details" />
+    <WordDetect attribute="Element" context="El Open" String="&lt;figure" insensitive="true" beginRegion="figure" />
+    <WordDetect attribute="Element" context="El Open" String="&lt;footer" insensitive="true" beginRegion="footer" />
+    <WordDetect attribute="Element" context="El Open" String="&lt;header" insensitive="true" beginRegion="header" />
+    <WordDetect attribute="Element" context="El Open" String="&lt;main" insensitive="true" beginRegion="main" />
+    <WordDetect attribute="Element" context="El Open" String="&lt;nav" insensitive="true" beginRegion="nav" />
+    <WordDetect attribute="Element" context="El Open" String="&lt;section" insensitive="true" beginRegion="section" />
     <RegExpr attribute="Element" context="El Open" String="&lt;&name;" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/pre\b" insensitive="true" endRegion="pre" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/div\b" insensitive="true" endRegion="div" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/table\b" insensitive="true" endRegion="table" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/ul\b" insensitive="true" endRegion="ul" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/ol\b" insensitive="true" endRegion="ol" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/dl\b" insensitive="true" endRegion="dl" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/article\b" insensitive="true" endRegion="article" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/aside\b" insensitive="true" endRegion="aside" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/details\b" insensitive="true" endRegion="details" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/figure\b" insensitive="true" endRegion="figure" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/footer\b" insensitive="true" endRegion="footer" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/header\b" insensitive="true" endRegion="header" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/main\b" insensitive="true" endRegion="main" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/nav\b" insensitive="true" endRegion="nav" />
-    <RegExpr attribute="Element" context="El Close" String="&lt;/section\b" insensitive="true" endRegion="section" />
+    <WordDetect attribute="Element" context="El Close" String="&lt;/pre" insensitive="true" endRegion="pre" />
+    <WordDetect attribute="Element" context="El Close" String="&lt;/div" insensitive="true" endRegion="div" />
+    <WordDetect attribute="Element" context="El Close" String="&lt;/table" insensitive="true" endRegion="table" />
+    <WordDetect attribute="Element" context="El Close" String="&lt;/ul" insensitive="true" endRegion="ul" />
+    <WordDetect attribute="Element" context="El Close" String="&lt;/ol" insensitive="true" endRegion="ol" />
+    <WordDetect attribute="Element" context="El Close" String="&lt;/dl" insensitive="true" endRegion="dl" />
+    <WordDetect attribute="Element" context="El Close" String="&lt;/article" insensitive="true" endRegion="article" />
+    <WordDetect attribute="Element" context="El Close" String="&lt;/aside" insensitive="true" endRegion="aside" />
+    <WordDetect attribute="Element" context="El Close" String="&lt;/details" insensitive="true" endRegion="details" />
+    <WordDetect attribute="Element" context="El Close" String="&lt;/figure" insensitive="true" endRegion="figure" />
+    <WordDetect attribute="Element" context="El Close" String="&lt;/footer" insensitive="true" endRegion="footer" />
+    <WordDetect attribute="Element" context="El Close" String="&lt;/header" insensitive="true" endRegion="header" />
+    <WordDetect attribute="Element" context="El Close" String="&lt;/main" insensitive="true" endRegion="main" />
+    <WordDetect attribute="Element" context="El Close" String="&lt;/nav" insensitive="true" endRegion="nav" />
+    <WordDetect attribute="Element" context="El Close" String="&lt;/section" insensitive="true" endRegion="section" />
     <RegExpr attribute="Element" context="El Close" String="&lt;/&name;" />
   </context>
 
@@ -85,16 +85,17 @@
   </context>
 
   <context name="FindDTDRules" attribute="Other Text" lineEndContext="#stay">
-    <RegExpr attribute="Doctype" context="Doctype Markupdecl" String="&lt;!(ELEMENT|ENTITY|ATTLIST|NOTATION)\b" />
+    <RegExpr attribute="Doctype" context="Doctype Markupdecl" String="&lt;!(?:ELEMENT|ENTITY|ATTLIST|NOTATION)\b" />
   </context>
 
 
   <context name="Comment" attribute="Comment" lineEndContext="#stay">
     <DetectSpaces/>
+    <StringDetect attribute="Comment" context="#pop" String="--&gt;" endRegion="comment" />
     <IncludeRules context="##Alerts" />
+    <IncludeRules context="##Modelines" />
     <DetectIdentifier/>
-    <StringDetect attribute="Comment" context="#pop" String="--&gt;" endRegion="comment" />
-    <RegExpr attribute="Error" context="#stay" String="-(-(?!-&gt;))+" />
+    <RegExpr attribute="Error" context="#stay" String="-(?:-(?!-&gt;))+" />
   </context>
 
   <context name="CDATA" attribute="Other Text" lineEndContext="#stay">
@@ -172,7 +173,7 @@
   </context>
 
   <context name="JS" attribute="Other Text" lineEndContext="#stay">
-    <RegExpr attribute="Attribute" context="Script-Type" String="(\s+|^)type(?=\=|\s|$)" insensitive="true"/>
+    <RegExpr attribute="Attribute" context="Script-Type" String="(?:\s+|^)type(?=\=|\s|$)" insensitive="true"/>
     <DetectChar attribute="Element" context="JS content" char="&gt;" />
     <IncludeRules context="DefaultJS" />
   </context>
@@ -193,6 +194,7 @@
 
   <context name="JS comment close" attribute="Comment" lineEndContext="#pop">
     <RegExpr attribute="Element" context="El Close 3" String="&lt;/script\b" insensitive="true" endRegion="script" />
+    <DetectSpaces />
     <IncludeRules context="##Alerts" />
   </context>
 
@@ -310,7 +312,8 @@
 </highlighting>
 <general>
   <comments>
-    <comment name="multiLine" start="&lt;!--" end="--&gt;" />
+    <comment name="multiLine" start="&lt;!--" end="--&gt;" region="comment" />
   </comments>
 </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/idris.xml b/syntax/idris.xml
--- a/syntax/idris.xml
+++ b/syntax/idris.xml
@@ -1,105 +1,105 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
 <!-- Based on haskell.xml and idris.vim (https://github.com/idris-hackers/idris-vim/blob/6bdb44b85406b75e3b3a4fa265deab1dbe8c6ff1/syntax/idris.vim) -->
-<language name="Idris" version="1.0" kateversion="3.4" section="Sources" extensions="*.idr" author="Alexander Shabalin" license="LGPL">
+<language name="Idris" version="3" kateversion="3.4" section="Sources" extensions="*.idr" author="Alexander Shabalin" license="LGPL">
   <highlighting>
   <list name="keywords">
-    <item> abstract </item>
-    <item> auto </item>
-    <item> case </item>
-    <item> class </item>
-    <item> codata </item>
-    <item> constructor </item>
-    <item> covering </item>
-    <item> data </item>
-    <item> default </item>
-    <item> do </item>
-    <item> dsl </item>
-    <item> else </item>
-    <item> export </item>
-    <item> if </item>
-    <item> implementation </item>
-    <item> implicit </item>
-    <item> import </item>
-    <item> impossible </item>
-    <item> in </item>
-    <item> index_first </item>
-    <item> index_next </item>
-    <item> infix </item>
-    <item> infixl </item>
-    <item> infixr </item>
-    <item> instance </item>
-    <item> interface </item>
-    <item> lambda </item>
-    <item> let </item>
-    <item> module </item>
-    <item> mutual </item>
-    <item> namespace </item>
-    <item> of </item>
-    <item> parameters </item>
-    <item> partial </item>
-    <item> pattern </item>
-    <item> postulate </item>
-    <item> prefix </item>
-    <item> private </item>
-    <item> proof </item>
-    <item> public </item>
-    <item> record </item>
-    <item> rewrite </item>
-    <item> static </item>
-    <item> syntax </item>
-    <item> tactics </item>
-    <item> term </item>
-    <item> then </item>
-    <item> total </item>
-    <item> using </item>
-    <item> variable </item>
-    <item> where </item>
-    <item> with </item>
+    <item>abstract</item>
+    <item>auto</item>
+    <item>case</item>
+    <item>class</item>
+    <item>codata</item>
+    <item>constructor</item>
+    <item>covering</item>
+    <item>data</item>
+    <item>default</item>
+    <item>do</item>
+    <item>dsl</item>
+    <item>else</item>
+    <item>export</item>
+    <item>if</item>
+    <item>implementation</item>
+    <item>implicit</item>
+    <item>import</item>
+    <item>impossible</item>
+    <item>in</item>
+    <item>index_first</item>
+    <item>index_next</item>
+    <item>infix</item>
+    <item>infixl</item>
+    <item>infixr</item>
+    <item>instance</item>
+    <item>interface</item>
+    <item>lambda</item>
+    <item>let</item>
+    <item>module</item>
+    <item>mutual</item>
+    <item>namespace</item>
+    <item>of</item>
+    <item>parameters</item>
+    <item>partial</item>
+    <item>pattern</item>
+    <item>postulate</item>
+    <item>prefix</item>
+    <item>private</item>
+    <item>proof</item>
+    <item>public</item>
+    <item>record</item>
+    <item>rewrite</item>
+    <item>static</item>
+    <item>syntax</item>
+    <item>tactics</item>
+    <item>term</item>
+    <item>then</item>
+    <item>total</item>
+    <item>using</item>
+    <item>variable</item>
+    <item>where</item>
+    <item>with</item>
   </list>
   <list name="directives">
-     <item> access </item>
-     <item> assert_total </item>
-     <item> default </item>
-     <item> dynamic </item>
-     <item> elim </item>
-     <item> error_handlers </item>
-     <item> error_reverse </item>
-     <item> flag </item>
-     <item> hide </item>
-     <item> include </item>
-     <item> language </item>
-     <item> lib </item>
-     <item> link </item>
-     <item> name </item>
-     <item> provide </item>
-     <item> reflection </item>
+     <item>access</item>
+     <item>assert_total</item>
+     <item>default</item>
+     <item>dynamic</item>
+     <item>elim</item>
+     <item>error_handlers</item>
+     <item>error_reverse</item>
+     <item>flag</item>
+     <item>hide</item>
+     <item>include</item>
+     <item>language</item>
+     <item>lib</item>
+     <item>link</item>
+     <item>name</item>
+     <item>provide</item>
+     <item>reflection</item>
   </list>
   <list name="tactics">
-    <item> applyTactic </item>
-    <item> attack </item>
-    <item> compute </item>
-    <item> exact </item>
-    <item> fill </item>
-    <item> focus </item>
-    <item> induction </item>
-    <item> intro </item>
-    <item> intros </item>
-    <item> let </item>
-    <item> refine </item>
-    <item> reflect </item>
-    <item> rewrite </item>
-    <item> solve </item>
-    <item> trivial </item>
-    <item> try </item>
+    <item>applyTactic</item>
+    <item>attack</item>
+    <item>compute</item>
+    <item>exact</item>
+    <item>fill</item>
+    <item>focus</item>
+    <item>induction</item>
+    <item>intro</item>
+    <item>intros</item>
+    <item>let</item>
+    <item>refine</item>
+    <item>reflect</item>
+    <item>rewrite</item>
+    <item>solve</item>
+    <item>trivial</item>
+    <item>try</item>
   </list>
   <contexts>
      <context attribute="Normal" lineEndContext="#stay" name="code">
         <RegExpr attribute="Comment" context="line comment"
-           String="---*[^!#\$%&amp;\*\+/&lt;=&gt;\?&#92;@\^\|~\.:]?" />
+           String="---*(?=[^!#\$%&amp;\*\+/&lt;=&gt;\?&#92;@\^\|~\.:]|$)" />
         <RegExpr attribute="Comment" context="line comment"
-           String="\|\|\|[^\-!#\$%&amp;\*\+/&lt;=&gt;\?&#92;@\^\|~\.:]?" />
-        <Detect2Chars attribute="Comment" context="block comment" char="{" char1="-" />
+           String="\|\|\|(?=[^\-!#\$%&amp;\*\+/&lt;=&gt;\?&#92;@\^\|~\.:]|$)" />
+        <Detect2Chars attribute="Comment" context="block comment" char="{" char1="-" beginRegion="BlockComment" />
         <RegExpr attribute="Normal" context="declaration" lookAhead="true"
            String="^\s*([a-z]+\s+)*([A-Za-z][A-Za-z0-9_]*'*|\([\-!#\$%&amp;\*\+\./&lt;=&gt;\?@&#92;\^\|~:]+\))\s*:" />
         <keyword attribute="Keyword" context="#stay" String="keywords" />
@@ -139,10 +139,17 @@
         <RegExpr attribute="String" context="#stay" String="\\." />
         <RegExpr attribute="String" context="#pop" String="&quot;" />
      </context>
-     <context attribute="Comment" lineEndContext="#pop" name="line comment" />
+     <context attribute="Comment" lineEndContext="#pop" name="line comment">
+         <DetectSpaces />
+         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
+     </context>
      <context attribute="Comment" lineEndContext="#stay" name="block comment">
-        <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" />
-        <Detect2Chars attribute="Comment" context="block comment" char="{" char1="-" />
+        <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" endRegion="BlockComment" />
+        <Detect2Chars attribute="Comment" context="block comment" char="{" char1="-" beginRegion="BlockComment" />
+        <DetectSpaces />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
      </context>
   </contexts>
   <itemDatas>
@@ -167,7 +174,7 @@
     <folding indentationsensitive="1"/>
     <comments>
       <comment name="singleLine" start="--" />
-      <comment name="multiLine" start="{-" end="-}" />
+      <comment name="multiLine" start="{-" end="-}" region="BlockComment" />
     </comments>
     <keywords casesensitive="1" />
 </general>
diff --git a/syntax/ini.xml b/syntax/ini.xml
--- a/syntax/ini.xml
+++ b/syntax/ini.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="INI Files" section="Configuration" extensions="*.ini;*.pls;*.kcfgc" mimetype="" version="5" kateversion="2.4" author="Jan Janssen (medhefgo@web.de)" license="LGPL">
+<language name="INI Files" section="Configuration" extensions="*.ini;*.pls;*.kcfgc" mimetype="" version="6" kateversion="2.4" author="Jan Janssen (medhefgo@web.de)" license="LGPL">
 
 <highlighting>
 <list name="keywords">
@@ -49,6 +49,7 @@
  <context name="Comment" attribute="Comment" lineEndContext="#pop">
   <DetectSpaces />
   <IncludeRules context="##Alerts" />
+  <IncludeRules context="##Modelines" />
   <DetectIdentifier />
  </context>
 </contexts>
@@ -69,10 +70,10 @@
 
 <general>
  <comments>
-  <comment name="singleLine" start="#" />
   <comment name="singleLine" start=";" />
  </comments>
  <keywords casesensitive="0" />
 </general>
 
 </language>
+<!-- kate: replace-tabs on; indent-width 1; -->
diff --git a/syntax/isocpp.xml b/syntax/isocpp.xml
--- a/syntax/isocpp.xml
+++ b/syntax/isocpp.xml
@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd"
 [
-    <!ENTITY int "(?:[0-9](?:'?[0-9]+)*)">
-    <!ENTITY hex_int "(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f]+)*)">
+    <!ENTITY int "(?:[0-9](?:'?[0-9]++)*+)">
+    <!ENTITY hex_int "(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f]++)*+)">
     <!ENTITY exp_float "(?:[eE][+-]?&int;)">
     <!ENTITY exp_hexfloat "(?:[pP][-+]?&int;)">
 
@@ -11,7 +11,9 @@
     <!ENTITY punctuators ":&ns_punctuators;">
 
     <!-- printf-like format strings conversion specifiers -->
-    <!ENTITY printf_like "&#37;(?:ll?|[zjtL]|hh?)?[diouxXeEfFgGaAcspn&#37;]">
+    <!ENTITY printf_like "&#37;[-+ #0]*(?:[0-9]+|\*)?(?:\.(?:[0-9]+|\*))?(?:(?:hh|ll|[hljzt])?[dioxXun]|[lL]?[fFeEaAgG]|l?[cs]|[p&#37;])">
+    <!-- https://en.cppreference.com/w/cpp/utility/format/formatter#Standard_format_specification -->
+    <!ENTITY format_like "\{\{|\}\}|\{[0-9]*(?::(?:[^{}]?[&lt;&gt;^])?[-+ #0]*(?:[0-9]+|\{[0-9]*\})?(?:\.(?:[0-9]+|\{[0-9]*\}))?L?[sbBcdoxXaAeEfFgGp]?)?\}">
 
     <!ENTITY ispphash "(?:#|&#37;\:|\?\?=)">
     <!ENTITY pphash "&ispphash;\s*">
@@ -22,7 +24,7 @@
 <language
     name="ISO C++"
     section="Sources"
-    version="17"
+    version="20"
     kateversion="5.0"
     indenter="cstyle"
     style="C++"
@@ -57,6 +59,7 @@
       <item>while</item>
     </list>
 
+    <!-- https://en.cppreference.com/w/cpp/keyword -->
     <list name="keywords">
       <item>alignof</item>
       <item>alignas</item>
@@ -64,7 +67,8 @@
       <item>auto</item>
       <item>class</item>
       <item>consteval</item> <!-- C++20 -->
-      <item>constexpr</item>
+      <item>constinit</item> <!-- C++20 -->
+      <item>constexpr</item> <!-- C++11 -->
       <item>const_cast</item>
       <item>decltype</item>
       <item>delete</item>
@@ -72,7 +76,7 @@
       <item>enum</item>
       <item>explicit</item>
       <item>false</item>
-      <item>final</item> <!-- According N3272 -->
+      <item>final</item> <!-- C++11 -->
       <item>friend</item>
       <item>inline</item>
       <item>namespace</item>
@@ -80,7 +84,7 @@
       <item>noexcept</item>
       <item>nullptr</item>
       <item>operator</item>
-      <item>override</item> <!-- According N3272 -->
+      <item>override</item> <!-- C++11 -->
       <item>private</item>
       <item>protected</item>
       <item>public</item>
@@ -167,6 +171,7 @@
     </list>
 
     <!-- https://en.cppreference.com/w/cpp/keyword -->
+    <!-- https://en.cppreference.com/w/cpp/types/integer -->
     <list name="types">
       <item>bool</item>
       <item>char</item>
@@ -300,7 +305,7 @@
         <Detect2Chars attribute="Symbol" context="Attribute" char="[" char1="[" />
         <StringDetect attribute="Symbol" context="Attribute" String="&lt;:&lt;:" /> <!-- Digraph: [[ -->
         <!-- Match numbers -->
-        <RegExpr attribute="Decimal" context="Number" String="\.?[0-9]" lookAhead="true" />
+        <RegExpr context="Number" String="\.?\d" lookAhead="true" />
         <!-- Match comments -->
         <IncludeRules context="match comments and region markers" />
         <!-- Match keywords -->
@@ -357,7 +362,7 @@
 
       <context name="match string" attribute="Normal Text" lineEndContext="#pop">
         <DetectChar attribute="String" context="String" char="&quot;" />
-        <Detect2Chars attribute="String" context="String32" char="U" char1="&quot;" />
+        <Detect2Chars attribute="String" context="String" char="U" char1="&quot;" />
         <Detect2Chars attribute="String" context="String16" char="u" char1="&quot;" />
         <Detect2Chars attribute="String" context="String16" char="L" char1="&quot;" />
         <StringDetect attribute="String" context="String8" String="u8&quot;" />
@@ -387,16 +392,16 @@
       </context>
 
       <context name="Number" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
-        <RegExpr attribute="Float" context="FloatSuffix" String="\.&int;&exp_float;?|&int;(?:&exp_float;|\.&int;?&exp_float;?)|0[xX](?:\.&hex_int;&exp_hexfloat;?|&hex_int;(?:&exp_hexfloat;|\.&hex_int;?&exp_hexfloat;?))" />
+        <RegExpr attribute="Float" context="FloatSuffix" String="\.&int;&exp_float;?|0[xX](?:\.&hex_int;&exp_hexfloat;?|&hex_int;(?:&exp_hexfloat;|\.&hex_int;?&exp_hexfloat;?))|&int;(?:&exp_float;|\.&int;?&exp_float;?)" />
         <IncludeRules context="Integer" />
       </context>
 
       <context name="Integer" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
         <RegExpr attribute="Hex" context="IntSuffix" String="0[xX]&hex_int;" />
-        <RegExpr attribute="Binary" context="IntSuffix" String="0[Bb][01](?:'?[01]+)*" />
-        <RegExpr attribute="Octal" context="IntSuffix" String="0(?:'?[0-7]+)+" />
-        <RegExpr attribute="Decimal" context="IntSuffix" String="0(?![xXbB0-9])|[1-9](?:'?[0-9]+)*" />
-        <RegExpr attribute="Error" context="#pop" String="[._0-9A-Za-z']+" />
+        <RegExpr attribute="Binary" context="IntSuffix" String="0[Bb][01](?:'?[01]++)*+" />
+        <RegExpr attribute="Octal" context="IntSuffix" String="0(?:'?[0-7]++)++" />
+        <RegExpr attribute="Decimal" context="IntSuffix" String="0(?![xXbB0-9])|[1-9](?:'?[0-9]++)*+" />
+        <RegExpr attribute="Error" context="#pop" String="[._0-9A-Za-z']++" />
       </context>
 
       <context name="IntSuffix" attribute="Error" lineEndContext="#pop#pop" fallthrough="true" fallthroughContext="NumericSuffixError">
@@ -489,25 +494,20 @@
         <IncludeRules context="string special char" />
       </context>
 
-      <context name="String32" attribute="String" lineEndContext="#pop">
-        <IncludeRules context="string normal char" />
-        <RegExpr attribute="String Char" context="StringNoHex" String="\\x[0-9A-Fa-f]{1,8}" />
-        <IncludeRules context="string special char" />
-      </context>
-
       <context name="StringNoHex" attribute="Error" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
         <RegExpr attribute="Error" context="#pop" String="[0-9A-Fa-f]{1,}" />
       </context>
 
       <context name="string special char" attribute="String" lineEndContext="#pop">
-        <RegExpr attribute="String Char" context="#stay" String="\\(?:[tnvbrfa'&quot;\\?]|[0-7]{1,3}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})|&printf_like;" />
+        <RegExpr attribute="String Char" context="#stay" String="\\(?:[tnvbrfa'&quot;\\?]|[0-7]{1,3}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})|&printf_like;|&format_like;" />
         <RegExpr attribute="Error" context="#stay" String="\\(?:u[^&quot;]{0,3}|U[^&quot;]{0,7}|.)" />
         <LineContinue attribute="String" context="#stay" />
       </context>
 
       <context name="string normal char" attribute="String" lineEndContext="#pop">
         <!-- fast way, can be replaced by a `UntilChars` rule if it exists -->
-        <RegExpr attribute="String" context="#stay" String="[^%\\&quot;]+" />
+        <!-- % -> printf format ; {} -> std::format -->
+        <RegExpr attribute="String" context="#stay" String="[^%\\&quot;{}]+" />
         <DetectChar attribute="String" context="UDLStringSuffix" char="&quot;" />
       </context>
 
@@ -552,7 +552,7 @@
       <context name="InRawString" attribute="String" lineEndContext="#stay" dynamic="true">
         <!-- fast way, can be replaced by a `UntilChars` rule if it exists -->
         <RegExpr attribute="String" context="#stay" String="[^%)]+" />
-        <RegExpr attribute="String Char" context="#stay" String="&printf_like;" />
+        <RegExpr attribute="String Char" context="#stay" String="&printf_like;|&format_like;" />
         <StringDetect attribute="String" context="#pop" String=")%1&quot;" dynamic="true"/>
       </context>
 
@@ -687,8 +687,7 @@
 
         <IncludeRules context="InPreprocessor" />
         <Detect2Chars attribute="Error" context="#pop!LineError" char="/" char1="/" />
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="Comment 2" char="/" char1="*" beginRegion="Comment" />
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="*" lookAhead="true" />
         <IncludeRules context="GNUMacros##GCCExtensions" />
         <DetectIdentifier attribute="Preprocessor" context="#pop!In Define"/>
       </context>
@@ -702,7 +701,7 @@
         <Detect2Chars attribute="Symbol" context="Attribute In PP" char="[" char1="[" />
         <StringDetect attribute="Symbol" context="Attribute In PP" String="&lt;:&lt;:" /> <!-- Digraph: [[ -->
         <!-- Match numbers -->
-        <RegExpr attribute="Decimal" context="Number" String="\.?[0-9]" lookAhead="true" />
+        <RegExpr context="Number" String="\.?\d" lookAhead="true" />
         <!-- Match comments -->
         <IncludeRules context="match comments" />
         <!-- Match punctuators -->
diff --git a/syntax/j.xml b/syntax/j.xml
--- a/syntax/j.xml
+++ b/syntax/j.xml
@@ -62,7 +62,7 @@
 -->
 <language name="J"
           section="Scripts"
-          version="2"
+          version="3"
           kateversion="3.4"
           extensions="*.ijs;*.ijt;*.IJS;*.IJT"
           mimetype="text/x-j;text/x-jsrc"
@@ -90,7 +90,11 @@
         <RegExpr      attribute="ExpArg"         context="#stay"        String="\b[nmuvxy](?![\w:.])"/>
         <RegExpr      attribute="Noun"           context="#stay"        String="\ba[.:](?![.:])"/>
       </context>
-      <context attribute="Comment" lineEndContext="#pop" name="comment line"/>
+      <context attribute="Comment" lineEndContext="#pop" name="comment line">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
     </contexts>
     <itemDatas>
       <itemData name="Sentence"       defStyleNum="dsNormal"/>
@@ -117,3 +121,4 @@
     <folding indentationsensitive="true"/>
   </general>
 </language>
+<!-- kate: replace-tabs on; indent-width 2; -->
diff --git a/syntax/java.xml b/syntax/java.xml
--- a/syntax/java.xml
+++ b/syntax/java.xml
@@ -4,7 +4,7 @@
 	<!ENTITY int "[0-9]([0-9_]*[0-9])?">
 	<!ENTITY hex "[0-9a-fA-F]([0-9a-fA-F_]*[0-9a-fA-F])?">
 ]>
-<language name="Java" version="5" kateversion="5.0" section="Sources" extensions="*.java" mimetype="text/x-java" license="LGPL" author="Alfredo Luiz Foltran Fialho (alfoltran@ig.com.br)">
+<language name="Java" version="7" kateversion="5.0" section="Sources" extensions="*.java" mimetype="text/x-java" license="LGPL" author="Alfredo Luiz Foltran Fialho (alfoltran@ig.com.br)">
 	<highlighting>
 		<list name="java15">
 			<item>ACTIVE</item>
@@ -3786,9 +3786,9 @@
 				<RegExpr attribute="Keyword" context="Imports" String="\b(package|import)\b" />
 				<RegExpr attribute="Function" context="#stay" String="\b[_\w][_\w\d]*(?=[\s]*(/\*\s*\d+\s*\*/\s*)?[(])" />
 				<RegExpr attribute="Annotation" context="#stay" String="@[_\w][_\w\d]*" />
-				<RegExpr attribute="Symbol" context="Member" String="[.]{1,1}" />
+				<DetectChar attribute="Symbol" context="Member" char="." />
 				<DetectChar attribute="Symbol" context="InFunctionCall" char="("/>
-				<AnyChar attribute="Symbol" context="#stay" String=":!%&amp;+,-/.*&lt;=&gt;?[]|~^&#59;"/>
+				<AnyChar attribute="Symbol" context="#stay" String=":!%&amp;+,-/*&lt;=&gt;?[]|~^&#59;"/>
 			</context>
 			<context attribute="Normal Text" lineEndContext="#stay" name="InFunctionCall">
 				<IncludeRules context="Normal"/>
@@ -3826,11 +3826,15 @@
 				<RegExpr attribute="Imports" context="#pop" String="\s*.*;" />
 			</context>
 			<context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
+				<DetectSpaces />
 				<IncludeRules context="##Alerts"/>
+				<IncludeRules context="##Modelines"/>
 			</context>
 			<context attribute="Comment" lineEndContext="#stay" name="Commentar 2">
 				<Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+				<DetectSpaces />
 				<IncludeRules context="##Alerts"/>
+				<IncludeRules context="##Modelines"/>
 			</context>
 		</contexts>
 		<itemDatas>
@@ -3858,8 +3862,9 @@
 	<general>
 		<comments>
 			<comment name="singleLine" start="//"/>
-			<comment name="multiLine" start="/*" end="*/"/>
+			<comment name="multiLine" start="/*" end="*/" region="Comment"/>
 		</comments>
 		<keywords casesensitive="1"/>
 	</general>
 </language>
+<!-- kate: replace-tabs off; -->
diff --git a/syntax/javascript-react.xml b/syntax/javascript-react.xml
--- a/syntax/javascript-react.xml
+++ b/syntax/javascript-react.xml
@@ -21,7 +21,7 @@
 
       This file is part of the KDE's KSyntaxHighlighting framework.
 
-      Copyright 2018-2019 Nibaldo González S. (nibgonz@gmail.com)
+      Copyright 2018-2020 Nibaldo González S. (nibgonz@gmail.com)
 
       This Source Code Form is subject to the terms of the MIT License.
       If a copy of the license was not distributed with this file,
@@ -38,6 +38,7 @@
     available at: https://github.com/Microsoft/TypeScript-TmLanguage
 
     Change log:
+     * v9 [2020-06-03]: Add folding in templates.
      * v8 [2019-11-21]: Tag detection is more stricter.
      * v7 [2019-11-19]: Rename definition "JavaScript React" to "JavaScript React (JSX)".
      * v5 [2019-02-20]: Don't highlight tags within declarations of
@@ -52,7 +53,7 @@
      * v1 [2018-06-20]: Initial version
 -->
 
-<language name="JavaScript React (JSX)" version="8" kateversion="5.0" section="Scripts" indenter="cstyle"
+<language name="JavaScript React (JSX)" version="9" kateversion="5.0" section="Scripts" indenter="cstyle"
           priority="9" extensions="*.jsx" mimetype="text/jsx;text/x-jsx;application/jsx;application/x-jsx;"
           author="Nibaldo González (nibgonz@gmail.com)" license="MIT">
 
@@ -75,7 +76,7 @@
 		<!-- Overwrite rules of 'javascript.xml'. These rules send to contexts
 		     that contain: <IncludeRules context="Normal"/> in the JavaScript XML file. -->
 		<context name="OverwriteJavaScript" attribute="Normal Text" lineEndContext="#stay">
-			<DetectChar context="Template" attribute="Template" char="`" />
+			<DetectChar context="Template" attribute="Template" char="`" beginRegion="Template" />
 			<DetectChar attribute="Normal Text" context="#stay" char="[" beginRegion="List" />
 			<DetectChar attribute="Normal Text" context="NoRegExp##JavaScript" char="]" endRegion="List" />
 			<!-- NOTE: The "{" character sends to the "Object" context (see the "React" context) -->
@@ -92,7 +93,7 @@
 			<IncludeRules context="ConditionalExpression##JavaScript" />
 		</context>
 		<context name="Template" attribute="Template" lineEndContext="#stay">
-			<DetectChar context="RegExpAfterString##JavaScript" attribute="Template" char="`" />
+			<DetectChar context="RegExpAfterString##JavaScript" attribute="Template" char="`" endRegion="Template" />
 			<!-- Find tags and send to the "Substitution" context -->
 			<Detect2Chars context="Substitution-BeforeTag" attribute="Substitution" char="$" char1="{" />
 			<IncludeRules context="Template##JavaScript" />
diff --git a/syntax/javascript.xml b/syntax/javascript.xml
--- a/syntax/javascript.xml
+++ b/syntax/javascript.xml
@@ -9,12 +9,15 @@
   Minor changes: Joseph Wenninger <jowenn@kde.org>
   Full JavaScript 1.0 support by Whitehawk Stormchaser
 
-  Last Update: Nov. 20, 2019 (Version 14)
+  Last Update: Jun. 03, 2020 (Version 15)
 
-  IMPORTANT: This syntax highlighting definition depends on
-  JavaScript React (JSX), TypeScript and QML.
+  IMPORTANT: This syntax highlighting definition depends on:
+   * JavaScript React (JSX)
+   * TypeScript
+   * QML
+   * CoffeeScript (embedded)
 -->
-<language name="JavaScript" version="14" kateversion="5.0" section="Scripts" extensions="*.js;*.kwinscript;*.julius"
+<language name="JavaScript" version="16" kateversion="5.0" section="Scripts" extensions="*.js;*.kwinscript;*.julius"
           mimetype="text/x-javascript;application/x-javascript;application/javascript;text/javascript" indenter="cstyle"
           author="Anders Lund (anders@alweb.dk), Joseph Wenninger (jowenn@kde.org), Whitehawk Stormchaser (zerokode@gmx.net)" license="">
 
@@ -977,6 +980,7 @@
       <item>index</item>
       <item>innerHeight</item>
       <item>innerWidth</item>
+      <item>innerHTML</item>
       <item>input</item>
       <item>isMap</item>
       <item>label</item>
@@ -1748,11 +1752,13 @@
 
       <!-- Find Objects Member and Functions -->
       <context attribute="Normal Text" lineEndContext="#stay" name="FindObjectMembersAndFunctions">
+        <!-- Tagged Template Literals -->
+        <RegExpr attribute="Function Name" context="#stay" String="&identifier;(?=\s*`)" />
         <!-- The order of these rules is important: 1) Functions. 2) Constants. 3) Objects. -->
         <RegExpr attribute="Function Name" context="Function" String="(&identifier;)(?=\s*\()" lookAhead="true" />
         <IncludeRules context="BuiltInConstants" />
         <RegExpr attribute="Objects" context="Object Member" String="&identifier;(?=\s*\.)" />
-        <DetectChar attribute="Symbol" context="Object Member" char="." />
+        <DetectChar attribute="Symbol" context="Object Member" char="." lookAhead="true" />
       </context>
       <context attribute="Normal Text" lineEndContext="#pop" name="Function">
         <keyword attribute="Function (Built-in)" context="#pop" String="functions" />
@@ -1770,11 +1776,14 @@
       </context>
       <!-- Used in common and built-in objects. -->
       <context attribute="Normal Text" lineEndContext="#pop" name="DefaultMemberObject">
+        <StringDetect attribute="Symbol" context="#pop" String="..." />
         <DetectChar attribute="Symbol" context="#stay" char="." />
 
         <!-- The order of these rules is important: 1) Functions. 2) Constants & Properties. 3) Obj. Members. -->
         <!-- Function -->
         <RegExpr attribute="Function Name" context="#pop" String="&identifier;(?=\s*\()" />
+        <!-- Tagged Template Literals -->
+        <RegExpr context="#pop" String="&identifier;\s*`" lookAhead="true" />
         <!-- Generic constants and properties -->
         <keyword attribute="Object Property (Built-in)" context="#pop!NoRegExp" String="variable_property" />
         <keyword attribute="Constant" context="#pop!NoRegExp" String="dom_constant" />
@@ -1785,13 +1794,13 @@
         <DetectSpaces />
 
         <!-- Generic Functions -->
-        <keyword context="#pop!NoRegExp" attribute="Function Name" String="functions" />
+        <keyword attribute="Function Name" context="#pop!NoRegExp" String="functions" />
       </context>
 
       <!-- Strings -->
       <context attribute="Normal Text" lineEndContext="#stay" name="FindStrings">
-        <DetectChar attribute="Template" context="Template" char="`" />
-        <StringDetect attribute="Template" context="RawTemplate" String="String.raw`" />
+        <DetectChar attribute="Template" context="Template" char="`" beginRegion="Template" />
+        <RegExpr attribute="Template" context="StartRawTemplate" String="\b(String)\s*(\.)\s*(raw)\s*`" lookAhead="true" />
 
         <DetectChar attribute="String" context="String" char="&quot;" />
         <DetectChar attribute="String" context="String SQ" char="'" />
@@ -1823,24 +1832,36 @@
       <context attribute="Template" lineEndContext="#stay" name="Template">
         <IncludeRules context="Escape" />
         <Detect2Chars attribute="Substitution" context="Substitution" char="$" char1="{" />
-        <DetectChar attribute="Template" context="RegExpAfterString" char="`" />
+        <DetectChar attribute="Template" context="RegExpAfterString" char="`" endRegion="Template" />
       </context>
-      <context attribute="Template" lineEndContext="#stay" name="RawTemplate">
-        <DetectChar attribute="Template" context="RegExpAfterString" char="`" />
+      <context attribute="Normal Text" lineEndContext="#stay" name="Substitution">
+        <DetectChar attribute="Substitution" char="}" context="#pop" />
+        <IncludeRules context="Normal" />
       </context>
-      <context name="Substitution" attribute="Normal Text" lineEndContext="#stay">
-        <DetectChar attribute="Substitution" char="}" context="#pop"/>
-        <IncludeRules context="Normal"/>
+
+      <context attribute="Normal Text" lineEndContext="#pop" name="StartRawTemplate">
+        <DetectSpaces />
+        <DetectChar attribute="Template" context="#pop!RawTemplate" char="`" beginRegion="Template" />
+        <StringDetect attribute="Built-in Objects" context="#stay" String="%1" dynamic="true" />
+        <DetectChar attribute="Symbol" context="#stay" char="2" dynamic="true" />
+        <StringDetect attribute="Function Name" context="#stay" String="%3" dynamic="true" />
       </context>
+      <context attribute="Template" lineEndContext="#stay" name="RawTemplate">
+        <DetectChar attribute="Template" context="RegExpAfterString" char="`" endRegion="Template" />
+      </context>
 
       <!-- Comments -->
-      <context name="FindComments" attribute="Normal Text" lineEndContext="#stay">
-        <StringDetect attribute="Region Marker" context="region_marker" String="//BEGIN" beginRegion="Region1" />
-        <StringDetect attribute="Region Marker" context="region_marker" String="//END" endRegion="Region1" />
+      <context attribute="Normal Text" lineEndContext="#stay" name="FindComments">
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="/" lookAhead="true"/>
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="*" lookAhead="true" />
+      </context>
+      <context name="MatchComment" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <StringDetect attribute="Region Marker" context="#pop!region_marker" String="//BEGIN" beginRegion="Region1" />
+        <StringDetect attribute="Region Marker" context="#pop!region_marker" String="//END" endRegion="Region1" />
 
         <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="Comment" char="/" char1="/" />
-        <Detect2Chars attribute="Comment" context="Multi/inline Comment" char="/" char1="*" beginRegion="Comment" />
+        <Detect2Chars attribute="Comment" context="#pop!Comment" char="/" char1="/" />
+        <Detect2Chars attribute="Comment" context="#pop!Multi/inline Comment" char="/" char1="*" beginRegion="Comment" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="Comment">
         <DetectSpaces />
@@ -1853,7 +1874,7 @@
         <IncludeRules context="##Alerts" />
         <IncludeRules context="##Modelines" />
       </context>
-      <context name="region_marker" attribute="Region Marker" lineEndContext="#pop" />
+      <context attribute="Region Marker" lineEndContext="#pop" name="region_marker" />
 
       <!-- Regular Expressions -->
       <context attribute="Regular Expression" lineEndContext="#stay" name="Regular Expression">
diff --git a/syntax/json.xml b/syntax/json.xml
--- a/syntax/json.xml
+++ b/syntax/json.xml
@@ -12,7 +12,7 @@
  ** http://tools.ietf.org/html/rfc4627
  ***************************************************************************
 -->
-<language name="JSON" section="Markup" version="4" kateversion="2.4" extensions="*.json;.kateproject;.arcconfig;*.geojson;*.gltf" mimetype="application/json" author="Sebastian Pipping (sebastian@pipping.org)" license="GPL">
+<language name="JSON" section="Markup" version="5" kateversion="2.4" extensions="*.json;.kateproject;.arcconfig;*.geojson;*.gltf;*.theme" mimetype="application/json" author="Sebastian Pipping (sebastian@pipping.org)" license="GPL">
   <highlighting>
     <list name="Constants">
       <item>null</item>
diff --git a/syntax/jsp.xml b/syntax/jsp.xml
--- a/syntax/jsp.xml
+++ b/syntax/jsp.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language version="5" kateversion="5.0" name="JSP" section="Markup" extensions="*.jsp;*.JSP" mimetype="text/html" casesensitive="false" author="Rob Martin (rob@gamepimp.com)" license="LGPL">
+<language version="6" kateversion="5.0" name="JSP" section="Markup" extensions="*.jsp;*.JSP" mimetype="text/html" casesensitive="false" author="Rob Martin (rob@gamepimp.com)" license="LGPL">
   <highlighting>
 
     <list name="jsp-reserved-words">
@@ -27,9 +27,9 @@
         <RegExpr String="&lt;%@\s*[a-zA-Z0-9_\.]*" attribute="Jsp Directive" context="Jsp Standard Directive"/>
         <RegExpr String="&lt;\s*jsp:(declaration|expression|scriptlet)\s*&gt;" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
         <RegExpr String="&lt;\s*\/?s*jsp:[a-zA-Z0-9_\.]*" attribute="Jsp Directive" context="Jsp Xml Directive"/>
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
-        <StringDetect String="&lt;!--" attribute="Html Comment" context="Html Comment"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
+        <StringDetect String="&lt;!--" attribute="Html Comment" context="Html Comment" beginRegion="HtmlComment"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
         <RegExpr String="&lt;\s*\/?\s*\$?[a-zA-Z0-9_]*:\$?[a-zA-Z0-9_]*" attribute="Keyword" context="Jsp Custom Tag"/>
         <StringDetect String="&lt;![CDATA[" attribute="Normal Text" context="#stay"/>
@@ -63,6 +63,7 @@
       </context>
       <context name="JS comment close" attribute="Jsp Comment" lineEndContext="#stay">
         <DetectSpaces/>
+        <IncludeRules context="##Alerts" />
         <DetectIdentifier/>
         <StringDetect attribute="Normal Text" context="#pop#pop#pop" String="&lt;/script" endRegion="script" />
       </context>
@@ -70,8 +71,8 @@
       <context name="Jsp Standard Directive" attribute="Jsp Param Name" lineEndContext="#stay">
         <Detect2Chars char="%" char1="&gt;" attribute="Jsp Directive" context="#pop"/>
         <RegExpr String="\s*=\s*" attribute="Normal Text" context="Jsp Standard Directive Value"/>
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
         <RegExpr String="&lt;\s*\/?\s*\$?\w*:\$?\w*" attribute="Keyword" context="Jsp Custom Tag"/>
       </context>
@@ -79,26 +80,29 @@
       <context name="Jsp Xml Directive" attribute="Jsp Param Name" lineEndContext="#stay">
         <RegExpr String="\s*\/?\s*&gt;" attribute="Jsp Directive" context="#pop"/>
         <RegExpr String="\s*=\s*" attribute="Normal Text" context="Jsp Xml Directive Value"/>
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
       </context>
 
       <context name="Jsp Comment" attribute="Jsp Comment" lineEndContext="#stay">
-        <StringDetect String="--%&gt;" attribute="Jsp Comment" context="#pop"/>
+        <StringDetect String="--%&gt;" attribute="Jsp Comment" context="#pop" endRegion="JspComment"/>
+        <DetectSpaces />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
 
       <context name="Jsp Custom Tag" attribute="Identifier" lineEndContext="#stay">
         <RegExpr String="\/?&gt;" attribute="Keyword" context="#pop"/>
         <RegExpr String="\s*=\s*" attribute="Normal Text" context="Jsp Custom Tag Value"/>
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
       </context>
 
       <context name="Jsp Standard Directive Value" attribute="Jsp Param Value" lineEndContext="#stay">
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
         <DetectChar char="&quot;" attribute="Jsp Param Value" context="Jsp Double Quoted Param Value"/>
         <DetectChar char="'" attribute="Jsp Param Value" context="Jsp Single Quoted Param Value"/>
@@ -106,8 +110,8 @@
       </context>
 
       <context name="Jsp Xml Directive Value" attribute="Jsp Param Value" lineEndContext="#stay">
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
         <DetectChar char="&quot;" attribute="Jsp Param Value" context="Jsp Double Quoted Param Value"/>
         <DetectChar char="'" attribute="Jsp Param Value" context="Jsp Single Quoted Param Value"/>
@@ -115,8 +119,8 @@
       </context>
 
       <context name="Jsp Custom Tag Value" attribute="Normal Text" lineEndContext="#stay">
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
         <DetectChar char="&quot;" attribute="Types" context="Jsp Double Quoted Custom Tag Value"/>
         <DetectChar char="'" attribute="Types" context="Jsp Single Quoted Custom Tag Value"/>
@@ -125,34 +129,34 @@
 
       <context name="Jsp Double Quoted Param Value" attribute="Jsp Param Value" lineEndContext="#stay">
         <DetectChar char="&quot;" attribute="Jsp Param Value" context="#pop#pop"/>
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
       </context>
 
       <context name="Jsp Single Quoted Param Value" attribute="Jsp Param Value" lineEndContext="#stay">
         <DetectChar char="'" attribute="Jsp Param Value" context="#pop#pop"/>
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
       </context>
 
       <context name="Jsp Double Quoted Custom Tag Value" attribute="Types" lineEndContext="#stay">
         <DetectChar char="&quot;" attribute="Types" context="#pop#pop"/>
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
       </context>
 
       <context name="Jsp Single Quoted Custom Tag Value" attribute="Types" lineEndContext="#stay">
         <DetectChar char="'" attribute="Types" context="#pop#pop"/>
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
       </context>
 
       <context name="Jsp Scriptlet" attribute="Normal Text" lineEndContext="#stay">
-        <Detect2Chars char="%" char1="&gt;" attribute="Jsp Scriptlet" context="#pop"/>
+        <Detect2Chars char="%" char1="&gt;" attribute="Jsp Scriptlet" context="#pop" endRegion="JspScriptlet"/>
         <RegExpr String="&lt;\s*jsp:(declaration|expression|scriptlet)\s*&gt;" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
         <keyword String="jsp-reserved-words" attribute="Keyword" context="#stay"/>
         <IncludeRules context="##Java" includeAttrib="true"/>
@@ -167,14 +171,14 @@
       <context name="Html Attribute" attribute="Identifier" lineEndContext="#stay">
         <RegExpr String="\/?&gt;" attribute="Normal Text" context="#pop"/>
         <RegExpr String="\s*=\s*" attribute="Normal Text" context="Html Value"/>
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
       </context>
 
       <context name="Html Value" attribute="Types" lineEndContext="#stay">
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
         <RegExpr String="&lt;\s*\/?\s*\$?\w*:\$?\w*" attribute="Keyword" context="Jsp Custom Tag"/>
         <RegExpr String="(&quot;|&amp;quot;|&amp;#34;)" attribute="Types" context="Html Double Quoted Value"/>
@@ -184,24 +188,24 @@
       </context>
 
       <context name="Html Double Quoted Value" attribute="Types" lineEndContext="#stay">
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
         <RegExpr String="&lt;\s*\/?\s*\$?\w*:\$?\w*" attribute="Keyword" context="Jsp Custom Tag"/>
         <RegExpr String="(&quot;|&amp;quot;|&amp;#34;)" attribute="Types" context="#pop#pop"/>
       </context>
 
       <context name="Html Single Quoted Value" attribute="Types" lineEndContext="#stay">
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
         <RegExpr String="&lt;\s*\/?\s*\$?\w*:\$?\w*" attribute="Keyword" context="Jsp Custom Tag"/>
         <RegExpr String="('|&amp;#39;)" attribute="Types" context="#pop#pop"/>
       </context>
 
       <context name="Html Unquoted Value" attribute="Types" lineEndContext="#stay">
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
         <RegExpr String="&lt;\s*\/?\s*\$?\w*:\$?\w*" attribute="Keyword" context="Jsp Custom Tag"/>
         <RegExpr String="\/?&gt;" attribute="Normal Text" context="#pop#pop#pop"/>
@@ -209,10 +213,12 @@
       </context>
 
       <context name="Html Comment" attribute="Html Comment" lineEndContext="#stay">
-        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment"/>
-        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet"/>
+        <StringDetect String="&lt;%--" attribute="Jsp Comment" context="Jsp Comment" beginRegion="JspComment"/>
+        <RegExpr String="&lt;%(!|=)?" attribute="Jsp Scriptlet" context="Jsp Scriptlet" beginRegion="JspScriptlet"/>
         <Detect2Chars char="$" char1="{" attribute="Jsp Expression" context="Jsp Expression"/>
-        <RegExpr String="\/*--&gt;" attribute="Html Comment" context="#pop"/>
+        <RegExpr String="\/*--&gt;" attribute="Html Comment" context="#pop" endRegion="HtmlComment"/>
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
 
     </contexts>
@@ -238,8 +244,9 @@
 
   <general>
     <comments>
-      <comment name="multiLine" start="&lt;%-- " end=" --%&gt;" />
+      <comment name="multiLine" start="&lt;%--" end="--%&gt;" region="JspComment" />
     </comments>
     <keywords casesensitive="1" />
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/julia.xml b/syntax/julia.xml
--- a/syntax/julia.xml
+++ b/syntax/julia.xml
@@ -33,7 +33,7 @@
   <!ENTITY hex "[0-9a-fA-F]([0-9a-fA-F_]*[0-9a-fA-F])?">
 ]>
 
-<language name="Julia" section="Sources" version="7" kateversion="5.0" extensions="*.jl" casesensitive="1" priority="5" license="MIT">
+<language name="Julia" section="Sources" version="8" kateversion="5.0" extensions="*.jl" casesensitive="1" priority="5" license="MIT">
 
   <highlighting>
     <list name="block_begin">
@@ -697,7 +697,7 @@
   <general>
     <comments>
       <comment name="singleLine" start="#" />
-      <comment name="multiLine" start="#=" end="=#" />
+      <comment name="multiLine" start="#=" end="=#" region="block-comment" />
     </comments>
     <keywords casesensitive="1" weakDeliminator=""/>
   </general>
diff --git a/syntax/kotlin.xml b/syntax/kotlin.xml
--- a/syntax/kotlin.xml
+++ b/syntax/kotlin.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
 <!-- kotlin language syntax http://kotlinlang.org -->
-<language name="Kotlin" version="5" kateversion="5.0" section="Sources" extensions="*.kt;*.kts" license="LGPLv2+" author="Sergey Mashkov (sergey.mashkov@jetbrains.com)" style="cstyle" indenter="cstyle">
+<language name="Kotlin" version="6" kateversion="5.0" section="Sources" extensions="*.kt;*.kts" license="LGPLv2+" author="Sergey Mashkov (sergey.mashkov@jetbrains.com)" style="cstyle" indenter="cstyle">
     <highlighting>
         <list name="keywords">
             <item>package</item>
@@ -260,11 +260,15 @@
             </context>
 
             <context attribute="Comment" lineEndContext="#pop" name="CommentSingleLine">
-                <StringDetect attribute="TODO" context="#stay" String="TODO" />
+                <DetectSpaces />
+                <IncludeRules context="##Alerts"/>
+                <IncludeRules context="##Modelines"/>
             </context>
             <context attribute="Comment" lineEndContext="#stay" name="CommentMultiline">
-                <StringDetect attribute="TODO" context="#stay" String="TODO" />
                 <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+                <DetectSpaces />
+                <IncludeRules context="##Alerts"/>
+                <IncludeRules context="##Modelines"/>
             </context>
 
         </contexts>
@@ -291,8 +295,9 @@
     <general>
         <comments>
             <comment name="singleLine" start="//"/>
-            <comment name="multiLine" start="/*" end="*/"/>
+            <comment name="multiLine" start="/*" end="*/" region="Comment"/>
         </comments>
         <keywords casesensitive="1"/>
     </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 4; indent-width 4; -->
diff --git a/syntax/latex.xml b/syntax/latex.xml
--- a/syntax/latex.xml
+++ b/syntax/latex.xml
@@ -3,9 +3,8 @@
 [
     <!ENTITY bullet "&#xd7;">
     <!ENTITY envname "[a-zA-Z]+\*?">
-    <!ENTITY regionmarker "&#037;\s*(?:BEGIN|END)">
 ]>
-<language name="LaTeX" version="11" section="Markup" kateversion="5.0" priority="10" extensions="*.tex;*.ltx;*.dtx;*.sty;*.cls;*.bbx;*.cbx;*.lbx;*.tikz;*.pgf" mimetype="text/x-tex" casesensitive="1" author="Jeroen Wijnhout (Jeroen.Wijnhout@kdemail.net)+Holger Danielsson (holger.danielsson@versanet.de)+Michel Ludwig (michel.ludwig@kdemail.net)+Thomas Braun (thomas.braun@virtuell-zuhause.de)" license="LGPL" >
+<language name="LaTeX" version="15" section="Markup" kateversion="5.0" priority="10" extensions="*.tex;*.ltx;*.dtx;*.sty;*.cls;*.bbx;*.cbx;*.lbx;*.tikz;*.pgf" mimetype="text/x-tex" casesensitive="1" author="Jeroen Wijnhout (Jeroen.Wijnhout@kdemail.net)+Holger Danielsson (holger.danielsson@versanet.de)+Michel Ludwig (michel.ludwig@kdemail.net)+Thomas Braun (thomas.braun@virtuell-zuhause.de)" license="LGPL" >
   <highlighting>
     <!-- NOTE: Keywords of kind "\something" do not need a delimiter before "\".
          Using a DetectChar rule with lookAhead to detect "\" at the beginning
@@ -284,14 +283,13 @@
         <DetectChar char="\" attribute="Normal Text" context="LatexMacro" lookAhead="true"/>
         <DetectChar char="$" attribute="Math" context="MathModeTex"/>
         <RegExpr String="&lt;&lt;.*&gt;&gt;=" attribute="Normal Text" context="NoWeb" column="0"/>
-        <RegExpr String="&regionmarker;" attribute="Region Marker" context="RegionComment" firstNonSpace="true"/>
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
         <DetectChar char="&bullet;" attribute="Bullet" context="#stay"/>
       </context>
 
       <context name="LatexMacro" attribute="Normal Text" lineEndContext="#pop">
         <keyword String="beginEnv" attribute="Structure" context="#pop!FindBeginEnvironment" beginRegion="block"/>
-        <keyword String="endEnv" attribute="Structure" context="#pop!FindEndEnvironment" endRegion="block"/>
+        <keyword String="endEnv" attribute="Structure" context="#pop!FindEndEnvironment"/>
         <keyword String="Label" attribute="Structure" context="#pop!Label"/>
         <keyword String="macroFancyLabel" attribute="Builtin Macro" context="#pop!FancyLabel"/>
         <keyword String="FancyLabel" attribute="Structure" context="#pop!FancyLabel"/>
@@ -318,7 +316,7 @@
         <RangeDetect char="[" char1="]" attribute="Normal Text" context="#stay"/>
         <DetectChar char="{" attribute="Normal Text" context="SectioningInside"/>
         <DetectChar char="}" attribute="Normal Text" context="#pop"/>
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
       </context>
       <context name="SectioningInside" attribute="Sectioning Text" lineEndContext="#stay">
         <DetectChar char="{" attribute="Normal Text" context="SectioningInside"/>
@@ -326,12 +324,12 @@
         <Detect2Chars char="\" char1="(" attribute="Sectioning Math" context="SectioningMathMode" />
         <DetectChar char="\" attribute="Sectioning Macro" context="SectioningContrSeq"/>
         <DetectChar char="$" attribute="Sectioning Math" context="SectioningMathMode" />
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
         <DetectChar char="&bullet;" attribute="Bullet" context="#stay"/>
       </context>
       <context name="SectioningContrSeq" attribute="Macro" lineEndContext="#pop">
         <DetectChar char="&bullet;" attribute="Bullet" context="#stay"/>
-        <RegExpr String="[a-zA-Z]+(\+?|\*{0,3})|." attribute="Sectioning Macro" context="#pop" />
+        <RegExpr String="[a-zA-Z]+(?:\+?|\*{0,3})|." attribute="Sectioning Macro" context="#pop" />
       </context>
       <context name="SectioningMathMode" attribute="Sectioning Math" lineEndContext="#stay">
         <Detect2Chars char="$" char1="$" attribute="Error" context="#stay" />
@@ -339,7 +337,7 @@
         <Detect2Chars char="\" char1=")" attribute="Sectioning Math" context="#pop" />
         <Detect2Chars char="\" char1="]" attribute="Error" context="#stay" />
         <DetectChar char="\" attribute="Sectioning Macro Mathmode" context="SectioningMathContrSeq"/>
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
         <DetectChar char="&bullet;" attribute="Bullet" context="#stay"/>
       </context>
       <context name="SectioningMathContrSeq" attribute="Sectioning Macro Mathmode" lineEndContext="#pop">
@@ -353,7 +351,7 @@
         <RangeDetect char="[" char1="]" attribute="Normal Text" context="#stay"/>
         <DetectChar char="{" attribute="Normal Text" context="FootnotingInside"/>
         <DetectChar char="}" attribute="Normal Text" context="#pop"/>
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
       </context>
       <context name="FootnotingInside" attribute="Normal Text" lineEndContext="#stay">
         <DetectChar char="{" attribute="Normal Text" context="FootnotingInside"/>
@@ -365,7 +363,7 @@
       <context name="NewCommand" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop">
         <DetectSpaces/>
         <DetectChar char="{" attribute="Normal Text" context="LabelParameter"/>
-        <RegExpr String="(\[\d\](\[[^\]]*\])?)?\{" attribute="Normal Text" context="LabelParameter"/>
+        <RegExpr String="(?:\[\d\](?:\[[^\]]*\])?)?\{" attribute="Normal Text" context="LabelParameter"/>
         <DetectChar char="}" attribute="Error" context="#pop"/>
       </context>
 
@@ -381,7 +379,7 @@
         <DetectChar char="{" attribute="Normal Text" context="CommandParameter"/>
         <DetectChar char="}" attribute="Normal Text" context="#pop"/>
         <RegExpr String="\\." attribute="Normal Text" context="#stay"/>
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
       </context>
 
       <!-- LaTeX command in text mode -->
@@ -390,7 +388,7 @@
         <keyword String="Lstinline" attribute="Macro" context="Lstinline"/>
         <keyword String="MintParam" attribute="Macro" context="MintParam"/>
         <DetectChar char="&bullet;" attribute="Bullet" context="#stay"/>
-        <RegExpr String="[a-zA-Z@]+(\+?|\*{0,3})|." attribute="Macro" context="#pop" />
+        <RegExpr String="[a-zA-Z@]+(?:\+?|\*{0,3})|." attribute="Macro" context="#pop" />
       </context>
 
       <!-- \mint command with parameter-->
@@ -402,7 +400,7 @@
 
       <!-- verb command -->
       <context name="Verb" attribute="Verbatim" lineEndContext="#pop#pop" >
-        <RegExpr String="(.)" attribute="Normal Text" dynamic="true" context="VerbEnd" />
+        <RegExpr String="(.)" attribute="Normal Text" context="VerbEnd" />
       </context>
       <context name="VerbEnd" attribute="Verbatim" lineEndContext="#pop#pop#pop" dynamic="true" >
         <StringDetect String="%1" attribute="Normal Text" context="#pop#pop#pop" dynamic="true" />
@@ -415,7 +413,7 @@
         <DetectSpaces/>
         <DetectChar char="[" attribute="Normal Text" context="FancyLabelOption"/>
         <DetectChar char="{" attribute="Normal Text" context="LstinlineParameter"/>
-        <RegExpr String="(.)" attribute="Normal Text" dynamic="true" context="LstinlineEnd" />
+        <RegExpr String="(.)" attribute="Normal Text" context="LstinlineEnd" />
       </context>
       <context name="LstinlineEnd" attribute="Verbatim" lineEndContext="#pop#pop#pop" dynamic="true" >
         <!-- TODO DetectChar segfault -->
@@ -437,10 +435,10 @@
 
       <context name="LabelOption" attribute="Normal Text" lineEndContext="#stay">
         <DetectSpaces/>
-        <DetectChar char="(" attribute="Math" context="MathModeTex" />
+        <Detect2Chars char="\" char1="(" attribute="Math" context="MathModeLatex"/>
         <DetectChar char="\" attribute="Macro" context="ContrSeq"/>
         <DetectChar char="$" attribute="Math" context="MathModeTex" />
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
         <DetectChar char="&bullet;" attribute="Bullet" context="#stay"/>
         <DetectChar char="]" attribute="Normal Text" context="#pop"/>
       </context>
@@ -461,10 +459,10 @@
 
       <context name="FancyLabelParameter" attribute="Environment" lineEndContext="#stay">
         <DetectSpaces/>
-        <DetectChar char="(" attribute="Math" context="MathModeTex" />
+        <Detect2Chars char="\" char1="(" attribute="Math" context="MathModeLatex"/>
         <DetectChar char="\" attribute="Macro" context="ContrSeq"/>
         <DetectChar char="$" attribute="Math" context="MathModeTex" />
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
         <DetectChar char="&bullet;" attribute="Bullet" context="#stay"/>
         <DetectChar char="}" attribute="Normal Text" context="#pop"/>
         <DetectChar char="{" attribute="Normal Text" context="FancyLabelParameter"/>
@@ -479,7 +477,7 @@
         <Detect2Chars char="\" char1="(" attribute="Math" context="MathModeLatex" />
         <DetectChar char="\" attribute="Macro" context="ContrSeq"/>
         <DetectChar char="$" attribute="Math" context="MathModeTex" />
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
         <DetectChar char="&bullet;" attribute="Bullet" context="#stay"/>
         <DetectChar char=")" attribute="Normal Text" context="#pop"/>
       </context>
@@ -492,10 +490,10 @@
 
       <context name="SpecialCommandParameterOption" attribute="Option Text" lineEndContext="#stay">
         <DetectSpaces/>
-        <Detect2Chars char="\" char1="(" attribute="Math" context="MathModeTex" />
+        <Detect2Chars char="\" char1="(" attribute="Math" context="MathModeLatex" />
         <DetectChar char="\" attribute="Macro" context="ContrSeq"/>
         <DetectChar char="$" attribute="Math" context="MathModeTex" />
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
         <DetectChar char="&bullet;" attribute="Bullet" context="#stay"/>
         <DetectChar char="}" attribute="Normal Text" context="#pop"/>
         <DetectChar char="{" attribute="Normal Text" context="SpecialCommandParameterOption"/>
@@ -629,17 +627,17 @@
       <context name="ListingsEnvParam" attribute="Normal Text" lineEndContext="#pop!UnknownHighlighting" fallthrough="true" fallthroughContext="#pop!UnknownHighlighting">
         <DetectSpaces/>
         <DetectChar char="[" attribute="Normal Text" context="#pop!ListingsEnvParamInside"/>
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
       </context>
       <context name="ListingsEnvParamInside" attribute="Normal Text" lineEndContext="#stay">
         <DetectIdentifier/>
         <RegExpr String="\s*language\s*=\s*(?=[^],])" attribute="Normal Text" context="HighlightingSelector"/>
         <DetectChar char="]" attribute="Normal Text" context="ListingsEnvParamEnd"/>
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
       </context>
       <context name="ListingsEnvParamEnd" attribute="Normal Text" lineEndContext="#pop#pop!UnknownHighlighting" fallthrough="true" fallthroughContext="#pop#pop!UnknownHighlighting">
         <DetectSpaces/>
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
       </context>
 
       <!-- environment type 5: minted environment with optional and HL switching -->
@@ -651,19 +649,19 @@
         <DetectSpaces/>
         <DetectChar char="[" attribute="Normal Text" context="#pop!MintedEnvParamInside"/>
         <DetectChar char="{" attribute="Normal Text" context="HighlightingSelector"/>
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
       </context>
       <context name="MintedEnvParamInside" attribute="Normal Text" lineEndContext="#stay">
         <DetectSpaces/>
         <DetectIdentifier/>
         <DetectChar char="]" attribute="Normal Text" context="#pop!MintedEnvLang"/>
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
         <RegExpr String="\\&envname;" attribute="Macro" context="#stay"/>
       </context>
       <context name="MintedEnvLang" attribute="Normal Text" lineEndContext="#stay">
         <DetectSpaces/>
         <DetectChar char="{" attribute="Normal Text" context="HighlightingSelector"/>
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
       </context>
 
       <!-- parse verbatim text for lstinline and minted -->
@@ -671,7 +669,7 @@
         <DetectSpaces/>
         <DetectIdentifier/>
         <DetectChar char="&bullet;" attribute="Bullet" context="#stay"/>
-        <RegExpr String="\\end(?=\s*\{(lstlisting|minted)\*?\})" attribute="Structure" context="UnknownHighlightingEnd"/>
+        <RegExpr String="\\end(?=\s*\{(?:lstlisting|minted)\*?\})" attribute="Structure" context="UnknownHighlightingEnd"/>
       </context>
       <context name="UnknownHighlightingEnd" attribute="Environment" lineEndContext="#stay">
         <DetectSpaces/>
@@ -691,7 +689,7 @@
       </context>
 
       <context name="HighlightingCommon" attribute="Normal Text" lineEndContext="#stay">
-        <RegExpr String="\\end\s*\{(lstlisting|minted)\*?\}" attribute="Structure" lookAhead="true" context="#pop#pop#pop#pop#pop#pop"/>
+        <RegExpr String="\\end\s*\{(?:lstlisting|minted)\*?\}" attribute="Structure" lookAhead="true" context="#pop#pop#pop#pop#pop#pop"/>
       </context>
 
       <context name="HighlightingBeginC++" attribute="Normal Text" lineEndContext="#stay">
@@ -773,13 +771,12 @@
         <DetectIdentifier/>
         <DetectChar char="\" attribute="Math" context="BackslashMathModeEnv" lookAhead="true"/>
         <DetectChar char="$" attribute="Error" context="#stay"/>
-        <RegExpr String="&regionmarker;" attribute="Region Marker" context="RegionComment" firstNonSpace="true"/>
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
         <DetectChar char="&bullet;" attribute="Bullet" context="#stay"/>
       </context>
       <context name="BackslashMathModeEnv" attribute="Math" lineEndContext="#pop">
         <keyword String="beginEnv" attribute="Structure" context="#pop!FindBeginEnvironmentInMathMode" beginRegion="block"/>
-        <keyword String="endEnv" attribute="Structure" context="#pop!MathFindEnd" endRegion="block"/>
+        <keyword String="endEnv" attribute="Structure" context="#pop!MathFindEnd"/>
         <keyword String="MathModeText" attribute="Macro Mathmode" context="#pop!MathModeText"/>
         <Detect2Chars char="\" char1="(" attribute="Error" context="#pop"/>
         <Detect2Chars char="\" char1=")" attribute="Error" context="#pop"/>
@@ -804,7 +801,7 @@
         <keyword String="TabEnv" attribute="Environment" context="TabEnv"/>
         <DetectChar char="&bullet;" attribute="Bullet" context="#stay"/>
         <!-- keywords in MathEnvParam and MathEnv. Do not use keyword to avoid autocomplete -->
-        <RegExpr String="(equation|IEEEeqnarray(box)?|([BVvbp]|small)matrix|(fl)?align|x{0,2}alignat|cases|displaymath|gather|math|multline|(sub)?eqnarray)(?=[^a-zA-Z]|$)\*?" attribute="Error" context="#pop"/>
+        <RegExpr String="(?:equation|IEEEeqnarray(?:box)?|(?:[BVvbp]|small)matrix|(?:fl)?align|x{0,2}alignat|cases|displaymath|gather|math|multline|(?:sub)?eqnarray)(?=[^a-zA-Z]|$)\*?" attribute="Error" context="#pop"/>
         <RegExpr String="&envname;" attribute="Environment" context="LatexEnv"/>
         <RegExpr String="." attribute="Error" context="#pop"/>
       </context>
@@ -899,13 +896,12 @@
         <DetectSpaces/>
         <DetectIdentifier/>
         <DetectChar char="\" attribute="Math" context="BackslashMathModeCommon" lookAhead="true"/>
-        <RegExpr String="&regionmarker;" attribute="Region Marker" context="RegionComment" firstNonSpace="true"/>
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
         <DetectChar char="&bullet;" attribute="Bullet" context="#stay"/>
       </context>
       <context name="BackslashMathModeCommon" attribute="Math" lineEndContext="#pop">
         <keyword String="beginEnv" attribute="Structure" context="#pop!MathEnvironment" beginRegion="block"/>
-        <keyword String="endEnv" attribute="Structure" context="#pop!MathEnvironmentEnd" endRegion="block"/>
+        <keyword String="endEnv" attribute="Structure" context="#pop!MathEnvironmentEnd"/>
         <keyword String="MathModeText" attribute="Macro Mathmode" context="#pop!MathModeText" />
         <DetectChar char="\" attribute="Macro Mathmode" context="#pop!MathContrSeq"/>
       </context>
@@ -925,7 +921,7 @@
         <RegExpr String="." attribute="Error" context="#pop"/>
       </context>
       <context name="MathEnvironmentEndInside" attribute="Environment" lineEndContext="#stay">
-        <DetectChar char="}" attribute="Normal Text" context="#pop#pop"/>
+        <DetectChar char="}" attribute="Normal Text" context="#pop#pop" endRegion="block"/>
         <WordDetect String="ensuremath" attribute="Environment" context="#pop!LatexEnvEnd"/>
         <RegExpr String="&envname;" attribute="Environment" context="#stay"/>
         <RegExpr String="[^}a-zA-Z]+|." attribute="Error" context="#pop#pop"/>
@@ -951,7 +947,7 @@
         <RangeDetect char="$" char1="$" attribute="Math" context="#stay"/>
         <DetectChar char="{" attribute="Normal Text" context="MathModeTextInside" lookAhead="true"/>
         <DetectChar char="}" attribute="Normal Text" context="#pop#pop"/>
-        <DetectChar char="%" attribute="Comment" context="Comment"/>
+        <IncludeRules context="FindComments"/>
         <DetectChar char="\" attribute="Macro Mathmode" context="MathContrSeq"/>
       </context>
 
@@ -964,11 +960,17 @@
         <DetectChar char="\" attribute="Comment" context="#pop"/>
       </context>
 
-     <!-- comment -->
+      <!-- comment -->
+      <context name="FindComments" attribute="Normal Text" lineEndContext="#stay">
+        <RegExpr String="&#037;+\s*BEGIN\b" attribute="Region Marker" context="RegionComment" firstNonSpace="true" beginRegion="region-marker"/>
+        <RegExpr String="&#037;+\s*END\b" attribute="Region Marker" context="RegionComment" firstNonSpace="true" endRegion="region-marker"/>
+        <DetectChar char="%" attribute="Comment" context="Comment"/>
+      </context>
       <context name="RegionComment" attribute="Region Marker" lineEndContext="#pop"/>
       <context name="Comment" attribute="Comment" lineEndContext="#pop">
         <DetectSpaces/>
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
         <DetectIdentifier/>
         <DetectChar char="\" attribute="Comment" context="BackslashComment" lookAhead="true"/>
       </context>
@@ -1129,3 +1131,4 @@
     </encodings>
   </spellchecking>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/lex.xml b/syntax/lex.xml
--- a/syntax/lex.xml
+++ b/syntax/lex.xml
@@ -20,7 +20,7 @@
   
   ========================================================================
 -->
-<language name="Lex/Flex" version="2" kateversion="2.4" section="Sources" extensions="*.l;*.lex;*.flex" author="Jan Villat (jan.villat@net2000.ch)" license="LGPL">
+<language name="Lex/Flex" version="3" kateversion="2.4" section="Sources" extensions="*.l;*.lex;*.flex" author="Jan Villat (jan.villat@net2000.ch)" license="LGPL">
 
 <highlighting>
 <contexts>
@@ -31,7 +31,7 @@
     <IncludeRules context="Detect C" />
     <Detect2Chars attribute="Content-Type Delimiter" context="Rules" char="%" char1="%" beginRegion="rules" endRegion="definitions" />
     <DetectChar attribute="Directive" context="Percent Command" char="%" />
-    <Detect2Chars attribute="Comment" context="Comment" char="/" char1="*" column="0"/>
+    <Detect2Chars attribute="Comment" context="Comment" char="/" char1="*" column="0" beginRegion="BlockComment"/>
     <RegExpr attribute="Definition" context="Definition RegExpr" String="[A-Za-z_]\w*\s+" column="0"/>
   </context>
   <context name="Rules" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="Rule RegExpr">
@@ -45,7 +45,10 @@
   <context name="Percent Command" attribute="Directive" lineEndContext="#pop">
   </context>
   <context name="Comment" attribute="Comment" lineEndContext="#stay">
-    <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" />
+    <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="BlockComment"/>
+    <DetectSpaces />
+    <IncludeRules context="##Alerts" />
+    <IncludeRules context="##Modelines" />
   </context>
 
   <context name="Definition RegExpr" attribute="RegExpr" lineEndContext="#pop">
@@ -142,3 +145,4 @@
   </comments>
 </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/lilypond.xml b/syntax/lilypond.xml
--- a/syntax/lilypond.xml
+++ b/syntax/lilypond.xml
@@ -56,7 +56,7 @@
 ]>
 <language name="LilyPond" section="Other"
           style="lilypond" indenter="lilypond"
-          version="6" kateversion="3.3"
+          version="7" kateversion="3.3"
           extensions="*.ly;*.LY;*.ily;*.ILY;*.lyi;*.LYI"
           mimetype="text/x-lilypond"
           author="Wilbert Berendsen (info@wilbertberendsen.nl)" license="LGPL">
@@ -820,12 +820,16 @@
       </context>
 
       <context name="commentline" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces />
         <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
 
       <context name="commentblock" attribute="Comment" lineEndContext="#stay">
         <Detect2Chars char="%" char1="}" attribute="Comment" context="#pop" endRegion="comment"/>
+        <DetectSpaces />
         <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
 
       <context name="string" attribute="Quoted Text" lineEndContext="#stay">
@@ -891,11 +895,13 @@
       </context>
 
       <context name="schemecommentline" attribute="Scheme Comment" lineEndContext="#pop">
+        <DetectSpaces />
         <IncludeRules context="##Alerts"/>
       </context>
 
       <context name="schemecommentblock" attribute="Scheme Comment" lineEndContext="#stay">
         <Detect2Chars char="!" char1="#" attribute="Scheme Comment" context="#pop" endRegion="schemecomment"/>
+        <DetectSpaces />
         <IncludeRules context="##Alerts"/>
       </context>
 
diff --git a/syntax/literate-curry.xml b/syntax/literate-curry.xml
--- a/syntax/literate-curry.xml
+++ b/syntax/literate-curry.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Literate Curry" version="2" kateversion="3.4"
+<language name="Literate Curry" version="3" kateversion="3.4"
           section="Sources" extensions="*.lcurry" mimetype="text/x-curry"
           author="Björn Peemöller (bjp@informatik.uni-kiel.de)" license="LGPL"
           indenter="haskell">
@@ -17,7 +17,7 @@
     </context>
 
     <context attribute="Text" lineEndContext="#pop" name="Code">
-      <RegExpr attribute="Comment" context="multiline" String="\{-[^#]" />
+      <RegExpr attribute="Comment" context="multiline" String="\{-[^#]" beginRegion="Comment" />
       <IncludeRules context="##Curry" />
     </context>
 
@@ -29,7 +29,9 @@
 
     <!-- Handle comments in presence of bird tracks -->
     <context attribute="Comment" lineEndContext="lineend" name="multiline" >
-      <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" />
+      <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" endRegion="Comment" />
+      <DetectSpaces />
+      <IncludeRules context="##Alerts" />
     </context>
 
     <context attribute="Text" lineEndContext="#stay" name="lineend">
@@ -47,4 +49,9 @@
     <itemData name="Comment"   defStyleNum="dsComment" />
   </itemDatas>
   </highlighting>
+  <general>
+    <comments>
+      <comment name="multiLine" start="{-" end="-}" region="Comment"/>
+    </comments>
+  </general>
 </language>
diff --git a/syntax/literate-haskell.xml b/syntax/literate-haskell.xml
--- a/syntax/literate-haskell.xml
+++ b/syntax/literate-haskell.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Literate Haskell" version="5" kateversion="3.4" section="Sources" extensions="*.lhs" mimetype="text/x-literate-haskell" author="Nicolas Wu (zenzike@gmail.com)" license="LGPL">
+<language name="Literate Haskell" version="6" kateversion="3.4" section="Sources" extensions="*.lhs" mimetype="text/x-literate-haskell" author="Nicolas Wu (zenzike@gmail.com)" license="LGPL">
   <highlighting>
   <contexts>
     <context attribute="Text" lineEndContext="#stay" name="text">
@@ -10,7 +10,7 @@
       <StringDetect attribute="Text" context="normals" String="&#92;begin&#123;spec&#125;"/>
     </context>
     <context attribute="Text" lineEndContext="#pop" name="normal">
-      <RegExpr attribute="Comment" context="comments'" String="\{-[^#]" />
+      <RegExpr attribute="Comment" context="comments'" String="\{-[^#]" beginRegion="Comment" />
       <IncludeRules context="##Haskell" />
     </context>
     <context attribute="Text" lineEndContext="#stay" name="normals">
@@ -19,7 +19,9 @@
       <IncludeRules context="##Haskell" />
     </context>
     <context attribute="Comment" lineEndContext="uncomments" name="comments'" >
-      <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" />
+      <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" endRegion="Comment" />
+      <DetectSpaces />
+      <IncludeRules context="##Alerts" />
     </context>
     <context attribute="Text" lineEndContext="#stay" name="uncomments">
       <DetectChar attribute="BirdTrack" context="recomments" char="&gt;" column="0"/>
@@ -35,4 +37,9 @@
     <itemData name="Comment"          defStyleNum="dsComment" />
   </itemDatas>
   </highlighting>
+  <general>
+    <comments>
+      <comment name="multiLine" start="{-" end="-}" region="Comment"/>
+    </comments>
+  </general>
 </language>
diff --git a/syntax/llvm.xml b/syntax/llvm.xml
--- a/syntax/llvm.xml
+++ b/syntax/llvm.xml
@@ -1,189 +1,189 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
 <language name="LLVM" section="Sources"
-          version="1.00" kateversion="3.4.4"
+          version="3" kateversion="5.0"
           extensions="*.ll"
           mimetype=""
           author="LLVM Team"
           license="LLVM Release License">
   <highlighting>
     <list name="keywords">
-      <item> begin </item>
-      <item> end </item>
-      <item> true </item>
-      <item> false </item>
-      <item> declare </item>
-      <item> define </item>
-      <item> global </item>
-      <item> constant </item>
-      <item> gc </item>
-      <item> module </item>
-      <item> asm </item>
-      <item> target </item>
-      <item> datalayout </item>
-      <item> null </item>
-      <item> undef </item>
-      <item> blockaddress </item>
-      <item> sideeffect </item>
-      <item> alignstack </item>
-      <item> to </item>
-      <item> unwind </item>
-      <item> nuw </item>
-      <item> nsw </item>
-      <item> inbounds </item>
-      <item> tail </item>
-      <item> triple </item>
-      <item> type </item>
-      <item> align </item>
-      <item> alias </item>
+      <item>begin</item>
+      <item>end</item>
+      <item>true</item>
+      <item>false</item>
+      <item>declare</item>
+      <item>define</item>
+      <item>global</item>
+      <item>constant</item>
+      <item>gc</item>
+      <item>module</item>
+      <item>asm</item>
+      <item>target</item>
+      <item>datalayout</item>
+      <item>null</item>
+      <item>undef</item>
+      <item>blockaddress</item>
+      <item>sideeffect</item>
+      <item>alignstack</item>
+      <item>to</item>
+      <item>unwind</item>
+      <item>nuw</item>
+      <item>nsw</item>
+      <item>inbounds</item>
+      <item>tail</item>
+      <item>triple</item>
+      <item>type</item>
+      <item>align</item>
+      <item>alias</item>
     </list>
     <list name="linkage-types">
-      <item> private </item>
-      <item> internal </item>
-      <item> available_externally </item>
-      <item> linkonce </item>
-      <item> weak </item>
-      <item> common </item>
-      <item> appending </item>
-      <item> extern_weak </item>
-      <item> linkonce_odr </item>
-      <item> weak_odr </item>
-      <item> dllimport </item>
-      <item> dllexport </item>
+      <item>private</item>
+      <item>internal</item>
+      <item>available_externally</item>
+      <item>linkonce</item>
+      <item>weak</item>
+      <item>common</item>
+      <item>appending</item>
+      <item>extern_weak</item>
+      <item>linkonce_odr</item>
+      <item>weak_odr</item>
+      <item>dllimport</item>
+      <item>dllexport</item>
     </list>
     <list name="calling-conventions">
-      <item> ccc </item>
-      <item> fastcc </item>
-      <item> coldcc </item>
-      <item> cc </item>
+      <item>ccc</item>
+      <item>fastcc</item>
+      <item>coldcc</item>
+      <item>cc</item>
     </list>
     <list name="visibility-styles">
-      <item> default </item>
-      <item> hidden </item>
-      <item> protected </item>
+      <item>default</item>
+      <item>hidden</item>
+      <item>protected</item>
     </list>
     <list name="parameter-attributes">
-      <item> zeroext </item>
-      <item> signext </item>
-      <item> inreg </item>
-      <item> byval </item>
-      <item> sret </item>
-      <item> noalias </item>
-      <item> nocapture </item>
-      <item> nest </item>
+      <item>zeroext</item>
+      <item>signext</item>
+      <item>inreg</item>
+      <item>byval</item>
+      <item>sret</item>
+      <item>noalias</item>
+      <item>nocapture</item>
+      <item>nest</item>
     </list>
     <list name="function-attributes">
-      <item> alignstack </item>
-      <item> alwaysinline </item>
-      <item> inlinehint </item>
-      <item> naked </item>
-      <item> noimplicitfloat </item>
-      <item> noinline </item>
-      <item> noredzone </item>
-      <item> noreturn </item>
-      <item> nounwind </item>
-      <item> optnone </item>
-      <item> optsize </item>
-      <item> readnone </item>
-      <item> readonly </item>
-      <item> ssp </item>
-      <item> sspreq </item>
-      <item> sspstrong </item>
+      <item>alignstack</item>
+      <item>alwaysinline</item>
+      <item>inlinehint</item>
+      <item>naked</item>
+      <item>noimplicitfloat</item>
+      <item>noinline</item>
+      <item>noredzone</item>
+      <item>noreturn</item>
+      <item>nounwind</item>
+      <item>optnone</item>
+      <item>optsize</item>
+      <item>readnone</item>
+      <item>readonly</item>
+      <item>ssp</item>
+      <item>sspreq</item>
+      <item>sspstrong</item>
     </list>
     <list name="types">
-      <item> float </item>
-      <item> double </item>
-      <item> fp128 </item>
-      <item> x86_fp80 </item>
-      <item> ppc_fp128 </item>
-      <item> x86mmx </item>
-      <item> void </item>
-      <item> label </item>
-      <item> metadata </item>
-      <item> opaque </item>
+      <item>float</item>
+      <item>double</item>
+      <item>fp128</item>
+      <item>x86_fp80</item>
+      <item>ppc_fp128</item>
+      <item>x86mmx</item>
+      <item>void</item>
+      <item>label</item>
+      <item>metadata</item>
+      <item>opaque</item>
     </list>
     <list name="intrinsic-global-variables">
-      <item> llvm.used </item>
-      <item> llvm.compiler.used </item>
-      <item> llvm.global_ctors </item>
-      <item> llvm.global_dtors </item>
+      <item>llvm.used</item>
+      <item>llvm.compiler.used</item>
+      <item>llvm.global_ctors</item>
+      <item>llvm.global_dtors</item>
     </list>
     <list name="instructions">
-      <item> ret </item>
-      <item> br </item>
-      <item> switch </item>
-      <item> indirectbr </item>
-      <item> invoke </item>
-      <item> unwind </item>
-      <item> unreachable </item>
-      <item> add </item>
-      <item> fadd </item>
-      <item> sub </item>
-      <item> fsub </item>
-      <item> mul </item>
-      <item> fmul </item>
-      <item> udiv </item>
-      <item> sdiv </item>
-      <item> fdiv </item>
-      <item> urem </item>
-      <item> srem </item>
-      <item> frem </item>
-      <item> shl </item>
-      <item> lshr </item>
-      <item> ashr </item>
-      <item> and </item>
-      <item> or </item>
-      <item> xor </item>
-      <item> extractelement </item>
-      <item> insertelement </item>
-      <item> shufflevector </item>
-      <item> extractvalue </item>
-      <item> insertvalue </item>
-      <item> alloca </item>
-      <item> load </item>
-      <item> store </item>
-      <item> getelementptr </item>
-      <item> trunc </item>
-      <item> zext </item>
-      <item> sext </item>
-      <item> fptrunc </item>
-      <item> fpext </item>
-      <item> fptoui </item>
-      <item> fptosi </item>
-      <item> uitofp </item>
-      <item> sitofp </item>
-      <item> ptrtoint </item>
-      <item> inttoptr </item>
-      <item> bitcast </item>
-      <item> addrspacecast </item>
-      <item> icmp </item>
-      <item> fcmp </item>
-      <item> phi </item>
-      <item> select </item>
-      <item> call </item>
-      <item> va_arg </item>
+      <item>ret</item>
+      <item>br</item>
+      <item>switch</item>
+      <item>indirectbr</item>
+      <item>invoke</item>
+      <item>unwind</item>
+      <item>unreachable</item>
+      <item>add</item>
+      <item>fadd</item>
+      <item>sub</item>
+      <item>fsub</item>
+      <item>mul</item>
+      <item>fmul</item>
+      <item>udiv</item>
+      <item>sdiv</item>
+      <item>fdiv</item>
+      <item>urem</item>
+      <item>srem</item>
+      <item>frem</item>
+      <item>shl</item>
+      <item>lshr</item>
+      <item>ashr</item>
+      <item>and</item>
+      <item>or</item>
+      <item>xor</item>
+      <item>extractelement</item>
+      <item>insertelement</item>
+      <item>shufflevector</item>
+      <item>extractvalue</item>
+      <item>insertvalue</item>
+      <item>alloca</item>
+      <item>load</item>
+      <item>store</item>
+      <item>getelementptr</item>
+      <item>trunc</item>
+      <item>zext</item>
+      <item>sext</item>
+      <item>fptrunc</item>
+      <item>fpext</item>
+      <item>fptoui</item>
+      <item>fptosi</item>
+      <item>uitofp</item>
+      <item>sitofp</item>
+      <item>ptrtoint</item>
+      <item>inttoptr</item>
+      <item>bitcast</item>
+      <item>addrspacecast</item>
+      <item>icmp</item>
+      <item>fcmp</item>
+      <item>phi</item>
+      <item>select</item>
+      <item>call</item>
+      <item>va_arg</item>
     </list>
     <list name="conditions">
-      <item> eq </item>
-      <item> ne </item>
-      <item> ugt </item>
-      <item> uge </item>
-      <item> ult </item>
-      <item> ule </item>
-      <item> sgt </item>
-      <item> sge </item>
-      <item> slt </item>
-      <item> sle </item>
-      <item> oeq </item>
-      <item> ogt </item>
-      <item> oge </item>
-      <item> olt </item>
-      <item> ole </item>
-      <item> one </item>
-      <item> ord </item>
-      <item> ueq </item>
-      <item> une </item>
-      <item> uno </item>
+      <item>eq</item>
+      <item>ne</item>
+      <item>ugt</item>
+      <item>uge</item>
+      <item>ult</item>
+      <item>ule</item>
+      <item>sgt</item>
+      <item>sge</item>
+      <item>slt</item>
+      <item>sle</item>
+      <item>oeq</item>
+      <item>ogt</item>
+      <item>oge</item>
+      <item>olt</item>
+      <item>ole</item>
+      <item>one</item>
+      <item>ord</item>
+      <item>ueq</item>
+      <item>une</item>
+      <item>uno</item>
     </list>
     <contexts>
       <context name="llvm" attribute="Normal Text" lineEndContext="#stay">
@@ -227,6 +227,7 @@
         <DetectSpaces />
         <!-- TODO: Add FileCheck syntax highlighting -->
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
         <DetectIdentifier />
       </context>
     </contexts>
@@ -235,11 +236,8 @@
       <itemData name="Keyword" defStyleNum="dsKeyword" />
       <itemData name="Data Type" defStyleNum="dsDataType" />
       <itemData name="Int" defStyleNum="dsDecVal" />
-      <itemData name="Hex" defStyleNum="dsBaseN" />
-      <itemData name="Float" defStyleNum="dsFloat" />
       <itemData name="String" defStyleNum="dsString" />
       <itemData name="Comment" defStyleNum="dsComment" />
-      <itemData name="Function" defStyleNum="dsFunction" />
       <itemData name="Symbol" defStyleNum="dsFunction" />
     </itemDatas>
   </highlighting>
diff --git a/syntax/lua.xml b/syntax/lua.xml
--- a/syntax/lua.xml
+++ b/syntax/lua.xml
@@ -48,7 +48,7 @@
     - NOTE, FIXME, TODO alerts added on comments
     - improved highlighting
 -->
-<language name="Lua" version="7" indenter="lua" kateversion="5.0" section="Scripts" extensions="*.lua" mimetype="text/x-lua">
+<language name="Lua" version="12" indenter="lua" kateversion="5.0" section="Scripts" extensions="*.lua" mimetype="text/x-lua">
   <highlighting>
     <list name="keywords">
       <item>and</item>
@@ -149,7 +149,7 @@
       <item>coroutine.create</item>
       <item>coroutine.isyieldable</item>
       <item>coroutine.resume</item>
-      <item>coroutine.kill</item>
+      <item>coroutine.close</item>
       <item>coroutine.running</item>
       <item>coroutine.status</item>
       <item>coroutine.wrap</item>
@@ -423,6 +423,8 @@
       <item>__call</item>
 
       <item>__tostring</item>
+      <item>__name</item>
+      <item>__close</item>
       <item>__pairs</item>
       <!-- setmetatable -->
       <item>__metatable</item>
@@ -458,18 +460,17 @@
 
     <contexts>
       <context name="Shebang"       attribute="Comment" lineEndContext="Normal" lineEmptyContext="Normal" fallthrough="true" fallthroughContext="Normal">
-        <Detect2Chars attribute="Comment" context="Comment" char="#" char1="!" column="0"/>
+        <Detect2Chars attribute="Comment" context="ShebangLine" char="#" char1="!" column="0"/>
       </context>
 
-      <context name="Comment"       attribute="Comment"     lineEndContext="#pop">
-      </context>
+      <context name="ShebangLine"   attribute="Comment"     lineEndContext="#pop!Normal" />
 
       <context name="Normal"        attribute="Normal Text" lineEndContext="#stay">
         <DetectSpaces />
         <keyword      attribute="Deprecated" context="#stay"       String="deprecated" />
-        <IncludeRules context="##DoxygenLua" />
+        <Detect2Chars attribute="Comment" context="MatchComment" char="-" char1="-" lookAhead="true"/>
 
-        <RegExpr      attribute="RawStrings" context="String_block"  String="\[(=*)\[" dynamic="true" />
+        <RegExpr      attribute="RawStrings" context="String_block"  String="\[(=*)\[" />
         <DetectChar   attribute="Strings"  context="String_single" char="'"/>
         <DetectChar   attribute="Strings"  context="String_double" char="&quot;"/>
         <keyword      attribute="BFunc"    context="#stay"         String="basefunc"/>
@@ -477,6 +478,7 @@
         <keyword      attribute="BVar"     context="#stay"         String="basevar"/>
 
         <WordDetect   attribute="Keyword"  context="Function" beginRegion="chunk" String="function" />
+        <WordDetect   attribute="Keyword"  context="Local" String="local" />
         <keyword      attribute="Keyword"  context="#stay" String="keywords" />
         <keyword      attribute="Control"  context="StartControl" beginRegion="chunk" String="startcontrol" />
         <keyword      attribute="Control"  context="#stay" String="control" />
@@ -484,11 +486,11 @@
         <DetectChar   attribute="Symbols"  context="#stay" beginRegion="table" char="{" />
         <DetectChar   attribute="Symbols"  context="#stay" endRegion="table"   char="}" />
 
-        <RegExpr      attribute="Numbers"  context="#stay" String="(?:0[xX](?:\.&HEX;+|&HEX;+\.?&HEX;*)(?:[pP][-+]?\d*)?|(?:\.\d+|\d+\.?\d*)(?:[eE][-+]?\d*)?)"/>
+        <RegExpr      attribute="Normal Text" context="#stay" String="[a-zA-Z_][a-zA-Z0-9_]*(?=\s*([({'&quot;]|\[\[|\[=))" />
+        <RegExpr      attribute="Constant" context="#stay" String="[A-Z_][A-Z0-9_]*\b" />
+        <DetectIdentifier attribute="Variable" context="#stay" />
 
-        <RegExpr      attribute="Normal Text" context="#stay" String="\b[a-zA-Z_][a-zA-Z0-9_]*(?=\s*([({'&quot;]|\[\[|\[=))" />
-        <RegExpr      attribute="Constant" context="#stay" String="\b[A-Z_][A-Z0-9_]*\b" />
-        <RegExpr      attribute="Variable" context="#stay" String="\b[a-zA-Z_][a-zA-Z0-9_]*\b" />
+        <RegExpr      attribute="Numbers"  context="NumberSuffix" String="(?:0[xX](?:\.&HEX;+|&HEX;+\.?&HEX;*)(?:[pP][-+]?\d*)?|(?:\.\d+|\d+\.?\d*)(?:[eE][-+]?\d*)?)"/>
 
         <Detect2Chars attribute="Error"    context="#stay" char="!" char1="="/>
         <Detect2Chars attribute="Error"    context="#stay" char="-" char1="="/>
@@ -498,12 +500,55 @@
         <AnyChar      attribute="Symbols"  context="#stay" String=":[]().,=~+-*/%&amp;|^&gt;&lt;#;" />
       </context>
 
+      <context name="MatchComment" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop">
+        <IncludeRules context="##DoxygenLua" />
+        <RegExpr attribute="Comment" context="#pop!BlockComment" String="--\[(=*)\[" beginRegion="BlockComment" />
+        <Detect2Chars attribute="Comment" context="#pop!Comment" char="-" char1="-" />
+      </context>
+
+      <context name="BlockComment" attribute="Comment" lineEndContext="#stay" dynamic="true">
+        <RegExpr attribute="Comment" context="#stay" String="[^\]]*" />
+        <StringDetect attribute="Comment" context="#pop" String="]%1]" dynamic="true" endRegion="BlockComment" />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
+      </context>
+
+      <context name="Comment"       attribute="Comment"     lineEndContext="#pop">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
+      </context>
+
       <context name="StartControl" attribute="Normal Text"  lineEndContext="#stay">
         <keyword      attribute="Control"  context="#stay" endRegion="chunk"   beginRegion="chunk" String="elsecontrol" />
         <keyword      attribute="Control"  context="#pop"  endRegion="chunk"   String="endcontrol" />
         <IncludeRules context="Normal" />
       </context>
 
+      <context name="NumberSuffix" attribute="Normal Text"  lineEndContext="#pop" fallthroughContext="#pop">
+        <!-- some syntax like a=32print(a) are valid, but ugly -->
+        <DetectIdentifier attribute="Error" context="#pop" />
+      </context>
+
+      <context name="Local" attribute="Normal Text"  lineEndContext="#pop" fallthroughContext="#pop">
+        <DetectSpaces />
+        <Detect2Chars attribute="Comment" context="MatchComment" char="-" char1="-" lookAhead="true"/>
+        <RegExpr          attribute="Constant" context="LocalVariable" String="\b[A-Z_][A-Z0-9_]*\b" />
+        <DetectIdentifier attribute="Variable" context="LocalVariable" />
+      </context>
+
+      <context name="LocalVariable" attribute="Normal Text"  lineEndContext="#pop#pop" fallthroughContext="#pop#pop">
+        <DetectSpaces />
+        <Detect2Chars attribute="Comment" context="MatchComment" char="-" char1="-" lookAhead="true"/>
+        <DetectChar   attribute="Symbols"   context="#pop" char="," />
+        <DetectChar   attribute="Attribute" context="Attribute" char="&lt;" lookAhead="true" />
+      </context>
+
+      <context name="Attribute" attribute="Attribute"  lineEndContext="#pop">
+        <RegExpr      attribute="Attribute" context="#pop" String="&lt;\s*(?:close|const)\s*>" />
+        <RegExpr      attribute="Error"     context="#pop" String="&lt;\s*\w*\s*>?" />
+      </context>
+
       <context name="Function" attribute="Normal Text"      lineEndContext="#stay">
         <WordDetect   attribute="Keyword"  context="#pop"  endRegion="chunk"   String="end" />
         <IncludeRules context="Normal" />
@@ -556,14 +601,15 @@
       <itemData name="RawStrings"      defStyleNum="dsVerbatimString"/>
       <itemData name="Symbols"         defStyleNum="dsOperator" spellChecking="false"/>
       <itemData name="Variable"        defStyleNum="dsNormal" /> <!-- JGM -->
+      <itemData name="Attribute"       defStyleNum="dsAttribute" spellChecking="false"/>
     </itemDatas>
   </highlighting>
   <general>
     <comments>
       <comment name="singleLine" start="--" />
-      <comment name="multiLine" start="--[[" end="]]" />
+      <comment name="multiLine" start="--[[" end="]]" region="BlockComment" />
     </comments>
-    <keywords casesensitive="1" weakDeliminator="." additionalDeliminator="'&quot;"/>
+    <keywords casesensitive="1" weakDeliminator="." additionalDeliminator="'&quot;#"/>
   </general>
 </language>
 <!-- kate: space-indent on; indent-width 2; replace-tabs on; -->
diff --git a/syntax/m4.xml b/syntax/m4.xml
--- a/syntax/m4.xml
+++ b/syntax/m4.xml
@@ -38,7 +38,7 @@
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 -->
-<language name="GNU M4" version="2" section="Sources" kateversion="3.0" extensions="*.m4;" author="Jaak Ristioja" license="New BSD License">
+<language name="GNU M4" version="4" section="Sources" kateversion="3.0" extensions="*.m4;" author="Jaak Ristioja" license="New BSD License">
   <highlighting>
     <list name="optbuiltins">
       <item>__gnu__</item>
@@ -161,15 +161,20 @@
         <RegExpr attribute="Normal Text" String="[a-zA-Z_]\w+" context="#stay"/>
         <RegExpr attribute="Special arguments to macros" String="\$([1-9]\d*|0|\#|\*|\@|\{([1-9]\d*|0)\})" context="#stay"/>
         <RegExpr attribute="Int" String="([1-9]\d*|0|0x[0-9abcdefABCDEF]+)" context="#stay"/>
-        <RegExpr attribute="Comment" String="#.*$" context="#stay"/>
+        <DetectChar attribute="Comment" char="#" context="Comment"/>
         <DetectChar attribute="Commas" char="," context="#stay"/>
         <DetectChar attribute="Operators" char="(" context="inparenthesis" beginRegion="parenthesis"/>
         <DetectChar attribute="Operators" char=")" context="#pop" endRegion="parenthesis"/>
-        <RegExpr attribute="Operators" String="[+*/%\|=\!&lt;&gt;!^&amp;~-]" context="#stay"/>
+        <AnyChar attribute="Operators" String="+*/%|=!&lt;&gt;^&amp;~-" context="#stay"/>
       </context>
       <context name="inparenthesis" attribute="Normal Text" lineEndContext="#stay" noIndentationBasedFolding="true">
         <IncludeRules context="Normal Text" />
       </context>
+      <context name="Comment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
+      </context>
     </contexts>
     <itemDatas>
       <itemData name="Builtins" defStyleNum="dsKeyword"/>
@@ -191,3 +196,4 @@
     </comments>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/makefile.xml b/syntax/makefile.xml
--- a/syntax/makefile.xml
+++ b/syntax/makefile.xml
@@ -10,7 +10,7 @@
 <!-- v4 by Alex Richardson <arichardson.kde@gmail.com>
      added bmake support -->
 <language name="Makefile" section="Other"
-          version="7" kateversion="3.4"
+          version="9" kateversion="3.4"
           extensions="GNUmakefile;Makefile;makefile;GNUmakefile.*;Makefile.*;makefile.*;*.mk"
           mimetype="text/x-makefile" priority="11"
           author="Per Wigren (wigren@home.se)" license="">
@@ -185,8 +185,8 @@
         <keyword attribute="Keyword" context="bmake_for_loop" String="bmake_for_stmt" firstNonSpace="true" beginRegion="for"/>
         <keyword attribute="Keyword" context="#stay" String="bmake_endfor_stmt" firstNonSpace="true" endRegion="for"/>
 
-        <RegExpr attribute="Section"  context="prereq" String="^\.[^.][^:]*:"/>
-        <RegExpr attribute="Target"   context="prereq" String="^[^:]*:"/>
+        <RegExpr attribute="Section"  context="prereq" String="^\.[^.][^:]*:" column="0"/>
+        <RegExpr attribute="Target"   context="prereq" String="^[^:]*:" column="0"/>
         <DetectIdentifier/>
         <DetectChar attribute="String" context="string&quot;" char="&quot;"/>
         <DetectChar attribute="String" context="string'" char="'"/>
@@ -203,10 +203,16 @@
         <DetectChar attribute="Comment" context="Comment" char="#"/>
       </context>
 
-      <context name="gmake_else" attribute="Error" lineEndContext="#pop">
+      <context name="gmake_else" attribute="Normal" lineEndContext="#pop">
         <DetectSpaces attribute="Normal"/>
         <keyword attribute="ControlFlow" String="gmake_if_keywords" context="#stay"/>
         <IncludeRules context="strings_and_vars"/>
+        <Detect2Chars attribute="Special" context="#stay" char="\" char1="#"/>
+        <Detect2Chars attribute="Special" context="#stay" char="\" char1="\"/>
+        <!-- NOTE: Allow highlighting any variable name (see bug #417379), for example:
+                 else ifdef foo
+                 else ifeq (bar, foo)
+        -->
       </context>
 
       <context name="bmake_include" attribute="Normal" lineEndContext="#pop">
@@ -341,7 +347,8 @@
         <DetectChar attribute="Operator" char=")" context="#pop#pop#pop"/>
         <DetectChar attribute="Operator" context="dollar" char="$"/>
         <DetectSpaces attribute="Error" context="#stay"/>
-        <AnyChar attribute="Error" context="#stay" String="=#:"/>
+        <DetectChar attribute="RealOperator" context="SubstitutionRefs" char=":"/>
+        <AnyChar attribute="Error" context="#stay" String="=#"/>
       </context>
 
       <context name="callVar{" attribute="Variable" lineEndContext="#stay">
@@ -456,6 +463,16 @@
         <DetectChar attribute="String" context="string'" char="'"/>
       </context>
 
+      <!-- $(var:pattern=replacement) -->
+      <context name="SubstitutionRefs" attribute="VarModifier" lineEndContext="#stay">
+        <DetectChar attribute="RealOperator" context="#pop!SubstitutionRefsReplacement" char="="/>
+        <IncludeRules context="SubstitutionRefsReplacement"/>
+      </context>
+      <context name="SubstitutionRefsReplacement" attribute="VarModifier" lineEndContext="#stay">
+        <DetectChar attribute="Operator" char=")" context="#pop#pop#pop#pop"/>
+        <DetectChar attribute="Operator" context="dollar" char="$"/>
+      </context>
+
       <context attribute="Comment" lineEndContext="#pop" name="Comment">
         <LineContinue attribute="Comment" context="#stay" />
         <IncludeRules context="##Alerts" />
@@ -495,4 +512,4 @@
     <keywords casesensitive="1" weakDeliminator = ".-"/>
   </general>
 </language>
-<!-- kate: space-indent on; indent-width 2; replace-tabs on; -->
+<!-- kate: syntax XML; space-indent on; indent-width 2; replace-tabs on; -->
diff --git a/syntax/markdown.xml b/syntax/markdown.xml
--- a/syntax/markdown.xml
+++ b/syntax/markdown.xml
@@ -40,10 +40,12 @@
 <!-- emphasis text -->
 <!ENTITY emphasisregex_ast "\*(?:&contentregex_ast;\*|\*{1,4}&contentregex_ast;\*(?!\*))">
 <!ENTITY emphasisregex_und "\b_(?:&contentregex_und;_+|_{1,4}&contentregex_und;_)\b">
-<!-- links -->
+<!-- links.
+     Keep in sync with reStructuredText (rest) -->
 <!ENTITY startlink "(?:https?|ftp)\://">
 <!ENTITY link "&startlink;[^&quot;&gt;\s]+">
-<!-- link in normal text -->
+<!-- link in normal text.
+     Keep in sync with reStructuredText’s (rest) StandaloneHyperlink attribute -->
 <!ENTITY implicitlink "\b&startlink;[^&quot;&gt;\s`\)]*[^\s!&quot;&apos;`\(\)\*,\.:;&lt;&gt;\?~\]\}\\](?=[[:punct:]]*(?:[\s\)]|$))">
 <!-- references: [name], [name][id], [name][id] "title", [name](https://example.com) -->
 <!ENTITY refchar "(?:\\.|[^\]\\])">
@@ -88,7 +90,7 @@
 <!ENTITY checkbox "\[[ x]\](?=\s)">
 ]>
 
-<language name="Markdown" version="11" kateversion="5.53" section="Markup" extensions="*.md;*.mmd;*.markdown" priority="15" author="Darrin Yeager, Claes Holmerson" license="GPL,BSD">
+<language name="Markdown" version="13" kateversion="5.53" section="Markup" extensions="*.md;*.mmd;*.markdown" priority="15" author="Darrin Yeager, Claes Holmerson" license="GPL,BSD">
   <highlighting>
     <contexts>
       <!-- Start of the Markdown document: find metadata or code block -->
@@ -318,7 +320,7 @@
         <RegExpr attribute="Fenced Code" context="#pop!matlab-code" String="&fcode;\s*matlab&end;" insensitive="true"/>
         <RegExpr attribute="Fenced Code" context="#pop!markdown-code" String="&fcode;\s*(?:markdown|m?md)&end;" insensitive="true"/>
         <RegExpr attribute="Fenced Code" context="#pop!mustache-code" String="&fcode;\s*(?:handlebars|hbs|mustache|mst|ractive|hogan|hulk)&end;" insensitive="true"/> <!-- Included in the HTML definition -->
-        <RegExpr attribute="Fenced Code" context="#pop!perl-code" String="&fcode;\s*(?:perl|p[lm]|pod|psgi|vcl|perl6|p[lm]?6|nqp)&end;" insensitive="true"/>
+        <RegExpr attribute="Fenced Code" context="#pop!perl-code" String="&fcode;\s*(?:perl|p[lm]|pod|psgi|vcl)&end;" insensitive="true"/>
         <RegExpr attribute="Fenced Code" context="#pop!php-code" String="&fcode;\s*(?:php[3457t]?|wml|phtml?|aw|ctp)&end;" insensitive="true"/>
         <RegExpr attribute="Fenced Code" context="#pop!python-code" String="&fcode;\s*(?:python[23]?|py[23w]?|[rc]py|sconstruct|gypi?)&end;" insensitive="true"/>
         <RegExpr attribute="Fenced Code" context="#pop!qml-code" String="&fcode;\s*qml(?:types)?&end;" insensitive="true"/>
diff --git a/syntax/mathematica.xml b/syntax/mathematica.xml
--- a/syntax/mathematica.xml
+++ b/syntax/mathematica.xml
@@ -1,12 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Mathematica" version="9" kateversion="3.4" section="Scientific" extensions="*.nb" indenter="cstyle"
+<language name="Mathematica" version="10" kateversion="5.0" section="Scientific"
+          extensions="*.nb" mimetype="application/mathematica;application/vnd.wolfram.mathematica" indenter="cstyle"
           author="Sven Brauch (svenbrauch@gmail.com)" license="LGPL" priority="3">
   <highlighting>
+
     <list name="functions">
       <item>A</item>
       <item>AbelianGroup</item>
-      <item>All</item>
       <item>ArcSinh</item>
       <item>Abort</item>
       <item>AllowGroupClose</item>
@@ -94,7 +95,6 @@
       <item>AutoItalicWords</item>
       <item>AiryBiPrime</item>
       <item>AppendTo</item>
-      <item>Automatic</item>
       <item>AiryBiZero</item>
       <item>Apply</item>
       <item>AutoMultiplicationSymbol</item>
@@ -116,7 +116,6 @@
       <item>AlgebraicNumberTrace</item>
       <item>ArcCsch</item>
       <item>AxesLabel</item>
-      <item>Algebraics</item>
       <item>ArcSec</item>
       <item>AxesOrigin</item>
       <item>AlgebraicUnitQ</item>
@@ -142,7 +141,6 @@
       <item>BooleanMinterms</item>
       <item>Backward</item>
       <item>BilateralFilter</item>
-      <item>Booleans</item>
       <item>Band</item>
       <item>Binarize</item>
       <item>BooleanTable</item>
@@ -366,6 +364,7 @@
       <item>CellFrame</item>
       <item>ColorSeparate</item>
       <item>CoordinatesToolOptions</item>
+      <item>CellFrameColor</item>
       <item>CellFrameMargins</item>
       <item>ColorSetter</item>
       <item>CoprimeQ</item>
@@ -430,7 +429,6 @@
       <item>Complex</item>
       <item>CountryData</item>
       <item>Character</item>
-      <item>Complexes</item>
       <item>Covariance</item>
       <item>CharacterEncoding</item>
       <item>ComplexExpand</item>
@@ -910,7 +908,6 @@
       <item>FactorTermsList</item>
       <item>FindMaxValue</item>
       <item>FourierSinCoefficient</item>
-      <item>False</item>
       <item>FindMinimum</item>
       <item>FourierSinSeries</item>
       <item>FeedbackType</item>
@@ -1008,7 +1005,6 @@
       <item>FrontEndTokenExecute</item>
       <item>Find</item>
       <item>FontFamily</item>
-      <item>Full</item>
       <item>FindArgMax</item>
       <item>FontSize</item>
       <item>FullDefinition</item>
@@ -1260,7 +1256,6 @@
       <item>Information</item>
       <item>InverseErfc</item>
       <item>ImageClip</item>
-      <item>Inherited</item>
       <item>InverseFourier</item>
       <item>ImageColorSpace</item>
       <item>Initialization</item>
@@ -1350,7 +1345,6 @@
       <item>IntegerQ</item>
       <item>InverseWaveletTransform</item>
       <item>ImageRotate</item>
-      <item>Integers</item>
       <item>InverseWeierstrassP</item>
       <item>ImageScaled</item>
       <item>IntegerString</item>
@@ -1683,7 +1677,6 @@
       <item>MantissaExponent</item>
       <item>MaxStepSize</item>
       <item>Modal</item>
-      <item>Manual</item>
       <item>MaxValue</item>
       <item>ModularLambda</item>
       <item>Map</item>
@@ -1875,7 +1868,6 @@
       <item>NSum</item>
       <item>NextPrime</item>
       <item>NotebookSelection</item>
-      <item>Null</item>
       <item>NHoldAll</item>
       <item>NotebookWrite</item>
       <item>NullRecords</item>
@@ -1927,7 +1919,6 @@
       <item>NonConstants</item>
       <item>NotLess</item>
       <item>NumberPadding</item>
-      <item>None</item>
       <item>NotLessEqual</item>
       <item>NumberPoint</item>
       <item>NonlinearModelFit</item>
@@ -1952,6 +1943,7 @@
       <item>NotNestedLessLess</item>
       <item>NumericQ</item>
       <item>NormalDistribution</item>
+      <item>Nothing</item>
       <item>NotPrecedes</item>
       <item>NyquistGridLines</item>
       <item>Normalize</item>
@@ -2122,7 +2114,6 @@
       <item>PrimeQ</item>
       <item>ParallelTable</item>
       <item>PlotRange</item>
-      <item>Primes</item>
       <item>ParallelTry</item>
       <item>PlotRangeClipping</item>
       <item>PrimeZetaP</item>
@@ -2324,7 +2315,6 @@
       <item>Rationalize</item>
       <item>RescalingTransform</item>
       <item>RootSum</item>
-      <item>Rationals</item>
       <item>ResetDirectory</item>
       <item>Rotate</item>
       <item>Ratios</item>
@@ -2363,7 +2353,6 @@
       <item>RealExponent</item>
       <item>ReverseBiorthogonalSplineWavelet</item>
       <item>RowLines</item>
-      <item>Reals</item>
       <item>ReverseElement</item>
       <item>RowMinHeight</item>
       <item>Reap</item>
@@ -2856,7 +2845,6 @@
       <item>TrimmedMean</item>
       <item>Thin</item>
       <item>TotalVariationFilter</item>
-      <item>True</item>
       <item>Thinning</item>
       <item>TotalWidth</item>
       <item>TrueQ</item>
@@ -3080,6 +3068,8 @@
       <item>ZipfDistribution</item>
       <item>Zeta</item>
       <item>ZTest</item>
+    </list>
+    <list name="variables">
       <item>$</item>
       <item>$Aborted</item>
       <item>$Inspector</item>
@@ -3198,32 +3188,133 @@
       <item>$InputFileName</item>
       <item>$Output</item>
     </list>
+
+    <list name="option_values">
+      <item>True</item>
+      <item>False</item>
+      <item>Automatic</item>
+      <item>All</item>
+      <item>None</item>
+      <item>Full</item>
+      <item>Inherited</item>
+      <item>Manual</item>
+      <item>Null</item>
+      <item>Anonymous</item>
+    </list>
+
+    <list name="domains">
+      <item>Reals</item>
+      <item>Integers</item>
+      <item>Complexes</item>
+      <item>Algebraics</item>
+      <item>Primes</item>
+      <item>Rationals</item>
+      <item>Booleans</item>
+      <item>PositiveReals</item>
+      <item>NegativeReals</item>
+      <item>NonNegativeReals</item>
+      <item>NonPositiveReals</item>
+      <item>PositiveRationals</item>
+      <item>NegativeRationals</item>
+      <item>NonNegativeRationals</item>
+      <item>NonPositiveRationals</item>
+      <item>PositiveIntegers</item>
+      <item>NegativeIntegers</item>
+      <item>NonNegativeIntegers</item>
+      <item>NonPositiveIntegers</item>
+    </list>
+
     <contexts>
+
       <context name="Normal" attribute="Normal Text" lineEndContext="#stay">
-	<keyword attribute="function" String="functions" context="#stay"/>
-	<Int attribute="Int" context="#stay" />
-	<Float attribute="Float" context="#stay" />
-	<RegExpr attribute="Parameter" String="[a-zA-Z_0-9]+\_" context="#stay"/>
-	<RegExpr attribute="Replace" String="(\-\>|\/\.)" context="#stay"/>
-	<AnyChar attribute="Operator" String="+*/%\|-^" context="#stay"/>
-	<RegExpr attribute="Assign" String="(:=|=)" context="#stay"/>
+        <keyword attribute="Option Value" String="option_values" context="#stay"/>
+        <keyword attribute="Domain" String="domains" context="#stay"/>
+        <keyword attribute="Function" String="functions" context="#stay"/>
+        <keyword attribute="Variable" String="variables" context="#stay"/>
+
+        <Float attribute="Float" context="#stay"/>
+        <Int attribute="Int" context="#stay"/>
+
+        <RegExpr attribute="Comment: Region Marker" String="\(\*+\s*Beginning of Notebook Content\s*\*+\)" context="#stay" insensitive="true" beginRegion="NotebookContent"/>
+        <RegExpr attribute="Comment: Region Marker" String="\(\*+\s*End of Notebook Content\s*\*+\)" context="#stay" insensitive="true" endRegion="NotebookContent"/>
+        <RegExpr attribute="Comment: Region Marker" String="\(\*+\s*Internal cache information\s*\*+\)" context="#stay" insensitive="true" beginRegion="CacheInformation"/>
+        <RegExpr attribute="Comment: Region Marker" String="\(\*+\s*End of internal cache information\s*\*+\)" context="#stay" insensitive="true" endRegion="CacheInformation"/>
+        <Detect2Chars attribute="Comment" char="(" char1="*" context="Comment" beginRegion="Comment"/>
+
+        <DetectChar attribute="String" char="&quot;" context="String"/>
+        <Detect2Chars attribute="Replace" char="-" char1="&gt;" context="#stay"/>
+        <Detect2Chars attribute="Replace" char="/" char1="." context="#stay"/>
+        <Detect2Chars attribute="Assign" char=":" char1="=" context="#stay"/>
+        <DetectChar attribute="Assign" char="=" context="#stay"/>
+        <AnyChar attribute="Math Operator" String="+*/%\|-^" context="#stay"/>
+        <DetectChar attribute="Bracket" char="[" context="#stay" beginRegion="List"/>
+        <DetectChar attribute="Bracket" char="]" context="#stay" endRegion="List"/>
+        <DetectChar attribute="Bracket" char="{" context="#stay" beginRegion="Brace"/>
+        <DetectChar attribute="Bracket" char="}" context="#stay" endRegion="Brace"/>
+        <DetectChar attribute="Bracket" char="," context="#stay"/>
+
+        <RegExpr attribute="Parameter" String="[a-zA-Z_0-9]+\_" context="#stay"/>
       </context>
+
+      <context name="Comment" attribute="Comment" lineEndContext="#stay">
+        <Detect2Chars attribute="Comment" char="*" char1=")" context="#pop" endRegion="Comment"/>
+        <WordDetect attribute="Comment: Annotation" String="Content-type:" context="#stay"/>
+        <WordDetect attribute="Comment: Annotation" String="CacheID:" context="CommentCacheId"/>
+        <WordDetect attribute="Comment: Annotation" String="Internal cache information:" context="#stay"/>
+        <RegExpr attribute="Comment: Annotation" String="\bCreatedBy\s*\=\s*" context="CommentCreatedBy"/>
+        <WordDetect attribute="Comment: File Title" String="Wolfram Notebook File" context="#stay" insensitive="true"/>
+        <WordDetect attribute="Comment: File Title" String="http://www.wolfram.com/nb" context="#stay" insensitive="true"/>
+
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
+      <context name="CommentCreatedBy" attribute="Comment" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <RegExpr attribute="String" context="#pop" String="'(?:[^'\*]|\*+[^'\*\)])*\*?'"/>
+        <RegExpr attribute="String" context="#pop" String="&quot;(?:[^&quot;\*]|\*+[^&quot;\*\)])*\*?&quot;"/>
+      </context>
+      <context name="CommentCacheId" attribute="Comment" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <DetectSpaces/>
+        <Int attribute="Int" context="#pop"/>
+      </context>
+
+      <context name="String" attribute="String" lineEndContext="#stay">
+        <DetectChar attribute="String" char="&quot;" context="#pop"/>
+        <DetectChar attribute="Escape" context="Escape" char="\"/>
+      </context>
+      <context name="Escape" attribute="Escape" lineEndContext="#pop">
+        <RegExpr attribute="Escape" context="#pop" String="." />
+      </context>
+
     </contexts>
     <itemDatas>
       <itemData name="Normal Text" defStyleNum="dsNormal" spellChecking="false"/>
-      <itemData name="function" defStyleNum="dsFunction" spellChecking="false"/>
+      <itemData name="Comment" defStyleNum="dsComment"/>
+      <itemData name="Comment: Annotation" defStyleNum="dsAnnotation" spellChecking="false"/>
+      <itemData name="Comment: File Title" defStyleNum="dsComment" underline="1" spellChecking="false"/>
+      <itemData name="Comment: Region Marker" defStyleNum="dsRegionMarker" spellChecking="false"/>
+
+      <itemData name="Function" defStyleNum="dsFunction" spellChecking="false"/>
+      <itemData name="Variable" defStyleNum="dsVariable" spellChecking="false"/>
+      <itemData name="Option Value" defStyleNum="dsConstant" bold="1" spellChecking="false"/>
+      <itemData name="Domain" defStyleNum="dsBuiltIn" spellChecking="false"/>
+      <itemData name="Parameter" defStyleNum="dsAttribute" italic="1" spellChecking="false"/>
+
       <itemData name="Float" defStyleNum="dsFloat" spellChecking="false"/>
       <itemData name="Int" defStyleNum="dsDecVal" spellChecking="false"/>
-      <itemData name="Parameter" italic="1" defStyleNum="dsDataType" spellChecking="false"/>
-      <itemData name="Operator" defStyleNum="dsNormal" color="#FF7B00" spellChecking="false"/>
-      <itemData name="Assign" defStyleNum="dsNormal" color="#00A0E4" spellChecking="false"/>
-      <itemData name="Replace" defStyleNum="dsNormal" color="#85C200" spellChecking="false"/>
+      <itemData name="Math Operator" defStyleNum="dsSpecialChar" spellChecking="false"/>
+      <itemData name="Assign" defStyleNum="dsExtension" bold="1" spellChecking="false"/>
+      <itemData name="Replace" defStyleNum="dsOthers" bold="1" spellChecking="false"/>
+      <itemData name="Bracket" defStyleNum="dsOperator" spellChecking="false"/>
+
+      <itemData name="String" defStyleNum="dsString" spellChecking="false"/>
+      <itemData name="Escape" defStyleNum="dsSpecialChar" spellChecking="false"/>
     </itemDatas>
   </highlighting>
   <general>
-    <keywords casesensitive="0" weakDeliminator="-%"/>
+    <keywords casesensitive="0" weakDeliminator="$" additionalDeliminator="`"/>
     <comments>
-      <comment name="multiLine" start="(*" end="*)" />
+      <comment name="multiLine" start="(*" end="*)" region="Comment"/>
     </comments>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/matlab.xml b/syntax/matlab.xml
--- a/syntax/matlab.xml
+++ b/syntax/matlab.xml
@@ -56,8 +56,8 @@
 -->
 
 <!DOCTYPE language SYSTEM "language.dtd">
-
-<language name="Matlab" version="3" kateversion="5.0" section="Scientific" extensions="*.m;*.M" mimetype="text/mfile" casesensitive="1">
+<!-- low priority to let Objective-C win for .m files per default -->
+<language name="Matlab" version="6" kateversion="5.0" section="Scientific" extensions="*.m;*.M" priority="-9" mimetype="text/mfile" casesensitive="1">
   <highlighting>
 
     <!-- Reserved keywords in MATLAB -->
@@ -105,8 +105,8 @@
 
         <!-- Handling of keywords, comments, system commands, identifiers, numbers and braces -->
         <keyword context="#stay" attribute="Keyword" String="KeywordsList" />
-        <RegExpr context="#stay" attribute="Comment" String="%.*$" />
-        <RegExpr context="#stay" attribute="System" String="!.*$" />
+        <DetectChar context="Comment" attribute="Comment" char="%" />
+        <DetectChar context="System" attribute="System" char="!" />
         <RegExpr context="#stay" attribute="Variable" String="[a-zA-Z]\w*" />
         <RegExpr context="#stay" attribute="Number" String="(\d+(\.\d+)?|\.\d+)([eE][+-]?\d+)?[ij]?" />
         <AnyChar context="#stay" attribute="Delimiter" String="()[]{}"/>
@@ -134,6 +134,14 @@
         <RegExpr context="#pop" attribute="Operator" String="'+" />
       </context>
 
+      <context name="Comment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
+
+      <context name="System" attribute="System" lineEndContext="#pop"/>
+
     </contexts>
 
     <itemDatas>
@@ -155,9 +163,10 @@
 
   <general>
     <comments>
-      <comment name="singleLine" start="% " />
+      <comment name="singleLine" start="%" />
     </comments>
     <keywords casesensitive="1" weakDeliminator=""/>
   </general>
 
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/maxima.xml b/syntax/maxima.xml
--- a/syntax/maxima.xml
+++ b/syntax/maxima.xml
@@ -21,7 +21,7 @@
 
 <!DOCTYPE language SYSTEM "language.dtd">
 
-<language name="Maxima" version="4" kateversion="5.2" section="Scientific" extensions="*.mac;*.MAC;*.dem;*.DEM" casesensitive="1" author="Alexey Beshenov &lt;al@beshenov.ru&gt;" license="LGPLv2.1+">
+<language name="Maxima" version="5" kateversion="5.2" section="Scientific" extensions="*.mac;*.MAC;*.dem;*.DEM" casesensitive="1" author="Alexey Beshenov &lt;al@beshenov.ru&gt;" license="LGPLv2.1+">
     <highlighting>
 
         <list name="MaximaKeyword">
@@ -42,11 +42,6 @@
             <item>while</item>
         </list>
 
-        <list name="SpecialComment">
-            <item>FIXME</item>
-            <item>TODO</item>
-        </list>
-
         <list name="MaximaFunction">
             <item>abasep</item>
             <item>abs</item>
@@ -1871,9 +1866,10 @@
             </context>
 
             <context attribute="Comment" lineEndContext="#stay" name="Comment">
-                <keyword attribute="Special" String="SpecialComment"/>
                 <DetectSpaces/>
                 <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="comment"/>
+                <IncludeRules context="##Alerts"/>
+                <IncludeRules context="##Modelines"/>
             </context>
         </contexts>
 
@@ -1888,16 +1884,16 @@
             <itemData name="Float" defStyleNum="dsFloat"/>
             <itemData name="Comment" defStyleNum="dsComment"/>
             <itemData name="Quote" defStyleNum="dsDocumentation" bold="true"/>
-            <itemData name="Special" defStyleNum="dsSpecialString" bold="true" />
         </itemDatas>
 
     </highlighting>
 
     <general>
         <comments>
-            <comment name="multiLine" start="/*" end="*/"/>
+            <comment name="multiLine" start="/*" end="*/" region="comment"/>
         </comments>
         <keywords casesensitive="true" weakDeliminator="%" additionalDeliminator="@#"/>
     </general>
 
 </language>
+<!-- kate: replace-tabs on; tab-width 4; indent-width 4; -->
diff --git a/syntax/mediawiki.xml b/syntax/mediawiki.xml
--- a/syntax/mediawiki.xml
+++ b/syntax/mediawiki.xml
@@ -6,7 +6,7 @@
   <!ENTITY wikiLinkWithDescription "\[\[[^]|]*\|[^]]*\]\]">
   <!ENTITY wikiLinkWithoutDescription "\[\[[^]|]*\]\]">
 ]>
-<language name="MediaWiki" section="Markup" version="6" kateversion="5.0" extensions="*.mediawiki" mimetype="" license="FDL" >
+<language name="MediaWiki" section="Markup" version="8" kateversion="5.0" extensions="*.mediawiki" mimetype="" license="FDL" >
   <highlighting>
     <contexts>
       <context attribute="Normal" lineEndContext="#stay" name="normal" >
@@ -15,7 +15,8 @@
         <RegExpr String="[=]{4,4}(?!=)" context="Section4" attribute="Section" column="0" />
         <RegExpr String="[=]{3,3}(?!=)" context="Section3" attribute="Section" column="0" />
         <RegExpr String="[=]{2,2}(?!=)" context="Section2" attribute="Section" column="0" />
-        <RegExpr String="[~]{3,4}" attribute="WikiTag" context="#stay" />
+        <StringDetect String="~~~~" attribute="WikiTag" context="#stay" />
+        <StringDetect String="~~~" attribute="WikiTag" context="#stay" />
         <DetectChar char=";" attribute="WikiTag" context="DefinitionListHeader" column="0" />
         <IncludeRules context="FindListItem" />
         <IncludeRules context="FindUrl" />
@@ -29,14 +30,14 @@
         <StringDetect String="&lt;pre&gt;" context="Pre" attribute="HtmlTag" />
         <IncludeRules context="FindSyntaxHighlightingHtmlElement" />
         <RegExpr String="[&lt;][^&gt;]+[&gt;]" attribute="HtmlTag" context="#stay" />
-        <RegExpr String="[\s]" context="Unformatted" column="0" />
+        <DetectSpaces context="Unformatted" column="0" />
       </context>
       <context name="TableHeader" attribute="Normal" lineEndContext="TableContent" >
         <Detect2Chars char="{" char1="|" attribute="WikiTag" beginRegion="table" />
         <IncludeRules context="FindHtmlStartTagAttributes" />
       </context>
       <context name="TableContent" attribute="Normal" lineEndContext="#stay">
-        <StringDetect String="&lt;!--" context="comment" attribute="Comment" />
+        <StringDetect String="&lt;!--" context="comment" attribute="Comment" beginRegion="comment" />
         <RegExpr String="[=]{5,5}(?!=)" context="Section5" attribute="Section" column="0" />
         <RegExpr String="[=]{4,4}(?!=)" context="Section4" attribute="Section" column="0" />
         <RegExpr String="[=]{3,3}(?!=)" context="Section3" attribute="Section" column="0" />
@@ -58,13 +59,15 @@
         <IncludeRules context="FindSyntaxHighlightingHtmlElement" />
         <RegExpr String="[&lt;][^&gt;]+[&gt;]" attribute="HtmlTag" context="#stay" />
         <RegExpr String="[\s]" context="Unformatted" column="0" />
-        <RegExpr String="[~]{3,4}" attribute="WikiTag" context="#stay" />
+        <StringDetect String="~~~~" attribute="WikiTag" context="#stay" />
+        <StringDetect String="~~~" attribute="WikiTag" context="#stay" />
         <RegExpr String="[-]{4,}" attribute="WikiTag" context="#stay" />
         <DetectChar char="!" attribute="WikiTag" context="#stay" column="0" />
       </context>
       <context attribute="Section" lineEndContext="#pop" name="Section5" >
         <StringDetect String="&lt;!--" context="comment" attribute="Comment" beginRegion="comment" />
-        <RegExpr String="[~]{3,4}" attribute="WikiTag" context="#stay" />
+        <StringDetect String="~~~~" attribute="WikiTag" context="#stay" />
+        <StringDetect String="~~~" attribute="WikiTag" context="#stay" />
         <IncludeRules context="FindUrl" />
         <IncludeRules context="FindTextDecorationsInHeader" />
         <StringDetect String="{{{" context="TemplateParameter" attribute="WikiTag" />
@@ -83,7 +86,8 @@
       </context>
       <context attribute="Section" lineEndContext="#pop" name="Section4" >
         <StringDetect String="&lt;!--" context="comment" attribute="Comment" beginRegion="comment" />
-        <RegExpr String="[~]{3,4}" attribute="WikiTag" context="#stay" />
+        <StringDetect String="~~~~" attribute="WikiTag" context="#stay" />
+        <StringDetect String="~~~" attribute="WikiTag" context="#stay" />
         <IncludeRules context="FindUrl" />
         <IncludeRules context="FindTextDecorationsInHeader" />
         <StringDetect String="{{{" context="TemplateParameter" attribute="WikiTag" />
@@ -101,7 +105,8 @@
       </context>
       <context attribute="Section" lineEndContext="#pop" name="Section3" >
         <StringDetect String="&lt;!--" context="comment" attribute="Comment" beginRegion="comment" />
-        <RegExpr String="[~]{3,4}" attribute="WikiTag" context="#stay" />
+        <StringDetect String="~~~~" attribute="WikiTag" context="#stay" />
+        <StringDetect String="~~~" attribute="WikiTag" context="#stay" />
         <IncludeRules context="FindUrl" />
         <IncludeRules context="FindTextDecorationsInHeader" />
         <StringDetect String="{{{" context="TemplateParameter" attribute="WikiTag" />
@@ -119,7 +124,8 @@
       </context>
       <context attribute="Section" lineEndContext="#pop" name="Section2" >
         <StringDetect String="&lt;!--" context="comment" attribute="Comment" beginRegion="comment" />
-        <RegExpr String="[~]{3,4}" attribute="WikiTag" context="#stay" />
+        <StringDetect String="~~~~" attribute="WikiTag" context="#stay" />
+        <StringDetect String="~~~" attribute="WikiTag" context="#stay" />
         <IncludeRules context="FindUrl" />
         <IncludeRules context="FindTextDecorationsInHeader" />
         <StringDetect String="{{{" context="TemplateParameter" attribute="WikiTag" />
@@ -137,6 +143,9 @@
       </context>
       <context attribute="Comment" lineEndContext="#stay" name="comment" >
         <StringDetect String="--&gt;" context="#pop" attribute="Comment" endRegion="comment" />
+        <DetectSpaces />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
       <context attribute="Link" lineEndContext="#stay" name="DelimitedURL" >
         <DetectChar char="]" context="#pop" attribute="WikiTag" />
@@ -284,7 +293,8 @@
       <context attribute="Normal" lineEndContext="#stay" name="TemplateParameterSlot" >
         <Detect2Chars char="}" char1="}" context="#pop" attribute="WikiTag" lookAhead="true" />
         <StringDetect String="&lt;!--" context="comment" attribute="Comment" beginRegion="comment" />
-        <RegExpr String="[~]{3,4}" attribute="WikiTag" context="#stay" />
+        <StringDetect String="~~~~" attribute="WikiTag" context="#stay" />
+        <StringDetect String="~~~" attribute="WikiTag" context="#stay" />
         <IncludeRules context="FindListItem" />
         <IncludeRules context="FindUrlWithinTemplate" />
         <IncludeRules context="FindTextDecorations" />
@@ -306,7 +316,8 @@
       </context>
       <context attribute="Normal" lineEndContext="#stay" name="TemplateParameterSlotValue" >
         <StringDetect String="&lt;!--" context="comment" attribute="Comment" beginRegion="comment" />
-        <RegExpr String="[~]{3,4}" attribute="WikiTag" context="#stay" />
+        <StringDetect String="~~~~" attribute="WikiTag" context="#stay" />
+        <StringDetect String="~~~" attribute="WikiTag" context="#stay" />
         <IncludeRules context="FindListItem" />
         <IncludeRules context="FindUrlWithinTemplate" />
         <IncludeRules context="FindTextDecorations" />
@@ -615,8 +626,9 @@
   </highlighting>
   <general>
     <comments>
-      <comment end="//-->" start="&lt;!--" name="multiLine" />
+      <comment name="multiLine" start="&lt;!--" end="--&gt;" region="comment" />
     </comments>
     <keywords casesensitive="0" />
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/metafont.xml b/syntax/metafont.xml
--- a/syntax/metafont.xml
+++ b/syntax/metafont.xml
@@ -6,7 +6,7 @@
 -->
 
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Metapost/Metafont" section="Markup" version="5" kateversion="5.0"
+<language name="Metapost/Metafont" section="Markup" version="7" kateversion="5.0"
 extensions="*.mp;*.mps;*.mpost;*.mf" mimetype="text/x-metapost" 
 author="Yedvilun (yedvilun@gmail.com)" license="LGPL">
   <highlighting>
@@ -914,7 +914,7 @@
         <RegExpr String="[^a-zA-Z]" attribute="Keyword" context="#pop" />
       </context>
       <context name="Verb" attribute="Verbatim" lineEndContext="#pop#pop" >
-        <RegExpr String="(.)" attribute="Normal Text" dynamic="true" context="VerbEnd" />
+        <RegExpr String="(.)" attribute="Normal Text" context="VerbEnd" />
       </context>
       <context name="VerbEnd" attribute="Verbatim" lineEndContext="#pop#pop#pop" dynamic="true" >
         <StringDetect String="%1" attribute="Normal Text" context="#pop#pop#pop" dynamic="true" />
@@ -940,8 +940,10 @@
 
       <!-- comment -->
       <context name="Comment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces />
         <IncludeRules context="##Alerts" />
         <DetectChar char="&#xd7;" attribute="Bullet" context="#stay"/>
+        <IncludeRules context="##Modelines" />
       </context>
 
 </contexts>
@@ -977,10 +979,10 @@
 
   <general>
     <comments>
-      <comment name="singleLine" start="%"/>
+      <comment name="singleLine" start="%" position="afterwhitespace"/>
     </comments>
     <keywords casesensitive="0" />
 
   </general>
 </language>
-
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/mips.xml b/syntax/mips.xml
--- a/syntax/mips.xml
+++ b/syntax/mips.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="MIPS Assembler" version="3" kateversion="2.4" section="Assembler" extensions="*.s;" mimetype="text/x-mips" author="Dominik Haumann (dhaumann@kde.org)" license="MIT" priority="-1">
+<language name="MIPS Assembler" version="5" kateversion="2.4" section="Assembler" extensions="*.s;" mimetype="text/x-mips" author="Dominik Haumann (dhaumann@kde.org)" license="MIT" priority="-1">
   <highlighting>
     <list name="type">
       <item>.align</item>
@@ -317,7 +317,7 @@
         <keyword attribute="Section" context="#stay" String="type"/>
         <RegExpr attribute="Region Marker" context="#stay" String="#\s*BEGIN.*$" beginRegion="region" firstNonSpace="true"/>
         <RegExpr attribute="Region Marker" context="#stay" String="#\s*END.*$" endRegion="region" firstNonSpace="true"/>
-        <RegExpr attribute="Comment" context="#stay" String="#.*$" />
+        <DetectChar attribute="Comment" context="Comment" char="#" />
         <RegExpr attribute="Label" context="#stay" String="[\w_\.]+:" firstNonSpace="true"/>
         <DetectChar attribute="String" context="string" char="&quot;" />
         <Float attribute="Float" context="#stay"/>
@@ -329,6 +329,11 @@
         <RegExpr attribute="Char" context="#stay" String="\\." />
         <DetectChar attribute="String" context="#pop" char="&quot;" />
       </context>
+      <context name="Comment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
     </contexts>
     <itemDatas>
       <itemData name="Normal Text" defStyleNum="dsNormal" />
@@ -352,8 +357,9 @@
   </highlighting>
   <general>
     <comments>
-      <comment name="singleLine" start="#" />
+      <comment name="singleLine" start="#" position="afterwhitespace" />
     </comments>
     <keywords casesensitive="0" weakDeliminator="."/>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/modelines.xml b/syntax/modelines.xml
--- a/syntax/modelines.xml
+++ b/syntax/modelines.xml
@@ -8,7 +8,7 @@
   Copyright (c) 2012-2014 by Alex Turbov (i.zaufi@gmail.com)
   -->
 <language name="Modelines"
-          version="5"
+          version="6"
           kateversion="5.0"
           section="Other"
           extensions=""
@@ -127,10 +127,9 @@
   </list>
 
   <contexts>
-    <context name="Normal" attribute="Comment" lineEndContext="#pop">
-      <DetectSpaces />
+    <context name="Normal" attribute="Comment" lineEndContext="#stay">
       <keyword String="ModelineStartKeyword" context="Modeline" attribute="Keyword" />
-      <RegExpr String="kate-(?:mimetype|wildcard)\(.*\):" context="Modeline" attribute="Keyword" />
+      <RegExpr String="\bkate-(?:mimetype|wildcard)\(.*\):" context="Modeline" attribute="Keyword" />
     </context>
 
     <context name="Modeline" attribute="Comment" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
@@ -139,7 +138,6 @@
       <keyword String="Integrals" context="Integrals" attribute="Variable" />
       <keyword String="Strings" context="Strings" attribute="Variable" />
       <keyword String="RemoveSpaces" context="RemoveSpaces" attribute="Variable" />
-      <LineContinue context="#pop" />
     </context>
 
     <context name="Booleans" attribute="Comment" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
@@ -147,28 +145,24 @@
       <keyword String="True" attribute="Option ON" context="#stay" />
       <keyword String="False" attribute="Option OFF" context="#stay" />
       <DetectChar char="&end;" context="#pop" attribute="Variable" />
-      <LineContinue context="#pop" />
     </context>
 
     <context name="Integrals" attribute="Comment" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
       <DetectSpaces />
       <Int attribute="Number" context="#stay" />
       <DetectChar char="&end;" context="#pop" attribute="Variable" />
-      <LineContinue context="#pop" />
     </context>
 
     <context name="Strings" attribute="String" lineEndContext="#pop">
       <DetectSpaces />
       <RegExpr String="[^&end;&space;]" context="#stay" />
       <DetectChar char="&end;" context="#pop" attribute="Variable" />
-      <LineContinue context="#pop" />
     </context>
 
     <context name="RemoveSpaces" attribute="Comment" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
       <DetectSpaces />
       <keyword String="RemoveSpacesOptions" attribute="Value" context="#pop!RemoveSpacesEnd" />
       <DetectChar char="&end;" context="#pop" attribute="Variable" />
-      <LineContinue context="#pop" />
     </context>
     <context name="RemoveSpacesEnd" attribute="Comment" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
       <DetectChar char="&end;" context="#pop" attribute="Variable" />
diff --git a/syntax/modula-2.xml b/syntax/modula-2.xml
--- a/syntax/modula-2.xml
+++ b/syntax/modula-2.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Modula-2" mimetype="text/x-modula2" version="5"
+<language name="Modula-2" mimetype="text/x-modula2" version="6"
   kateversion="2.2" section="Sources" priority="5" extensions="*.mod;*.def"
   casesensitive="1"  author="B. Kowarsch (trijezdci@github)"  license="MIT">
 <!--
@@ -1111,6 +1111,9 @@
 
       <!-- Line Comment Body -->
       <context name="LineComment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
 
       <!-- Block Comment Body -->
@@ -1121,6 +1124,10 @@
         <!-- Closing Delimiter -->
         <Detect2Chars attribute="Comment" context="#pop"
           char="*" char1=")" endRegion="FoldableComment"/>
+
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
     </contexts>
 
@@ -1182,10 +1189,9 @@
   <general>
     <keywords casesensitive="1" />
     <comments>
-      <comment name="singleLine" start="!"/>
-      <comment name="multiLine" start="(*" end="*)"/>
+      <comment name="multiLine" start="(*" end="*)" region="FoldableComment"/>
     </comments>
   </general>
 </language>
-
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
 <!--EOF-->
diff --git a/syntax/modula-3.xml b/syntax/modula-3.xml
--- a/syntax/modula-3.xml
+++ b/syntax/modula-3.xml
@@ -6,259 +6,259 @@
 <!-- 04.03.2005 ik mailed version 1.01 with fixed/implemented nested comments to Dominik -->
 <!-- known bug: notation Regexp( [0-9]*\. ) should be not interpreted as neither Integer neither Real -->
 <!-- known bug: notation Regexp ( "  \" " ) is not properly interpreted -->
-<language name="Modula-3" version="1.01" kateversion="2.1" section="Sources" extensions="*.m3;*.i3;*.ig;*.mg;" mimetype="text/x-modula-3" license="LGPL">
+<language name="Modula-3" version="3" kateversion="2.1" section="Sources" extensions="*.m3;*.i3;*.ig;*.mg;" mimetype="text/x-modula-3" license="LGPL">
   <highlighting>
     <list name="keywords">
-<!--      <item> AND </item> -->
-      <item> ANY </item>
-      <item> ARRAY </item>
-      <item> AS </item>
-      <item> BEGIN </item>
-      <item> BITS </item>
-      <item> BRANDED </item>
-      <item> BY </item>
-      <item> CASE </item>
-      <item> CONST </item>
-<!--      <item> DIV </item> -->
-      <item> DO </item>
-      <item> ELSE </item>
-      <item> ELSIF </item>
-      <item> END </item>
-      <item> EVAL </item>
-      <item> EXCEPT </item>
-      <item> EXCEPTION </item>
-      <item> EXIT </item>
-      <item> EXPORTS </item>
-      <item> FINALLY </item>
-      <item> FOR </item>
-      <item> FROM </item>
-      <item> GENERIC </item>
-      <item> IF </item>
-      <item> IMPORT </item>
-<!--      <item> IN </item> -->
-      <item> INTERFACE </item>
-      <item> LOCK </item>
-      <item> LOOP </item>
-      <item> METHODS </item>
-<!--      <item> MOD </item> -->
-      <item> MODULE </item>
-<!--      <item> NOT </item> -->
-      <item> OBJECT </item>
-      <item> OF </item>
-<!--      <item> OR </item> -->
-      <item> OVERRIDES </item>
-      <item> PROCEDURE </item>
-      <item> RAISE </item>
-      <item> RAISES </item>
-      <item> READONLY </item>
-      <item> RECORD </item>
-      <item> REF </item>
-      <item> REPEAT </item>
-      <item> RETURN </item>
-      <item> REVEAL </item>
-      <item> ROOT </item>
-      <item> SET </item>
-      <item> THEN </item>
-      <item> TO </item>
-      <item> TRY </item>
-      <item> TYPE </item>
-      <item> TYPECASE </item>
-      <item> UNSAFE </item>
-      <item> UNTIL </item>
-      <item> UNTRACED </item>
-      <item> VALUE </item>
-      <item> VAR </item>
-      <item> WHILE </item>
-      <item> WITH </item>
+<!--      <item>AND</item> -->
+      <item>ANY</item>
+      <item>ARRAY</item>
+      <item>AS</item>
+      <item>BEGIN</item>
+      <item>BITS</item>
+      <item>BRANDED</item>
+      <item>BY</item>
+      <item>CASE</item>
+      <item>CONST</item>
+<!--      <item>DIV</item> -->
+      <item>DO</item>
+      <item>ELSE</item>
+      <item>ELSIF</item>
+      <item>END</item>
+      <item>EVAL</item>
+      <item>EXCEPT</item>
+      <item>EXCEPTION</item>
+      <item>EXIT</item>
+      <item>EXPORTS</item>
+      <item>FINALLY</item>
+      <item>FOR</item>
+      <item>FROM</item>
+      <item>GENERIC</item>
+      <item>IF</item>
+      <item>IMPORT</item>
+<!--      <item>IN</item> -->
+      <item>INTERFACE</item>
+      <item>LOCK</item>
+      <item>LOOP</item>
+      <item>METHODS</item>
+<!--      <item>MOD</item> -->
+      <item>MODULE</item>
+<!--      <item>NOT</item> -->
+      <item>OBJECT</item>
+      <item>OF</item>
+<!--      <item>OR</item> -->
+      <item>OVERRIDES</item>
+      <item>PROCEDURE</item>
+      <item>RAISE</item>
+      <item>RAISES</item>
+      <item>READONLY</item>
+      <item>RECORD</item>
+      <item>REF</item>
+      <item>REPEAT</item>
+      <item>RETURN</item>
+      <item>REVEAL</item>
+      <item>ROOT</item>
+      <item>SET</item>
+      <item>THEN</item>
+      <item>TO</item>
+      <item>TRY</item>
+      <item>TYPE</item>
+      <item>TYPECASE</item>
+      <item>UNSAFE</item>
+      <item>UNTIL</item>
+      <item>UNTRACED</item>
+      <item>VALUE</item>
+      <item>VAR</item>
+      <item>WHILE</item>
+      <item>WITH</item>
     </list>
     <list name="operators">
-      <item> AND </item> 
-      <item> DIV </item> 
-      <item> IN </item> 
-      <item> MOD </item>
-      <item> NOT </item>
-      <item> OR </item>
-      <item> + </item>
-      <item> &lt; </item>
-      <item> # </item>
-      <item> = </item>
-      <item> ; </item>
-      <item> .. </item>
-      <item> : </item>
-      <item> - </item>
-      <item> &gt; </item>
-      <item> { </item>
-      <item> } </item>
-      <item> | </item>
-      <item> := </item>
-      <item> &lt;: </item>
-      <item> * </item>
-      <item> &lt;= </item>
-      <item> ( </item>
-      <item> ) </item>
-      <item> ^ </item>
-      <item> , </item>
-      <item> =&gt; </item>
-      <item> / </item>
-      <item> &gt;= </item>
-      <item> [ </item>
-      <item> ] </item>
-      <item> . </item>
-      <item> &amp; </item>
+      <item>AND</item>
+      <item>DIV</item>
+      <item>IN</item>
+      <item>MOD</item>
+      <item>NOT</item>
+      <item>OR</item>
+      <item>+</item>
+      <item>&lt;</item>
+      <item>#</item>
+      <item>=</item>
+      <item>;</item>
+      <item>..</item>
+      <item>:</item>
+      <item>-</item>
+      <item>&gt;</item>
+      <item>{</item>
+      <item>}</item>
+      <item>|</item>
+      <item>:=</item>
+      <item>&lt;:</item>
+      <item>*</item>
+      <item>&lt;=</item>
+      <item>(</item>
+      <item>)</item>
+      <item>^</item>
+      <item>,</item>
+      <item>=&gt;</item>
+      <item>/</item>
+      <item>&gt;=</item>
+      <item>[</item>
+      <item>]</item>
+      <item>.</item>
+      <item>&amp;</item>
     </list>
     <list name="types">
-      <item> ADDRESS </item>
-      <item> BOOLEAN </item>
-      <item> CARDINAL </item>
-      <item> CHAR </item>
-      <item> EXTENDED </item>
-      <item> INTEGER </item>
-      <item> LONGREAL </item>
-      <item> MUTEX </item>
-      <item> NULL </item>
-      <item> REAL </item>
-      <item> REFANY </item>
-      <item> T </item>
-      <item> TEXT </item>
+      <item>ADDRESS</item>
+      <item>BOOLEAN</item>
+      <item>CARDINAL</item>
+      <item>CHAR</item>
+      <item>EXTENDED</item>
+      <item>INTEGER</item>
+      <item>LONGREAL</item>
+      <item>MUTEX</item>
+      <item>NULL</item>
+      <item>REAL</item>
+      <item>REFANY</item>
+      <item>T</item>
+      <item>TEXT</item>
     </list>
     <list name="constants">
-      <item> FALSE </item>
-      <item> NIL </item>
-      <item> TRUE </item>
+      <item>FALSE</item>
+      <item>NIL</item>
+      <item>TRUE</item>
     </list>
     <list name="pervasives">
-      <item> ABS </item>
-      <item> ADR </item>
-      <item> ADRSIZE </item>
-      <item> BITSIZE </item>
-      <item> BYTESIZE </item>
-      <item> CEILING </item>
-      <item> DEC </item>
-      <item> DISPOSE </item>
-      <item> FIRST </item>
-      <item> FLOAT </item>
-      <item> FLOOR </item>
-      <item> INC </item>
-      <item> ISTYPE </item>
-      <item> LAST </item>
-      <item> LOOPHOLE </item>
-      <item> MAX </item>
-      <item> MIN </item>
-      <item> NARROW </item>
-      <item> NEW </item>
-      <item> NUMBER </item>
-      <item> ORD </item>
-      <item> ROUND </item>
-      <item> SUBARRAY </item>
-      <item> TRUNC </item>
-      <item> TYPECODE </item>
-      <item> VAL </item>
+      <item>ABS</item>
+      <item>ADR</item>
+      <item>ADRSIZE</item>
+      <item>BITSIZE</item>
+      <item>BYTESIZE</item>
+      <item>CEILING</item>
+      <item>DEC</item>
+      <item>DISPOSE</item>
+      <item>FIRST</item>
+      <item>FLOAT</item>
+      <item>FLOOR</item>
+      <item>INC</item>
+      <item>ISTYPE</item>
+      <item>LAST</item>
+      <item>LOOPHOLE</item>
+      <item>MAX</item>
+      <item>MIN</item>
+      <item>NARROW</item>
+      <item>NEW</item>
+      <item>NUMBER</item>
+      <item>ORD</item>
+      <item>ROUND</item>
+      <item>SUBARRAY</item>
+      <item>TRUNC</item>
+      <item>TYPECODE</item>
+      <item>VAL</item>
     </list>
     <list name="stdlibs">
-      <item> Text </item>
-      <item> Text.Length </item>
-      <item> Text.Empty </item>
-      <item> Text.Equal </item>
-      <item> Text.Compare </item>
-      <item> Text.Cat </item>
-      <item> Text.Sub </item>
-      <item> Text.Hash </item>
-      <item> Text.HasWideChar </item>
-      <item> Text.GetChar </item>
-      <item> Text.GetWideChar </item>
-      <item> Text.SetChars </item>
-      <item> Text.SetWideChars </item>
-      <item> Text.FromChars </item>
-      <item> Text.FromWideChars </item>
-      <item> Text.FindChar </item>
-      <item> Text.FindWideChar </item>
-      <item> Text.FindCharR </item>
-      <item> Text.FindWideCharR </item>
-      <item> Fmt </item>
-      <item> Fmt.Bool </item>
-      <item> Fmt.Char </item>
-      <item> Fmt.Int </item>
-      <item> Fmt.Unsigned </item>
-      <item> Fmt.Real </item>
-      <item> Fmt.LongReal </item>
-      <item> Fmt.Extended </item>
-      <item> Fmt.Pad </item>
-      <item> Fmt.F </item>
-      <item> Fmt.FN </item>
-      <item> Scan </item>
-      <item> Scan.Bool </item>
-      <item> Scan.Int </item>
-      <item> Scan.Unsigned </item>
-      <item> Scan.Real </item>
-      <item> Scan.LongReal </item>
-      <item> Scan.Extended </item>
-      <item> IO </item>
-      <item> IO.Put </item>
-      <item> IO.PutChar </item>
-      <item> IO.PutWideChar </item>
-      <item> IO.PutInt </item>
-      <item> IO.PutReal </item>
-      <item> IO.EOF </item>
-      <item> IO.GetLine </item>
-      <item> IO.GetChar </item>
-      <item> IO.GetWideChar </item>
-      <item> IO.GetInt </item>
-      <item> IO.GetReal </item>
-      <item> IO.OpenRead </item>
-      <item> IO.OpenWrite </item>
-      <item> Rd </item>
-      <item> Rd.GetChar </item>
-      <item> Rd.GetWideChar </item>
-      <item> Rd.EOF </item>
-      <item> Rd.UnGetChar </item>
-      <item> Rd.CharsReady </item>
-      <item> Rd.GetSub </item>
-      <item> Rd.GetWideSub </item>
-      <item> Rd.GetSubLine </item>
-      <item> Rd.GetWideSubLine </item>
-      <item> Rd.GetText </item>
-      <item> Rd.GetWideText </item>
-      <item> Rd.GetLine </item>
-      <item> Rd.GetWideLine </item>
-      <item> Rd.Seek </item>
-      <item> Rd.Close </item>
-      <item> Rd.Index </item>
-      <item> Rd.Length </item>
-      <item> Rd.Intermittend </item>
-      <item> Rd.Seekable </item>
-      <item> Rd.Closed </item>
-      <item> Wr </item>
-      <item> Wr.PutChar </item>
-      <item> Wr.PutWideChar </item>
-      <item> Wr.PutText </item>
-      <item> Wr.PutWideText </item>
-      <item> Wr.PutString </item>
-      <item> Wr.PutWideString </item>
-      <item> Wr.Seek </item>
-      <item> Wr.Flush </item>
-      <item> Wr.Close </item>
-      <item> Wr.Length </item>
-      <item> Wr.Index </item>
-      <item> Wr.Seekable </item>
-      <item> Wr.Closed </item>
-      <item> Wr.Buffered </item>
-      <item> Lex </item>
-      <item> Lex.Scan </item>
-      <item> Lex.Skip </item>
-      <item> Lex.Match </item>
-      <item> Lex.Bool </item>
-      <item> Lex.Int </item>
-      <item> Lex.Unsigned </item>
-      <item> Lex.Real </item>
-      <item> Lex.LongReal </item>
-      <item> Lex.Extended </item>
-      <item> Params </item>
-      <item> Params.Count </item>
-      <item> Params.Get </item>
-      <item> Env </item>
-      <item> Env.Count </item>
-      <item> Env.Get </item>
-      <item> Env.GetNth </item>
+      <item>Text</item>
+      <item>Text.Length</item>
+      <item>Text.Empty</item>
+      <item>Text.Equal</item>
+      <item>Text.Compare</item>
+      <item>Text.Cat</item>
+      <item>Text.Sub</item>
+      <item>Text.Hash</item>
+      <item>Text.HasWideChar</item>
+      <item>Text.GetChar</item>
+      <item>Text.GetWideChar</item>
+      <item>Text.SetChars</item>
+      <item>Text.SetWideChars</item>
+      <item>Text.FromChars</item>
+      <item>Text.FromWideChars</item>
+      <item>Text.FindChar</item>
+      <item>Text.FindWideChar</item>
+      <item>Text.FindCharR</item>
+      <item>Text.FindWideCharR</item>
+      <item>Fmt</item>
+      <item>Fmt.Bool</item>
+      <item>Fmt.Char</item>
+      <item>Fmt.Int</item>
+      <item>Fmt.Unsigned</item>
+      <item>Fmt.Real</item>
+      <item>Fmt.LongReal</item>
+      <item>Fmt.Extended</item>
+      <item>Fmt.Pad</item>
+      <item>Fmt.F</item>
+      <item>Fmt.FN</item>
+      <item>Scan</item>
+      <item>Scan.Bool</item>
+      <item>Scan.Int</item>
+      <item>Scan.Unsigned</item>
+      <item>Scan.Real</item>
+      <item>Scan.LongReal</item>
+      <item>Scan.Extended</item>
+      <item>IO</item>
+      <item>IO.Put</item>
+      <item>IO.PutChar</item>
+      <item>IO.PutWideChar</item>
+      <item>IO.PutInt</item>
+      <item>IO.PutReal</item>
+      <item>IO.EOF</item>
+      <item>IO.GetLine</item>
+      <item>IO.GetChar</item>
+      <item>IO.GetWideChar</item>
+      <item>IO.GetInt</item>
+      <item>IO.GetReal</item>
+      <item>IO.OpenRead</item>
+      <item>IO.OpenWrite</item>
+      <item>Rd</item>
+      <item>Rd.GetChar</item>
+      <item>Rd.GetWideChar</item>
+      <item>Rd.EOF</item>
+      <item>Rd.UnGetChar</item>
+      <item>Rd.CharsReady</item>
+      <item>Rd.GetSub</item>
+      <item>Rd.GetWideSub</item>
+      <item>Rd.GetSubLine</item>
+      <item>Rd.GetWideSubLine</item>
+      <item>Rd.GetText</item>
+      <item>Rd.GetWideText</item>
+      <item>Rd.GetLine</item>
+      <item>Rd.GetWideLine</item>
+      <item>Rd.Seek</item>
+      <item>Rd.Close</item>
+      <item>Rd.Index</item>
+      <item>Rd.Length</item>
+      <item>Rd.Intermittend</item>
+      <item>Rd.Seekable</item>
+      <item>Rd.Closed</item>
+      <item>Wr</item>
+      <item>Wr.PutChar</item>
+      <item>Wr.PutWideChar</item>
+      <item>Wr.PutText</item>
+      <item>Wr.PutWideText</item>
+      <item>Wr.PutString</item>
+      <item>Wr.PutWideString</item>
+      <item>Wr.Seek</item>
+      <item>Wr.Flush</item>
+      <item>Wr.Close</item>
+      <item>Wr.Length</item>
+      <item>Wr.Index</item>
+      <item>Wr.Seekable</item>
+      <item>Wr.Closed</item>
+      <item>Wr.Buffered</item>
+      <item>Lex</item>
+      <item>Lex.Scan</item>
+      <item>Lex.Skip</item>
+      <item>Lex.Match</item>
+      <item>Lex.Bool</item>
+      <item>Lex.Int</item>
+      <item>Lex.Unsigned</item>
+      <item>Lex.Real</item>
+      <item>Lex.LongReal</item>
+      <item>Lex.Extended</item>
+      <item>Params</item>
+      <item>Params.Count</item>
+      <item>Params.Get</item>
+      <item>Env</item>
+      <item>Env.Count</item>
+      <item>Env.Get</item>
+      <item>Env.GetNth</item>
     </list>
     <contexts>
       <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
@@ -285,6 +285,9 @@
       <context attribute="Comment" lineEndContext="#stay" name="Comment2">
         <Detect2Chars attribute="Comment" context="Comment2" char="(" char1="*" beginRegion="Comment"/>
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1=")" endRegion="Comment"/>
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
       <context attribute="Pragma" lineEndContext="#stay" name="Prep1">
         <Detect2Chars attribute="Pragma" context="#pop" char="*" char1="&gt;"/>
@@ -309,7 +312,8 @@
   <general>
     <keywords casesensitive="1" weakDeliminator="."/>
     <comments>
-      <comment name="multiLine" start="(*" end="*)"/>
+      <comment name="multiLine" start="(*" end="*)" region="Comment"/>
     </comments>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/monobasic.xml b/syntax/monobasic.xml
--- a/syntax/monobasic.xml
+++ b/syntax/monobasic.xml
@@ -10,7 +10,7 @@
     License: GNU General Public License
 -->
 
-<language name="MonoBasic" section="Sources" version="3" kateversion="2.3" extensions="*.vb" mimetype="" author="Davide Bettio (davide.bettio@kdemail.net)" license="GPL">
+<language name="MonoBasic" section="Sources" version="4" kateversion="2.3" extensions="*.vb" mimetype="" author="Davide Bettio (davide.bettio@kdemail.net)" license="GPL">
   <highlighting>
      <list name="keywords">
         <item>Option</item>
@@ -192,7 +192,11 @@
          <DetectChar attribute="String" context="#pop" char="&quot;"/>
       </context>
 
-      <context name="Comment" attribute="Comment" lineEndContext="#pop"/>
+      <context name="Comment" attribute="Comment" lineEndContext="#pop">
+         <DetectSpaces />
+         <IncludeRules context="##Alerts"/>
+         <IncludeRules context="##Modelines"/>
+      </context>
     </contexts>
 
     <itemDatas>
diff --git a/syntax/mustache.xml b/syntax/mustache.xml
--- a/syntax/mustache.xml
+++ b/syntax/mustache.xml
@@ -36,13 +36,14 @@
     (via IncludeRules) in the HTML highlighter.
 
     Change log:
+     * v5 [2020-08-15]: Use Handlebars comment en the <comments> group.
      * v3 [2019-10-03]: Minor fixes.
      * v2 [2019-02-24]: Also highlight template files (HTML).
                         Improve support for Handlebars.
      * v1 [2019-02-10]: Initial version
 -->
 
-<language name="Mustache/Handlebars (HTML)" version="3" kateversion="5.44"
+<language name="Mustache/Handlebars (HTML)" version="5" kateversion="5.44"
           section="Markup" priority="1" mimetype=""
           extensions="*.mustache;*.handlebars;*.hbs;*.ractive;*.hogan;*.hulk;*.html.mst;*.html.mu;*.html.rac"
           author="Nibaldo González (nibgonz@gmail.com), based on the HTML highlighter by Wilbert Berendsen (wilbert@kde.nl)"
@@ -84,15 +85,15 @@
 			<RegExpr context="#pop!MustacheRawBlockContent" attribute="Mustache Block" String="\{{4}[^/].*\}{4}" minimal="true" beginRegion="HandlebarsRawBlock" />
 			<!-- Sections -->
 			<!-- For helpers (not included because it's redundant):
-			       Start: \{\{~?#?\s*(?=(if|unless|with|link\-to|each(\-in)?)\b)
-			       End:   \{\{~?/\s*(?=(if|unless|with|link\-to|each(\-in)?)\b)  -->
+			       Start: \{\{~?#?\s*(?=(?:if|unless|with|link\-to|each(?:\-in)?)\b)
+			       End:   \{\{~?/\s*(?=(?:if|unless|with|link\-to|each(?:\-in)?)\b)  -->
 			<RegExpr context="#pop!MustacheVariableBlock" attribute="Mustache Block" String="\{\{~?\s*else(?:\s+(?:if|unless|with|link\-to|each(?:\-in)?))?\b" />
 			<RegExpr context="#pop!MustacheVariableBlock" attribute="Mustache Block" String="\{\{~?[#\^][&gt;\*]?\s*&identifier;\b" beginRegion="MustacheBlock" />
 			<RegExpr context="#pop" attribute="Mustache Block" String="\{\{~?/\s*&identifier;\s*\}\}" endRegion="MustacheBlock" />
 			<RegExpr context="#pop!MustacheVariableBlockEndFolding" attribute="Mustache Block" String="\{\{~?/\s*&identifier;\b" />
 			<RegExpr context="#pop!MustacheVariableBlock" attribute="Mustache Block" String="\{\{~?[#\^/]" />
 			<!-- Comments -->
-			<StringDetect context="#pop!MustacheBlockComment" attribute="Comment" String="{{!--" beginRegion="MustacheBlockComment" /> <!-- Handlebars -->
+			<StringDetect context="#pop!HandlebarsInlineComment" attribute="Comment" String="{{!--" beginRegion="HandlebarsInlineComment" /> <!-- Handlebars -->
 			<StringDetect context="#pop!MustacheInlineComment" attribute="Comment" String="{{!" beginRegion="MustacheInlineComment" />
 			<!-- Variables -->
 			<StringDetect context="#pop!MustachePartial" attribute="Mustache Variable" String="{{&lt;" />
@@ -161,13 +162,17 @@
 			<RegExpr context="#pop" attribute="Number" String="\d+(?=[\s\}\)\]]|$)" />
 		</context>
 
-		<context name="MustacheBlockComment" attribute="Comment" lineEndContext="#stay">
-			<StringDetect context="#pop" attribute="Comment" String="--}}" endRegion="MustacheBlockComment" />
+		<context name="HandlebarsInlineComment" attribute="Comment" lineEndContext="#stay">
+			<StringDetect context="#pop" attribute="Comment" String="--}}" endRegion="HandlebarsInlineComment" />
+			<DetectSpaces />
 			<IncludeRules context="##Alerts" />
+			<IncludeRules context="##Modelines" />
 		</context>
 		<context name="MustacheInlineComment" attribute="Comment" lineEndContext="#stay">
 			<Detect2Chars context="#pop" attribute="Comment" char="}" char1="}" endRegion="MustacheInlineComment" />
+			<DetectSpaces />
 			<IncludeRules context="##Alerts" />
+			<IncludeRules context="##Modelines" />
 		</context>
 
 		<!-- Tags -->
@@ -274,7 +279,9 @@
 			<StringDetect context="#pop" attribute="Comment" String="--&gt;" endRegion="Comment" />
 			<RegExpr context="#stay" attribute="Error" String="-(?:-(?!-&gt;))+" />
 			<IncludeRules context="MustacheVariables" />
+			<DetectSpaces />
 			<IncludeRules context="##Alerts" />
+			<IncludeRules context="##Modelines" />
 		</context>
 
 		<context name="FindPEntityRefs" attribute="Normal Text" lineEndContext="#stay">
@@ -380,6 +387,8 @@
 		</context>
 		<context name="JSCommentClose" attribute="Comment" lineEndContext="#pop">
 			<RegExpr context="#pop#pop!ElementTagEnd" attribute="Element Tag" String="&lt;/script\b" insensitive="true" endRegion="script" />
+			<DetectSpaces />
+			<IncludeRules context="##Alerts" />
 		</context>
 
 		<!-- Overwrite some rules of 'javascript.xml' to add Mustache variables -->
@@ -463,7 +472,7 @@
 
 <general>
 	<comments>
-		<comment name="multiLine" start="{{!" end="}}" />
+		<comment name="multiLine" start="{{!--" end="--}}" region="HandlebarsInlineComment" />
 	</comments>
 </general>
 
diff --git a/syntax/nasm.xml b/syntax/nasm.xml
--- a/syntax/nasm.xml
+++ b/syntax/nasm.xml
@@ -1,892 +1,2782 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE language SYSTEM "language.dtd">
-<!--
-  NASM Intel x86 assembly syntax
-
-  Created: Nicola Gigante <nicola.gigante@gmail.com>
-    Changes: Bogdan Drozdowski (bogdandr@op.pl)
-  Version: 1.3
-             Lyle Putnam (lcputnam@gmail.com)
-  Version: 1.4
-
-Changes from 1.0:
-  15/01/2006: version 1.1
-    Added the rol instruction (bytewise rotate left) to the keywords list.
-  17/01/2006: version 1.2
-    Remade the list of instructions directly from the nasm documentation.
-  22/04/2006: version 1.3 from Bogdan Drozdowski (bogdandr@op.pl):
-    Removed duplicates form the instruction list and made it alphabetical.
-    Added new instructions (some SSE* and 64-bit, NASM may not know all of them).
-    Corrections in register list and a few new ones (not 64-bit).
-    Changed regexes for hex, octal and bin numbers. Now words like
-      "change" and "blah" will NOT have the "ch" and "ah" coloured.
-  24/07/2011: Version 1.4 from Lyle Putnam (lcputnam@gmail.com):
-    The above change to fix the regex for hex numbers was incorrect on Kate
-    3.6.2. Fixed.
-
-  GNU GENERAL PUBLIC LICENCE
-
-This program, including associated files, is free software.  You may
-distribute it and/or modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either Version 2 of
-the license, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License along
-with this program; if not, write to the Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
--->
-<language name="Intel x86 (NASM)" section="Assembler" version="3" kateversion="2.3" extensions="*.asm" mimetype="" author="Nicola Gigante (nicola.gigante@gmail.com)" license="GPLv2+">
-  <highlighting>
-    <list name="registers">
-      <!-- General purpose registers -->
-      <item>eax</item>
-      <item>ax</item>
-      <item>ah</item>
-      <item>al</item>
-      <item>ebx</item>
-      <item>bx</item>
-      <item>bh</item>
-      <item>bl</item>
-      <item>ecx</item>
-      <item>cx</item>
-      <item>ch</item>
-      <item>cl</item>
-      <item>edx</item>
-      <item>dx</item>
-      <item>dh</item>
-      <item>dl</item>
-      <item>ebp</item>
-      <item>bp</item>
-      <item>esi</item>
-      <item>si</item>
-      <item>edi</item>
-      <item>di</item>
-      <!--
-      <item>eip</item>
-      <item>ip</item>
-      -->
-      <item>esp</item>
-      <item>sp</item>
-      <!-- Segmentation registers -->
-      <item>cs</item>
-      <item>ds</item>
-      <item>es</item>
-      <item>fs</item>
-      <item>gs</item>
-      <item>ss</item>
-      <!-- Control registers -->
-      <item>cr0</item>
-      <!--<item>cr1</item>-->
-      <item>cr2</item>
-      <item>cr3</item>
-      <item>cr4</item>
-      <!-- Debug registers -->
-      <item>dr0</item>
-      <item>dr1</item>
-      <item>dr2</item>
-      <item>dr3</item>
-      <item>dr6</item>
-      <item>dr7</item>
-      <!-- x87 FPU Registers -->
-      <item>st</item>
-      <!-- MMX registers -->
-      <item>mm0</item>
-      <item>mm1</item>
-      <item>mm2</item>
-      <item>mm3</item>
-      <item>mm4</item>
-      <item>mm5</item>
-      <item>mm6</item>
-      <item>mm7</item>
-      <!-- XMM registers -->
-      <item>xmm0</item>
-      <item>xmm1</item>
-      <item>xmm2</item>
-      <item>xmm3</item>
-      <item>xmm4</item>
-      <item>xmm5</item>
-      <item>xmm6</item>
-      <item>xmm7</item>
-    </list>
-    <list name="instructions">
-      <item>aaa</item>
-      <item>aad</item>
-      <item>aam</item>
-      <item>aas</item>
-      <item>adc</item>
-      <item>add</item>
-      <item>addpd</item>
-      <item>addps</item>
-      <item>addsd</item>
-      <item>addss</item>
-      <item>addsubpd</item>
-      <item>addsubps</item>
-      <item>and</item>
-      <item>andnpd</item>
-      <item>andnps</item>
-      <item>andpd</item>
-      <item>andps</item>
-      <item>arpl</item>
-      <item>bound</item>
-      <item>bsf</item>
-      <item>bsr</item>
-      <item>bswap</item>
-      <item>bt</item>
-      <item>btc</item>
-      <item>btr</item>
-      <item>bts</item>
-      <item>call</item>
-      <item>cbw</item>
-      <item>cwde</item>
-      <item>cwd</item>
-      <item>cdq</item>
-      <item>cdqe</item>
-      <item>cqo</item>
-      <item>clc</item>
-      <item>cld</item>
-      <item>clgi</item>
-      <item>cli</item>
-      <item>clts</item>
-      <item>clflush</item>
-      <item>cmc</item>
-      <item>cmova</item>
-      <item>cmovae</item>
-      <item>cmovb</item>
-      <item>cmovbe</item>
-      <item>cmovc</item>
-      <item>cmove</item>
-      <item>cmovg</item>
-      <item>cmovge</item>
-      <item>cmovl</item>
-      <item>cmovle</item>
-      <item>cmovna</item>
-      <item>cmovnae</item>
-      <item>cmovnb</item>
-      <item>cmovnbe</item>
-      <item>cmovnc</item>
-      <item>cmovne</item>
-      <item>cmovng</item>
-      <item>cmovnge</item>
-      <item>cmovnl</item>
-      <item>cmovnle</item>
-      <item>cmovno</item>
-      <item>cmovnp</item>
-      <item>cmovns</item>
-      <item>cmovnz</item>
-      <item>cmovo</item>
-      <item>cmovp</item>
-      <item>cmovpe</item>
-      <item>cmovpo</item>
-      <item>cmovs</item>
-      <item>cmovz</item>
-      <item>cmp</item>
-      <item>cmpeqpd</item>
-      <item>cmpeqps</item>
-      <item>cmpeqsd</item>
-      <item>cmpeqss</item>
-      <item>cmplepd</item>
-      <item>cmpleps</item>
-      <item>cmplesd</item>
-      <item>cmpless</item>
-      <item>cmpltpd</item>
-      <item>cmpltps</item>
-      <item>cmpltsd</item>
-      <item>cmpltss</item>
-      <item>cmpneqpd</item>
-      <item>cmpneqps</item>
-      <item>cmpneqsd</item>
-      <item>cmpneqss</item>
-      <item>cmpnlepd</item>
-      <item>cmpnleps</item>
-      <item>cmpnlesd</item>
-      <item>cmpnless</item>
-      <item>cmpnltpd</item>
-      <item>cmpnltps</item>
-      <item>cmpnltsd</item>
-      <item>cmpnltss</item>
-      <item>cmpordpd</item>
-      <item>cmpordps</item>
-      <item>cmpordsd</item>
-      <item>cmpordss</item>
-      <item>cmppd</item>
-      <item>cmpps</item>
-      <item>cmps</item>
-      <item>cmpsb</item>
-      <item>cmpsd</item>
-      <item>cmpss</item>
-      <item>cmpsw</item>
-      <item>cmpunordpd</item>
-      <item>cmpunordps</item>
-      <item>cmpunordsd</item>
-      <item>cmpunordss</item>
-      <item>cmpxchg</item>
-      <item>cmpxchg486</item>
-      <item>cmpxchg8b</item>
-      <item>cmpxchg16b</item>
-      <item>comisd</item>
-      <item>comiss</item>
-      <item>cpuid</item>
-      <item>cvtdq2pd</item>
-      <item>cvtdq2ps</item>
-      <item>cvtpd2dq</item>
-      <item>cvtpd2pi</item>
-      <item>cvtpd2ps</item>
-      <item>cvtpi2pd</item>
-      <item>cvtpi2ps</item>
-      <item>cvtps2dq</item>
-      <item>cvtps2pd</item>
-      <item>cvtps2pi</item>
-      <item>cvtsd2si</item>
-      <item>cvtsd2ss</item>
-      <item>cvtsi2sd</item>
-      <item>cvtsi2ss</item>
-      <item>cvtss2sd</item>
-      <item>cvtss2si</item>
-      <item>cvttpd2dq</item>
-      <item>cvttpd2pi</item>
-      <item>cvttps2dq</item>
-      <item>cvttps2pi</item>
-      <item>cvttsd2si</item>
-      <item>cvttss2si</item>
-      <item>daa</item>
-      <item>das</item>
-      <item>dec</item>
-      <item>div</item>
-      <item>divpd</item>
-      <item>divps</item>
-      <item>divsd</item>
-      <item>divss</item>
-      <item>emms</item>
-      <item>enter</item>
-      <item>f2xm1</item>
-      <item>fabs</item>
-      <item>fadd</item>
-      <item>faddp</item>
-      <item>fbld</item>
-      <item>fbstp</item>
-      <item>fchs</item>
-      <item>fclex</item>
-      <item>fnclex</item>
-      <item>fcmovb</item>
-      <item>fcmovbe</item>
-      <item>fcmove</item>
-      <item>fcmovnb</item>
-      <item>fcmovnbe</item>
-      <item>fcmovne</item>
-      <item>fcmovnu</item>
-      <item>fcmovu</item>
-      <item>fcom</item>
-      <item>fcomp</item>
-      <item>fcompp</item>
-      <item>fcomi</item>
-      <item>fcomip</item>
-      <item>fcos</item>
-      <item>fdecstp</item>
-      <item>fdisi</item>
-      <item>feni</item>
-      <item>fdiv</item>
-      <item>fdivr</item>
-      <item>fdivp</item>
-      <item>fdivrp</item>
-      <item>femms</item>
-      <item>ffree</item>
-      <item>ffreep</item>
-      <item>fiadd</item>
-      <item>ficom</item>
-      <item>ficomp</item>
-      <item>fidiv</item>
-      <item>fidivr</item>
-      <item>fild</item>
-      <item>fimul</item>
-      <item>fincstp</item>
-      <item>finit</item>
-      <item>fist</item>
-      <item>fistp</item>
-      <item>fisttp</item>
-      <item>fisub</item>
-      <item>fisubr</item>
-      <item>fld</item>
-      <item>fld1</item>
-      <item>fldl2e</item>
-      <item>fldl2t</item>
-      <item>fldlg2</item>
-      <item>fldln2</item>
-      <item>fldcw</item>
-      <item>fldenv</item>
-      <item>fldpi</item>
-      <item>fldz</item>
-      <item>fmul</item>
-      <item>fmulp</item>
-      <item>fndisi</item>
-      <item>fneni</item>
-      <item>fninit</item>
-      <item>fnop</item>
-      <item>fnsave</item>
-      <item>fnstcw</item>
-      <item>fnstenv</item>
-      <item>fnstsw</item>
-      <item>fnwait</item>
-      <item>fpatan</item>
-      <item>fptan</item>
-      <item>fprem</item>
-      <item>fprem1</item>
-      <item>frndint</item>
-      <item>frstor</item>
-      <item>fsave</item>
-      <item>fscale</item>
-      <item>fsetpm</item>
-      <item>fsin</item>
-      <item>fsincos</item>
-      <item>fsqrt</item>
-      <item>fst</item>
-      <item>fstp</item>
-      <item>fstcw</item>
-      <item>fstenv</item>
-      <item>fstsw</item>
-      <item>fsub</item>
-      <item>fsubr</item>
-      <item>fsubp</item>
-      <item>fsubrp</item>
-      <item>ftst</item>
-      <item>fucom</item>
-      <item>fucomp</item>
-      <item>fucompp</item>
-      <item>fucomi</item>
-      <item>fucomip</item>
-      <item>fwait</item>
-      <item>fxam</item>
-      <item>fxch</item>
-      <item>fxrstor</item>
-      <item>fxsave</item>
-      <item>fxtract</item>
-      <item>fyl2x</item>
-      <item>fyl2xp1</item>
-      <item>haddpd</item>
-      <item>haddps</item>
-      <item>hlt</item>
-      <item>hsubpd</item>
-      <item>hsubps</item>
-      <item>ibts</item>
-      <item>idiv</item>
-      <item>imul</item>
-      <item>in</item>
-      <item>inc</item>
-      <item>ins</item>
-      <item>insb</item>
-      <item>insd</item>
-      <item>insw</item>
-      <item>int</item>
-      <item>int1</item>
-      <item>int3</item>
-      <item>into</item>
-      <item>invd</item>
-      <item>invlpg</item>
-      <item>invlpga</item>
-      <item>iret</item>
-      <item>iretd</item>
-      <item>iretq</item>
-      <item>iretw</item>
-      <item>ja</item>
-      <item>jae</item>
-      <item>jb</item>
-      <item>jbe</item>
-      <item>jc</item>
-      <item>je</item>
-      <item>jg</item>
-      <item>jge</item>
-      <item>jl</item>
-      <item>jle</item>
-      <item>jna</item>
-      <item>jnae</item>
-      <item>jnb</item>
-      <item>jnbe</item>
-      <item>jnc</item>
-      <item>jne</item>
-      <item>jng</item>
-      <item>jnge</item>
-      <item>jnl</item>
-      <item>jnle</item>
-      <item>jno</item>
-      <item>jnp</item>
-      <item>jns</item>
-      <item>jnz</item>
-      <item>jo</item>
-      <item>jp</item>
-      <item>jpe</item>
-      <item>jpo</item>
-      <item>js</item>
-      <item>jz</item>
-      <item>jcxz</item>
-      <item>jecxz</item>
-      <item>jrcxz</item>
-      <item>jmp</item>
-      <item>lahf</item>
-      <item>lar</item>
-      <item>lddqu</item>
-      <item>ldmxcsr</item>
-      <item>lds</item>
-      <item>les</item>
-      <item>lea</item>
-      <item>leave</item>
-      <item>lfence</item>
-      <item>lfs</item>
-      <item>lgdt</item>
-      <item>lgs</item>
-      <item>lidt</item>
-      <item>lldt</item>
-      <item>lmsw</item>
-      <item>loadall</item>
-      <item>loadall286</item>
-      <item>lods</item>
-      <item>lodsb</item>
-      <item>lodsd</item>
-      <item>lodsq</item>
-      <item>lodsw</item>
-      <item>loop</item>
-      <item>loope</item>
-      <item>loopne</item>
-      <item>loopnz</item>
-      <item>loopz</item>
-      <item>lsl</item>
-      <item>lss</item>
-      <item>ltr</item>
-      <item>maskmovdqu</item>
-      <item>maskmovq</item>
-      <item>maxpd</item>
-      <item>maxps</item>
-      <item>maxsd</item>
-      <item>maxss</item>
-      <item>mfence</item>
-      <item>minpd</item>
-      <item>minps</item>
-      <item>minsd</item>
-      <item>minss</item>
-      <item>monitor</item>
-      <item>mov</item>
-      <item>movapd</item>
-      <item>movaps</item>
-      <item>movd</item>
-      <item>movddup</item>
-      <item>movdq2q</item>
-      <item>movdqa</item>
-      <item>movdqu</item>
-      <item>movhlps</item>
-      <item>movhpd</item>
-      <item>movhps</item>
-      <item>movlhps</item>
-      <item>movlpd</item>
-      <item>movlps</item>
-      <item>movmskpd</item>
-      <item>movmskps</item>
-      <item>movntdq</item>
-      <item>movnti</item>
-      <item>movntpd</item>
-      <item>movntps</item>
-      <item>movntq</item>
-      <item>movq</item>
-      <item>movq2dq</item>
-      <item>movs</item>
-      <item>movsb</item>
-      <item>movsd</item>
-      <item>movshdup</item>
-      <item>movsldup</item>
-      <item>movsq</item>
-      <item>movss</item>
-      <item>movsx</item>
-      <item>movsxd</item>
-      <item>movsw</item>
-      <item>movupd</item>
-      <item>movups</item>
-      <item>movzx</item>
-      <item>mul</item>
-      <item>mulpd</item>
-      <item>mulps</item>
-      <item>mulsd</item>
-      <item>mulss</item>
-      <item>mwait</item>
-      <item>neg</item>
-      <item>nop</item>
-      <item>not</item>
-      <item>or</item>
-      <item>orpd</item>
-      <item>orps</item>
-      <item>out</item>
-      <item>outs</item>
-      <item>outsb</item>
-      <item>outsw</item>
-      <item>outsd</item>
-      <item>packssdw</item>
-      <item>packsswb</item>
-      <item>packuswb</item>
-      <item>paddb</item>
-      <item>paddd</item>
-      <item>paddq</item>
-      <item>paddsb</item>
-      <item>paddsw</item>
-      <item>paddusb</item>
-      <item>paddusw</item>
-      <item>paddw</item>
-      <item>pand</item>
-      <item>pandn</item>
-      <item>pause</item>
-      <item>pavgb</item>
-      <item>pavgusb</item>
-      <item>pavgw</item>
-      <item>pcmpeqb</item>
-      <item>pcmpeqw</item>
-      <item>pcmpeqd</item>
-      <item>pcmpgtb</item>
-      <item>pcmpgtw</item>
-      <item>pcmpgtd</item>
-      <item>pdistib</item>
-      <item>pextrw</item>
-      <item>pf2id</item>
-      <item>pf2iw</item>
-      <item>pfacc</item>
-      <item>pfadd</item>
-      <item>pfcmpeq</item>
-      <item>pfcmpge</item>
-      <item>pfcmpgt</item>
-      <item>pfmax</item>
-      <item>pfmin</item>
-      <item>pfmul</item>
-      <item>pfnacc</item>
-      <item>pfpnacc</item>
-      <item>pfrcp</item>
-      <item>pfrcpit1</item>
-      <item>pfrcpit2</item>
-      <item>pfrsqit1</item>
-      <item>pfrsqrt</item>
-      <item>pfsub</item>
-      <item>pfsubr</item>
-      <item>pi2fd</item>
-      <item>pi2fw</item>
-      <item>pinsrw</item>
-      <item>pmachriw</item>
-      <item>pmaddwd</item>
-      <item>pmagw</item>
-      <item>pmaxsw</item>
-      <item>pmaxub</item>
-      <item>pminsw</item>
-      <item>pminub</item>
-      <item>pmovmskb</item>
-      <item>pmulhrw</item>
-      <item>pmulhuw</item>
-      <item>pmulhw</item>
-      <item>pmullw</item>
-      <item>pmuludq</item>
-      <item>pmvgezb</item>
-      <item>pmvlzb</item>
-      <item>pmvnzb</item>
-      <item>pmvzb</item>
-      <item>pop</item>
-      <item>popa</item>
-      <item>popaw</item>
-      <item>popad</item>
-      <item>popf</item>
-      <item>popfw</item>
-      <item>popfd</item>
-      <item>popfq</item>
-      <item>por</item>
-      <item>prefetch</item>
-      <item>prefetchnta</item>
-      <item>prefetcht0</item>
-      <item>prefetcht1</item>
-      <item>prefetcht2</item>
-      <item>prefetchw</item>
-      <item>psadbw</item>
-      <item>pshufd</item>
-      <item>pshufhw</item>
-      <item>pshuflw</item>
-      <item>pshufw</item>
-      <item>pslld</item>
-      <item>pslldq</item>
-      <item>psllq</item>
-      <item>psllw</item>
-      <item>psrad</item>
-      <item>psraw</item>
-      <item>psrld</item>
-      <item>psrldq</item>
-      <item>psrlq</item>
-      <item>psrlw</item>
-      <item>psubb</item>
-      <item>psubd</item>
-      <item>psubq</item>
-      <item>psubsb</item>
-      <item>psubsiw</item>
-      <item>psubsw</item>
-      <item>psubusb</item>
-      <item>psubusw</item>
-      <item>psubw</item>
-      <item>pswapd</item>
-      <item>punpckhbw</item>
-      <item>punpckhdq</item>
-      <item>punpckhqdq</item>
-      <item>punpckhwd</item>
-      <item>punpcklbw</item>
-      <item>punpckldq</item>
-      <item>punpcklqdq</item>
-      <item>punpcklwd</item>
-      <item>push</item>
-      <item>pusha</item>
-      <item>pushad</item>
-      <item>pushaw</item>
-      <item>pushf</item>
-      <item>pushfd</item>
-      <item>pushfq</item>
-      <item>pushfw</item>
-      <item>pxor</item>
-      <item>rcl</item>
-      <item>rcr</item>
-      <item>rcpps</item>
-      <item>rcpss</item>
-      <item>rdmsr</item>
-      <item>rdpmc</item>
-      <item>rdshr</item>
-      <item>rdtsc</item>
-      <item>rdtscp</item>
-      <item>ret</item>
-      <item>retf</item>
-      <item>retn</item>
-      <item>rol</item>
-      <item>ror</item>
-      <item>rsdc</item>
-      <item>rsldt</item>
-      <item>rsm</item>
-      <item>rsqrtps</item>
-      <item>rsqrtss</item>
-      <item>rsts</item>
-      <item>sahf</item>
-      <item>sal</item>
-      <item>sar</item>
-      <item>salc</item>
-      <item>sbb</item>
-      <item>scas</item>
-      <item>scasb</item>
-      <item>scasd</item>
-      <item>scasq</item>
-      <item>scasw</item>
-      <item>seta</item>
-      <item>setae</item>
-      <item>setb</item>
-      <item>setbe</item>
-      <item>setc</item>
-      <item>sete</item>
-      <item>setg</item>
-      <item>setge</item>
-      <item>setl</item>
-      <item>setle</item>
-      <item>setna</item>
-      <item>setnae</item>
-      <item>setnb</item>
-      <item>setnbe</item>
-      <item>setnc</item>
-      <item>setne</item>
-      <item>setng</item>
-      <item>setnge</item>
-      <item>setnl</item>
-      <item>setnle</item>
-      <item>setno</item>
-      <item>setnp</item>
-      <item>setns</item>
-      <item>setnz</item>
-      <item>seto</item>
-      <item>setp</item>
-      <item>setpe</item>
-      <item>setpo</item>
-      <item>sets</item>
-      <item>setz</item>
-      <item>sfence</item>
-      <item>sgdt</item>
-      <item>shl</item>
-      <item>shld</item>
-      <item>shr</item>
-      <item>shrd</item>
-      <item>shufpd</item>
-      <item>shufps</item>
-      <item>sidt</item>
-      <item>skinit</item>
-      <item>sldt</item>
-      <item>smi</item>
-      <item>smint</item>
-      <item>smintold</item>
-      <item>smsw</item>
-      <item>sqrtpd</item>
-      <item>sqrtps</item>
-      <item>sqrtsd</item>
-      <item>sqrtss</item>
-      <item>stc</item>
-      <item>std</item>
-      <item>stgi</item>
-      <item>sti</item>
-      <item>stmxcsr</item>
-      <item>stos</item>
-      <item>stosb</item>
-      <item>stosd</item>
-      <item>stosq</item>
-      <item>stosw</item>
-      <item>str</item>
-      <item>sub</item>
-      <item>subpd</item>
-      <item>subps</item>
-      <item>subsd</item>
-      <item>subss</item>
-      <item>svdc</item>
-      <item>svldt</item>
-      <item>svts</item>
-      <item>swapgs</item>
-      <item>syscall</item>
-      <item>sysenter</item>
-      <item>sysexit</item>
-      <item>sysret</item>
-      <item>test</item>
-      <item>ucomisd</item>
-      <item>ucomiss</item>
-      <item>ud0</item>
-      <item>ud1</item>
-      <item>ud2</item>
-      <item>umov</item>
-      <item>unpckhpd</item>
-      <item>unpckhps</item>
-      <item>unpcklpd</item>
-      <item>unpcklps</item>
-      <item>verr</item>
-      <item>verw</item>
-      <item>vmload</item>
-      <item>vmmcall</item>
-      <item>vmrun</item>
-      <item>vmsave</item>
-      <item>wait</item>
-      <item>wbinvd</item>
-      <item>wrmsr</item>
-      <item>wrshr</item>
-      <item>xadd</item>
-      <item>xbts</item>
-      <item>xchg</item>
-      <item>xlat</item>
-      <item>xlatb</item>
-      <item>xor</item>
-      <item>xorpd</item>
-      <item>xorps</item>
-    </list>
-    <list name="Data">
-      <!-- repeat some data declaration -->
-      <item>times</item>
-      <!-- constants -->
-      <item>equ</item>
-      <!-- Initialized data -->
-      <item>db</item>
-      <item>dw</item>
-      <item>dd</item>
-      <item>dq</item>
-      <item>dt</item>
-      <!-- Uninitialized data -->
-      <item>resb</item>
-      <item>resw</item>
-      <item>resd</item>
-      <item>resq</item>
-      <item>rest</item>
-      <!-- binary file include -->
-      <item>incbin</item>
-      <!-- operand size -->
-      <item>byte</item>
-      <item>word</item>
-      <item>dword</item>
-      <item>qword</item>
-      <item>short</item>
-      <item>ptr</item>
-    </list>
-    <list name="NASM Keywords">
-      <!-- NASM directives -->
-      <item>absolute</item>
-      <item>bits</item>
-      <item>common</item>
-      <item>extern</item>
-      <item>global</item>
-      <item>org</item>
-      <item>section</item>
-      <item>seg</item>
-      <item>segment</item>
-      <item>strict</item>
-      <item>use16</item>
-      <item>use32</item>
-      <item>wrt</item>
-      <!-- NASM standard macros -->
-      <item>struc</item>
-      <item>endstruc</item>
-      <item>istruc</item>
-      <item>at</item>
-      <item>iend</item>
-      <item>align</item>
-      <item>alignb</item>
-
-      <item>__SECT__</item>
-      <item>__NASM_MAJOR__</item>
-      <item>__NASM_MINOR__</item>
-      <item>__NASM_SUBMINOR__</item>
-      <item>___NASM_PATCHLEVEL__</item>
-      <item>__NASM_VERSION_ID__</item>
-      <item>__NASM_VER__</item>
-      <item>__FILE__</item>
-      <item>__LINE__</item>
-    </list>
-    <contexts>
-      <context name="Normal" attribute="Normal Text" lineEndContext="#stay">
-        <keyword attribute="Registers" context="#stay" String="registers"/>
-        <keyword attribute="Data" context="#stay" String="Data"/>
-        <keyword attribute="Instructions" context="#stay" String="instructions"/>
-        <keyword attribute="NASM Keywords" context="#stay" String="NASM Keywords"/>
-        <DetectChar attribute="Comment" context="Comment" char=";"/>
-        <DetectChar attribute="Preprocessor" context="Preprocessor" char="%"/>
-        <AnyChar attribute="String" context="String" String="&quot;'"/>
-        <RegExpr attribute="Label" context="#stay" String="^\s*[A-Za-z0-9_.$]+:"/>
-        <!-- Conditional instructions -->
-        <RegExpr attribute="Instructions" context="#stay" String="(cmov|fcmov|j|loop|set)(a|ae|b|be|c|e|g|ge|l|le|na|nae|nb|nbe|nc|ne|ng|nge|nl|nle|no|np|ns|nz|o|p|pe|po|s|z)"/>
-        <!-- The NASM's CPU directive -->
-        <RegExpr attribute="NASM Keywords" context="#stay" String="cpu (pentium|ppro|p2|p3|katmai|p4|willamette|prescott|ia64)*"/>
-        <!-- hexadecimal numbers -->
-        <RegExpr attribute="BaseN" context="#stay" insensitive="true" String="(^|[ \t,]+)((\$|0x){1}[0-9]+[a-f0-9]*|[0-9]+[a-f0-9]*h)([ \t,]+|$)"/>
-        <!-- octal and binary numbers -->
-        <RegExpr attribute="BaseN" context="#stay" insensitive="true" String="(^|[ \t,]+)([0-7]+(q|o)|[01]+b)([ \t,]+|$)"/>
-        <DetectChar attribute="Number" context="#stay" char="$"/>
-        <HlCOct attribute="BaseN" context="#stay"/>
-        <HlCHex attribute="BaseN" context="#stay"/>
-        <Float attribute="Float" context="#stay"/>
-        <Int attribute="Number" context="#stay"/>
-        <HlCChar attribute="Char" context="#stay"/>
-      </context>
-      <context name="Comment" attribute="Comment" lineEndContext="#pop"/>
-      <context name="Preprocessor" attribute="Preprocessor" lineEndContext="#pop"/>
-      <context name="String" attribute="String" lineEndContext="#pop">
-        <AnyChar attribute="String" context="#pop" String="&quot;'"/>
-      </context>
-    </contexts>
-
-    <itemDatas>
-      <itemData name="Normal Text" defStyleNum="dsNormal"/>
-      <itemData name="Registers" defStyleNum="dsKeyword"/>
-      <itemData name="Instructions" defStyleNum="dsKeyword"/>
-      <itemData name="NASM Keywords" defStyleNum="dsKeyword"/>
-      <itemData name="Comment" defStyleNum="dsComment"/>
-      <itemData name="Label" defStyleNum="dsFunction"/>
-      <itemData name="Data" defStyleNum="dsDataType"/>
-      <itemData name="BaseN" defStyleNum="dsBaseN"/>
-      <itemData name="Float" defStyleNum="dsFloat"/>
-      <itemData name="Number" defStyleNum="dsDecVal"/>
-      <itemData name="Char" defStyleNum="dsChar"/>
-      <itemData name="String" defStyleNum="dsString"/>
-      <itemData name="Preprocessor" defStyleNum="dsOthers"/>
-    </itemDatas>
-  </highlighting>
-  <general>
-    <keywords casesensitive="0"/>
-    <comments>
-      <comment name="singleLine" start=";"/>
+<!DOCTYPE language SYSTEM "language.dtd"
+[
+    <!ENTITY float1 "0x[0-9a-f_]*+(?:(?:\.[0-9a-f_]*+)?p[-+]?[0-9_]++|\.[0-9a-f_]*+)">
+    <!ENTITY float2 "0++p([0-9][0-9_]*+)?">
+    <!ENTITY float3 "[0-9][0-9_]*+(?:\.(?!nolist)[0-9_]*+(?:e[-+]?[0-9_]*+)?|(?=p))">
+    <!ENTITY float "&float1;|&float2;|&float3;">
+
+    <!ENTITY prefixed16 "0[hx][0-9a-f_]++">
+    <!ENTITY prefixed8 "0[oq][0-7_]++">
+    <!ENTITY prefixed2 "0b[01_]++\b|0y[01_]++">
+    <!ENTITY prefixed10 "0d[0-9_]++\b|0t[0-9_]++">
+    <!ENTITY prefixedBaseN "&prefixed16;|&prefixed8;|&prefixed2;|&prefixed10;">
+
+    <!ENTITY hex_cont "[0-9a-f_]*+(?=[hx])">
+    <!ENTITY oct_hex_cont "[0-7_]*+(?:&hex_cont;|(?=[oqhx]))">
+    <!ENTITY hex "[0-9]&hex_cont;">
+    <!ENTITY oct_hex "[0-7]&oct_hex_cont;">
+    <!ENTITY bin_oct_hex "[01][01_]*+(?:&oct_hex_cont;|(?=[byoqhx]))">
+    <!ENTITY baseN "&bin_oct_hex;|&oct_hex;|&hex;">
+
+    <!ENTITY number "[0-9][0-9_]*+(to[0-9]+|(?=[dt]))?">
+]>
+<!--
+  NASM Intel x86 assembly syntax
+
+  Created: Nicola Gigante <nicola.gigante@gmail.com>
+    Changes: Bogdan Drozdowski (bogdandr@op.pl)
+  Version: 1.3
+             Lyle Putnam (lcputnam@gmail.com)
+  Version: 1.4
+
+Changes from 1.0:
+  15/01/2006: version 1.1
+    Added the rol instruction (bytewise rotate left) to the keywords list.
+  17/01/2006: version 1.2
+    Remade the list of instructions directly from the nasm documentation.
+  22/04/2006: version 1.3 from Bogdan Drozdowski (bogdandr@op.pl):
+    Removed duplicates form the instruction list and made it alphabetical.
+    Added new instructions (some SSE* and 64-bit, NASM may not know all of them).
+    Corrections in register list and a few new ones (not 64-bit).
+    Changed regexes for hex, octal and bin numbers. Now words like
+      "change" and "blah" will NOT have the "ch" and "ah" coloured.
+  24/07/2011: Version 1.4 from Lyle Putnam (lcputnam@gmail.com):
+    The above change to fix the regex for hex numbers was incorrect on Kate
+    3.6.2. Fixed.
+
+  GNU GENERAL PUBLIC LICENCE
+
+This program, including associated files, is free software.  You may
+distribute it and/or modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either Version 2 of
+the license, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+-->
+<language name="Intel x86 (NASM)" section="Assembler" version="6" kateversion="5.62" extensions="*.asm" mimetype="" author="Nicola Gigante (nicola.gigante@gmail.com)" license="GPLv2+">
+  <highlighting>
+    <list name="registers">
+      <!-- General purpose registers -->
+      <item>rax</item>
+      <item>eax</item>
+      <item>ax</item>
+      <item>ah</item>
+      <item>al</item>
+      <item>rbx</item>
+      <item>ebx</item>
+      <item>bx</item>
+      <item>bh</item>
+      <item>bl</item>
+      <item>rcx</item>
+      <item>ecx</item>
+      <item>cx</item>
+      <item>ch</item>
+      <item>cl</item>
+      <item>rdx</item>
+      <item>edx</item>
+      <item>dx</item>
+      <item>dh</item>
+      <item>dl</item>
+      <item>rbp</item>
+      <item>ebp</item>
+      <item>bp</item>
+      <item>bpl</item>
+      <item>rsi</item>
+      <item>esi</item>
+      <item>si</item>
+      <item>sil</item>
+      <item>rdi</item>
+      <item>edi</item>
+      <item>di</item>
+      <item>dil</item>
+
+      <item>rip</item>
+      <item>eip</item>
+      <item>ip</item>
+
+      <item>rsp</item>
+      <item>esp</item>
+      <item>sp</item>
+      <item>spl</item>
+      <item>r8</item>
+      <item>r8d</item>
+      <item>r8w</item>
+      <item>r8b</item>
+      <item>r9</item>
+      <item>r9d</item>
+      <item>r9w</item>
+      <item>r9b</item>
+      <item>r10</item>
+      <item>r10d</item>
+      <item>r10w</item>
+      <item>r10b</item>
+      <item>r11</item>
+      <item>r11d</item>
+      <item>r11w</item>
+      <item>r11b</item>
+      <item>r12</item>
+      <item>r12d</item>
+      <item>r12w</item>
+      <item>r12b</item>
+      <item>r13</item>
+      <item>r13d</item>
+      <item>r13w</item>
+      <item>r13b</item>
+      <item>r14</item>
+      <item>r14d</item>
+      <item>r14w</item>
+      <item>r14b</item>
+      <item>r15</item>
+      <item>r15d</item>
+      <item>r15w</item>
+      <item>r15b</item>
+      <!-- Segmentation registers -->
+      <item>cs</item>
+      <item>ds</item>
+      <item>es</item>
+      <item>fs</item>
+      <item>gs</item>
+      <item>ss</item>
+      <!-- Control registers -->
+      <item>cr0</item>
+      <!--<item>cr1</item>-->
+      <item>cr2</item>
+      <item>cr3</item>
+      <item>cr4</item>
+      <!-- Debug registers -->
+      <item>dr0</item>
+      <item>dr1</item>
+      <item>dr2</item>
+      <item>dr3</item>
+      <item>dr6</item>
+      <item>dr7</item>
+      <!-- x87 FPU Registers -->
+      <item>st</item>
+      <!-- MMX registers -->
+      <item>mm0</item>
+      <item>mm1</item>
+      <item>mm2</item>
+      <item>mm3</item>
+      <item>mm4</item>
+      <item>mm5</item>
+      <item>mm6</item>
+      <item>mm7</item>
+      <!-- XMM registers -->
+      <item>xmm0</item>
+      <item>xmm1</item>
+      <item>xmm2</item>
+      <item>xmm3</item>
+      <item>xmm4</item>
+      <item>xmm5</item>
+      <item>xmm6</item>
+      <item>xmm7</item>
+      <item>xmm8</item>
+      <item>xmm9</item>
+      <item>xmm10</item>
+      <item>xmm11</item>
+      <item>xmm12</item>
+      <item>xmm13</item>
+      <item>xmm14</item>
+      <item>xmm15</item>
+      <item>xmm16</item>
+      <item>xmm17</item>
+      <item>xmm18</item>
+      <item>xmm19</item>
+      <item>xmm20</item>
+      <item>xmm21</item>
+      <item>xmm22</item>
+      <item>xmm23</item>
+      <item>xmm24</item>
+      <item>xmm25</item>
+      <item>xmm26</item>
+      <item>xmm27</item>
+      <item>xmm28</item>
+      <item>xmm29</item>
+      <item>xmm30</item>
+      <item>xmm31</item>
+      <!-- YMM registers -->
+      <item>ymm0</item>
+      <item>ymm1</item>
+      <item>ymm2</item>
+      <item>ymm3</item>
+      <item>ymm4</item>
+      <item>ymm5</item>
+      <item>ymm6</item>
+      <item>ymm7</item>
+      <item>ymm8</item>
+      <item>ymm9</item>
+      <item>ymm10</item>
+      <item>ymm11</item>
+      <item>ymm12</item>
+      <item>ymm13</item>
+      <item>ymm14</item>
+      <item>ymm15</item>
+      <item>ymm16</item>
+      <item>ymm17</item>
+      <item>ymm18</item>
+      <item>ymm19</item>
+      <item>ymm20</item>
+      <item>ymm21</item>
+      <item>ymm22</item>
+      <item>ymm23</item>
+      <item>ymm24</item>
+      <item>ymm25</item>
+      <item>ymm26</item>
+      <item>ymm27</item>
+      <item>ymm28</item>
+      <item>ymm29</item>
+      <item>ymm30</item>
+      <item>ymm31</item>
+      <!-- ZMM registers -->
+      <item>zmm0</item>
+      <item>zmm1</item>
+      <item>zmm2</item>
+      <item>zmm3</item>
+      <item>zmm4</item>
+      <item>zmm5</item>
+      <item>zmm6</item>
+      <item>zmm7</item>
+      <item>zmm8</item>
+      <item>zmm9</item>
+      <item>zmm10</item>
+      <item>zmm11</item>
+      <item>zmm12</item>
+      <item>zmm13</item>
+      <item>zmm14</item>
+      <item>zmm15</item>
+      <item>zmm16</item>
+      <item>zmm17</item>
+      <item>zmm18</item>
+      <item>zmm19</item>
+      <item>zmm20</item>
+      <item>zmm21</item>
+      <item>zmm22</item>
+      <item>zmm23</item>
+      <item>zmm24</item>
+      <item>zmm25</item>
+      <item>zmm26</item>
+      <item>zmm27</item>
+      <item>zmm28</item>
+      <item>zmm29</item>
+      <item>zmm30</item>
+      <item>zmm31</item>
+    </list>
+
+    <list name="instructions">
+      <item>aaa</item>
+      <item>aad</item>
+      <item>aam</item>
+      <item>aas</item>
+      <item>adc</item>
+      <item>adcx</item>
+      <item>add</item>
+      <item>addpd</item>
+      <item>addps</item>
+      <item>addsd</item>
+      <item>addss</item>
+      <item>addsubpd</item>
+      <item>addsubps</item>
+      <item>adox</item>
+      <item>aesdec</item>
+      <item>aesdeclast</item>
+      <item>aesenc</item>
+      <item>aesenclast</item>
+      <item>aesimc</item>
+      <item>aeskeygenassist</item>
+      <item>and</item>
+      <item>andn</item>
+      <item>andnpd</item>
+      <item>andnps</item>
+      <item>andpd</item>
+      <item>andps</item>
+      <item>arpl</item>
+      <item>bb0_reset</item>
+      <item>bb1_reset</item>
+      <item>bextr</item>
+      <item>blcfill</item>
+      <item>blci</item>
+      <item>blcic</item>
+      <item>blcmsk</item>
+      <item>blcs</item>
+      <item>blendpd</item>
+      <item>blendps</item>
+      <item>blendvpd</item>
+      <item>blendvps</item>
+      <item>blsfill</item>
+      <item>blsi</item>
+      <item>blsic</item>
+      <item>blsmsk</item>
+      <item>blsr</item>
+      <item>bndcl</item>
+      <item>bndcn</item>
+      <item>bndcu</item>
+      <item>bndldx</item>
+      <item>bndmk</item>
+      <item>bndmov</item>
+      <item>bndstx</item>
+      <item>bound</item>
+      <item>bsf</item>
+      <item>bsr</item>
+      <item>bswap</item>
+      <item>bt</item>
+      <item>btc</item>
+      <item>btr</item>
+      <item>bts</item>
+      <item>bzhi</item>
+      <item>cbw</item>
+      <item>cdq</item>
+      <item>cdqe</item>
+      <item>clac</item>
+      <item>clc</item>
+      <item>cld</item>
+      <item>cldemote</item>
+      <item>clflush</item>
+      <item>clflushopt</item>
+      <item>clgi</item>
+      <item>cli</item>
+      <item>clrssbsy</item>
+      <item>clts</item>
+      <item>clwb</item>
+      <item>clzero</item>
+      <item>cmc</item>
+      <item>cmova</item>
+      <item>cmovae</item>
+      <item>cmovb</item>
+      <item>cmovbe</item>
+      <item>cmovc</item>
+      <item>cmove</item>
+      <item>cmovg</item>
+      <item>cmovge</item>
+      <item>cmovl</item>
+      <item>cmovle</item>
+      <item>cmovna</item>
+      <item>cmovnae</item>
+      <item>cmovnb</item>
+      <item>cmovnbe</item>
+      <item>cmovnc</item>
+      <item>cmovne</item>
+      <item>cmovng</item>
+      <item>cmovnge</item>
+      <item>cmovnl</item>
+      <item>cmovnle</item>
+      <item>cmovno</item>
+      <item>cmovnp</item>
+      <item>cmovns</item>
+      <item>cmovnz</item>
+      <item>cmovo</item>
+      <item>cmovp</item>
+      <item>cmovpe</item>
+      <item>cmovpo</item>
+      <item>cmovs</item>
+      <item>cmovz</item>
+      <item>cmp</item>
+      <item>cmpeqpd</item>
+      <item>cmpeqps</item>
+      <item>cmpeqsd</item>
+      <item>cmpeqss</item>
+      <item>cmplepd</item>
+      <item>cmpleps</item>
+      <item>cmplesd</item>
+      <item>cmpless</item>
+      <item>cmpltpd</item>
+      <item>cmpltps</item>
+      <item>cmpltsd</item>
+      <item>cmpltss</item>
+      <item>cmpneqpd</item>
+      <item>cmpneqps</item>
+      <item>cmpneqsd</item>
+      <item>cmpneqss</item>
+      <item>cmpnlepd</item>
+      <item>cmpnleps</item>
+      <item>cmpnlesd</item>
+      <item>cmpnless</item>
+      <item>cmpnltpd</item>
+      <item>cmpnltps</item>
+      <item>cmpnltsd</item>
+      <item>cmpnltss</item>
+      <item>cmpordpd</item>
+      <item>cmpordps</item>
+      <item>cmpordsd</item>
+      <item>cmpordss</item>
+      <item>cmppd</item>
+      <item>cmpps</item>
+      <item>cmpsb</item>
+      <item>cmpsd</item>
+      <item>cmpsq</item>
+      <item>cmpss</item>
+      <item>cmpsw</item>
+      <item>cmpunordpd</item>
+      <item>cmpunordps</item>
+      <item>cmpunordsd</item>
+      <item>cmpunordss</item>
+      <item>cmpxchg</item>
+      <item>cmpxchg16b</item>
+      <item>cmpxchg486</item>
+      <item>cmpxchg8b</item>
+      <item>comisd</item>
+      <item>comiss</item>
+      <item>cpuid</item>
+      <item>cpu_read</item>
+      <item>cpu_write</item>
+      <item>cqo</item>
+      <item>crc32</item>
+      <item>cvtdq2pd</item>
+      <item>cvtdq2ps</item>
+      <item>cvtpd2dq</item>
+      <item>cvtpd2pi</item>
+      <item>cvtpd2ps</item>
+      <item>cvtpi2pd</item>
+      <item>cvtpi2ps</item>
+      <item>cvtps2dq</item>
+      <item>cvtps2pd</item>
+      <item>cvtps2pi</item>
+      <item>cvtsd2si</item>
+      <item>cvtsd2ss</item>
+      <item>cvtsi2sd</item>
+      <item>cvtsi2ss</item>
+      <item>cvtss2sd</item>
+      <item>cvtss2si</item>
+      <item>cvttpd2dq</item>
+      <item>cvttpd2pi</item>
+      <item>cvttps2dq</item>
+      <item>cvttps2pi</item>
+      <item>cvttsd2si</item>
+      <item>cvttss2si</item>
+      <item>cwd</item>
+      <item>cwde</item>
+      <item>daa</item>
+      <item>das</item>
+      <item>dec</item>
+      <item>div</item>
+      <item>divpd</item>
+      <item>divps</item>
+      <item>divsd</item>
+      <item>divss</item>
+      <item>dmint</item>
+      <item>dppd</item>
+      <item>dpps</item>
+      <item>emms</item>
+      <item>encls</item>
+      <item>enclu</item>
+      <item>enclv</item>
+      <item>endbr32</item>
+      <item>endbr64</item>
+      <item>enqcmd</item>
+      <item>enqcmds</item>
+      <item>enter</item>
+      <item>extractps</item>
+      <item>extrq</item>
+      <item>f2xm1</item>
+      <item>fabs</item>
+      <item>fadd</item>
+      <item>faddp</item>
+      <item>fbld</item>
+      <item>fbstp</item>
+      <item>fchs</item>
+      <item>fclex</item>
+      <item>fcmovb</item>
+      <item>fcmovbe</item>
+      <item>fcmove</item>
+      <item>fcmovnb</item>
+      <item>fcmovnbe</item>
+      <item>fcmovne</item>
+      <item>fcmovnu</item>
+      <item>fcmovu</item>
+      <item>fcom</item>
+      <item>fcomi</item>
+      <item>fcomip</item>
+      <item>fcomp</item>
+      <item>fcompp</item>
+      <item>fcos</item>
+      <item>fdecstp</item>
+      <item>fdisi</item>
+      <item>fdiv</item>
+      <item>fdivp</item>
+      <item>fdivr</item>
+      <item>fdivrp</item>
+      <item>femms</item>
+      <item>feni</item>
+      <item>ffree</item>
+      <item>ffreep</item>
+      <item>fiadd</item>
+      <item>ficom</item>
+      <item>ficomp</item>
+      <item>fidiv</item>
+      <item>fidivr</item>
+      <item>fild</item>
+      <item>fimul</item>
+      <item>fincstp</item>
+      <item>finit</item>
+      <item>fist</item>
+      <item>fistp</item>
+      <item>fisttp</item>
+      <item>fisub</item>
+      <item>fisubr</item>
+      <item>fld</item>
+      <item>fld1</item>
+      <item>fldcw</item>
+      <item>fldenv</item>
+      <item>fldl2e</item>
+      <item>fldl2t</item>
+      <item>fldlg2</item>
+      <item>fldln2</item>
+      <item>fldpi</item>
+      <item>fldz</item>
+      <item>fmul</item>
+      <item>fmulp</item>
+      <item>fnclex</item>
+      <item>fndisi</item>
+      <item>fneni</item>
+      <item>fninit</item>
+      <item>fnop</item>
+      <item>fnsave</item>
+      <item>fnstcw</item>
+      <item>fnstenv</item>
+      <item>fnstsw</item>
+      <item>fpatan</item>
+      <item>fprem</item>
+      <item>fprem1</item>
+      <item>fptan</item>
+      <item>frndint</item>
+      <item>frstor</item>
+      <item>fsave</item>
+      <item>fscale</item>
+      <item>fsetpm</item>
+      <item>fsin</item>
+      <item>fsincos</item>
+      <item>fsqrt</item>
+      <item>fst</item>
+      <item>fstcw</item>
+      <item>fstenv</item>
+      <item>fstp</item>
+      <item>fstsw</item>
+      <item>fsub</item>
+      <item>fsubp</item>
+      <item>fsubr</item>
+      <item>fsubrp</item>
+      <item>ftst</item>
+      <item>fucom</item>
+      <item>fucomi</item>
+      <item>fucomip</item>
+      <item>fucomp</item>
+      <item>fucompp</item>
+      <item>fwait</item>
+      <item>fxam</item>
+      <item>fxch</item>
+      <item>fxrstor</item>
+      <item>fxrstor64</item>
+      <item>fxsave</item>
+      <item>fxsave64</item>
+      <item>fxtract</item>
+      <item>fyl2x</item>
+      <item>fyl2xp1</item>
+      <item>getsec</item>
+      <item>gf2p8affineinvqb</item>
+      <item>gf2p8affineqb</item>
+      <item>gf2p8mulb</item>
+      <item>haddpd</item>
+      <item>haddps</item>
+      <item>hint_nop0</item>
+      <item>hint_nop1</item>
+      <item>hint_nop10</item>
+      <item>hint_nop11</item>
+      <item>hint_nop12</item>
+      <item>hint_nop13</item>
+      <item>hint_nop14</item>
+      <item>hint_nop15</item>
+      <item>hint_nop16</item>
+      <item>hint_nop17</item>
+      <item>hint_nop18</item>
+      <item>hint_nop19</item>
+      <item>hint_nop2</item>
+      <item>hint_nop20</item>
+      <item>hint_nop21</item>
+      <item>hint_nop22</item>
+      <item>hint_nop23</item>
+      <item>hint_nop24</item>
+      <item>hint_nop25</item>
+      <item>hint_nop26</item>
+      <item>hint_nop27</item>
+      <item>hint_nop28</item>
+      <item>hint_nop29</item>
+      <item>hint_nop3</item>
+      <item>hint_nop30</item>
+      <item>hint_nop31</item>
+      <item>hint_nop32</item>
+      <item>hint_nop33</item>
+      <item>hint_nop34</item>
+      <item>hint_nop35</item>
+      <item>hint_nop36</item>
+      <item>hint_nop37</item>
+      <item>hint_nop38</item>
+      <item>hint_nop39</item>
+      <item>hint_nop4</item>
+      <item>hint_nop40</item>
+      <item>hint_nop41</item>
+      <item>hint_nop42</item>
+      <item>hint_nop43</item>
+      <item>hint_nop44</item>
+      <item>hint_nop45</item>
+      <item>hint_nop46</item>
+      <item>hint_nop47</item>
+      <item>hint_nop48</item>
+      <item>hint_nop49</item>
+      <item>hint_nop5</item>
+      <item>hint_nop50</item>
+      <item>hint_nop51</item>
+      <item>hint_nop52</item>
+      <item>hint_nop53</item>
+      <item>hint_nop54</item>
+      <item>hint_nop55</item>
+      <item>hint_nop56</item>
+      <item>hint_nop57</item>
+      <item>hint_nop58</item>
+      <item>hint_nop59</item>
+      <item>hint_nop6</item>
+      <item>hint_nop60</item>
+      <item>hint_nop61</item>
+      <item>hint_nop62</item>
+      <item>hint_nop63</item>
+      <item>hint_nop7</item>
+      <item>hint_nop8</item>
+      <item>hint_nop9</item>
+      <item>hlt</item>
+      <item>hsubpd</item>
+      <item>hsubps</item>
+      <item>ibts</item>
+      <item>icebp</item>
+      <item>idiv</item>
+      <item>imul</item>
+      <item>in</item>
+      <item>inc</item>
+      <item>incsspd</item>
+      <item>incsspq</item>
+      <item>insb</item>
+      <item>insd</item>
+      <item>insertps</item>
+      <item>insertq</item>
+      <item>insw</item>
+      <item>int</item>
+      <item>int01</item>
+      <item>int03</item>
+      <item>int1</item>
+      <item>int3</item>
+      <item>into</item>
+      <item>invd</item>
+      <item>invept</item>
+      <item>invlpg</item>
+      <item>invlpga</item>
+      <item>invpcid</item>
+      <item>invvpid</item>
+      <item>kadd</item>
+      <item>kaddb</item>
+      <item>kaddd</item>
+      <item>kaddq</item>
+      <item>kaddw</item>
+      <item>kand</item>
+      <item>kandb</item>
+      <item>kandd</item>
+      <item>kandn</item>
+      <item>kandnb</item>
+      <item>kandnd</item>
+      <item>kandnq</item>
+      <item>kandnw</item>
+      <item>kandq</item>
+      <item>kandw</item>
+      <item>kmov</item>
+      <item>kmovb</item>
+      <item>kmovd</item>
+      <item>kmovq</item>
+      <item>kmovw</item>
+      <item>knot</item>
+      <item>knotb</item>
+      <item>knotd</item>
+      <item>knotq</item>
+      <item>knotw</item>
+      <item>kor</item>
+      <item>korb</item>
+      <item>kord</item>
+      <item>korq</item>
+      <item>kortest</item>
+      <item>kortestb</item>
+      <item>kortestd</item>
+      <item>kortestq</item>
+      <item>kortestw</item>
+      <item>korw</item>
+      <item>kshiftl</item>
+      <item>kshiftlb</item>
+      <item>kshiftld</item>
+      <item>kshiftlq</item>
+      <item>kshiftlw</item>
+      <item>kshiftr</item>
+      <item>kshiftrb</item>
+      <item>kshiftrd</item>
+      <item>kshiftrq</item>
+      <item>kshiftrw</item>
+      <item>ktest</item>
+      <item>ktestb</item>
+      <item>ktestd</item>
+      <item>ktestq</item>
+      <item>ktestw</item>
+      <item>kunpck</item>
+      <item>kunpckbw</item>
+      <item>kunpckdq</item>
+      <item>kunpckwd</item>
+      <item>kxnor</item>
+      <item>kxnorb</item>
+      <item>kxnord</item>
+      <item>kxnorq</item>
+      <item>kxnorw</item>
+      <item>kxor</item>
+      <item>kxorb</item>
+      <item>kxord</item>
+      <item>kxorq</item>
+      <item>kxorw</item>
+      <item>lahf</item>
+      <item>lar</item>
+      <item>lddqu</item>
+      <item>ldmxcsr</item>
+      <item>lds</item>
+      <item>ldtilecfg</item>
+      <item>lea</item>
+      <item>leave</item>
+      <item>les</item>
+      <item>lfence</item>
+      <item>lfs</item>
+      <item>lgdt</item>
+      <item>lgs</item>
+      <item>lidt</item>
+      <item>lldt</item>
+      <item>llwpcb</item>
+      <item>lmsw</item>
+      <item>loadall</item>
+      <item>loadall286</item>
+      <item>lodsb</item>
+      <item>lodsd</item>
+      <item>lodsq</item>
+      <item>lodsw</item>
+      <item>loop</item>
+      <item>loope</item>
+      <item>loopne</item>
+      <item>loopnz</item>
+      <item>loopz</item>
+      <item>lsl</item>
+      <item>lss</item>
+      <item>ltr</item>
+      <item>lwpins</item>
+      <item>lwpval</item>
+      <item>lzcnt</item>
+      <item>maskmovdqu</item>
+      <item>maskmovq</item>
+      <item>maxpd</item>
+      <item>maxps</item>
+      <item>maxsd</item>
+      <item>maxss</item>
+      <item>mfence</item>
+      <item>minpd</item>
+      <item>minps</item>
+      <item>minsd</item>
+      <item>minss</item>
+      <item>monitor</item>
+      <item>monitorx</item>
+      <item>montmul</item>
+      <item>mov</item>
+      <item>movapd</item>
+      <item>movaps</item>
+      <item>movbe</item>
+      <item>movd</item>
+      <item>movddup</item>
+      <item>movdir64b</item>
+      <item>movdiri</item>
+      <item>movdq2q</item>
+      <item>movdqa</item>
+      <item>movdqu</item>
+      <item>movhlps</item>
+      <item>movhpd</item>
+      <item>movhps</item>
+      <item>movlhps</item>
+      <item>movlpd</item>
+      <item>movlps</item>
+      <item>movmskpd</item>
+      <item>movmskps</item>
+      <item>movntdq</item>
+      <item>movntdqa</item>
+      <item>movnti</item>
+      <item>movntpd</item>
+      <item>movntps</item>
+      <item>movntq</item>
+      <item>movntsd</item>
+      <item>movntss</item>
+      <item>movq</item>
+      <item>movq2dq</item>
+      <item>movsb</item>
+      <item>movsd</item>
+      <item>movshdup</item>
+      <item>movsldup</item>
+      <item>movsq</item>
+      <item>movss</item>
+      <item>movsw</item>
+      <item>movsx</item>
+      <item>movsxd</item>
+      <item>movupd</item>
+      <item>movups</item>
+      <item>movzx</item>
+      <item>mpsadbw</item>
+      <item>mul</item>
+      <item>mulpd</item>
+      <item>mulps</item>
+      <item>mulsd</item>
+      <item>mulss</item>
+      <item>mulx</item>
+      <item>mwait</item>
+      <item>mwaitx</item>
+      <item>neg</item>
+      <item>nop</item>
+      <item>not</item>
+      <item>or</item>
+      <item>orpd</item>
+      <item>orps</item>
+      <item>out</item>
+      <item>outsb</item>
+      <item>outsd</item>
+      <item>outsw</item>
+      <item>pabsb</item>
+      <item>pabsd</item>
+      <item>pabsw</item>
+      <item>packssdw</item>
+      <item>packsswb</item>
+      <item>packusdw</item>
+      <item>packuswb</item>
+      <item>paddb</item>
+      <item>paddd</item>
+      <item>paddq</item>
+      <item>paddsb</item>
+      <item>paddsiw</item>
+      <item>paddsw</item>
+      <item>paddusb</item>
+      <item>paddusw</item>
+      <item>paddw</item>
+      <item>palignr</item>
+      <item>pand</item>
+      <item>pandn</item>
+      <item>pause</item>
+      <item>paveb</item>
+      <item>pavgb</item>
+      <item>pavgusb</item>
+      <item>pavgw</item>
+      <item>pblendvb</item>
+      <item>pblendw</item>
+      <item>pclmulhqhqdq</item>
+      <item>pclmulhqlqdq</item>
+      <item>pclmullqhqdq</item>
+      <item>pclmullqlqdq</item>
+      <item>pclmulqdq</item>
+      <item>pcmpeqb</item>
+      <item>pcmpeqd</item>
+      <item>pcmpeqq</item>
+      <item>pcmpeqw</item>
+      <item>pcmpestri</item>
+      <item>pcmpestrm</item>
+      <item>pcmpgtb</item>
+      <item>pcmpgtd</item>
+      <item>pcmpgtq</item>
+      <item>pcmpgtw</item>
+      <item>pcmpistri</item>
+      <item>pcmpistrm</item>
+      <item>pcommit</item>
+      <item>pconfig</item>
+      <item>pdep</item>
+      <item>pdistib</item>
+      <item>pext</item>
+      <item>pextrb</item>
+      <item>pextrd</item>
+      <item>pextrq</item>
+      <item>pextrw</item>
+      <item>pf2id</item>
+      <item>pf2iw</item>
+      <item>pfacc</item>
+      <item>pfadd</item>
+      <item>pfcmpeq</item>
+      <item>pfcmpge</item>
+      <item>pfcmpgt</item>
+      <item>pfmax</item>
+      <item>pfmin</item>
+      <item>pfmul</item>
+      <item>pfnacc</item>
+      <item>pfpnacc</item>
+      <item>pfrcp</item>
+      <item>pfrcpit1</item>
+      <item>pfrcpit2</item>
+      <item>pfrcpv</item>
+      <item>pfrsqit1</item>
+      <item>pfrsqrt</item>
+      <item>pfrsqrtv</item>
+      <item>pfsub</item>
+      <item>pfsubr</item>
+      <item>phaddd</item>
+      <item>phaddsw</item>
+      <item>phaddw</item>
+      <item>phminposuw</item>
+      <item>phsubd</item>
+      <item>phsubsw</item>
+      <item>phsubw</item>
+      <item>pi2fd</item>
+      <item>pi2fw</item>
+      <item>pinsrb</item>
+      <item>pinsrd</item>
+      <item>pinsrq</item>
+      <item>pinsrw</item>
+      <item>pmachriw</item>
+      <item>pmaddubsw</item>
+      <item>pmaddwd</item>
+      <item>pmagw</item>
+      <item>pmaxsb</item>
+      <item>pmaxsd</item>
+      <item>pmaxsw</item>
+      <item>pmaxub</item>
+      <item>pmaxud</item>
+      <item>pmaxuw</item>
+      <item>pminsb</item>
+      <item>pminsd</item>
+      <item>pminsw</item>
+      <item>pminub</item>
+      <item>pminud</item>
+      <item>pminuw</item>
+      <item>pmovmskb</item>
+      <item>pmovsxbd</item>
+      <item>pmovsxbq</item>
+      <item>pmovsxbw</item>
+      <item>pmovsxdq</item>
+      <item>pmovsxwd</item>
+      <item>pmovsxwq</item>
+      <item>pmovzxbd</item>
+      <item>pmovzxbq</item>
+      <item>pmovzxbw</item>
+      <item>pmovzxdq</item>
+      <item>pmovzxwd</item>
+      <item>pmovzxwq</item>
+      <item>pmuldq</item>
+      <item>pmulhriw</item>
+      <item>pmulhrsw</item>
+      <item>pmulhrwa</item>
+      <item>pmulhrwc</item>
+      <item>pmulhuw</item>
+      <item>pmulhw</item>
+      <item>pmulld</item>
+      <item>pmullw</item>
+      <item>pmuludq</item>
+      <item>pmvgezb</item>
+      <item>pmvlzb</item>
+      <item>pmvnzb</item>
+      <item>pmvzb</item>
+      <item>pop</item>
+      <item>popa</item>
+      <item>popad</item>
+      <item>popaw</item>
+      <item>popcnt</item>
+      <item>popf</item>
+      <item>popfd</item>
+      <item>popfq</item>
+      <item>popfw</item>
+      <item>por</item>
+      <item>prefetch</item>
+      <item>prefetchnta</item>
+      <item>prefetcht0</item>
+      <item>prefetcht1</item>
+      <item>prefetcht2</item>
+      <item>prefetchw</item>
+      <item>prefetchwt1</item>
+      <item>psadbw</item>
+      <item>pshufb</item>
+      <item>pshufd</item>
+      <item>pshufhw</item>
+      <item>pshuflw</item>
+      <item>pshufw</item>
+      <item>psignb</item>
+      <item>psignd</item>
+      <item>psignw</item>
+      <item>pslld</item>
+      <item>pslldq</item>
+      <item>psllq</item>
+      <item>psllw</item>
+      <item>psrad</item>
+      <item>psraw</item>
+      <item>psrld</item>
+      <item>psrldq</item>
+      <item>psrlq</item>
+      <item>psrlw</item>
+      <item>psubb</item>
+      <item>psubd</item>
+      <item>psubq</item>
+      <item>psubsb</item>
+      <item>psubsiw</item>
+      <item>psubsw</item>
+      <item>psubusb</item>
+      <item>psubusw</item>
+      <item>psubw</item>
+      <item>pswapd</item>
+      <item>ptest</item>
+      <item>ptwrite</item>
+      <item>punpckhbw</item>
+      <item>punpckhdq</item>
+      <item>punpckhqdq</item>
+      <item>punpckhwd</item>
+      <item>punpcklbw</item>
+      <item>punpckldq</item>
+      <item>punpcklqdq</item>
+      <item>punpcklwd</item>
+      <item>push</item>
+      <item>pusha</item>
+      <item>pushad</item>
+      <item>pushaw</item>
+      <item>pushf</item>
+      <item>pushfd</item>
+      <item>pushfq</item>
+      <item>pushfw</item>
+      <item>pxor</item>
+      <item>rcl</item>
+      <item>rcpps</item>
+      <item>rcpss</item>
+      <item>rcr</item>
+      <item>rdfsbase</item>
+      <item>rdgsbase</item>
+      <item>rdm</item>
+      <item>rdmsr</item>
+      <item>rdpid</item>
+      <item>rdpkru</item>
+      <item>rdpmc</item>
+      <item>rdrand</item>
+      <item>rdseed</item>
+      <item>rdshr</item>
+      <item>rdsspd</item>
+      <item>rdsspq</item>
+      <item>rdtsc</item>
+      <item>rdtscp</item>
+      <item>rol</item>
+      <item>ror</item>
+      <item>rorx</item>
+      <item>roundpd</item>
+      <item>roundps</item>
+      <item>roundsd</item>
+      <item>roundss</item>
+      <item>rsdc</item>
+      <item>rsldt</item>
+      <item>rsm</item>
+      <item>rsqrtps</item>
+      <item>rsqrtss</item>
+      <item>rstorssp</item>
+      <item>rsts</item>
+      <item>sahf</item>
+      <item>sal</item>
+      <item>salc</item>
+      <item>sar</item>
+      <item>sarx</item>
+      <item>saveprevssp</item>
+      <item>sbb</item>
+      <item>scasb</item>
+      <item>scasd</item>
+      <item>scasq</item>
+      <item>scasw</item>
+      <item>serialize</item>
+      <item>seta</item>
+      <item>setae</item>
+      <item>setb</item>
+      <item>setbe</item>
+      <item>setc</item>
+      <item>sete</item>
+      <item>setg</item>
+      <item>setge</item>
+      <item>setl</item>
+      <item>setle</item>
+      <item>setna</item>
+      <item>setnae</item>
+      <item>setnb</item>
+      <item>setnbe</item>
+      <item>setnc</item>
+      <item>setne</item>
+      <item>setng</item>
+      <item>setnge</item>
+      <item>setnl</item>
+      <item>setnle</item>
+      <item>setno</item>
+      <item>setnp</item>
+      <item>setns</item>
+      <item>setnz</item>
+      <item>seto</item>
+      <item>setp</item>
+      <item>setpe</item>
+      <item>setpo</item>
+      <item>sets</item>
+      <item>setssbsy</item>
+      <item>setz</item>
+      <item>sfence</item>
+      <item>sgdt</item>
+      <item>sha1msg1</item>
+      <item>sha1msg2</item>
+      <item>sha1nexte</item>
+      <item>sha1rnds4</item>
+      <item>sha256msg1</item>
+      <item>sha256msg2</item>
+      <item>sha256rnds2</item>
+      <item>shl</item>
+      <item>shld</item>
+      <item>shlx</item>
+      <item>shr</item>
+      <item>shrd</item>
+      <item>shrx</item>
+      <item>shufpd</item>
+      <item>shufps</item>
+      <item>sidt</item>
+      <item>skinit</item>
+      <item>sldt</item>
+      <item>slwpcb</item>
+      <item>smi</item>
+      <item>smint</item>
+      <item>smintold</item>
+      <item>smsw</item>
+      <item>sqrtpd</item>
+      <item>sqrtps</item>
+      <item>sqrtsd</item>
+      <item>sqrtss</item>
+      <item>stac</item>
+      <item>stc</item>
+      <item>std</item>
+      <item>stgi</item>
+      <item>sti</item>
+      <item>stmxcsr</item>
+      <item>stosb</item>
+      <item>stosd</item>
+      <item>stosq</item>
+      <item>stosw</item>
+      <item>str</item>
+      <item>sttilecfg</item>
+      <item>sub</item>
+      <item>subpd</item>
+      <item>subps</item>
+      <item>subsd</item>
+      <item>subss</item>
+      <item>svdc</item>
+      <item>svldt</item>
+      <item>svts</item>
+      <item>swapgs</item>
+      <item>syscall</item>
+      <item>sysenter</item>
+      <item>sysexit</item>
+      <item>sysret</item>
+      <item>t1mskc</item>
+      <item>tdpbf16ps</item>
+      <item>tdpbssd</item>
+      <item>tdpbsud</item>
+      <item>tdpbusd</item>
+      <item>tdpbuud</item>
+      <item>test</item>
+      <item>tileloadd</item>
+      <item>tileloaddt1</item>
+      <item>tilerelease</item>
+      <item>tilestored</item>
+      <item>tilezero</item>
+      <item>tpause</item>
+      <item>tzcnt</item>
+      <item>tzmsk</item>
+      <item>ucomisd</item>
+      <item>ucomiss</item>
+      <item>ud0</item>
+      <item>ud1</item>
+      <item>ud2</item>
+      <item>ud2a</item>
+      <item>ud2b</item>
+      <item>umonitor</item>
+      <item>umov</item>
+      <item>umwait</item>
+      <item>unpckhpd</item>
+      <item>unpckhps</item>
+      <item>unpcklpd</item>
+      <item>unpcklps</item>
+      <item>v4dpwssd</item>
+      <item>v4dpwssds</item>
+      <item>v4fmaddps</item>
+      <item>v4fmaddss</item>
+      <item>v4fnmaddps</item>
+      <item>v4fnmaddss</item>
+      <item>vaddpd</item>
+      <item>vaddps</item>
+      <item>vaddsd</item>
+      <item>vaddss</item>
+      <item>vaddsubpd</item>
+      <item>vaddsubps</item>
+      <item>vaesdec</item>
+      <item>vaesdeclast</item>
+      <item>vaesenc</item>
+      <item>vaesenclast</item>
+      <item>vaesimc</item>
+      <item>vaeskeygenassist</item>
+      <item>valignd</item>
+      <item>valignq</item>
+      <item>vandnpd</item>
+      <item>vandnps</item>
+      <item>vandpd</item>
+      <item>vandps</item>
+      <item>vblendmpd</item>
+      <item>vblendmps</item>
+      <item>vblendpd</item>
+      <item>vblendps</item>
+      <item>vblendvpd</item>
+      <item>vblendvps</item>
+      <item>vbroadcastf128</item>
+      <item>vbroadcastf32x2</item>
+      <item>vbroadcastf32x4</item>
+      <item>vbroadcastf32x8</item>
+      <item>vbroadcastf64x2</item>
+      <item>vbroadcastf64x4</item>
+      <item>vbroadcasti128</item>
+      <item>vbroadcasti32x2</item>
+      <item>vbroadcasti32x4</item>
+      <item>vbroadcasti32x8</item>
+      <item>vbroadcasti64x2</item>
+      <item>vbroadcasti64x4</item>
+      <item>vbroadcastsd</item>
+      <item>vbroadcastss</item>
+      <item>vcmpeqpd</item>
+      <item>vcmpeqps</item>
+      <item>vcmpeqsd</item>
+      <item>vcmpeqss</item>
+      <item>vcmpeq_oqpd</item>
+      <item>vcmpeq_oqps</item>
+      <item>vcmpeq_oqsd</item>
+      <item>vcmpeq_oqss</item>
+      <item>vcmpeq_ospd</item>
+      <item>vcmpeq_osps</item>
+      <item>vcmpeq_ossd</item>
+      <item>vcmpeq_osss</item>
+      <item>vcmpeq_uqpd</item>
+      <item>vcmpeq_uqps</item>
+      <item>vcmpeq_uqsd</item>
+      <item>vcmpeq_uqss</item>
+      <item>vcmpeq_uspd</item>
+      <item>vcmpeq_usps</item>
+      <item>vcmpeq_ussd</item>
+      <item>vcmpeq_usss</item>
+      <item>vcmpfalsepd</item>
+      <item>vcmpfalseps</item>
+      <item>vcmpfalsesd</item>
+      <item>vcmpfalsess</item>
+      <item>vcmpfalse_oqpd</item>
+      <item>vcmpfalse_oqps</item>
+      <item>vcmpfalse_oqsd</item>
+      <item>vcmpfalse_oqss</item>
+      <item>vcmpfalse_ospd</item>
+      <item>vcmpfalse_osps</item>
+      <item>vcmpfalse_ossd</item>
+      <item>vcmpfalse_osss</item>
+      <item>vcmpgepd</item>
+      <item>vcmpgeps</item>
+      <item>vcmpgesd</item>
+      <item>vcmpgess</item>
+      <item>vcmpge_oqpd</item>
+      <item>vcmpge_oqps</item>
+      <item>vcmpge_oqsd</item>
+      <item>vcmpge_oqss</item>
+      <item>vcmpge_ospd</item>
+      <item>vcmpge_osps</item>
+      <item>vcmpge_ossd</item>
+      <item>vcmpge_osss</item>
+      <item>vcmpgtpd</item>
+      <item>vcmpgtps</item>
+      <item>vcmpgtsd</item>
+      <item>vcmpgtss</item>
+      <item>vcmpgt_oqpd</item>
+      <item>vcmpgt_oqps</item>
+      <item>vcmpgt_oqsd</item>
+      <item>vcmpgt_oqss</item>
+      <item>vcmpgt_ospd</item>
+      <item>vcmpgt_osps</item>
+      <item>vcmpgt_ossd</item>
+      <item>vcmpgt_osss</item>
+      <item>vcmplepd</item>
+      <item>vcmpleps</item>
+      <item>vcmplesd</item>
+      <item>vcmpless</item>
+      <item>vcmple_oqpd</item>
+      <item>vcmple_oqps</item>
+      <item>vcmple_oqsd</item>
+      <item>vcmple_oqss</item>
+      <item>vcmple_ospd</item>
+      <item>vcmple_osps</item>
+      <item>vcmple_ossd</item>
+      <item>vcmple_osss</item>
+      <item>vcmpltpd</item>
+      <item>vcmpltps</item>
+      <item>vcmpltsd</item>
+      <item>vcmpltss</item>
+      <item>vcmplt_oqpd</item>
+      <item>vcmplt_oqps</item>
+      <item>vcmplt_oqsd</item>
+      <item>vcmplt_oqss</item>
+      <item>vcmplt_ospd</item>
+      <item>vcmplt_osps</item>
+      <item>vcmplt_ossd</item>
+      <item>vcmplt_osss</item>
+      <item>vcmpneqpd</item>
+      <item>vcmpneqps</item>
+      <item>vcmpneqsd</item>
+      <item>vcmpneqss</item>
+      <item>vcmpneq_oqpd</item>
+      <item>vcmpneq_oqps</item>
+      <item>vcmpneq_oqsd</item>
+      <item>vcmpneq_oqss</item>
+      <item>vcmpneq_ospd</item>
+      <item>vcmpneq_osps</item>
+      <item>vcmpneq_ossd</item>
+      <item>vcmpneq_osss</item>
+      <item>vcmpneq_uqpd</item>
+      <item>vcmpneq_uqps</item>
+      <item>vcmpneq_uqsd</item>
+      <item>vcmpneq_uqss</item>
+      <item>vcmpneq_uspd</item>
+      <item>vcmpneq_usps</item>
+      <item>vcmpneq_ussd</item>
+      <item>vcmpneq_usss</item>
+      <item>vcmpngepd</item>
+      <item>vcmpngeps</item>
+      <item>vcmpngesd</item>
+      <item>vcmpngess</item>
+      <item>vcmpnge_uqpd</item>
+      <item>vcmpnge_uqps</item>
+      <item>vcmpnge_uqsd</item>
+      <item>vcmpnge_uqss</item>
+      <item>vcmpnge_uspd</item>
+      <item>vcmpnge_usps</item>
+      <item>vcmpnge_ussd</item>
+      <item>vcmpnge_usss</item>
+      <item>vcmpngtpd</item>
+      <item>vcmpngtps</item>
+      <item>vcmpngtsd</item>
+      <item>vcmpngtss</item>
+      <item>vcmpngt_uqpd</item>
+      <item>vcmpngt_uqps</item>
+      <item>vcmpngt_uqsd</item>
+      <item>vcmpngt_uqss</item>
+      <item>vcmpngt_uspd</item>
+      <item>vcmpngt_usps</item>
+      <item>vcmpngt_ussd</item>
+      <item>vcmpngt_usss</item>
+      <item>vcmpnlepd</item>
+      <item>vcmpnleps</item>
+      <item>vcmpnlesd</item>
+      <item>vcmpnless</item>
+      <item>vcmpnle_uqpd</item>
+      <item>vcmpnle_uqps</item>
+      <item>vcmpnle_uqsd</item>
+      <item>vcmpnle_uqss</item>
+      <item>vcmpnle_uspd</item>
+      <item>vcmpnle_usps</item>
+      <item>vcmpnle_ussd</item>
+      <item>vcmpnle_usss</item>
+      <item>vcmpnltpd</item>
+      <item>vcmpnltps</item>
+      <item>vcmpnltsd</item>
+      <item>vcmpnltss</item>
+      <item>vcmpnlt_uqpd</item>
+      <item>vcmpnlt_uqps</item>
+      <item>vcmpnlt_uqsd</item>
+      <item>vcmpnlt_uqss</item>
+      <item>vcmpnlt_uspd</item>
+      <item>vcmpnlt_usps</item>
+      <item>vcmpnlt_ussd</item>
+      <item>vcmpnlt_usss</item>
+      <item>vcmpordpd</item>
+      <item>vcmpordps</item>
+      <item>vcmpordsd</item>
+      <item>vcmpordss</item>
+      <item>vcmpord_qpd</item>
+      <item>vcmpord_qps</item>
+      <item>vcmpord_qsd</item>
+      <item>vcmpord_qss</item>
+      <item>vcmpord_spd</item>
+      <item>vcmpord_sps</item>
+      <item>vcmpord_ssd</item>
+      <item>vcmpord_sss</item>
+      <item>vcmppd</item>
+      <item>vcmpps</item>
+      <item>vcmpsd</item>
+      <item>vcmpss</item>
+      <item>vcmptruepd</item>
+      <item>vcmptrueps</item>
+      <item>vcmptruesd</item>
+      <item>vcmptruess</item>
+      <item>vcmptrue_uqpd</item>
+      <item>vcmptrue_uqps</item>
+      <item>vcmptrue_uqsd</item>
+      <item>vcmptrue_uqss</item>
+      <item>vcmptrue_uspd</item>
+      <item>vcmptrue_usps</item>
+      <item>vcmptrue_ussd</item>
+      <item>vcmptrue_usss</item>
+      <item>vcmpunordpd</item>
+      <item>vcmpunordps</item>
+      <item>vcmpunordsd</item>
+      <item>vcmpunordss</item>
+      <item>vcmpunord_qpd</item>
+      <item>vcmpunord_qps</item>
+      <item>vcmpunord_qsd</item>
+      <item>vcmpunord_qss</item>
+      <item>vcmpunord_spd</item>
+      <item>vcmpunord_sps</item>
+      <item>vcmpunord_ssd</item>
+      <item>vcmpunord_sss</item>
+      <item>vcomisd</item>
+      <item>vcomiss</item>
+      <item>vcompresspd</item>
+      <item>vcompressps</item>
+      <item>vcvtdq2pd</item>
+      <item>vcvtdq2ps</item>
+      <item>vcvtne2ps2bf16</item>
+      <item>vcvtpd2dq</item>
+      <item>vcvtpd2ps</item>
+      <item>vcvtpd2qq</item>
+      <item>vcvtpd2udq</item>
+      <item>vcvtpd2uqq</item>
+      <item>vcvtph2ps</item>
+      <item>vcvtps2dq</item>
+      <item>vcvtps2pd</item>
+      <item>vcvtps2ph</item>
+      <item>vcvtps2qq</item>
+      <item>vcvtps2udq</item>
+      <item>vcvtps2uqq</item>
+      <item>vcvtqq2pd</item>
+      <item>vcvtqq2ps</item>
+      <item>vcvtsd2si</item>
+      <item>vcvtsd2ss</item>
+      <item>vcvtsd2usi</item>
+      <item>vcvtsi2sd</item>
+      <item>vcvtsi2ss</item>
+      <item>vcvtss2sd</item>
+      <item>vcvtss2si</item>
+      <item>vcvtss2usi</item>
+      <item>vcvttpd2dq</item>
+      <item>vcvttpd2qq</item>
+      <item>vcvttpd2udq</item>
+      <item>vcvttpd2uqq</item>
+      <item>vcvttps2dq</item>
+      <item>vcvttps2qq</item>
+      <item>vcvttps2udq</item>
+      <item>vcvttps2uqq</item>
+      <item>vcvttsd2si</item>
+      <item>vcvttsd2usi</item>
+      <item>vcvttss2si</item>
+      <item>vcvttss2usi</item>
+      <item>vcvtudq2pd</item>
+      <item>vcvtudq2ps</item>
+      <item>vcvtuqq2pd</item>
+      <item>vcvtuqq2ps</item>
+      <item>vcvtusi2sd</item>
+      <item>vcvtusi2ss</item>
+      <item>vdbpsadbw</item>
+      <item>vdivpd</item>
+      <item>vdivps</item>
+      <item>vdivsd</item>
+      <item>vdivss</item>
+      <item>vdpbf16ps</item>
+      <item>vdppd</item>
+      <item>vdpps</item>
+      <item>verr</item>
+      <item>verw</item>
+      <item>vexp2pd</item>
+      <item>vexp2ps</item>
+      <item>vexpandpd</item>
+      <item>vexpandps</item>
+      <item>vextractf128</item>
+      <item>vextractf32x4</item>
+      <item>vextractf32x8</item>
+      <item>vextractf64x2</item>
+      <item>vextractf64x4</item>
+      <item>vextracti128</item>
+      <item>vextracti32x4</item>
+      <item>vextracti32x8</item>
+      <item>vextracti64x2</item>
+      <item>vextracti64x4</item>
+      <item>vextractps</item>
+      <item>vfixupimmpd</item>
+      <item>vfixupimmps</item>
+      <item>vfixupimmsd</item>
+      <item>vfixupimmss</item>
+      <item>vfmadd123pd</item>
+      <item>vfmadd123ps</item>
+      <item>vfmadd123sd</item>
+      <item>vfmadd123ss</item>
+      <item>vfmadd132pd</item>
+      <item>vfmadd132ps</item>
+      <item>vfmadd132sd</item>
+      <item>vfmadd132ss</item>
+      <item>vfmadd213pd</item>
+      <item>vfmadd213ps</item>
+      <item>vfmadd213sd</item>
+      <item>vfmadd213ss</item>
+      <item>vfmadd231pd</item>
+      <item>vfmadd231ps</item>
+      <item>vfmadd231sd</item>
+      <item>vfmadd231ss</item>
+      <item>vfmadd312pd</item>
+      <item>vfmadd312ps</item>
+      <item>vfmadd312sd</item>
+      <item>vfmadd312ss</item>
+      <item>vfmadd321pd</item>
+      <item>vfmadd321ps</item>
+      <item>vfmadd321sd</item>
+      <item>vfmadd321ss</item>
+      <item>vfmaddpd</item>
+      <item>vfmaddps</item>
+      <item>vfmaddsd</item>
+      <item>vfmaddss</item>
+      <item>vfmaddsub123pd</item>
+      <item>vfmaddsub123ps</item>
+      <item>vfmaddsub132pd</item>
+      <item>vfmaddsub132ps</item>
+      <item>vfmaddsub213pd</item>
+      <item>vfmaddsub213ps</item>
+      <item>vfmaddsub231pd</item>
+      <item>vfmaddsub231ps</item>
+      <item>vfmaddsub312pd</item>
+      <item>vfmaddsub312ps</item>
+      <item>vfmaddsub321pd</item>
+      <item>vfmaddsub321ps</item>
+      <item>vfmaddsubpd</item>
+      <item>vfmaddsubps</item>
+      <item>vfmsub123pd</item>
+      <item>vfmsub123ps</item>
+      <item>vfmsub123sd</item>
+      <item>vfmsub123ss</item>
+      <item>vfmsub132pd</item>
+      <item>vfmsub132ps</item>
+      <item>vfmsub132sd</item>
+      <item>vfmsub132ss</item>
+      <item>vfmsub213pd</item>
+      <item>vfmsub213ps</item>
+      <item>vfmsub213sd</item>
+      <item>vfmsub213ss</item>
+      <item>vfmsub231pd</item>
+      <item>vfmsub231ps</item>
+      <item>vfmsub231sd</item>
+      <item>vfmsub231ss</item>
+      <item>vfmsub312pd</item>
+      <item>vfmsub312ps</item>
+      <item>vfmsub312sd</item>
+      <item>vfmsub312ss</item>
+      <item>vfmsub321pd</item>
+      <item>vfmsub321ps</item>
+      <item>vfmsub321sd</item>
+      <item>vfmsub321ss</item>
+      <item>vfmsubadd123pd</item>
+      <item>vfmsubadd123ps</item>
+      <item>vfmsubadd132pd</item>
+      <item>vfmsubadd132ps</item>
+      <item>vfmsubadd213pd</item>
+      <item>vfmsubadd213ps</item>
+      <item>vfmsubadd231pd</item>
+      <item>vfmsubadd231ps</item>
+      <item>vfmsubadd312pd</item>
+      <item>vfmsubadd312ps</item>
+      <item>vfmsubadd321pd</item>
+      <item>vfmsubadd321ps</item>
+      <item>vfmsubaddpd</item>
+      <item>vfmsubaddps</item>
+      <item>vfmsubpd</item>
+      <item>vfmsubps</item>
+      <item>vfmsubsd</item>
+      <item>vfmsubss</item>
+      <item>vfnmadd123pd</item>
+      <item>vfnmadd123ps</item>
+      <item>vfnmadd123sd</item>
+      <item>vfnmadd123ss</item>
+      <item>vfnmadd132pd</item>
+      <item>vfnmadd132ps</item>
+      <item>vfnmadd132sd</item>
+      <item>vfnmadd132ss</item>
+      <item>vfnmadd213pd</item>
+      <item>vfnmadd213ps</item>
+      <item>vfnmadd213sd</item>
+      <item>vfnmadd213ss</item>
+      <item>vfnmadd231pd</item>
+      <item>vfnmadd231ps</item>
+      <item>vfnmadd231sd</item>
+      <item>vfnmadd231ss</item>
+      <item>vfnmadd312pd</item>
+      <item>vfnmadd312ps</item>
+      <item>vfnmadd312sd</item>
+      <item>vfnmadd312ss</item>
+      <item>vfnmadd321pd</item>
+      <item>vfnmadd321ps</item>
+      <item>vfnmadd321sd</item>
+      <item>vfnmadd321ss</item>
+      <item>vfnmaddpd</item>
+      <item>vfnmaddps</item>
+      <item>vfnmaddsd</item>
+      <item>vfnmaddss</item>
+      <item>vfnmsub123pd</item>
+      <item>vfnmsub123ps</item>
+      <item>vfnmsub123sd</item>
+      <item>vfnmsub123ss</item>
+      <item>vfnmsub132pd</item>
+      <item>vfnmsub132ps</item>
+      <item>vfnmsub132sd</item>
+      <item>vfnmsub132ss</item>
+      <item>vfnmsub213pd</item>
+      <item>vfnmsub213ps</item>
+      <item>vfnmsub213sd</item>
+      <item>vfnmsub213ss</item>
+      <item>vfnmsub231pd</item>
+      <item>vfnmsub231ps</item>
+      <item>vfnmsub231sd</item>
+      <item>vfnmsub231ss</item>
+      <item>vfnmsub312pd</item>
+      <item>vfnmsub312ps</item>
+      <item>vfnmsub312sd</item>
+      <item>vfnmsub312ss</item>
+      <item>vfnmsub321pd</item>
+      <item>vfnmsub321ps</item>
+      <item>vfnmsub321sd</item>
+      <item>vfnmsub321ss</item>
+      <item>vfnmsubpd</item>
+      <item>vfnmsubps</item>
+      <item>vfnmsubsd</item>
+      <item>vfnmsubss</item>
+      <item>vfpclasspd</item>
+      <item>vfpclassps</item>
+      <item>vfpclasssd</item>
+      <item>vfpclassss</item>
+      <item>vfrczpd</item>
+      <item>vfrczps</item>
+      <item>vfrczsd</item>
+      <item>vfrczss</item>
+      <item>vgatherdpd</item>
+      <item>vgatherdps</item>
+      <item>vgatherpf0dpd</item>
+      <item>vgatherpf0dps</item>
+      <item>vgatherpf0qpd</item>
+      <item>vgatherpf0qps</item>
+      <item>vgatherpf1dpd</item>
+      <item>vgatherpf1dps</item>
+      <item>vgatherpf1qpd</item>
+      <item>vgatherpf1qps</item>
+      <item>vgatherqpd</item>
+      <item>vgatherqps</item>
+      <item>vgetexppd</item>
+      <item>vgetexpps</item>
+      <item>vgetexpsd</item>
+      <item>vgetexpss</item>
+      <item>vgetmantpd</item>
+      <item>vgetmantps</item>
+      <item>vgetmantsd</item>
+      <item>vgetmantss</item>
+      <item>vgf2p8affineinvqb</item>
+      <item>vgf2p8affineqb</item>
+      <item>vgf2p8mulb</item>
+      <item>vhaddpd</item>
+      <item>vhaddps</item>
+      <item>vhsubpd</item>
+      <item>vhsubps</item>
+      <item>vinsertf128</item>
+      <item>vinsertf32x4</item>
+      <item>vinsertf32x8</item>
+      <item>vinsertf64x2</item>
+      <item>vinsertf64x4</item>
+      <item>vinserti128</item>
+      <item>vinserti32x4</item>
+      <item>vinserti32x8</item>
+      <item>vinserti64x2</item>
+      <item>vinserti64x4</item>
+      <item>vinsertps</item>
+      <item>vlddqu</item>
+      <item>vldmxcsr</item>
+      <item>vldqqu</item>
+      <item>vmaskmovdqu</item>
+      <item>vmaskmovpd</item>
+      <item>vmaskmovps</item>
+      <item>vmaxpd</item>
+      <item>vmaxps</item>
+      <item>vmaxsd</item>
+      <item>vmaxss</item>
+      <item>vmcall</item>
+      <item>vmclear</item>
+      <item>vmfunc</item>
+      <item>vminpd</item>
+      <item>vminps</item>
+      <item>vminsd</item>
+      <item>vminss</item>
+      <item>vmlaunch</item>
+      <item>vmload</item>
+      <item>vmmcall</item>
+      <item>vmovapd</item>
+      <item>vmovaps</item>
+      <item>vmovd</item>
+      <item>vmovddup</item>
+      <item>vmovdqa</item>
+      <item>vmovdqa32</item>
+      <item>vmovdqa64</item>
+      <item>vmovdqu</item>
+      <item>vmovdqu16</item>
+      <item>vmovdqu32</item>
+      <item>vmovdqu64</item>
+      <item>vmovdqu8</item>
+      <item>vmovhlps</item>
+      <item>vmovhpd</item>
+      <item>vmovhps</item>
+      <item>vmovlhps</item>
+      <item>vmovlpd</item>
+      <item>vmovlps</item>
+      <item>vmovmskpd</item>
+      <item>vmovmskps</item>
+      <item>vmovntdq</item>
+      <item>vmovntdqa</item>
+      <item>vmovntpd</item>
+      <item>vmovntps</item>
+      <item>vmovntqq</item>
+      <item>vmovq</item>
+      <item>vmovqqa</item>
+      <item>vmovqqu</item>
+      <item>vmovsd</item>
+      <item>vmovshdup</item>
+      <item>vmovsldup</item>
+      <item>vmovss</item>
+      <item>vmovupd</item>
+      <item>vmovups</item>
+      <item>vmpsadbw</item>
+      <item>vmptrld</item>
+      <item>vmptrst</item>
+      <item>vmread</item>
+      <item>vmresume</item>
+      <item>vmrun</item>
+      <item>vmsave</item>
+      <item>vmulpd</item>
+      <item>vmulps</item>
+      <item>vmulsd</item>
+      <item>vmulss</item>
+      <item>vmwrite</item>
+      <item>vmxoff</item>
+      <item>vmxon</item>
+      <item>vorpd</item>
+      <item>vorps</item>
+      <item>vp2intersectd</item>
+      <item>vpabsb</item>
+      <item>vpabsd</item>
+      <item>vpabsq</item>
+      <item>vpabsw</item>
+      <item>vpackssdw</item>
+      <item>vpacksswb</item>
+      <item>vpackusdw</item>
+      <item>vpackuswb</item>
+      <item>vpaddb</item>
+      <item>vpaddd</item>
+      <item>vpaddq</item>
+      <item>vpaddsb</item>
+      <item>vpaddsw</item>
+      <item>vpaddusb</item>
+      <item>vpaddusw</item>
+      <item>vpaddw</item>
+      <item>vpalignr</item>
+      <item>vpand</item>
+      <item>vpandd</item>
+      <item>vpandn</item>
+      <item>vpandnd</item>
+      <item>vpandnq</item>
+      <item>vpandq</item>
+      <item>vpavgb</item>
+      <item>vpavgw</item>
+      <item>vpblendd</item>
+      <item>vpblendmb</item>
+      <item>vpblendmd</item>
+      <item>vpblendmq</item>
+      <item>vpblendmw</item>
+      <item>vpblendvb</item>
+      <item>vpblendw</item>
+      <item>vpbroadcastb</item>
+      <item>vpbroadcastd</item>
+      <item>vpbroadcastmb2q</item>
+      <item>vpbroadcastmw2d</item>
+      <item>vpbroadcastq</item>
+      <item>vpbroadcastw</item>
+      <item>vpclmulhqhqdq</item>
+      <item>vpclmulhqlqdq</item>
+      <item>vpclmullqhqdq</item>
+      <item>vpclmullqlqdq</item>
+      <item>vpclmulqdq</item>
+      <item>vpcmov</item>
+      <item>vpcmpb</item>
+      <item>vpcmpd</item>
+      <item>vpcmpeqb</item>
+      <item>vpcmpeqd</item>
+      <item>vpcmpeqq</item>
+      <item>vpcmpequb</item>
+      <item>vpcmpequd</item>
+      <item>vpcmpequq</item>
+      <item>vpcmpequw</item>
+      <item>vpcmpeqw</item>
+      <item>vpcmpestri</item>
+      <item>vpcmpestrm</item>
+      <item>vpcmpgeb</item>
+      <item>vpcmpged</item>
+      <item>vpcmpgeq</item>
+      <item>vpcmpgeub</item>
+      <item>vpcmpgeud</item>
+      <item>vpcmpgeuq</item>
+      <item>vpcmpgeuw</item>
+      <item>vpcmpgew</item>
+      <item>vpcmpgtb</item>
+      <item>vpcmpgtd</item>
+      <item>vpcmpgtq</item>
+      <item>vpcmpgtub</item>
+      <item>vpcmpgtud</item>
+      <item>vpcmpgtuq</item>
+      <item>vpcmpgtuw</item>
+      <item>vpcmpgtw</item>
+      <item>vpcmpistri</item>
+      <item>vpcmpistrm</item>
+      <item>vpcmpleb</item>
+      <item>vpcmpled</item>
+      <item>vpcmpleq</item>
+      <item>vpcmpleub</item>
+      <item>vpcmpleud</item>
+      <item>vpcmpleuq</item>
+      <item>vpcmpleuw</item>
+      <item>vpcmplew</item>
+      <item>vpcmpltb</item>
+      <item>vpcmpltd</item>
+      <item>vpcmpltq</item>
+      <item>vpcmpltub</item>
+      <item>vpcmpltud</item>
+      <item>vpcmpltuq</item>
+      <item>vpcmpltuw</item>
+      <item>vpcmpltw</item>
+      <item>vpcmpneqb</item>
+      <item>vpcmpneqd</item>
+      <item>vpcmpneqq</item>
+      <item>vpcmpnequb</item>
+      <item>vpcmpnequd</item>
+      <item>vpcmpnequq</item>
+      <item>vpcmpnequw</item>
+      <item>vpcmpneqw</item>
+      <item>vpcmpngtb</item>
+      <item>vpcmpngtd</item>
+      <item>vpcmpngtq</item>
+      <item>vpcmpngtub</item>
+      <item>vpcmpngtud</item>
+      <item>vpcmpngtuq</item>
+      <item>vpcmpngtuw</item>
+      <item>vpcmpngtw</item>
+      <item>vpcmpnleb</item>
+      <item>vpcmpnled</item>
+      <item>vpcmpnleq</item>
+      <item>vpcmpnleub</item>
+      <item>vpcmpnleud</item>
+      <item>vpcmpnleuq</item>
+      <item>vpcmpnleuw</item>
+      <item>vpcmpnlew</item>
+      <item>vpcmpnltb</item>
+      <item>vpcmpnltd</item>
+      <item>vpcmpnltq</item>
+      <item>vpcmpnltub</item>
+      <item>vpcmpnltud</item>
+      <item>vpcmpnltuq</item>
+      <item>vpcmpnltuw</item>
+      <item>vpcmpnltw</item>
+      <item>vpcmpq</item>
+      <item>vpcmpub</item>
+      <item>vpcmpud</item>
+      <item>vpcmpuq</item>
+      <item>vpcmpuw</item>
+      <item>vpcmpw</item>
+      <item>vpcomb</item>
+      <item>vpcomd</item>
+      <item>vpcompressb</item>
+      <item>vpcompressd</item>
+      <item>vpcompressq</item>
+      <item>vpcompressw</item>
+      <item>vpcomq</item>
+      <item>vpcomub</item>
+      <item>vpcomud</item>
+      <item>vpcomuq</item>
+      <item>vpcomuw</item>
+      <item>vpcomw</item>
+      <item>vpconflictd</item>
+      <item>vpconflictq</item>
+      <item>vpdpbusd</item>
+      <item>vpdpbusds</item>
+      <item>vpdpwssd</item>
+      <item>vpdpwssds</item>
+      <item>vperm2f128</item>
+      <item>vperm2i128</item>
+      <item>vpermb</item>
+      <item>vpermd</item>
+      <item>vpermi2b</item>
+      <item>vpermi2d</item>
+      <item>vpermi2pd</item>
+      <item>vpermi2ps</item>
+      <item>vpermi2q</item>
+      <item>vpermi2w</item>
+      <item>vpermilpd</item>
+      <item>vpermilps</item>
+      <item>vpermpd</item>
+      <item>vpermps</item>
+      <item>vpermq</item>
+      <item>vpermt2b</item>
+      <item>vpermt2d</item>
+      <item>vpermt2pd</item>
+      <item>vpermt2ps</item>
+      <item>vpermt2q</item>
+      <item>vpermt2w</item>
+      <item>vpermw</item>
+      <item>vpexpandb</item>
+      <item>vpexpandd</item>
+      <item>vpexpandq</item>
+      <item>vpexpandw</item>
+      <item>vpextrb</item>
+      <item>vpextrd</item>
+      <item>vpextrq</item>
+      <item>vpextrw</item>
+      <item>vpgatherdd</item>
+      <item>vpgatherdq</item>
+      <item>vpgatherqd</item>
+      <item>vpgatherqq</item>
+      <item>vphaddbd</item>
+      <item>vphaddbq</item>
+      <item>vphaddbw</item>
+      <item>vphaddd</item>
+      <item>vphadddq</item>
+      <item>vphaddsw</item>
+      <item>vphaddubd</item>
+      <item>vphaddubq</item>
+      <item>vphaddubw</item>
+      <item>vphaddudq</item>
+      <item>vphadduwd</item>
+      <item>vphadduwq</item>
+      <item>vphaddw</item>
+      <item>vphaddwd</item>
+      <item>vphaddwq</item>
+      <item>vphminposuw</item>
+      <item>vphsubbw</item>
+      <item>vphsubd</item>
+      <item>vphsubdq</item>
+      <item>vphsubsw</item>
+      <item>vphsubw</item>
+      <item>vphsubwd</item>
+      <item>vpinsrb</item>
+      <item>vpinsrd</item>
+      <item>vpinsrq</item>
+      <item>vpinsrw</item>
+      <item>vplzcntd</item>
+      <item>vplzcntq</item>
+      <item>vpmacsdd</item>
+      <item>vpmacsdqh</item>
+      <item>vpmacsdql</item>
+      <item>vpmacssdd</item>
+      <item>vpmacssdqh</item>
+      <item>vpmacssdql</item>
+      <item>vpmacsswd</item>
+      <item>vpmacssww</item>
+      <item>vpmacswd</item>
+      <item>vpmacsww</item>
+      <item>vpmadcsswd</item>
+      <item>vpmadcswd</item>
+      <item>vpmadd52huq</item>
+      <item>vpmadd52luq</item>
+      <item>vpmaddubsw</item>
+      <item>vpmaddwd</item>
+      <item>vpmaskmovd</item>
+      <item>vpmaskmovq</item>
+      <item>vpmaxsb</item>
+      <item>vpmaxsd</item>
+      <item>vpmaxsq</item>
+      <item>vpmaxsw</item>
+      <item>vpmaxub</item>
+      <item>vpmaxud</item>
+      <item>vpmaxuq</item>
+      <item>vpmaxuw</item>
+      <item>vpminsb</item>
+      <item>vpminsd</item>
+      <item>vpminsq</item>
+      <item>vpminsw</item>
+      <item>vpminub</item>
+      <item>vpminud</item>
+      <item>vpminuq</item>
+      <item>vpminuw</item>
+      <item>vpmovb2m</item>
+      <item>vpmovd2m</item>
+      <item>vpmovdb</item>
+      <item>vpmovdw</item>
+      <item>vpmovm2b</item>
+      <item>vpmovm2d</item>
+      <item>vpmovm2q</item>
+      <item>vpmovm2w</item>
+      <item>vpmovmskb</item>
+      <item>vpmovq2m</item>
+      <item>vpmovqb</item>
+      <item>vpmovqd</item>
+      <item>vpmovqw</item>
+      <item>vpmovsdb</item>
+      <item>vpmovsdw</item>
+      <item>vpmovsqb</item>
+      <item>vpmovsqd</item>
+      <item>vpmovsqw</item>
+      <item>vpmovswb</item>
+      <item>vpmovsxbd</item>
+      <item>vpmovsxbq</item>
+      <item>vpmovsxbw</item>
+      <item>vpmovsxdq</item>
+      <item>vpmovsxwd</item>
+      <item>vpmovsxwq</item>
+      <item>vpmovusdb</item>
+      <item>vpmovusdw</item>
+      <item>vpmovusqb</item>
+      <item>vpmovusqd</item>
+      <item>vpmovusqw</item>
+      <item>vpmovuswb</item>
+      <item>vpmovw2m</item>
+      <item>vpmovwb</item>
+      <item>vpmovzxbd</item>
+      <item>vpmovzxbq</item>
+      <item>vpmovzxbw</item>
+      <item>vpmovzxdq</item>
+      <item>vpmovzxwd</item>
+      <item>vpmovzxwq</item>
+      <item>vpmuldq</item>
+      <item>vpmulhrsw</item>
+      <item>vpmulhuw</item>
+      <item>vpmulhw</item>
+      <item>vpmulld</item>
+      <item>vpmullq</item>
+      <item>vpmullw</item>
+      <item>vpmultishiftqb</item>
+      <item>vpmuludq</item>
+      <item>vpopcntb</item>
+      <item>vpopcntd</item>
+      <item>vpopcntq</item>
+      <item>vpopcntw</item>
+      <item>vpor</item>
+      <item>vpord</item>
+      <item>vporq</item>
+      <item>vpperm</item>
+      <item>vprold</item>
+      <item>vprolq</item>
+      <item>vprolvd</item>
+      <item>vprolvq</item>
+      <item>vprord</item>
+      <item>vprorq</item>
+      <item>vprorvd</item>
+      <item>vprorvq</item>
+      <item>vprotb</item>
+      <item>vprotd</item>
+      <item>vprotq</item>
+      <item>vprotw</item>
+      <item>vpsadbw</item>
+      <item>vpscatterdd</item>
+      <item>vpscatterdq</item>
+      <item>vpscatterqd</item>
+      <item>vpscatterqq</item>
+      <item>vpshab</item>
+      <item>vpshad</item>
+      <item>vpshaq</item>
+      <item>vpshaw</item>
+      <item>vpshlb</item>
+      <item>vpshld</item>
+      <item>vpshldd</item>
+      <item>vpshldq</item>
+      <item>vpshldvd</item>
+      <item>vpshldvq</item>
+      <item>vpshldvw</item>
+      <item>vpshldw</item>
+      <item>vpshlq</item>
+      <item>vpshlw</item>
+      <item>vpshrdd</item>
+      <item>vpshrdq</item>
+      <item>vpshrdvd</item>
+      <item>vpshrdvq</item>
+      <item>vpshrdvw</item>
+      <item>vpshrdw</item>
+      <item>vpshufb</item>
+      <item>vpshufbitqmb</item>
+      <item>vpshufd</item>
+      <item>vpshufhw</item>
+      <item>vpshuflw</item>
+      <item>vpsignb</item>
+      <item>vpsignd</item>
+      <item>vpsignw</item>
+      <item>vpslld</item>
+      <item>vpslldq</item>
+      <item>vpsllq</item>
+      <item>vpsllvd</item>
+      <item>vpsllvq</item>
+      <item>vpsllvw</item>
+      <item>vpsllw</item>
+      <item>vpsrad</item>
+      <item>vpsraq</item>
+      <item>vpsravd</item>
+      <item>vpsravq</item>
+      <item>vpsravw</item>
+      <item>vpsraw</item>
+      <item>vpsrld</item>
+      <item>vpsrldq</item>
+      <item>vpsrlq</item>
+      <item>vpsrlvd</item>
+      <item>vpsrlvq</item>
+      <item>vpsrlvw</item>
+      <item>vpsrlw</item>
+      <item>vpsubb</item>
+      <item>vpsubd</item>
+      <item>vpsubq</item>
+      <item>vpsubsb</item>
+      <item>vpsubsw</item>
+      <item>vpsubusb</item>
+      <item>vpsubusw</item>
+      <item>vpsubw</item>
+      <item>vpternlogd</item>
+      <item>vpternlogq</item>
+      <item>vptest</item>
+      <item>vptestmb</item>
+      <item>vptestmd</item>
+      <item>vptestmq</item>
+      <item>vptestmw</item>
+      <item>vptestnmb</item>
+      <item>vptestnmd</item>
+      <item>vptestnmq</item>
+      <item>vptestnmw</item>
+      <item>vpunpckhbw</item>
+      <item>vpunpckhdq</item>
+      <item>vpunpckhqdq</item>
+      <item>vpunpckhwd</item>
+      <item>vpunpcklbw</item>
+      <item>vpunpckldq</item>
+      <item>vpunpcklqdq</item>
+      <item>vpunpcklwd</item>
+      <item>vpxor</item>
+      <item>vpxord</item>
+      <item>vpxorq</item>
+      <item>vrangepd</item>
+      <item>vrangeps</item>
+      <item>vrangesd</item>
+      <item>vrangess</item>
+      <item>vrcp14pd</item>
+      <item>vrcp14ps</item>
+      <item>vrcp14sd</item>
+      <item>vrcp14ss</item>
+      <item>vrcp28pd</item>
+      <item>vrcp28ps</item>
+      <item>vrcp28sd</item>
+      <item>vrcp28ss</item>
+      <item>vrcpps</item>
+      <item>vrcpss</item>
+      <item>vreducepd</item>
+      <item>vreduceps</item>
+      <item>vreducesd</item>
+      <item>vreducess</item>
+      <item>vrndscalepd</item>
+      <item>vrndscaleps</item>
+      <item>vrndscalesd</item>
+      <item>vrndscaless</item>
+      <item>vroundpd</item>
+      <item>vroundps</item>
+      <item>vroundsd</item>
+      <item>vroundss</item>
+      <item>vrsqrt14pd</item>
+      <item>vrsqrt14ps</item>
+      <item>vrsqrt14sd</item>
+      <item>vrsqrt14ss</item>
+      <item>vrsqrt28pd</item>
+      <item>vrsqrt28ps</item>
+      <item>vrsqrt28sd</item>
+      <item>vrsqrt28ss</item>
+      <item>vrsqrtps</item>
+      <item>vrsqrtss</item>
+      <item>vscalefpd</item>
+      <item>vscalefps</item>
+      <item>vscalefsd</item>
+      <item>vscalefss</item>
+      <item>vscatterdpd</item>
+      <item>vscatterdps</item>
+      <item>vscatterpf0dpd</item>
+      <item>vscatterpf0dps</item>
+      <item>vscatterpf0qpd</item>
+      <item>vscatterpf0qps</item>
+      <item>vscatterpf1dpd</item>
+      <item>vscatterpf1dps</item>
+      <item>vscatterpf1qpd</item>
+      <item>vscatterpf1qps</item>
+      <item>vscatterqpd</item>
+      <item>vscatterqps</item>
+      <item>vshuff32x4</item>
+      <item>vshuff64x2</item>
+      <item>vshufi32x4</item>
+      <item>vshufi64x2</item>
+      <item>vshufpd</item>
+      <item>vshufps</item>
+      <item>vsqrtpd</item>
+      <item>vsqrtps</item>
+      <item>vsqrtsd</item>
+      <item>vsqrtss</item>
+      <item>vstmxcsr</item>
+      <item>vsubpd</item>
+      <item>vsubps</item>
+      <item>vsubsd</item>
+      <item>vsubss</item>
+      <item>vtestpd</item>
+      <item>vtestps</item>
+      <item>vucomisd</item>
+      <item>vucomiss</item>
+      <item>vunpckhpd</item>
+      <item>vunpckhps</item>
+      <item>vunpcklpd</item>
+      <item>vunpcklps</item>
+      <item>vxorpd</item>
+      <item>vxorps</item>
+      <item>vzeroall</item>
+      <item>vzeroupper</item>
+      <item>wbinvd</item>
+      <item>wbnoinvd</item>
+      <item>wrfsbase</item>
+      <item>wrgsbase</item>
+      <item>wrmsr</item>
+      <item>wrpkru</item>
+      <item>wrshr</item>
+      <item>wrssd</item>
+      <item>wrssq</item>
+      <item>wrussd</item>
+      <item>wrussq</item>
+      <item>xabort</item>
+      <item>xadd</item>
+      <item>xbegin</item>
+      <item>xbts</item>
+      <item>xchg</item>
+      <item>xcryptcbc</item>
+      <item>xcryptcfb</item>
+      <item>xcryptctr</item>
+      <item>xcryptecb</item>
+      <item>xcryptofb</item>
+      <item>xend</item>
+      <item>xgetbv</item>
+      <item>xlat</item>
+      <item>xlatb</item>
+      <item>xor</item>
+      <item>xorpd</item>
+      <item>xorps</item>
+      <item>xresldtrk</item>
+      <item>xrstor</item>
+      <item>xrstor64</item>
+      <item>xrstors</item>
+      <item>xrstors64</item>
+      <item>xsave</item>
+      <item>xsave64</item>
+      <item>xsavec</item>
+      <item>xsavec64</item>
+      <item>xsaveopt</item>
+      <item>xsaveopt64</item>
+      <item>xsaves</item>
+      <item>xsaves64</item>
+      <item>xsetbv</item>
+      <item>xsha1</item>
+      <item>xsha256</item>
+      <item>xstore</item>
+      <item>xsusldtrk</item>
+      <item>xtest</item>
+    </list>
+
+    <list name="branch instructions">
+      <item>call</item>
+      <item>iret</item>
+      <item>iretd</item>
+      <item>iretq</item>
+      <item>iretw</item>
+      <item>ja</item>
+      <item>jae</item>
+      <item>jb</item>
+      <item>jbe</item>
+      <item>jc</item>
+      <item>jcxz</item>
+      <item>je</item>
+      <item>jecxz</item>
+      <item>jg</item>
+      <item>jge</item>
+      <item>jl</item>
+      <item>jle</item>
+      <item>jmp</item>
+      <item>jmpe</item>
+      <item>jna</item>
+      <item>jnae</item>
+      <item>jnb</item>
+      <item>jnbe</item>
+      <item>jnc</item>
+      <item>jne</item>
+      <item>jng</item>
+      <item>jnge</item>
+      <item>jnl</item>
+      <item>jnle</item>
+      <item>jno</item>
+      <item>jnp</item>
+      <item>jns</item>
+      <item>jnz</item>
+      <item>jo</item>
+      <item>jp</item>
+      <item>jpe</item>
+      <item>jpo</item>
+      <item>jrcxz</item>
+      <item>js</item>
+      <item>jz</item>
+      <item>ret</item>
+      <item>retd</item>
+      <item>retf</item>
+      <item>retfd</item>
+      <item>retfq</item>
+      <item>retfw</item>
+      <item>retn</item>
+      <item>retnd</item>
+      <item>retnq</item>
+      <item>retnw</item>
+      <item>retq</item>
+      <item>retw</item>
+    </list>
+
+    <list name="macros">
+      <item>arg</item>
+      <item>assign</item>
+      <item>clear</item>
+      <item>defalias</item>
+      <item>define</item>
+      <item>defstr</item>
+      <item>deftok</item>
+      <item>depend</item>
+      <item>elif</item>
+      <item>elifctx</item>
+      <item>elifdef</item>
+      <item>elifempty</item>
+      <item>elifenv</item>
+      <item>elifidn</item>
+      <item>elifidni</item>
+      <item>elifn</item>
+      <item>elifnctx</item>
+      <item>elifndef</item>
+      <item>elifnempty</item>
+      <item>elifnenv</item>
+      <item>elifnidn</item>
+      <item>elifnidni</item>
+      <item>elifntoken</item>
+      <item>eliftoken</item>
+      <item>else</item>
+      <item>exitrep</item>
+      <item>endif</item>
+      <item>endmacro</item>
+      <item>endrep</item>
+      <item>error</item>
+      <item>fatal</item>
+      <item>idefine</item>
+      <item>if</item>
+      <item>ifctx</item>
+      <item>ifdef</item>
+      <item>ifempty</item>
+      <item>ifid</item>
+      <item>ifidn</item>
+      <item>ifidni</item>
+      <item>ifmacro</item>
+      <item>ifn</item>
+      <item>ifnctx</item>
+      <item>ifndef</item>
+      <item>ifnempty</item>
+      <item>ifnenv</item>
+      <item>ifnidn</item>
+      <item>ifnidni</item>
+      <item>ifnmacro</item>
+      <item>ifntoken</item>
+      <item>ifnum</item>
+      <item>ifstr</item>
+      <item>iftoken</item>
+      <item>imacro</item>
+      <item>include</item>
+      <item>line</item>
+      <item>local</item>
+      <item>macro</item>
+      <item>pathsearch</item>
+      <item>pop</item>
+      <item>pragma</item>
+      <item>push</item>
+      <item>rep</item>
+      <item>repl</item>
+      <item>rotate</item>
+      <item>stacksize</item>
+      <item>strcat</item>
+      <item>strlen</item>
+      <item>substr</item>
+      <item>undef</item>
+      <item>unmacro</item>
+      <item>use</item>
+      <item>warning</item>
+      <item>xdefine</item>
+    </list>
+
+    <list name="Data">
+      <!-- repeat some data declaration -->
+      <item>times</item>
+      <!-- constants -->
+      <item>equ</item>
+      <!-- Initialized data -->
+      <item>db</item>
+      <item>dw</item>
+      <item>dd</item>
+      <item>dq</item>
+      <item>dt</item>
+      <item>do</item>
+      <item>dy</item>
+      <item>dz</item>
+      <!-- Uninitialized data -->
+      <item>resb</item>
+      <item>resw</item>
+      <item>resd</item>
+      <item>resq</item>
+      <item>rest</item>
+      <item>reso</item>
+      <item>resy</item>
+      <item>resz</item>
+      <!-- binary file include -->
+      <item>incbin</item>
+      <!-- operand size -->
+      <item>byte</item>
+      <item>word</item>
+      <item>dword</item>
+      <item>qword</item>
+      <item>tword</item>
+      <item>oword</item>
+      <item>yword</item>
+      <item>zword</item>
+      <item>short</item>
+      <item>ptr</item>
+    </list>
+
+    <list name="NASM Keywords">
+      <!-- prefix -->
+      <item>abs</item>
+      <item>a32</item>
+      <item>as</item>
+      <item>bnd</item>
+      <item>cs</item>
+      <item>lock</item>
+      <item>nobnd</item>
+      <item>rel</item>
+      <item>rep</item>
+      <item>repe</item>
+      <item>repne</item>
+      <item>repnz</item>
+      <item>repz</item>
+      <item>xacquire</item>
+      <item>xrelease</item>
+
+      <!-- NASM directives -->
+      <item>absolute</item>
+      <item>bits</item>
+      <item>common</item>
+      <item>default</item>
+      <item>cpu</item>
+      <item>extern</item>
+      <item>global</item>
+      <item>org</item>
+      <item>section</item>
+      <item>seg</item>
+      <item>segment</item>
+      <item>static</item>
+      <item>strict</item>
+      <item>use16</item>
+      <item>use32</item>
+      <item>wrt</item>
+
+      <!-- NASM standard macros -->
+      <item>struc</item>
+      <item>endstruc</item>
+      <item>istruc</item>
+      <item>at</item>
+      <item>iend</item>
+      <item>align</item>
+      <item>alignb</item>
+
+      <item>__?BITS?__</item>
+      <item>__?SECT?__</item>
+      <item>__?NASM_MAJOR?__</item>
+      <item>__?NASM_MINOR?__</item>
+      <item>__?NASM_SUBMINOR?__</item>
+      <item>__?NASM_PATCHLEVEL?__</item>
+      <item>__?NASM_SNAPSHOT?__</item>
+      <item>__?NASM_VERSION_ID?__</item>
+      <item>__?NASM_VER?__</item>
+      <item>__?FILE?__</item>
+      <item>__?LINE?__</item>
+      <item>__?OUTPUT_FORMAT?__</item>
+      <item>__?DEBUG_FORMAT?__</item>
+      <item>__?DATE?__</item>
+      <item>__?TIME?__</item>
+      <item>__?DATE_NUM?__</item>
+      <item>__?TIME_NUM?__</item>
+      <item>__?UTC_DATE?__</item>
+      <item>__?UTC_TIME?__</item>
+      <item>__?UTC_DATE_NUM?__</item>
+      <item>__?UTC_TIME_NUM?__</item>
+      <item>__?POSIX_TIME?__</item>
+      <item>__?PASS?__</item>
+      <item>__?USE_ALTREG?__</item>
+      <item>__?ALIGNMODE?__</item>
+
+      <item>__?utf16?__</item>
+      <item>__?utf16le?__</item>
+      <item>__?utf16be?__</item>
+      <item>__?utf32?__</item>
+      <item>__?utf32le?__</item>
+      <item>__?utf32be?__</item>
+      <item>__?float8?__</item>
+      <item>__?float16?__</item>
+      <item>__?bfloat16?__</item>
+      <item>__?float32?__</item>
+      <item>__?float64?__</item>
+      <item>__?float80m?__</item>
+      <item>__?float80e?__</item>
+      <item>__?float128l?__</item>
+      <item>__?float128h?__</item>
+      <item>__?Infinity?__</item>
+      <item>__?QNaN?__</item>
+      <item>__?NaN?__</item>
+      <item>__?SNaN?__</item>
+      <item>__?FLOAT_DAZ?__</item>
+      <item>__?FLOAT_ROUND?__</item>
+      <item>__?FLOAT?__</item>
+      <item>__?FLOAT?__</item>
+    </list>
+
+    <list name="special symbols">
+      <item>got</item>
+      <item>gotoff</item>
+      <item>gotpc</item>
+      <item>gotpcrel</item>
+      <item>gottpoff</item>
+      <item>imagebase</item>
+      <item>plt</item>
+      <item>start</item>
+      <item>sym</item>
+      <item>tlsie</item>
+      <item>tlvp</item>
+    </list>
+
+    <contexts>
+      <context name="Normal" attribute="Normal Text" lineEndContext="#stay" fallthroughContext="Instruction">
+        <DetectSpaces attribute="Normal Text"/>
+        <RegExpr attribute="Label" context="Instruction" String="(?:(?:\.|@@|&#37;&#37;)(?:\.@)?)?[A-Za-z_][A-Za-z0-9_.]*+:" firstNonSpace="1"/>
+      </context>
+
+      <context name="Instruction" attribute="Normal Text" lineEndContext="#pop">
+        <DetectSpaces attribute="Normal Text"/>
+        <IncludeRules context="IncInstruction"/>
+      </context>
+
+      <context name="IncInstruction" attribute="Normal Text" lineEndContext="#pop">
+        <DetectChar attribute="Preprocessor" context="#pop!Preprocessor" char="%" firstNonSpace="1"/>
+        <DetectChar attribute="Comment" context="#pop!Comment" char=";"/>
+        <keyword attribute="Data" context="#pop!Operand" String="Data"/>
+        <keyword attribute="Instructions" context="#pop!Operand" String="instructions"/>
+        <keyword attribute="Branch Instructions" context="#pop!Operand" String="branch instructions"/>
+        <keyword attribute="NASM Keywords" context="#pop!Operand" String="NASM Keywords"/>
+        <DetectIdentifier attribute="Unknown Instructions" context="UnknownInstruction"/>
+        <LineContinue attribute="Symbol" context="#pop!Operand"/>
+      </context>
+      <context name="UnknownInstruction" attribute="Unknown Instructions" lineEndContext="#pop#pop" fallthroughContext="#pop#pop!Operand">
+        <DetectChar attribute="Symbol" context="#stay" char="."/>
+        <Int attribute="Unknown Instructions" context="#stay"/>
+        <DetectIdentifier attribute="Unknown Instructions" context="#stay"/>
+      </context>
+
+      <context name="Operand" attribute="Normal Text" lineEndContext="#pop">
+        <DetectSpaces attribute="Normal Text"/>
+        <Detect2Chars attribute="Label" context="LabelIdent" char="%" char1="%"/>
+        <Detect2Chars attribute="Label" context="LabelIdent" char="@" char1="@"/>
+        <AnyChar attribute="Symbol" context="#stay" String=",-+/*%~^=!(){}[]:|&amp;?&lt;>"/>
+        <DetectChar attribute="Symbol" context="Dollar" char="$"/>
+        <DetectChar attribute="Symbol" context="SymbolOrLabel" char="." lookAhead="1"/>
+        <DetectChar attribute="String" context="SQString" char="'"/>
+        <DetectChar attribute="String" context="DQString" char="&quot;"/>
+        <DetectChar attribute="String" context="String" char="`"/>
+        <DetectChar attribute="Comment" context="#pop!Comment" char=";"/>
+        <AnyChar attribute="Number" context="Number" String="0123456789" lookAhead="1"/>
+        <keyword attribute="Registers" context="#stay" String="registers"/>
+        <keyword attribute="Data" context="#stay" String="Data"/>
+        <keyword attribute="NASM Keywords" context="#stay" String="NASM Keywords"/>
+        <DetectIdentifier attribute="Normal Text" context="Ident"/>
+        <LineContinue attribute="Symbol"/>
+      </context>
+
+      <context name="LabelIdent" attribute="Label" lineEndContext="#pop" fallthroughContext="#pop">
+        <DetectIdentifier attribute="Label" context="#stay"/>
+        <DetectChar attribute="Symbol" context="#stay" char="."/>
+        <Int attribute="Label" context="#stay"/>
+      </context>
+
+      <context name="Ident" attribute="Normal Text" lineEndContext="#pop" fallthroughContext="#pop">
+        <DetectChar attribute="Symbol" context="#stay" char="."/>
+        <AnyChar attribute="Normal Text" context="#stay" String="_$#@~?0123456789"/>
+        <DetectIdentifier attribute="Normal Text" context="#stay"/>
+      </context>
+
+      <context name="Dollar" attribute="Symbol" lineEndContext="#pop" fallthroughContext="#pop!Ident">
+        <Detect2Chars attribute="Symbol" context="#pop" char="$" char1="-"/>
+        <AnyChar attribute="Symbol" context="#pop!Ident" String="$+-"/>
+        <AnyChar attribute="BaseN" context="#pop!$Hex" String="0123456789"/>
+        <DetectIdentifier attribute="Normal Text" context="#pop!Ident"/>
+      </context>
+      <context name="$Hex" attribute="BaseN" lineEndContext="#pop" fallthroughContext="#pop">
+        <RegExpr attribute="BaseN" context="#pop!CheckNumberSuffix" String="[0-9a-fA-F_]*"/>
+      </context>
+
+      <context name="Number" attribute="Number" lineEndContext="#pop">
+        <RegExpr attribute="Float" context="#pop!FloatSuffix" insensitive="1" String="&float;"/>
+        <RegExpr attribute="Radix" context="#pop!PrefixedNumber" insensitive="1" String="&prefixedBaseN;" lookAhead="1"/>
+        <RegExpr attribute="BaseN" context="#pop!BaseSuffix" insensitive="1" String="&baseN;"/>
+        <RegExpr attribute="Number" context="#pop!NumberSuffix" insensitive="1" String="&number;"/>
+      </context>
+      <context name="FloatSuffix" attribute="Float" lineEndContext="#pop" fallthroughContext="#pop!CheckNumberSuffix">
+        <AnyChar attribute="Radix" context="#pop!CheckNumberSuffix" String="pP"/>
+      </context>
+      <context name="BaseSuffix" attribute="BaseN" lineEndContext="#pop" fallthroughContext="#pop!CheckNumberSuffix">
+        <AnyChar attribute="Radix" context="#pop!CheckNumberSuffix" String="byoqhxBYOQHX"/>
+      </context>
+      <context name="NumberSuffix" attribute="Number" lineEndContext="#pop" fallthroughContext="#pop!CheckNumberSuffix">
+        <AnyChar attribute="Radix" context="#pop!CheckNumberSuffix" String="dtDT"/>
+      </context>
+      <context name="PrefixedNumber" attribute="Radix" lineEndContext="#pop">
+        <Detect2Chars attribute="Radix" context="#pop!$Hex" char="0" char1="h"/>
+        <Detect2Chars attribute="Radix" context="#pop!$Hex" char="0" char1="x"/>
+        <Detect2Chars attribute="Radix" context="#pop!Octal" char="0" char1="q"/>
+        <Detect2Chars attribute="Radix" context="#pop!Octal" char="0" char1="o"/>
+        <Detect2Chars attribute="Radix" context="#pop!Binary" char="0" char1="b"/>
+        <Detect2Chars attribute="Radix" context="#pop!Binary" char="0" char1="y"/>
+        <Detect2Chars attribute="Radix" context="#pop!Decimal" char="0" char1="d"/>
+        <Detect2Chars attribute="Radix" context="#pop!Decimal" char="0" char1="t"/>
+        <Detect2Chars attribute="Radix" context="#pop!$Hex" char="0" char1="H"/>
+        <Detect2Chars attribute="Radix" context="#pop!$Hex" char="0" char1="X"/>
+        <Detect2Chars attribute="Radix" context="#pop!Octal" char="0" char1="Q"/>
+        <Detect2Chars attribute="Radix" context="#pop!Octal" char="0" char1="O"/>
+        <Detect2Chars attribute="Radix" context="#pop!Binary" char="0" char1="B"/>
+        <Detect2Chars attribute="Radix" context="#pop!Binary" char="0" char1="Y"/>
+        <Detect2Chars attribute="Radix" context="#pop!Decimal" char="0" char1="D"/>
+        <Detect2Chars attribute="Radix" context="#pop!Decimal" char="0" char1="T"/>
+      </context>
+      <context name="Octal" attribute="BaseN" lineEndContext="#pop">
+        <RegExpr attribute="BaseN" context="#pop!CheckNumberSuffix" insensitive="1" String="[0-7_]+"/>
+      </context>
+      <context name="Binary" attribute="BaseN" lineEndContext="#pop">
+        <RegExpr attribute="BaseN" context="#pop!CheckNumberSuffix" insensitive="1" String="[01_]+"/>
+      </context>
+      <context name="Decimal" attribute="Number" lineEndContext="#pop">
+        <RegExpr attribute="Number" context="#pop!CheckNumberSuffix" insensitive="1" String="[0-9_]+"/>
+      </context>
+      <context name="CheckNumberSuffix" attribute="Number" lineEndContext="#pop" fallthroughContext="#pop">
+        <DetectSpaces attribute="Normal Text" context="#pop"/>
+        <AnyChar attribute="Symbol" context="#pop" String=",-+/*%~^=!(){}[]:|&amp;?&lt;>"/>
+        <WordDetect attribute="NASM Keywords" context="#pop" String=".nolist"/>
+        <RegExpr attribute="Error" context="#pop" String="[\d\w]+"/>
+      </context>
+
+      <context name="SymbolOrLabel" attribute="Symbol" lineEndContext="#pop" fallthroughContext="#pop">
+        <RegExpr attribute="Label" context="#pop" String="\.(?:\.@)?[A-Za-z0-9_.]*+"/>
+        <Detect2Chars attribute="Symbol" context="#pop!SpecialSymbol" char="." char1="."/>
+        <DetectChar attribute="Symbol" context="#pop" char="."/>
+      </context>
+      <context name="SpecialSymbol" attribute="Symbol" lineEndContext="#pop" fallthroughContext="#pop">
+        <keyword attribute="Symbol" context="#pop" String="special symbols"/>
+        <DetectIdentifier attribute="Unknown Symbol" context="#pop"/>
+      </context>
+
+      <context name="Preprocessor" attribute="Preprocessor" lineEndContext="#pop" fallthroughContext="#pop">
+        <WordDetect attribute="Preprocessor" context="#pop!Macro" String="macro"/>
+        <WordDetect attribute="Preprocessor" context="#pop!Macro" String="imacro"/>
+        <keyword attribute="Preprocessor" context="#pop!Instruction" String="macros"/>
+        <Int attribute="Number" context="#pop"/>
+      </context>
+      <context name="Macro" attribute="Preprocessor" lineEndContext="#pop">
+        <DetectSpaces attribute="Normal Text"/>
+        <DetectChar attribute="Preprocessor" context="MacroPreprocessor" char="%" firstNonSpace="1"/>
+        <WordDetect attribute="NASM Keywords" context="#stay" String=".nolist"/>
+        <IncludeRules context="IncInstruction"/>
+      </context>
+      <context name="MacroPreprocessor" attribute="Preprocessor" lineEndContext="#pop" fallthroughContext="#pop!Preprocessor">
+        <WordDetect attribute="Preprocessor" context="#pop#pop" String="endmacro"/>
+        <Detect2Chars attribute="Preprocessor" context="#pop" char="?" char1="?"/>
+        <AnyChar attribute="Preprocessor" context="#pop" String="?,"/>
+        <Detect2Chars attribute="Preprocessor" context="#pop!MacroLabel" char="$" char1="$"/>
+        <AnyChar attribute="Preprocessor" context="#pop!MacroLabel" String="%$"/>
+        <AnyChar attribute="Preprocessor" context="#pop!MacroNumber" String="-+"/>
+        <DetectChar attribute="Preprocessor" context="#pop!MacroIdent" char="!"/>
+        <Int attribute="Preprocessor" context="#pop"/>
+      </context>
+      <context name="MacroNumber" attribute="Preprocessor" lineEndContext="#pop" fallthroughContext="#pop">
+        <Int attribute="Preprocessor" context="#pop"/>
+      </context>
+      <context name="MacroIdent" attribute="Preprocessor" lineEndContext="#pop" fallthroughContext="#pop">
+        <DetectIdentifier attribute="Normal Text" context="#pop"/>
+      </context>
+      <context name="MacroLabel" attribute="Preprocessor" lineEndContext="#pop" fallthroughContext="#pop">
+        <DetectIdentifier attribute="Label" context="#pop"/>
+      </context>
+
+      <context name="Comment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces attribute="Comment"/>
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+        <DetectIdentifier attribute="Comment"/>
+      </context>
+
+      <context name="SQString" attribute="String" lineEndContext="#pop">
+        <LineContinue attribute="Symbol"/>
+        <DetectChar attribute="String" context="#pop" char="'"/>
+      </context>
+      <context name="DQString" attribute="String" lineEndContext="#pop">
+        <LineContinue attribute="Symbol"/>
+        <DetectChar attribute="String" context="#pop" char="&quot;"/>
+      </context>
+      <context name="String" attribute="String" lineEndContext="#pop">
+        <LineContinue attribute="Symbol"/>
+        <DetectChar attribute="Symbol" context="Escape" char="\" lookAhead="1"/>
+        <DetectChar attribute="String" context="#pop" char="`"/>
+      </context>
+      <context name="Escape" attribute="Char" lineEndContext="#pop">
+        <RegExpr attribute="Char" context="#pop" String="\\(?:['&quot;`\\?abtnvfre]|[0-7]{3}|[xX][0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|0)"/>
+        <RegExpr attribute="Bad Char" context="#pop" String="\\(?:[0-7]++|[xXuU][0-9a-fA-F]*|)"/>
+      </context>
+    </contexts>
+
+    <itemDatas>
+      <itemData name="Normal Text" defStyleNum="dsNormal"/>
+      <itemData name="Registers" defStyleNum="dsKeyword"/>
+      <itemData name="Instructions" defStyleNum="dsKeyword"/>
+      <itemData name="Branch Instructions" defStyleNum="dsControlFlow"/>
+      <itemData name="Unknown Instructions" defStyleNum="dsNormal"/>
+      <itemData name="NASM Keywords" defStyleNum="dsKeyword"/>
+      <itemData name="Comment" defStyleNum="dsComment"/>
+      <itemData name="Label" defStyleNum="dsFunction"/>
+      <itemData name="Data" defStyleNum="dsDataType"/>
+      <itemData name="BaseN" defStyleNum="dsBaseN"/>
+      <itemData name="Float" defStyleNum="dsFloat"/>
+      <itemData name="Number" defStyleNum="dsDecVal"/>
+      <itemData name="Radix" defStyleNum="dsBaseN"/>
+      <itemData name="Char" defStyleNum="dsChar"/>
+      <itemData name="String" defStyleNum="dsString"/>
+      <itemData name="Preprocessor" defStyleNum="dsOthers"/>
+      <itemData name="Symbol" defStyleNum="dsOperator"/>
+      <itemData name="Unknown Symbol" defStyleNum="dsError"/>
+      <itemData name="Bad Char" defStyleNum="dsError"/>
+      <itemData name="Error" defStyleNum="dsError"/>
+    </itemDatas>
+  </highlighting>
+  <general>
+    <keywords casesensitive="0" weakDeliminator="?"/>
+    <comments>
+      <comment name="singleLine" start=";" position="afterwhitespace"/>
     </comments>
   </general>
 </language>
diff --git a/syntax/nim.xml b/syntax/nim.xml
new file mode 100644
--- /dev/null
+++ b/syntax/nim.xml
@@ -0,0 +1,356 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+
+<!--
+Improvements:
+
+- fixed typo: "lamba" is now "lambda"
+- added bind, func, typed, untyped, on, off
+- added multiline strings
+- added multiline comments (with stacking!)
+- added support for hex, binary, and octal numbers
+- added support for numerical literal suffixes (e.g. 'f64)
+- added triple-quote strings, raw strings and regex strings
+- made escape sequences in strings work slightly better (still needs work)
+- changed pragma syntax highlighting to dsAttribute instead of dsDataType
+- doc comments
+- TODO/BUG/FIXME/HACK/XXXX/NOTE comments
+
+-->
+
+<language
+	name="Nim"
+	version="2"
+	kateversion="5.0"
+	section="Sources"
+	extensions="*.nim"
+	mimetype="text/x-nim"
+	indenter="python"
+	author="github.com/juancarlospaco"
+	license="WTFPL">
+
+	<highlighting>
+		<list name="keywords">
+			<item>const</item>
+			<item>export</item>
+			<item>import</item>
+			<item>include</item>
+			<item>lambda</item>
+			<item>let</item>
+			<item>var</item>
+		</list>
+
+		<list name="controls">
+			<item>assert</item> <!-- system -->
+			<item>asm</item>
+			<item>atomic</item>
+			<item>block</item>
+			<item>break</item>
+			<item>case</item>
+			<item>cast</item>
+			<item>compiles</item> <!-- system -->
+			<item>continue</item>
+			<item>declared</item> <!-- system -->
+			<item>declaredinscope</item> <!-- system -->
+			<item>defined</item> <!-- system -->
+			<item>discard</item>
+			<item>do</item>
+			<item>echo</item> <!-- system -->
+			<item>elif</item>
+			<item>else</item>
+			<item>end</item>
+			<item>except</item>
+			<item>finally</item>
+			<item>for</item>
+			<item>from</item>
+			<item>if</item>
+			<item>mixin</item>
+			<item>bind</item>
+			<item>new</item> <!-- system -->
+			<item>raise</item>
+			<item>return</item>
+			<item>sizeof</item> <!-- system -->
+			<item>try</item>
+			<item>when</item>
+			<item>while</item>
+			<item>quit</item> <!-- system -->
+			<item>using</item>
+			<item>yield</item>
+		</list>
+
+		<list name="operators">
+			<item>addr</item>
+			<item>and</item>
+			<item>as</item>
+			<item>div</item>
+			<item>in</item>
+			<item>is</item>
+			<item>isnot</item>
+			<item>mod</item>
+			<item>not</item>
+			<item>notin</item>
+			<item>of</item>
+			<item>or</item>
+			<item>shl</item>
+			<item>shr</item>
+			<item>xor</item>
+		</list>
+
+		<list name="types">
+			<item>array</item>
+			<item>bool</item>
+			<item>byte</item>
+			<item>cchar</item>
+			<item>cdouble</item>
+			<item>char</item>
+			<item>cfloat</item>
+			<item>cint</item>
+			<item>clong</item>
+			<item>cshort</item>
+			<item>cstring</item>
+			<item>cuint</item>
+			<item>distinct</item>
+			<item>expr</item>
+			<item>float</item>
+			<item>float32</item>
+			<item>float64</item>
+			<item>generic</item>
+			<item>int</item>
+			<item>int8</item>
+			<item>int16</item>
+			<item>int32</item>
+			<item>int64</item>
+			<item>interface</item>
+			<item>openarray</item>
+			<item>pointer</item>
+			<item>set</item>
+			<item>seq</item>
+			<item>stmt</item>
+			<item>string</item>
+			<item>tuple</item>
+			<item>typedesc</item>
+			<item>uint</item>
+			<item>uint8</item>
+			<item>uint16</item>
+			<item>uint32</item>
+			<item>uint64</item>
+			<item>varargs</item>
+			<item>void</item>
+			<item>untyped</item>
+			<item>typed</item>
+		</list>
+
+		<list name="attrs">
+			<item>out</item>
+			<item>ptr</item>
+			<item>ref</item>
+			<item>shared</item>
+			<item>static</item>
+		</list>
+
+		<list name="consts">
+			<item>false</item>
+			<item>inf</item>
+			<item>nil</item>
+			<item>true</item>
+			<item>on</item>
+			<item>off</item>
+		</list>
+
+		<list name="others">
+			<item>result</item>
+		</list>
+
+		<list name="proctar">
+			<item>converter</item>
+			<item>iterator</item>
+			<item>macro</item>
+			<item>method</item>
+			<item>proc</item>
+			<item>func</item>
+			<item>template</item>
+		</list>
+
+		<list name="typetar">
+			<item>type</item>
+			<item>concept</item>
+			<item>object</item>
+			<item>enum</item>
+		</list>
+
+		<contexts>
+			<context name="Normal" attribute="Normal Text" lineEndContext="#stay">
+				<DetectSpaces/>
+				<keyword context="#stay" attribute="Keywords" String="keywords"/>
+				<keyword context="#stay" attribute="Controls" String="controls"/>
+				<keyword context="#stay" attribute="Operators" String="operators"/>
+				<keyword context="#stay" attribute="Types"    String="types"/>
+				<keyword context="#stay" attribute="Attrs"    String="attrs"/>
+				<keyword context="#stay" attribute="Others"   String="others"/>
+				<keyword context="#stay" attribute="Constants" String="consts"/>
+
+				<keyword context="Start-Proctar" attribute="Keywords" String="proctar"/>
+				<keyword context="Start-Typetar" attribute="Keywords" String="typetar"/>
+
+				<StringDetect context="DocComment2" attribute="DocComment" String="##[" beginRegion="DocComment"/>
+				<Detect2Chars context="DocComment1" attribute="DocComment" char="#" char1="#"/>
+				<Detect2Chars context="Comment2" attribute="Comment" char="#" char1="[" beginRegion="Comment"/>
+				<DetectChar context="Comment1" attribute="Comment" char="#"/>
+
+				<StringDetect context="tripleq-string" attribute="String" String="&quot;&quot;&quot;" beginRegion="String"/>
+				<DetectChar   context="string"         attribute="String" char="&quot;" beginRegion="String"/>
+				<StringDetect context="re-string"      attribute="String" String="re&quot;" beginRegion="String"/>
+				<Detect2Chars context="raw-string"     attribute="String" char="r" char1="&quot;" beginRegion="String"/>
+
+				<RegExpr context="#stay" attribute="Hex"    String="0[xX][0-9A-Fa-f][0-9A-Fa-f_]*(?:'(?:(?:[ui](?:8|16|32|64))|(?:f(?:32|64|128))|[ufd]))?"/>
+				<RegExpr context="#stay" attribute="Octal"  String="0o[0-7][0-7_]*(?:'(?:(?:[ui](?:8|16|32|64))|(?:f(?:32|64|128))|[ufd]))?"/>
+				<RegExpr context="#stay" attribute="Binary" String="0[bB][01][01_]*(?:'(?:(?:[ui](?:8|16|32|64))|(?:f(?:32|64|128))|[ufd]))?"/>
+				<RegExpr context="#stay" attribute="Decimal" String="\b\d+(?=\.\.)"/>
+				<Float   context="#stay" attribute="Float"/>
+				<Int     context="#stay" attribute="Decimal"/>
+
+				<RegExpr context="#stay" attribute="Types"  String="\b_*[A-Z](?:\w|\._*[A-Z])*\b"/>
+				<RegExpr context="#stay" attribute="Funcs"  String="\b\w+\b\s*(?=(?:\[.*\]\w*)?(?:\(|(?:[ ](?![,+\-*/=!^&amp;&lt;&gt;|?]|and|as|div|in|is|isnot|mod|notin|of|or|shl|shr|xor))))"/>
+				<RegExpr context="#stay" attribute="Funcs"  String="\b\w+(?=&quot;)"/>
+
+				<DetectIdentifier/>
+
+				<Detect2Chars context="Pragmatar" attribute="Pragmas" char="{" char1="."/>
+				<RegExpr context="Proptar" attribute="Brackets" String="\.(?!\d)"/>
+				<RegExpr context="#stay" attribute="Float" String="\.(?=\d)"/>
+
+				<AnyChar context="#stay" attribute="Brackets" String="()[]{},:;"/>
+				<AnyChar context="#stay" attribute="Symbols"  String="+-*/=!@$%^&amp;&lt;&gt;|?"/>
+				<HlCChar context="#stay" attribute="Char"/>
+			</context>
+
+			<context name="stringescape" attribute="String" lineEndContext="#stay">
+				<RegExpr attribute="String Char" String="\\[&quot;abfnrtv]" context="#stay"/>
+			</context>
+
+			<context name="string" attribute="String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<IncludeRules context="stringescape"/>
+				<DetectChar context="#pop" attribute="String" char="&quot;" endRegion="String"/>
+			</context>
+			<context name="tripleq-string" attribute="String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<StringDetect context="#pop" attribute="String" String="&quot;&quot;&quot;" endRegion="String"/>
+			</context>
+			<context name="raw-string" attribute="String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<Detect2Chars context="#stay" attribute="String Char" char="&quot;" char1="&quot;"/>
+				<DetectChar context="#pop" attribute="String" char="&quot;" endRegion="String"/>
+			</context>
+			<context name="re-string" attribute="String" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<DetectChar context="#pop" attribute="String" char="&quot;" endRegion="String"/>
+				<DetectChar context="#stay" attribute="String" char="/"/> <!-- Avoid closing string by JavaScript -->
+				<IncludeRules context="Regular Expression##JavaScript"/>
+			</context>
+
+			<context name="Comment1" attribute="Comment" lineEndContext="#pop">
+				<LineContinue attribute="Comment" context="#stay"/>
+				<IncludeRules context="##Alerts"/>
+				<IncludeRules context="##Modelines"/>
+			</context>
+
+			<context name="DocComment1" attribute="DocComment" lineEndContext="#pop">
+				<LineContinue attribute="DocComment" context="#stay"/>
+			</context>
+
+			<context name="DocComment2" attribute="DocComment" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<LineContinue attribute="DocComment" context="#stay"/>
+				<StringDetect attribute="DocComment" context="DocComment2" String="##[" beginRegion="DocComment"/>
+				<StringDetect attribute="DocComment" context="#pop" String="]##" endRegion="DocComment"/>
+			</context>
+
+			<context name="Comment2" attribute="Comment" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<LineContinue attribute="Comment" context="#stay"/>
+				<Detect2Chars attribute="Comment" context="Comment2" char="#" char1="[" beginRegion="Comment"/>
+				<Detect2Chars attribute="Comment" context="#pop" char="]" char1="#" endRegion="Comment"/>
+				<IncludeRules context="##Alerts"/>
+				<IncludeRules context="##Modelines"/>
+			</context>
+
+			<context name="Start-Typetar" attribute="TypeDefs" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!Typetar">
+				<DetectSpaces context="#stay" attribute="Normal Text"/>
+			</context>
+			<context name="Typetar" attribute="TypeDefs" lineEndContext="#pop">
+				<DetectChar context="#stay" attribute="Brackets" char="."/>
+				<DetectChar context="#pop" char="#" lookAhead="true"/>
+				<DetectSpaces context="#pop" attribute="Normal Text"/>
+				<AnyChar context="#pop" attribute="Brackets" String="()[]{},:;"/>
+				<AnyChar context="#pop" attribute="Symbols"  String="+-*/=!@$%^&amp;&lt;&gt;"/>
+				<keyword context="#pop" attribute="Operators" String="operators"/>
+			</context>
+
+			<context name="Start-Proctar" attribute="TypeDefs" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop!Proctar">
+				<DetectSpaces context="#stay" attribute="Normal Text"/>
+			</context>
+			<context name="Proctar" attribute="ProcDefs" lineEndContext="#pop">
+				<DetectChar context="QuoteProctar" attribute="ProcDefs" char="`"/>
+				<DetectChar context="#stay" attribute="Brackets" char="."/>
+				<DetectChar context="#pop" char="#" lookAhead="true"/>
+				<DetectSpaces context="#pop" attribute="Normal Text"/>
+				<AnyChar context="#pop" attribute="Brackets" String="()[]{},:;"/>
+				<AnyChar context="#pop" attribute="Symbols"  String="+-*/=!@$%^&amp;&lt;&gt;"/>
+			</context>
+
+			<context name="QuoteProctar" attribute="ProcDefs" lineEndContext="#pop">
+				<DetectChar context="#pop" attribute="ProcDefs" char="`"/>
+			</context>
+
+			<context name="Pragmatar" attribute="Pragmas" lineEndContext="#stay" noIndentationBasedFolding="true">
+				<Detect2Chars context="#pop" attribute="Pragmas" char="." char1="}"/>
+			</context>
+
+			<context name="Proptar" attribute="Props" lineEndContext="#pop">
+				<keyword context="#pop" attribute="Types" String="types"/>
+				<RegExpr context="#pop" attribute="Types" String="_*[A-Z]\w*"/>
+				<RegExpr context="#pop" attribute="Funcs" String="_*[a-z]\w*(?=\()"/>
+				<RegExpr context="#pop" attribute="Props" String="_*[a-z]\w*(?=\.)"/>
+				<RegExpr context="#pop" attribute="Props" String="_*[a-z]\w*"/>
+				<RegExpr context="#pop" attribute="Brackets" String="\.+"/>
+			</context>
+		</contexts>
+
+		<itemDatas>
+			<itemData name="Normal Text" defStyleNum="dsNormal"    spellChecking="false"/>
+			<itemData name="Keywords"    defStyleNum="dsKeyword"   spellChecking="false"/>
+			<itemData name="Controls"    defStyleNum="dsControlFlow" spellChecking="false"/>
+			<itemData name="Pragmas"     defStyleNum="dsAttribute" spellChecking="false"/>
+			<itemData name="Types"       defStyleNum="dsAttribute" spellChecking="false"/>
+			<itemData name="Props"       defStyleNum="dsAttribute" spellChecking="false"/>
+			<itemData name="Funcs"       defStyleNum="dsFunction"  spellChecking="false"/>
+			<itemData name="Attrs"       defStyleNum="dsDataType"  spellChecking="false"/>
+			<itemData name="Others"      defStyleNum="dsOthers"    spellChecking="false"/>
+			<itemData name="Operators"   defStyleNum="dsComment"   spellChecking="false" bold="true" italic="false"/>
+			<itemData name="Constants"   defStyleNum="dsConstant"  spellChecking="false" bold="true"/>
+
+			<itemData name="TypeDefs"    defStyleNum="dsDataType" spellChecking="false" bold="true"/>
+			<itemData name="ProcDefs"    defStyleNum="dsString"   spellChecking="false" bold="true"/>
+
+			<itemData name="Brackets"    defStyleNum="dsKeyword"  spellChecking="false"/>
+			<itemData name="Symbols"     defStyleNum="dsComment"  spellChecking="false" italic="false"/>
+
+			<itemData name="Decimal"     defStyleNum="dsDecVal"   spellChecking="false"/>
+			<itemData name="Hex"         defStyleNum="dsBaseN"    spellChecking="false"/>
+			<itemData name="Binary"      defStyleNum="dsBaseN"    spellChecking="false"/>
+			<itemData name="Octal"       defStyleNum="dsBaseN"    spellChecking="false"/>
+			<itemData name="Float"       defStyleNum="dsFloat"    spellChecking="false"/>
+			<itemData name="Char"        defStyleNum="dsChar"     spellChecking="false"/>
+			<itemData name="String"      defStyleNum="dsString"   spellChecking="false"/>
+			<itemData name="String Char" defStyleNum="dsSpecialChar" spellChecking="false"/>
+			<itemData name="Comment"     defStyleNum="dsComment" />
+			<itemData name="DocComment"  defStyleNum="dsDocumentation" spellChecking="true"/>
+		</itemDatas>
+	</highlighting>
+
+	<general>
+		<comments>
+			<comment name="singleLine" start="#" position="afterwhitespace"/>
+			<comment name="multiLine" start="#[" end="]#" region="Comment"/>
+		</comments>
+		<folding indentationsensitive="true"/>
+		<keywords casesensitive="0"/>
+	</general>
+
+</language>
+<!-- kate: replace-tabs off; -->
diff --git a/syntax/noweb.xml b/syntax/noweb.xml
--- a/syntax/noweb.xml
+++ b/syntax/noweb.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="noweb" version="2" kateversion="2.4" section="Sources" extensions="*.w;*.nw" author="Scott Collins (scc@scottcollins.net)">
+<language name="noweb" version="3" kateversion="2.4" section="Sources" extensions="*.w;*.nw" author="Scott Collins (scc@scottcollins.net)">
 <!-- 
 #########################################################################
 # First version added to repository was 0.4, added as 1.0 .
@@ -48,5 +48,10 @@
       <itemData name="SectionName"  defStyleNum="dsRegionMarker" italic="true" />
     </itemDatas>
   </highlighting>
+  <general>
+    <comments>
+      <comment name="multiLine" start="&lt;!--" end="--&gt;" />
+    </comments>
+  </general>
 </language>
 
diff --git a/syntax/objectivec.xml b/syntax/objectivec.xml
--- a/syntax/objectivec.xml
+++ b/syntax/objectivec.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Objective-C" version="3" kateversion="5.0" section="Sources" extensions="*.m;*.h" mimetype="text/x-objc-src;text/x-c-hdr">
+<language name="Objective-C" version="5" kateversion="5.0" section="Sources" extensions="*.m;*.h" mimetype="text/x-objc-src;text/x-c-hdr">
   <highlighting>
     <list name="keywords">
       <item>break</item>
@@ -63,10 +63,9 @@
         <Int attribute="Decimal" context="Int Suffixes"/>
         <HlCChar attribute="Char" context="#stay"/>
         <DetectChar attribute="String" context="String" char="&quot;"/>
-        <Detect2Chars attribute="Comment" context="SingleLineComment" char="/" char1="/"/>
-        <Detect2Chars attribute="Comment" context="MultiLineComment" char="/" char1="*"/>
+        <IncludeRules context="FindComments" />
         <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;"/>
-        <RegExpr attribute="Preprocessor" context="Preprocessor" String="^#"/>
+        <DetectChar attribute="Preprocessor" context="Preprocessor" char="#" column="0"/>
         <Detect2Chars attribute="String" context="String" char="@" char1="&quot;" />
       </context>
       <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
@@ -87,20 +86,31 @@
         <HlCStringChar attribute="String Char" context="#stay"/>
         <DetectChar attribute="String" context="#pop" char="&quot;"/>
       </context>
-      <context attribute="Comment" lineEndContext="#pop" name="SingleLineComment"/>
+      <context name="FindComments" attribute="Normal Text" lineEndContext="#pop">
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="/" lookAhead="true"/>
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="*" lookAhead="true"/>
+      </context>
+      <context name="MatchComment" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <IncludeRules context="##Doxygen" />
+        <Detect2Chars attribute="Comment" context="#pop!SingleLineComment" char="/" char1="/" />
+        <Detect2Chars attribute="Comment" context="#pop!MultiLineComment" char="/" char1="*" beginRegion="Comment" />
+      </context>
+      <context attribute="Comment" lineEndContext="#pop" name="SingleLineComment">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
       <context attribute="Comment" lineEndContext="#stay" name="MultiLineComment">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/"/>
+        <DetectSpaces />
+        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
       <context attribute="Preprocessor" lineEndContext="Default" name="Preprocessor">
         <LineContinue attribute="Preprocessor" context="#stay"/>
         <RangeDetect attribute="Prep. Lib" context="#stay" char="&quot;" char1="&quot;"/>
         <RangeDetect attribute="Prep. Lib" context="#stay" char="&lt;" char1="&gt;"/>
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="SingleLineComment" char="/" char1="/"/>
-        <Detect2Chars attribute="Comment" context="MultiLineCommentPrep" char="/" char1="*"/>
-      </context>
-      <context attribute="Comment" lineEndContext="#stay" name="MultiLineCommentPrep">
-        <Detect2Chars attribute="Comment" context="#pop#pop" char="*" char1="/"/>
+        <IncludeRules context="FindComments" />
       </context>
     </contexts>
     <itemDatas>
@@ -123,8 +133,9 @@
   <general>
     <comments>
       <comment name="singleLine" start="//" />
-      <comment name="multiLine" start="/*" end="*/" />
+      <comment name="multiLine" start="/*" end="*/" region="Comment" />
     </comments>
     <keywords casesensitive="1" />
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/objectivecpp.xml b/syntax/objectivecpp.xml
--- a/syntax/objectivecpp.xml
+++ b/syntax/objectivecpp.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Objective-C++" version="5" kateversion="5.0" section="Sources" extensions="*.mm;*.M;*.h" mimetype="text/x-objcpp-src;text/x-c-hdr" author="Gennady Telegin (gepo@lvk.cs.msu.su">
+<language name="Objective-C++" version="7" kateversion="5.0" section="Sources" extensions="*.mm;*.M;*.h" mimetype="text/x-objcpp-src;text/x-c-hdr" author="Gennady Telegin (gepo@lvk.cs.msu.su">
   <highlighting>
     <list name="keywords">
       <item>break</item>
@@ -164,8 +164,6 @@
         <DetectSpaces />
         <RegExpr attribute="Preprocessor" context="Outscoped" String="#\s*if\s+0" beginRegion="Outscoped" firstNonSpace="true" />
         <DetectChar attribute="Preprocessor" context="Preprocessor" char="#" firstNonSpace="true" />
-        <StringDetect attribute="Region Marker" context="Region Marker" String="//BEGIN" beginRegion="Region1" firstNonSpace="true" />
-        <StringDetect attribute="Region Marker" context="Region Marker" String="//END" endRegion="Region1" firstNonSpace="true" />
         
         <keyword attribute="Keyword" context="#stay" String="keywords"/>
         <keyword attribute="Data Type" context="#stay" String="types"/>
@@ -179,20 +177,31 @@
         <Int attribute="Decimal" context="Int Suffixes"/>
         <HlCChar attribute="Char" context="#stay"/>
         <DetectChar attribute="String" context="String" char="&quot;"/>
-        <Detect2Chars attribute="Comment" context="SingleLineComment" char="/" char1="/"/>
-        <Detect2Chars attribute="Comment" context="MultiLineComment" char="/" char1="*"/>
 
+        <IncludeRules context="FindComments" />
+
         <Detect2Chars attribute="String" context="String" char="@" char1="&quot;" />
 
         <keyword attribute="Extensions" context="#stay" String="extensions" />
 
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="SingleLineComment" char="/" char1="/"/>
-        <Detect2Chars attribute="Comment" context="MultiLineComment" char="/" char1="*" beginRegion="Comment"/>
         <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1" />
         <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1" />
         <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/.*&lt;=&gt;?[]{|}~^&#59;"/>
       </context>
+
+      <context name="FindComments" attribute="Normal Text" lineEndContext="#pop">
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="/" lookAhead="true"/>
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="*" lookAhead="true" />
+      </context>
+
+      <context name="MatchComment" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <StringDetect attribute="Region Marker" context="#pop!Region Marker" String="//BEGIN" beginRegion="Region1" firstNonSpace="true" />
+        <StringDetect attribute="Region Marker" context="#pop!Region Marker" String="//END" endRegion="Region1" firstNonSpace="true" />
+        <IncludeRules context="##Doxygen" />
+        <Detect2Chars attribute="Comment" context="#pop!SingleLineComment" char="/" char1="/" />
+        <Detect2Chars attribute="Comment" context="#pop!MultiLineComment" char="/" char1="*" beginRegion="Comment" />
+      </context>
+
       <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
           <AnyChar String="fF" attribute="Float" context="#pop"/>
       </context>
@@ -212,16 +221,15 @@
         <DetectChar attribute="String" context="#pop" char="&quot;"/>
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="SingleLineComment">
+        <DetectSpaces />
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
       <context attribute="Comment" lineEndContext="#stay" name="MultiLineComment">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/"/>
-        <IncludeRules context="##Alerts" />
-      </context>
-      <context attribute="Comment" lineEndContext="#stay" name="MultiLineCommentPrep">
         <DetectSpaces />
-        <Detect2Chars attribute="Comment" context="#pop#pop" char="*" char1="/"/>
+        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
         <DetectIdentifier />
       </context>
 
@@ -236,9 +244,7 @@
         <RegExpr attribute="Preprocessor" context="#stay" String="define.*"/>
         <RangeDetect attribute="Prep. Lib" context="#stay" char="&quot;" char1="&quot;"/>
         <RangeDetect attribute="Prep. Lib" context="#stay" char="&lt;" char1="&gt;"/>
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="SingleLineComment" char="/" char1="/"/>
-        <Detect2Chars attribute="Comment" context="MultiLineCommentPrep" char="/" char1="*"/>
+        <IncludeRules context="FindComments" />
       </context>
 
       <context attribute="Preprocessor" lineEndContext="#pop" name="Define">
@@ -250,9 +256,7 @@
         <IncludeRules context="##Alerts" />
         <DetectIdentifier />
         <DetectChar attribute="String" context="String" char="&quot;"/>
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="SingleLineComment" char="/" char1="/"/>
-        <Detect2Chars attribute="Comment" context="MultiLineComment" char="/" char1="*" beginRegion="Comment"/>
+        <IncludeRules context="FindComments" />
         <RegExpr attribute="Comment" context="Outscoped intern" String="#\s*if" beginRegion="Outscoped" firstNonSpace="true" />
         <RegExpr attribute="Preprocessor" context="#pop" String="#\s*(endif|else|elif)" endRegion="Outscoped" firstNonSpace="true" />
       </context>
@@ -262,9 +266,7 @@
         <IncludeRules context="##Alerts" />
         <DetectIdentifier />
         <DetectChar attribute="String" context="String" char="&quot;"/>
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="SingleLineComment" char="/" char1="/"/>
-        <Detect2Chars attribute="Comment" context="MultiLineComment" char="/" char1="*" beginRegion="Comment"/>
+        <IncludeRules context="FindComments" />
         <RegExpr attribute="Comment" context="Outscoped intern" String="#\s*if" beginRegion="Outscoped" firstNonSpace="true"/>
         <RegExpr attribute="Comment" context="#pop" String="#\s*endif" endRegion="Outscoped" firstNonSpace="true"/>
       </context>
@@ -293,8 +295,9 @@
   <general>
     <comments>
       <comment name="singleLine" start="//" />
-      <comment name="multiLine" start="/*" end="*/" />
+      <comment name="multiLine" start="/*" end="*/" region="Comment" />
     </comments>
     <keywords casesensitive="1" />
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/ocaml.xml b/syntax/ocaml.xml
--- a/syntax/ocaml.xml
+++ b/syntax/ocaml.xml
@@ -17,7 +17,7 @@
           extensions="*.ml;*.mli"
           mimetype="text/x-ocaml"
           section="Sources"
-          version="6"
+          version="7"
           priority="10"
           kateversion="2.4"
           author="Glyn Webster (glynwebster@orcon.net.nz) and Vincent Hugot (vincent.hugot@gmail.com)"
@@ -431,6 +431,10 @@
         <Detect2Chars char="(" char1="*" context="Comment" attribute="Comment" beginRegion="comment" />
         <!-- Strings in Ocaml comments must be well-formed: -->
         <DetectChar char="&quot;" context="String in Comment" attribute="String in Comment" />
+
+        <DetectSpaces />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
 
       <context name="String in Comment" lineEndContext="#stay" attribute="String in Comment">
diff --git a/syntax/octave.xml b/syntax/octave.xml
--- a/syntax/octave.xml
+++ b/syntax/octave.xml
@@ -20,8 +20,8 @@
   Thanks to Luis Silvestre for previous version and suggestions
 -->
 
-
-<language name="Octave" version="5" kateversion="5.0" section="Scientific" extensions="*.octave;*.m;*.M" mimetype="text/octave" casesensitive="1" license="GPL" author="Luis Silvestre and Federico Zenith">
+<!-- low priority to let Objective-C win for .m files per default -->
+<language name="Octave" version="8" kateversion="5.0" section="Scientific" extensions="*.octave;*.m;*.M" priority="-9" mimetype="text/octave" casesensitive="1" license="GPL" author="Luis Silvestre and Federico Zenith">
 
   <highlighting>
 
@@ -2765,7 +2765,8 @@
         <keyword context="#stay" attribute="Functions" String="functions" />
         <keyword context="#stay" attribute="Builtin" String="builtin"/>
         <keyword context="#stay" attribute="Forge" String="forge" />
-        <RegExpr context="#stay" attribute="Comment" String="[%#].*$" />
+        <DetectChar context="Comment" attribute="Comment" char="%" />
+        <DetectChar context="Comment" attribute="Comment" char="#" />
         <RegExpr context="#stay" attribute="Variable" String="[a-zA-Z]\w*" />
         <RegExpr context="#stay" attribute="Number" String="(\d+(\.\d+)?|\.\d+)([eE][+-]?\d+)?[ij]?" />
         <AnyChar context="#stay" attribute="Delimiter" String="()[]{}"/>
@@ -2801,6 +2802,13 @@
       </context>
 
 
+      <context name="Comment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
+      </context>
+
+
     </contexts>
 
     <itemDatas>
@@ -2823,8 +2831,7 @@
 
   <general>
     <comments>
-      <comment name="singleLine" start="%" />
-      <comment name="singleLine" start="#" />
+      <comment name="singleLine" start="#" position="afterwhitespace" />
     </comments>
     <keywords weakDeliminator="." casesensitive="1"/>
   </general>
diff --git a/syntax/opencl.xml b/syntax/opencl.xml
--- a/syntax/opencl.xml
+++ b/syntax/opencl.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
 <language name="OpenCL" section="Sources"
-          version="4" kateversion="3.4"
+          version="6" kateversion="5.0"
           indenter="cstyle"
           extensions="*.cl"
           mimetype="text/x-clsrc"
@@ -125,10 +125,8 @@
     <contexts>
       <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
         <DetectSpaces />
-	<RegExpr attribute="Preprocessor" context="Outscoped" String="#\s*if\s+0\s*$" beginRegion="PP" firstNonSpace="true" />
+        <RegExpr attribute="Preprocessor" context="Outscoped" String="#\s*if\s+0\s*$" beginRegion="PP" firstNonSpace="true" />
         <DetectChar context="AfterHash" char="#" firstNonSpace="true" lookAhead="true" />
-        <StringDetect attribute="Region Marker" context="Region Marker" String="//BEGIN" beginRegion="Region1" firstNonSpace="true" />
-        <StringDetect attribute="Region Marker" context="Region Marker" String="//END" endRegion="Region1" firstNonSpace="true" />
         <keyword attribute="Keyword" context="#stay" String="keywords"/>
         <keyword attribute="Data Type" context="#stay" String="types"/>
         <DetectIdentifier />
@@ -140,12 +138,23 @@
         <Int attribute="Decimal" context="Int Suffixes"/>
         <HlCChar attribute="Char" context="#stay"/>
         <DetectChar attribute="String" context="String" char="&quot;"/>
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/"/>
-        <Detect2Chars attribute="Comment" context="Commentar 2" char="/" char1="*" beginRegion="Comment"/>
+        <IncludeRules context="FindComments" />
         <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;"/>
       </context>
 
+      <context name="FindComments" attribute="Normal Text" lineEndContext="#pop">
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="/" lookAhead="true" />
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="*" lookAhead="true" />
+      </context>
+
+      <context name="MatchComment" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <StringDetect attribute="Region Marker" context="#pop!Region Marker" String="//BEGIN" beginRegion="Region1" firstNonSpace="true" />
+        <StringDetect attribute="Region Marker" context="#pop!Region Marker" String="//END" endRegion="Region1" firstNonSpace="true" />
+        <IncludeRules context="##Doxygen" />
+        <Detect2Chars attribute="Comment" context="#pop!Commentar 1" char="/" char1="/"/>
+        <Detect2Chars attribute="Comment" context="#pop!Commentar 2" char="/" char1="*" beginRegion="Comment"/>
+      </context>
+
       <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
           <AnyChar String="fF" attribute="Float" context="#pop"/>
       </context>
@@ -172,12 +181,16 @@
 
       <context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
         <LineContinue attribute="Comment" context="#stay"/>
+        <DetectSpaces />
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
 
       <context attribute="Comment" lineEndContext="#stay" name="Commentar 2">
+        <DetectSpaces />
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
 
       <context attribute="Error" lineEndContext="#pop" name="AfterHash">
@@ -193,27 +206,19 @@
         <LineContinue attribute="Preprocessor" context="#stay"/>
         <RangeDetect attribute="Prep. Lib" context="#stay" char="&quot;" char1="&quot;"/>
         <RangeDetect attribute="Prep. Lib" context="#stay" char="&lt;" char1="&gt;"/>
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="Commentar/Preprocessor" char="/" char1="*" beginRegion="Comment2" />
-        <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/" />
+        <IncludeRules context="FindComments" />
       </context>
 
       <context attribute="Preprocessor" lineEndContext="#pop" name="Define">
         <LineContinue attribute="Preprocessor" context="#stay"/>
       </context>
 
-      <context attribute="Comment" lineEndContext="#stay" name="Commentar/Preprocessor">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment2" />
-      </context>
-
       <context attribute="Comment" lineEndContext="#stay" name="Outscoped" >
         <DetectSpaces />
         <IncludeRules context="##Alerts" />
         <DetectIdentifier />
         <DetectChar attribute="String" context="String" char="&quot;"/>
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/"/>
-        <Detect2Chars attribute="Comment" context="Commentar 2" char="/" char1="*" beginRegion="Comment"/>
+        <IncludeRules context="FindComments" />
         <RegExpr attribute="Comment" context="Outscoped intern" String="#\s*if" beginRegion="PP" firstNonSpace="true" />
         <RegExpr attribute="Preprocessor" context="#pop" String="#\s*el(?:se|if)" firstNonSpace="true" />
         <RegExpr attribute="Preprocessor" context="#pop" String="#\s*endif" endRegion="PP" firstNonSpace="true" />
@@ -224,9 +229,7 @@
         <IncludeRules context="##Alerts" />
         <DetectIdentifier />
         <DetectChar attribute="String" context="String" char="&quot;"/>
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/"/>
-        <Detect2Chars attribute="Comment" context="Commentar 2" char="/" char1="*" beginRegion="Comment"/>
+        <IncludeRules context="FindComments" />
         <RegExpr attribute="Comment" context="Outscoped intern" String="#\s*if" beginRegion="PP" firstNonSpace="true" />
         <RegExpr attribute="Comment" context="#pop" String="#\s*endif" endRegion="PP" firstNonSpace="true" />
       </context>
@@ -253,8 +256,9 @@
   <general>
     <comments>
       <comment name="singleLine" start="//" />
-      <comment name="multiLine" start="/*" end="*/" />
+      <comment name="multiLine" start="/*" end="*/" region="Comment" />
     </comments>
     <keywords casesensitive="1" additionalDeliminator="'&quot;" />
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/pascal.xml b/syntax/pascal.xml
--- a/syntax/pascal.xml
+++ b/syntax/pascal.xml
@@ -2,7 +2,7 @@
 <!DOCTYPE language SYSTEM "language.dtd">
 <language name="Pascal"
           section="Sources" 
-          version="2"
+          version="3"
           kateversion="3.3"
           extensions="*.p;*.pas;*.pp"
           mimetype="text/x-pascal" 
@@ -139,12 +139,6 @@
       <item>File</item>
       <item>Text</item>
     </list>
-    <list name="attention">
-      <item>FIXME</item>
-      <item>TODO</item>
-      <item>NOTE</item>
-      <item>###</item>
-    </list>
     <contexts>
       <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
         <RegExpr attribute="Keyword" context="#stay" String="\b(begin|case|record)(?=(\{[^}]*(\}|$)|\(\*.*(\*\)|$))*([\s]|$|//))" insensitive="true" beginRegion="Region1"/>
@@ -185,15 +179,21 @@
         <DetectChar attribute="Directive" context="#pop" char="}"/>
       </context>
       <context attribute="Comment" lineEndContext="#stay" name="Comment1">
-        <keyword attribute="Alert" context="#stay" String="attention" />
+        <DetectSpaces />
         <DetectChar attribute="Comment" context="#pop" char="}"              endRegion="Region2"/>
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
       <context attribute="Comment" lineEndContext="#stay" name="Comment2">
-        <keyword attribute="Alert" context="#stay" String="attention" />
+        <DetectSpaces />
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1=")"   endRegion="Region3"/>
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="Comment3">
-        <keyword attribute="Alert" context="#stay" String="attention" />
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
     </contexts>
     <itemDatas>
@@ -206,14 +206,14 @@
       <itemData name="String"      defStyleNum="dsString" />
       <itemData name="Directive"   defStyleNum="dsOthers" />
       <itemData name="Comment"     defStyleNum="dsComment" />
-      <itemData name="Alert"        defStyleNum="dsAlert" />
     </itemDatas>
   </highlighting>
   <general>
     <keywords casesensitive="0" />
     <comments>
-      <comment name="singleLine" start="//" />
-      <comment name="multiLine" start="{" end="}" />
+      <comment name="singleLine" start="//" position="afterwhitespace" />
+      <comment name="multiLine" start="{" end="}" region="Region2" />
     </comments>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/perl.xml b/syntax/perl.xml
--- a/syntax/perl.xml
+++ b/syntax/perl.xml
@@ -39,7 +39,7 @@
 
    Enhance tr/// and y/// support.
 -->
-<language name="Perl" version="10" kateversion="2.4" section="Scripts" extensions="*.pl;*.PL;*.pm" mimetype="application/x-perl;text/x-perl" priority="5" author="Anders Lund (anders@alweb.dk)" license="LGPLv2">
+<language name="Perl" version="13" kateversion="5.0" section="Scripts" extensions="*.pl;*.PL;*.pm" mimetype="application/x-perl;text/x-perl" priority="5" author="Anders Lund (anders@alweb.dk)" license="LGPLv2">
   <highlighting>
     <list name="keywords">
       <item>if</item>
@@ -465,7 +465,7 @@
         <IncludeRules context="ipstring_internal" />
       </context>
       <context name="ip_string_6" attribute="String (interpolated)" lineEndContext="#stay" dynamic="true">
-        <RegExpr attribute="String (interpolated)" context="#stay" String="\\%1" dynamic="true" />
+        <RegExpr attribute="String (interpolated)" context="#stay" String="\%1" dynamic="true" />
         <DetectChar attribute="Operator" context="#pop#pop#pop" char="1" dynamic="true"  endRegion="String"/>
         <IncludeRules context="ipstring_internal" />
       </context>
@@ -508,7 +508,7 @@
       <context name="string_6" attribute="String" lineEndContext="#stay" dynamic="true">
         <DetectIdentifier />
         <Detect2Chars attribute="String Special Character" context="#stay" char="\" char1="\" />
-        <RegExpr attribute="String Special Character" context="#stay" String="\\%1" dynamic="true"/>
+        <RegExpr attribute="String Special Character" context="#stay" String="\%1" dynamic="true"/>
         <DetectChar attribute="Operator" context="#pop#pop" char="1" dynamic="true" endRegion="String" />
       </context>
 
@@ -534,7 +534,7 @@
         <DetectChar attribute="Pattern" context="subst_curlybrace_pattern_recursive" char="{" />
       </context>
       <context name="subst_curlybrace_middle" attribute="Normal Text" lineEndContext="#stay" >
-        <RegExpr attribute="Comment" context="#stay" String="#.*$" />
+        <DetectChar attribute="Comment" context="comment" char="#" />
         <DetectChar attribute="Operator" context="subst_curlybrace_replace" char="{" beginRegion="Replacement" />
       </context>
       <context name="subst_curlybrace_replace" attribute="String (interpolated)" lineEndContext="#stay">
@@ -552,8 +552,12 @@
         <IncludeRules context="subst_curlybrace_pattern" />
       </context>
 
+      <context name="subst_maybe_comment" attribute="Pattern" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <DetectChar attribute="Comment" context="#pop!comment" char="#" />
+      </context>
+
       <context name="subst_paren_pattern" attribute="Pattern" lineEndContext="#stay">
-        <RegExpr attribute="Comment" context="#stay" String="\s+#.*$" />
+        <DetectSpaces attribute="Pattern" context="subst_maybe_comment" />
         <DetectChar attribute="Operator" context="subst_paren_replace" char=")" endRegion="Pattern" />
         <!-- Round brackets of RegExp pattern inside -->
         <DetectChar attribute="Pattern Internal Operator" context="subst_paren_pattern_internal_recursive" char="(" />
@@ -570,7 +574,7 @@
       </context>
 
       <context name="subst_bracket_pattern" attribute="Pattern" lineEndContext="#stay">
-        <RegExpr attribute="Comment" context="#stay" String="\s+#.*$" />
+        <DetectSpaces attribute="Pattern" context="subst_maybe_comment" />
         <IncludeRules context="regex_pattern_internal_ip" />
         <DetectChar attribute="Operator" context="subst_bracket_replace" char="]" endRegion="Pattern" />
       </context>
@@ -592,7 +596,7 @@
       </context>
 
       <context name="subst_sq_pattern" attribute="Pattern" lineEndContext="#stay">
-        <RegExpr attribute="Comment" context="#stay" String="\s+#.*$" />
+        <DetectSpaces attribute="Pattern" context="subst_maybe_comment" />
         <IncludeRules context="regex_pattern_internal" />
         <DetectChar attribute="Operator" context="subst_sq_replace" char="'" endRegion="Pattern" beginRegion="Pattern" />
       </context>
@@ -625,7 +629,7 @@
         <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\$(?=%1)" dynamic="true" />
         <RegExpr attribute="Operator" context="#pop#pop" String="%1[cgimosx]*" dynamic="true" endRegion="Pattern" />
         <IncludeRules context="regex_pattern_internal_ip" />
-        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\$(?=\\%1)" dynamic="true" />
+        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\$(?=\%1)" dynamic="true" />
       </context>
       <context name="pattern_brace" attribute="Pattern" lineEndContext="#stay">
         <RegExpr attribute="Operator" context="#pop#pop" String="\}[cgimosx]*" endRegion="Pattern" />
@@ -658,7 +662,7 @@
 
       <!-- rules internal stuff wrt regex patterns -->
       <context name="regex_pattern_internal_rules_1" attribute="Pattern" lineEndContext="#stay">
-        <RegExpr attribute="Comment" context="#stay" String="#.*$" firstNonSpace="true" />
+        <DetectChar attribute="Comment" context="comment" char="#" firstNonSpace="true" />
         <RegExpr attribute="Special Variable" context="#stay" String="\\c[^\s\\]" />
         <RegExpr attribute="Special Variable" context="#stay" String="\\g(\{(\w+|\-\d+)\}|\d+)" />
         <RegExpr attribute="Special Variable" context="#stay" String="\\k(\{\w+\}|&lt;\w+&gt;|'\w+')" />
@@ -674,7 +678,7 @@
       <context name="regex_pattern_internal_rules_2" attribute="Pattern" lineEndContext="#stay">
         <Detect2Chars attribute="Pattern Internal Operator" context="pat_ext" char="(" char1="?" />
         <DetectChar attribute="Pattern Internal Operator" context="pat_char_class" char="[" />
-        <RegExpr attribute="Pattern Internal Operator" context="#stay" String="[()?^*+|]" />
+        <AnyChar attribute="Pattern Internal Operator" context="#stay" String="()?^*+|" />
         <RegExpr attribute="Pattern Internal Operator" context="#stay" String="\{[\d, ]+\}" />
         <DetectChar attribute="Pattern Internal Operator" context="#stay" char="$" />
         <RegExpr attribute="Comment" context="#stay" String="\s{3,}#.*$" />
@@ -694,8 +698,8 @@
         <IncludeRules context="regex_pattern_internal_rules_2" />
       </context>
       <context name="pat_ext" attribute="Pattern Internal Operator" lineEndContext="#stay">
+        <AnyChar attribute="Pattern Internal Operator" context="#pop" String=":=!&gt;&lt;" />
         <RegExpr attribute="Comment" context="#pop" String="\#[^)]*" />
-        <RegExpr attribute="Pattern Internal Operator" context="#pop" String="[:=!&gt;&lt;]+" />
         <DetectChar attribute="Pattern Internal Operator" context="#pop" char=")" />
       </context>
       <context name="pat_char_class" attribute="Pattern Character Class" lineEndContext="#stay">
@@ -838,30 +842,33 @@
         <DetectSpaces />
         <DetectIdentifier />
         <RegExpr attribute="Pod" context="#stay" String="\=(?:head[1-6]|over|back|item|for|begin|end|pod)\s*.*" column="0" beginRegion="POD" endRegion="POD"/>
-        <RegExpr attribute="Pod" context="#pop" String="\=cut.*$" column="0" endRegion="POD"/>
+        <StringDetect attribute="Pod" context="Pod" String="=cut" column="0" endRegion="POD"/>
       </context>
 
       <context name="comment" attribute="Comment" lineEndContext="#pop">
         <DetectSpaces />
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
         <DetectIdentifier />
       </context>
 
+      <context name="Pod" attribute="Pod" lineEndContext="#pop#pop"/>
+
     </contexts>
     <itemDatas>
       <itemData name="Normal Text"               defStyleNum="dsNormal" />
       <itemData name="Keyword"                   defStyleNum="dsKeyword" />
       <itemData name="Pragma"                    defStyleNum="dsKeyword" />
       <itemData name="Function"                  defStyleNum="dsFunction" />
-      <itemData name="Operator"                  defStyleNum="dsKeyword" color="#008000"/>
+      <itemData name="Operator"                  defStyleNum="dsOthers" bold="1" /> <!-- #008000 -->
       <itemData name="Data Type"                 defStyleNum="dsDataType" />
-      <itemData name="Special Variable"          defStyleNum="dsDataType" color="#C00000" selColor="#C00000" bold="0" italic="0" />
+      <itemData name="Special Variable"          defStyleNum="dsWarning" bold="0" italic="0" /> <!-- #C00000 -->
       <itemData name="Decimal"                   defStyleNum="dsDecVal" />
       <itemData name="Octal"                     defStyleNum="dsBaseN" />
       <itemData name="Hex"                       defStyleNum="dsBaseN" />
       <itemData name="Bin"                       defStyleNum="dsBaseN" />
       <itemData name="Float"                     defStyleNum="dsFloat" />
-      <itemData name="String"                    defStyleNum="dsString" color="#FF6C6C" selColor="#FF6C6C" bold="0" italic="0" />
+      <itemData name="String"                    defStyleNum="dsSpecialString" /> <!-- #FF6C6C -->
       <itemData name="String (interpolated)"     defStyleNum="dsString" />
       <itemData name="String Special Character"  defStyleNum="dsChar" />
       <itemData name="Pattern"                   defStyleNum="dsOthers" />
diff --git a/syntax/php.xml b/syntax/php.xml
--- a/syntax/php.xml
+++ b/syntax/php.xml
@@ -73,7 +73,7 @@
   <!ENTITY types "int|integer|bool|boolean|float|double|real|string|array|object">
 ]>
 
-<language name="PHP/PHP" indenter="cstyle" version="10" kateversion="5.0" section="Scripts" extensions="" priority="5" mimetype="" hidden="true">
+<language name="PHP/PHP" indenter="cstyle" version="12" kateversion="5.0" section="Scripts" extensions="" priority="5" mimetype="" hidden="true">
   <highlighting>
     <!-- https://secure.php.net/manual/en/reserved.keywords.php -->
     <list name="control structures">
@@ -10863,9 +10863,8 @@
         <!--/ Alternate PHP Block Syntax -->
 
         <DetectChar attribute="Comment" context="onelinecomment" char="#" />
-        <IncludeRules context="##Doxygen" />
-        <Detect2Chars attribute="Comment" context="onelinecomment" char="/" char1="/" />
-        <Detect2Chars attribute="Comment" context="twolinecomment" char="/" char1="*" beginRegion="Comment" />
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="/" lookAhead="true"/>
+        <Detect2Chars attribute="Comment" context="MatchComment" char="/" char1="*" lookAhead="true" />
         <keyword attribute="Error" context="#stay" String="deprecated"/>
         <keyword attribute="Control Structures" context="#stay" String="control structures" />
         <keyword attribute="Keyword" context="#stay" String="keywords" />
@@ -10911,6 +10910,12 @@
         <AnyChar attribute="Other" context="#stay" String=";(),[]" />
       </context>
 
+      <context name="MatchComment" attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
+        <IncludeRules context="##Doxygen" />
+        <Detect2Chars attribute="Comment" context="#pop!onelinecomment" char="/" char1="/" />
+        <Detect2Chars attribute="Comment" context="#pop!twolinecomment" char="/" char1="*" beginRegion="Comment" />
+      </context>
+
       <context name="ternary" attribute="PHP Text" lineEndContext="#stay">
         <!-- the paamayim nekudotayim (::) must not start a subcontext that is never terminated. -->
         <Detect2Chars attribute="Normal Text" context="#stay" char=":" char1=":" />
@@ -10923,10 +10928,12 @@
       </context>
 
       <context name="onelinecomment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces />
         <StringDetect attribute="Keyword" context="#pop" lookAhead="true" String="?&gt;" />
         <IncludeRules context="##Alerts" />
       </context>
       <context name="twolinecomment" attribute="Comment" lineEndContext="#stay">
+        <DetectSpaces />
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment" />
         <IncludeRules context="##Alerts" />
       </context>
@@ -11046,8 +11053,9 @@
   <general>
     <comments>
       <comment name="singleLine" start="//" />
-      <comment name="multiLine" start="/*" end="*/" />
+      <comment name="multiLine" start="/*" end="*/" region="Comment" />
     </comments>
     <keywords casesensitive="0" weakDeliminator="" additionalDeliminator="@" />
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/pike.xml b/syntax/pike.xml
--- a/syntax/pike.xml
+++ b/syntax/pike.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
 <!-- FIXME: Find a way to prevent ranges (e.g. [1..] or [0..99]) from matching as floats. -pp -->
-<language name="Pike" version="2" kateversion="2.4" section="Scripts" extensions="*.pike" mimetype="application/x-pike;text/x-pike" casesensitive="1" author="Paul Pogonyshev" license="">
+<language name="Pike" version="3" kateversion="2.4" section="Scripts" extensions="*.pike" mimetype="application/x-pike;text/x-pike" casesensitive="1" author="Paul Pogonyshev" license="">
   <highlighting>
     <list name="keywords">
       <item>break</item>
@@ -66,24 +66,28 @@
 	<LineContinue attribute="String" context="#stay"/>
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="Line Comment">
-	<RegExpr attribute="Note" context="#stay" String="(FIXME|TODO|NOT(IC)?E):?"/>
+	<DetectSpaces />
+	<IncludeRules context="##Alerts"/>
+	<IncludeRules context="##Modelines"/>
       </context>
       <context attribute="Comment" lineEndContext="#stay" name="Block Comment">
+	<DetectSpaces />
 	<Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
-	<RegExpr attribute="Note" context="#stay" String="(FIXME|TODO|NOT(IC)?E):?"/>
+	<IncludeRules context="##Alerts"/>
+	<IncludeRules context="##Modelines"/>
       </context>
       <context attribute="Preprocessor" lineEndContext="#pop" name="Preprocessor">
 	<RangeDetect attribute="Preprocessor Lib" context="#stay" char="&quot;" char1="&quot;"/>
 	<RangeDetect attribute="Preprocessor Lib" context="#stay" char="&lt;" char1="&gt;"/>
 	<Detect2Chars attribute="Comment" context="Line Comment" char="/" char1="/"/>
-	<Detect2Chars attribute="Comment" context="Block Comment" char="/" char1="*"/>
+	<Detect2Chars attribute="Comment" context="Block Comment" char="/" char1="*" beginRegion="Comment"/>
 	<LineContinue attribute="Preprocessor" context="#stay"/>
       </context>
       <context attribute="Comment" lineEndContext="#stay" name="Outscoped">
-	<RegExpr attribute="Note" context="#stay" String="(FIXME|TODO|NOT(IC)?E):?"/>
 	<Detect2Chars attribute="Comment" context="Block Comment" char="/" char1="*" beginRegion="Comment"/>
 	<RegExpr attribute="Comment" context="Outscoped intern" String="#\s*if" beginRegion="Outscoped" firstNonSpace="true"/>
 	<RegExpr attribute="Preprocessor" context="#pop" String="#\s*(endif|elif|else)" endRegion="Outscoped" firstNonSpace="true"/>
+	<IncludeRules context="##Alerts" />
       </context>         
       <context attribute="Comment" lineEndContext="#stay" name="Outscoped intern">
 	<Detect2Chars attribute="Comment" context="Block Comment" char="/" char1="*" beginRegion="Comment"/>
@@ -105,16 +109,14 @@
       <itemData name="String"		defStyleNum="dsString"/>
       <itemData name="String Char"	defStyleNum="dsChar"/>
       <itemData name="Comment"		defStyleNum="dsComment"/>
-      <itemData name="Note"		defStyleNum="dsAlert"/>
       <itemData name="Preprocessor"	defStyleNum="dsOthers"/>
       <itemData name="Preprocessor Lib" defStyleNum="dsString"/>
     </itemDatas>
   </highlighting>
   <general>
     <comments>
-      <comment name="singleLine" start="#!"/>
       <comment name="singleLine" start="//"/>
-      <comment name="multiLine" start="/*" end="*/"/>
+      <comment name="multiLine" start="/*" end="*/" region="Comment"/>
     </comments>
     <keywords casesensitive="1"/>
   </general>
diff --git a/syntax/postscript.xml b/syntax/postscript.xml
--- a/syntax/postscript.xml
+++ b/syntax/postscript.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="PostScript" version="2" kateversion="2.2" section="Markup" extensions="*.ps;*.ai;*.eps" mimetype="application/postscript">
+<language name="PostScript" version="3" kateversion="2.2" section="Markup" extensions="*.ps;*.ai;*.eps" mimetype="application/postscript">
 <highlighting>
 	<list name="keywords">
 		<item>abs</item>
@@ -405,10 +405,14 @@
 			<DetectChar attribute="Comment" context="Comment" char="%"/>
 			<Float attribute="Float" context="#stay"/>
 			<Int attribute="Decimal" context="#stay"/>
-		        <DetectChar attribute="String" context="String" char="("/>
+			<DetectChar attribute="String" context="String" char="("/>
 			<RegExpr attribute="Data Type" context="#stay" String="\/{1,2}[^\s\(\)\{\}\[\]%/]*"/>
 		</context>
-		<context attribute="Comment" lineEndContext="#pop" name="Comment"/>
+		<context attribute="Comment" lineEndContext="#pop" name="Comment">
+			<DetectSpaces />
+			<IncludeRules context="##Alerts" />
+			<IncludeRules context="##Modelines" />
+		</context>
 		<context attribute="Header" lineEndContext="#pop" name="Header"/>
 		<context attribute="String" lineEndContext="#stay" name="String">
 			<DetectChar attribute="String" context="#pop" char=")" />
@@ -432,3 +436,4 @@
 	<keywords casesensitive="0" />
 </general>
 </language>
+<!-- kate: replace-tabs off; -->
diff --git a/syntax/povray.xml b/syntax/povray.xml
--- a/syntax/povray.xml
+++ b/syntax/povray.xml
@@ -5,7 +5,7 @@
 <!-- features full POV-Ray 3.6 syntax with special highlighting -->
 <!-- of variable and macro declarations                         -->
 <!-- v1.1: added MegaPOV 1.2.1 keywords (Febuary 2006)          -->
-<language name="POV-Ray" version="5" kateversion="2.4" section="3D" extensions="*.inc;*.pov" mimetype="text/x-povray-script;text/x-povray-include" author="Christoph Hormann (chris_hormann@gmx.de)" license="LGPL" priority="2">
+<language name="POV-Ray" version="7" kateversion="5.0" section="3D" extensions="*.inc;*.pov" mimetype="text/x-povray-script;text/x-povray-include" author="Christoph Hormann (chris_hormann@gmx.de)" license="LGPL" priority="2">
 	<highlighting>
 		<list name="keywords">
 			<item>aa_threshold</item>
@@ -923,45 +923,50 @@
 			</context>
 
 			<context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
+				<DetectSpaces />
 				<IncludeRules context="##Alerts" />
+				<IncludeRules context="##Modelines" />
 			</context>
 
 			<context attribute="Comment" lineEndContext="#stay" name="Commentar 2">
-				<IncludeRules context="##Alerts" />
+				<DetectSpaces />
 				<Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+				<IncludeRules context="##Alerts" />
+				<IncludeRules context="##Modelines" />
 			</context>
 		</contexts>
 
 		<itemDatas>
-			<itemData name="Normal Text"     defStyleNum="dsNormal"   color="#000000" selColor="#ffffff" bold="0" italic="0"/>
-			<itemData name="Keyword"         defStyleNum="dsKeyword"  color="#000080" selColor="#ffffff" bold="0" italic="0"/>
-			<itemData name="Unofficial"      defStyleNum="dsKeyword"  color="#0080d0" selColor="#ffffff" bold="0" italic="0"/>
-			<itemData name="Objects"         defStyleNum="dsKeyword"  color="#800000" selColor="#ffffff" bold="0" italic="0"/>
-			<itemData name="Texturing"       defStyleNum="dsKeyword"  color="#000080" selColor="#ffffff" bold="0" italic="0"/>
-			<itemData name="Transforms"      defStyleNum="dsKeyword"  color="#000080" selColor="#ffffff" bold="0" italic="0"/>
-			<itemData name="Declaration"     defStyleNum="dsKeyword"  color="#000080" selColor="#000080" bold="1" italic="0"/>
-			<itemData name="Macro"           defStyleNum="dsKeyword"  color="#000080" selColor="#000080" bold="1" italic="0"/>
-			<itemData name="Declare Keyword" defStyleNum="dsKeyword"  color="#990099" selColor="#990099" bold="1" italic="0"/>
-			<itemData name="Declare Macro"   defStyleNum="dsKeyword"  color="#CC0000" selColor="#990099" bold="1" italic="0"/>
-			<itemData name="Functions"       defStyleNum="dsKeyword"  color="#000080" selColor="#ffffff" bold="0" italic="0"/>
-			<itemData name="Directives"      defStyleNum="dsOthers"   color="#3300ff" selColor="#3300ff" bold="1" italic="0"/>
-			<itemData name="Filetype"        defStyleNum="dsDataType" color="#000080" selColor="#ffffff" bold="0" italic="0"/>
-			<itemData name="Constant"        defStyleNum="dsFloat"    color="#0000ff" selColor="#ffffff" bold="0" italic="0"/>
-			<itemData name="Float"           defStyleNum="dsFloat"    color="#0000ff" selColor="#ffffff" bold="0" italic="0"/>
-			<itemData name="Char"            defStyleNum="dsChar"     color="#000080" selColor="#ffffff" bold="0" italic="0"/>
-			<itemData name="String"          defStyleNum="dsString"   color="#ff0000" selColor="#ff0000" bold="0" italic="0"/>
-			<itemData name="String Char"     defStyleNum="dsChar"     color="#ff00ff" selColor="#ff00ff" bold="0" italic="0"/>
-			<itemData name="Comment"         defStyleNum="dsComment"  color="#008000" selColor="#008000" bold="0" italic="0"/>
-			<itemData name="Symbol"          defStyleNum="dsNormal"   color="#660099" selColor="#660099" bold="0" italic="0"/>
-			<itemData name="Region Marker"   defStyleNum="dsRegionMarker"/>
+			<itemData name="Normal Text"     defStyleNum="dsNormal"       spellChecking="false" />
+			<itemData name="Keyword"         defStyleNum="dsVariable"     bold="0" spellChecking="false" /> <!-- #000080 -->
+			<itemData name="Unofficial"      defStyleNum="dsExtension"    bold="0" spellChecking="false" /> <!-- #0080d0 -->
+			<itemData name="Objects"         defStyleNum="dsWarning"      bold="0" spellChecking="false" /> <!-- #800000 -->
+			<itemData name="Texturing"       defStyleNum="dsAttribute"    bold="0" spellChecking="false" /> <!-- #000080 -->
+			<itemData name="Transforms"      defStyleNum="dsOthers"       bold="0" spellChecking="false" /> <!-- #000080 -->
+			<itemData name="Declaration"     defStyleNum="dsPreprocessor" bold="1" spellChecking="false" /> <!-- #000080 -->
+			<itemData name="Macro"           defStyleNum="dsPreprocessor" bold="1" spellChecking="false" /> <!-- #000080 -->
+			<itemData name="Declare Keyword" defStyleNum="dsFunction"     bold="1" spellChecking="false" /> <!-- #990099 -->
+			<itemData name="Declare Macro"   defStyleNum="dsImport"       bold="1" spellChecking="false" /> <!-- #CC0000 -->
+			<itemData name="Functions"       defStyleNum="dsFunction"     bold="0" spellChecking="false" /> <!-- #000080 -->
+			<itemData name="Directives"      defStyleNum="dsOthers"       bold="1" spellChecking="false" /> <!-- #3300ff -->
+			<itemData name="Filetype"        defStyleNum="dsDataType"     bold="0" spellChecking="false" /> <!-- #000080 -->
+			<itemData name="Constant"        defStyleNum="dsConstant"     spellChecking="false" /> <!-- #0000ff -->
+			<itemData name="Float"           defStyleNum="dsFloat"        spellChecking="false" /> <!-- #0000ff -->
+			<itemData name="Char"            defStyleNum="dsChar"         spellChecking="false" /> <!-- #000080 -->
+			<itemData name="String"          defStyleNum="dsString"                             /> <!-- #ff0000 -->
+			<itemData name="String Char"     defStyleNum="dsSpecialChar"  spellChecking="false" /> <!-- #ff00ff -->
+			<itemData name="Comment"         defStyleNum="dsComment"                            /> <!-- #008000 -->
+			<itemData name="Symbol"          defStyleNum="dsOperator"     spellChecking="false" /> <!-- #660099 -->
+			<itemData name="Region Marker"   defStyleNum="dsRegionMarker" />
 		</itemDatas>
 	</highlighting>
 
 	<general>
 		<comments>
-			<comment name="singleLine" start="//" />
-			<comment name="multiLine" start="/*" end="*/" />
+			<comment name="singleLine" start="//" position="afterwhitespace" />
+			<comment name="multiLine" start="/*" end="*/" region="Comment" />
 		</comments>
 		<keywords casesensitive="1" />
 	</general>
 </language>
+<!-- kate: replace-tabs off; -->
diff --git a/syntax/powershell.xml b/syntax/powershell.xml
--- a/syntax/powershell.xml
+++ b/syntax/powershell.xml
@@ -1,7 +1,7 @@
 <!DOCTYPE language SYSTEM "language.dtd">
 <language
   name="PowerShell"
-  version="5"
+  version="7"
   kateversion="5.0"
   extensions="*.ps1;*.ps1m;*.ps1d"
   section="Scripts"
@@ -880,7 +880,6 @@
         <IncludeRules context="Cmdlet" />
         <DetectChar attribute="String" context="String" char="&quot;"/>
         <Detect2Chars attribute="HereString" context="HereStringer" char="@" char1="&quot;" beginRegion="StringRegion"/>
-        <IncludeRules context="##Doxygen" />
         <DetectChar attribute="Comment" context="Commentar 1" char="#"/>
         <Detect2Chars attribute="Comment" context="Commentar 2" char="&lt;" char1="#" beginRegion="CommentRegion"/>
         <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="block1"/>
@@ -889,8 +888,8 @@
         <RegExpr attribute="Keyword" context="#stay" String="\b\$script(?=\s+(:))"/>
         <RegExpr attribute="Variable" context="#stay" String="\$+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*" />
         <keyword attribute="Special Variable" context="#stay" String="special-variables"/>
-        <RegExpr attribute="Symbol" context="Member" String="[.]{1,1}" />
-        <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;"/>
+        <DetectChar attribute="Symbol" context="Member" char="." />
+        <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/*&lt;=&gt;?[]|~^&#59;"/>
       </context>
       <context attribute="String Char" lineEndContext="#stay" name="StringEscape">
         <RegExpr attribute="String Char" String="`[`&quot;0abefnrtv]" context="#stay"/>
@@ -907,9 +906,16 @@
       <context attribute="Normal Text" lineEndContext="#pop" name="Member" fallthrough="true" fallthroughContext="#pop">
         <RegExpr attribute="Function" context="#pop" String="\b[_\w][_\w\d]*(?=[\s]*)" />
       </context>
-      <context attribute="Comment" lineEndContext="#pop" name="Commentar 1"/>
+      <context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
       <context attribute="Comment" lineEndContext="#stay" name="Commentar 2">
+        <DetectSpaces />
         <Detect2Chars attribute="Comment" context="#pop" char="#" char1="&gt;" endRegion="CommentRegion"/>
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
       <context attribute="Cmdlets" lineEndContext="#stay" name="Cmdlet">
         <keyword attribute="Function" context="#stay" String="cmdlets"/>
@@ -938,3 +944,4 @@
     <keywords casesensitive="0" weakDeliminator=":-"/>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/prolog.xml b/syntax/prolog.xml
--- a/syntax/prolog.xml
+++ b/syntax/prolog.xml
@@ -105,7 +105,7 @@
     <!ENTITY bs         "\">
 ]>
 <language name="Prolog" section="Sources"
-	  version="10" kateversion="3.4"
+	  version="11" kateversion="3.4"
 	  mimetype="text/x-prolog"
 	  extensions="*.prolog;*.dcg;*.pro"
 	  author="Torsten Eichstädt (torsten.eichstaedt@web.de)"
@@ -778,6 +778,7 @@
 			    attribute="% italic predicates: w/ side effects" />
 		<DetectSpaces />
 		<IncludeRules context="##Alerts" />
+		<IncludeRules context="##Modelines" />
 		<DetectIdentifier />
 	    </context>
 
@@ -786,6 +787,7 @@
 	    <context name="1-comment" lineEndContext="#pop" attribute="% italic predicates: w/ side effects" >
 		<DetectSpaces />
 		<IncludeRules context="##Alerts" />
+		<IncludeRules context="##Modelines" />
 		<DetectIdentifier />
 	    </context>
 	    <context name="region_marker" lineEndContext="#pop" attribute="%BEGIN folding region" noIndentationBasedFolding="true" >
@@ -1029,3 +1031,4 @@
     your home directory. You have to open a new instance of kwrite/kate to use
     the new syntax file.
 -->
+<!-- kate: replace-tabs off; -->
diff --git a/syntax/protobuf.xml b/syntax/protobuf.xml
--- a/syntax/protobuf.xml
+++ b/syntax/protobuf.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Protobuf" version="7" kateversion="5.0" section="Sources" extensions="*.proto" mimetype="text/x-protobuf" author="Slawomir Mikula (slawek.mikula@gmail.com)" license="LGPL">
+<language name="Protobuf" version="8" kateversion="5.0" section="Sources" extensions="*.proto" mimetype="text/x-protobuf" author="Slawomir Mikula (slawek.mikula@gmail.com)" license="LGPL">
   <highlighting>
     <list name="keywords">
       <item>message</item>
@@ -82,12 +82,16 @@
 
       <context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
         <LineContinue attribute="Comment" context="#stay"/>
+        <DetectSpaces />
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
 
       <context attribute="Comment" lineEndContext="#stay" name="Commentar 2">
+        <DetectSpaces />
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
 
     </contexts>
@@ -113,8 +117,9 @@
   <general>
     <comments>
       <comment name="singleLine" start="//" />
-      <comment name="multiLine" start="/*" end="*/" />
+      <comment name="multiLine" start="/*" end="*/" region="Comment" />
     </comments>
     <keywords casesensitive="1" />
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/pure.xml b/syntax/pure.xml
--- a/syntax/pure.xml
+++ b/syntax/pure.xml
@@ -32,69 +32,69 @@
  Boston, MA 02111-1307, USA.
 
 -->
-<language name="Pure" version="1.2" kateversion="2.4" section="Sources" extensions="*.pure">
+<language name="Pure" version="3" kateversion="2.4" section="Sources" extensions="*.pure">
   <highlighting>
     <list name="blockstarters">
-      <item> case </item>
-      <item> when </item>
-      <item> with </item>
+      <item>case</item>
+      <item>when</item>
+      <item>with</item>
     </list>
     <list name="blockenders">
-      <item> end </item>
+      <item>end</item>
     </list>
     <list name="keywords">
-      <item> const </item>
-      <item> def </item>
-      <item> else </item>
-      <item> extern </item>
-      <item> if </item>
-      <item> infix </item>
-      <item> infixl </item>
-      <item> infixr </item>
-      <item> interface </item>
-      <item> let </item>
-      <item> namespace </item>
-      <item> nonfix </item>
-      <item> of </item>
-      <item> otherwise </item>
-      <item> outfix </item>
-      <item> postfix </item>
-      <item> prefix </item>
-      <item> private </item>
-      <item> public </item>
-      <item> then </item>
-      <item> type </item>
-      <item> using </item>
+      <item>const</item>
+      <item>def</item>
+      <item>else</item>
+      <item>extern</item>
+      <item>if</item>
+      <item>infix</item>
+      <item>infixl</item>
+      <item>infixr</item>
+      <item>interface</item>
+      <item>let</item>
+      <item>namespace</item>
+      <item>nonfix</item>
+      <item>of</item>
+      <item>otherwise</item>
+      <item>outfix</item>
+      <item>postfix</item>
+      <item>prefix</item>
+      <item>private</item>
+      <item>public</item>
+      <item>then</item>
+      <item>type</item>
+      <item>using</item>
     </list>
     <list name="special">
-      <item> catch </item>
-      <item> throw </item>
-      <item> __break__ </item>
-      <item> __trace__ </item>
+      <item>catch</item>
+      <item>throw</item>
+      <item>__break__</item>
+      <item>__trace__</item>
     </list>
     <list name="types">
-      <item> bigint </item>
-      <item> bool </item>
-      <item> char </item>
-      <item> float  </item>
-      <item> double  </item>
-      <item> expr </item>
-      <item> short </item>
-      <item> int </item>
-      <item> long </item>
-      <item> string </item>
-      <item> pointer </item>
-      <item> void </item>
-      <item> int8 </item>
-      <item> int16 </item>
-      <item> int32 </item>
-      <item> int64 </item>
-      <item> matrix </item>
-      <item> dmatrix </item>
-      <item> cmatrix </item>
-      <item> imatrix </item>
-      <item> smatrix </item>
-      <item> nmatrix </item>
+      <item>bigint</item>
+      <item>bool</item>
+      <item>char</item>
+      <item>float</item>
+      <item>double</item>
+      <item>expr</item>
+      <item>short</item>
+      <item>int</item>
+      <item>long</item>
+      <item>string</item>
+      <item>pointer</item>
+      <item>void</item>
+      <item>int8</item>
+      <item>int16</item>
+      <item>int32</item>
+      <item>int64</item>
+      <item>matrix</item>
+      <item>dmatrix</item>
+      <item>cmatrix</item>
+      <item>imatrix</item>
+      <item>smatrix</item>
+      <item>nmatrix</item>
     </list>
     <contexts>
       <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
@@ -108,7 +108,7 @@
         <RegExpr attribute="Number" context="#stay" String="0x[A-Za-z0-9]+"/>
         <Float attribute="Number" context="#stay"/>
         <Int attribute="Number" context="#stay"/>
-        <HlCChar attribute="Char" context="#stay"/>
+        <HlCChar attribute="String Char" context="#stay"/>
         <DetectChar attribute="String" context="String" char="&quot;"/>
         <Detect2Chars attribute="Comment" context="Comment1" char="/" char1="*" beginRegion="Comment" />
         <Detect2Chars attribute="Comment" context="Comment2" char="/" char1="/"/>
@@ -118,12 +118,17 @@
         <HlCStringChar attribute="String Char" context="#stay"/>
         <DetectChar attribute="String" context="#pop" char="&quot;"/>
       </context>
-      <context attribute="Region Marker" lineEndContext="#pop" name="Region Marker">
-      </context>
       <context attribute="Comment" lineEndContext="#stay" name="Comment1">
+        <DetectSpaces />
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
-      <context attribute="Comment" lineEndContext="#pop" name="Comment2"/>
+      <context attribute="Comment" lineEndContext="#pop" name="Comment2">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
     </contexts>
     <itemDatas>
       <itemData name="Normal Text" defStyleNum="dsNormal" />
@@ -140,7 +145,8 @@
     <keywords casesensitive="1" />
     <comments>
       <comment name="singleLine" start="//" />
-      <comment name="multiLine" start="/*" end="*/" />
+      <comment name="multiLine" start="/*" end="*/" region="Comment" />
     </comments>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/purebasic.xml b/syntax/purebasic.xml
--- a/syntax/purebasic.xml
+++ b/syntax/purebasic.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE language SYSTEM "language.dtd">
-<language name="PureBasic" version="7" kateversion="5.0" section="Sources" extensions="*.pb;*.pbi" mimetype="text/x-purebasic" author="Alexander Clay (Tuireann@EpicBasic.org);Sven Langenkamp (ace@kylixforum.de)" license="LGPL" priority="1" >
+<language name="PureBasic" version="8" kateversion="5.0" section="Sources" extensions="*.pb;*.pbi" mimetype="text/x-purebasic" author="Alexander Clay (Tuireann@EpicBasic.org);Sven Langenkamp (ace@kylixforum.de)" license="LGPL" priority="1" >
   <highlighting>
     <list name="keywords">
       <item>Break</item>
@@ -1738,6 +1738,7 @@
         <DetectChar attribute="String" context="#pop" char="&quot;"/>
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="Comment1">
+        <DetectSpaces />
         <IncludeRules context="##Alerts" />
         <IncludeRules context="##Modelines" />
       </context>
@@ -1760,7 +1761,7 @@
   <general>
     <keywords casesensitive="0" />
     <comments>
-      <comment name="singleLine" start=";" />
+      <comment name="singleLine" start=";" position="afterwhitespace" />
     </comments>
   </general>
 </language>
diff --git a/syntax/python.xml b/syntax/python.xml
--- a/syntax/python.xml
+++ b/syntax/python.xml
@@ -19,7 +19,7 @@
 <!-- v2.07 add support for %prog and co, see bug 142832 -->
 <!-- v2.08 add missing overloaders, new Python 3 statements, builtins, and keywords -->
 <!-- v2.29 recognize escape sequenzes correctly -->
-<language name="Python" version="10" style="python" indenter="python" kateversion="5.0" section="Scripts" extensions="*.py;*.pyw;SConstruct;SConscript" mimetype="application/x-python;text/x-python;text/x-python3" casesensitive="1" author="Michael Bueker" license="">
+<language name="Python" version="12" style="python" indenter="python" kateversion="5.0" section="Scripts" extensions="*.py;*.pyw;SConstruct;SConscript;*.FCMacro" mimetype="application/x-python;text/x-python;text/x-python3" casesensitive="1" author="Michael Bueker" license="">
 	<highlighting>
 		<list name="import">
 			<item>import</item>
@@ -447,6 +447,7 @@
 			<!-- Comments -->
 
 			<context name="Hash comment" attribute="Comment" lineEndContext="#pop">
+				<DetectSpaces />
 				<IncludeRules context="##Alerts" />
 				<IncludeRules context="##Modelines" />
 			</context>
diff --git a/syntax/qml.xml b/syntax/qml.xml
--- a/syntax/qml.xml
+++ b/syntax/qml.xml
@@ -4,7 +4,7 @@
   <!ENTITY identifier "[a-zA-Z_$][\w$]*">
 ]>
 <!-- Author: Milian Wolff <mail@milianw.de> -->
-<language name="QML" version="7" kateversion="5.0" section="Scripts" extensions="*.qml;*.qmltypes"
+<language name="QML" version="9" kateversion="5.0" section="Scripts" extensions="*.qml;*.qmltypes"
           mimetype="text/x-qml;application/x-qml" indenter="cstyle"
           author="Milian Wolff (mail@milianw.de)" license="MIT">
   <highlighting>
@@ -130,7 +130,6 @@
         <keyword attribute="Property Type" context="#stay" String="types" />
         <DetectSpaces />
         <DetectIdentifier />
-        <DetectSpaces />
         <DetectChar char=":" context="#pop" />
       </context>
       <context attribute="Normal Text" lineEndContext="#pop" name="Signal">
@@ -141,9 +140,7 @@
       <context attribute="Normal Text" name="SignalParameter" lineEndContext="#pop">
         <DetectSpaces />
         <keyword attribute="Property Type" context="#stay" String="types" />
-        <DetectSpaces />
         <DetectIdentifier />
-        <DetectSpaces />
         <DetectChar char=")" context="#pop"/>
       </context>
       <!-- QML supports multi-line strings, which are not supported by Javascript -->
@@ -168,10 +165,10 @@
     <itemDatas>
       <itemData name="Normal Text"  defStyleNum="dsNormal"  spellChecking="false" />
       <itemData name="Import"  defStyleNum="dsKeyword"  spellChecking="false" />
-      <itemData name="ImportValue"  defStyleNum="dsString"  spellChecking="false" />
+      <itemData name="ImportValue"  defStyleNum="dsImport"  spellChecking="false" />
       <itemData name="Keywords"  defStyleNum="dsKeyword"  spellChecking="false" />
-      <itemData name="Elements" defStyleNum="dsKeyword" color="#008000" selColor="#00ffff" bold="0" italic="0" spellChecking="false"/>
-      <itemData name="Signal" defStyleNum="dsKeyword" color="#0095ff" selColor="#ffffff" spellChecking="false"/>
+      <itemData name="Elements" defStyleNum="dsOthers" spellChecking="false"/> <!-- #008000 -->
+      <itemData name="Signal" defStyleNum="dsExtension" bold="1" spellChecking="false"/> <!-- #0095ff -->
       <itemData name="Property Type" defStyleNum="dsDataType" spellChecking="false" />
       <itemData name="String"       defStyleNum="dsString" />
       <itemData name="Objects"      defStyleNum="dsExtension" bold="0" spellChecking="false" />
@@ -180,7 +177,7 @@
   </highlighting>
   <general>
     <comments>
-      <comment name="singleLine" start="//" />
+      <comment name="singleLine" start="//" position="afterwhitespace" />
       <comment name="multiLine" start="/*" end="*/" />
     </comments>
     <keywords casesensitive="1" />
diff --git a/syntax/r.xml b/syntax/r.xml
--- a/syntax/r.xml
+++ b/syntax/r.xml
@@ -8,7 +8,7 @@
 	R      : http://www.r-project.org/
 	RKWard : http://rkward.kde.org/
 	-->
-<language version="8" kateversion="5.0" name="R Script" section="Scientific" extensions="*.R;*.r;*.S;*.s;*.q" mimetype="" license="GPLv2">
+<language version="9" kateversion="5.0" name="R Script" section="Scientific" extensions="*.R;*.r;*.S;*.s;*.q" mimetype="" license="GPLv2">
 <highlighting>
 
 	<list name="controls">
@@ -56,7 +56,7 @@
 			<LineContinue attribute="Operator" context="#stay"/>
 			<DetectChar attribute="Symbol" context="#pop" char=")"/>
 
-			<RegExpr attribute="Identifier" context="#stay" String="[a-zA-Z_\.][0-9a-zA-Z_\.]*[\s]*[:]?=(?=([^=]|$))"/>
+			<RegExpr attribute="Identifier" context="#stay" String="[a-zA-Z_\.][0-9a-zA-Z_\.]*[\s]*[:]?=(?=[^=]|$)"/>
 
 			<IncludeRules context="CommonRules"/>
 			<DetectChar attribute="Error" context="#stay" char="}" />
@@ -79,22 +79,32 @@
 
 		<context attribute="Normal Text" lineEndContext="#stay" name="operator_rhs" fallthrough="true" fallthroughContext="#pop">
 			<!-- While there is nothing of interest, stay in the context -->
-			<Detect2Chars attribute="Headline" context="Headline" char="#" char1="#"/>
-			<DetectChar attribute="Comment" context="Comment" char="#"/>
-			<DetectChar attribute="String" context="#stay" char=" "/>
+			<DetectSpaces />
+			<IncludeRules context="FindComments"/>
 			<!-- Operators other than +, -, and ! directly after another operator are an error. -->
-			<RegExpr attribute="Error" context="#stay" String="(\*|/|&lt;|&gt;|\!=|=|\||&amp;|:|\^|@|\$|~)"/>
+			<Detect2Chars attribute="Error" context="#stay" char="!" char1="="/>
+			<AnyChar attribute="Error" context="#stay" String="*/&lt;&gt;=|&amp;:^@$~"/>
 		</context>
 
+		<context attribute="Normal Text" lineEndContext="#stay" name="FindComments">
+			<Detect2Chars attribute="Headline" context="Headline" char="#" char1="#"/>
+			<DetectChar attribute="Comment" context="Comment" char="#"/>
+		</context>
 		<context attribute="Headline" lineEndContext="#pop" name="Headline">
+			<DetectSpaces />
 			<IncludeRules context="##Alerts" />
+			<IncludeRules context="##Modelines" />
 		</context>
 		<context attribute="Comment" lineEndContext="#pop" name="Comment">
+			<DetectSpaces />
 			<IncludeRules context="##Alerts" />
+			<IncludeRules context="##Modelines" />
 		</context>
 
 		<!-- This context is not really used, but contains the common rules -->
 		<context name="CommonRules" lineEndContext="#stay" attribute="Normal Text" >
+			<DetectSpaces />
+			<IncludeRules context="FindComments"/>
 			<DetectChar attribute="String" context="string" char="&quot;"/>
 			<DetectChar attribute="String" context="string2" char="'"/>
 			<DetectChar attribute="String" context="backquotedsymbol" char="`"/>
@@ -105,48 +115,56 @@
 			<RegExpr attribute="Keyword" context="#stay" String="[a-zA-Z_]+[a-zA-Z_\.0-9]*(?=[\s]*[(])"/>
 			<RegExpr attribute="Keyword" context="#stay" String="\.[a-zA-Z_\.]+[a-zA-Z_\.0-9]*(?=[\s]*[(])"/>
 			<DetectChar attribute="Symbol" context="parenthesis" char="("/>
-			<Detect2Chars attribute="Headline" context="Headline" char="#" char1="#"/>
-			<DetectChar attribute="Comment" context="Comment" char="#"/>
 
 			<!-- For (assignment) operators, enter a new context operator_rhs to check what follows (generally, that should not be another op) -->
-			<RegExpr attribute="Assign" context="operator_rhs" String="[&lt;]{1,2}\-"/>
-			<RegExpr attribute="Assign" context="operator_rhs" String="\-[&gt;]{1,2}"/>
+			<StringDetect attribute="Assign" context="operator_rhs" String="&lt;&lt;-"/>
+			<Detect2Chars attribute="Assign" context="operator_rhs" char="&lt;" char1="-"/>
+			<StringDetect attribute="Assign" context="operator_rhs" String="-&gt;&gt;"/>
+			<Detect2Chars attribute="Assign" context="operator_rhs" char="-" char1="&gt;"/>
 			<RegExpr attribute="Assign" context="operator_rhs" String="=(?!=)"/>
-			<RegExpr attribute="Operator" context="operator_rhs" String="(\+|\-|\*{1,2}|/|&lt;=?|&gt;=?|={1,2}|\!=?|\|{1,2}|&amp;{1,2}|:{1,3}|\^|@|\$|~)"/>
-			<RegExpr attribute="Operator" context="operator_rhs" String="%[^%]*%"/>
+			<Detect2Chars attribute="Operator" context="operator_rhs" char="*" char1="*"/>
+			<Detect2Chars attribute="Operator" context="operator_rhs" char="&lt;" char1="="/>
+			<Detect2Chars attribute="Operator" context="operator_rhs" char="&gt;" char1="="/>
+			<Detect2Chars attribute="Operator" context="operator_rhs" char="=" char1="="/>
+			<Detect2Chars attribute="Operator" context="operator_rhs" char="!" char1="="/>
+			<Detect2Chars attribute="Operator" context="operator_rhs" char="|" char1="|"/>
+			<Detect2Chars attribute="Operator" context="operator_rhs" char="&amp;" char1="&amp;"/>
+			<StringDetect attribute="Operator" context="operator_rhs" String=":::"/>
+			<Detect2Chars attribute="Operator" context="operator_rhs" char=":" char1=":"/>
+			<AnyChar attribute="Operator" context="operator_rhs" String="+-*/&lt;&gt;=!|&amp;:^@$~"/>
+			<RangeDetect attribute="Operator" context="operator_rhs" char="%" char1="%"/>
 
 			<DetectChar attribute="Symbol" context="ctx0" char="{" beginRegion="Brace1" />
 
 			<!-- This is needed only to assist variable based indentation -->
-			<DetectChar attribute="Symbol" context="#stay" char="[" />
-			<DetectChar attribute="Symbol" context="#stay" char="]" />
+			<AnyChar attribute="Symbol" context="#stay" String="[]" />
 		</context>
 	</contexts>
 
 	<itemDatas>
-		<!-- KDE default colors: http://accessibility.kde.org/oxygen.php?color=white -->
-		<itemData name="Normal Text" defStyleNum="dsNormal"/>
-		<itemData name="Symbol" defStyleNum="dsNormal"/>
-		<itemData name="Keyword" defStyleNum="dsKeyword"/>
-		<itemData name="Identifier" defStyleNum="dsDataType"/>
+		<itemData name="Normal Text" defStyleNum="dsNormal" spellChecking="false"/>
+		<itemData name="Symbol" defStyleNum="dsNormal" spellChecking="false"/>
+		<itemData name="Keyword" defStyleNum="dsFunction" spellChecking="false"/>
+		<itemData name="Identifier" defStyleNum="dsAttribute" spellChecking="false"/>
 		<itemData name="String" defStyleNum="dsString"/>
-		<itemData name="Headline" defStyleNum="dsComment" color="#b00000" selColor="#b00000" bold="1" italic="0"/> <!-- KDE default color: text 5 -->
+		<itemData name="Headline" defStyleNum="dsDocumentation" bold="1"/>
 		<itemData name="Comment" defStyleNum="dsComment"/>
-		<itemData name="Assign" defStyleNum="dsNormal" color="#336366" selColor="#ccc099" bold="1" italic="0"/> <!-- KDE default color: text 7 -->
-		<itemData name="Control Structure" defStyleNum="dsControlFlow"/>
-		<itemData name="Reserved Words" defStyleNum="dsOthers"/>
-		<itemData name="Error" defStyleNum="dsError"/>
-		<itemData name="Operator" defStyleNum="dsOperator"/>
-		<itemData name="String Char"  defStyleNum="dsChar"/>
-		<itemData name="Float" defStyleNum="dsFloat"/>
-		<itemData name="Int" defStyleNum="dsDecVal"/>
+		<itemData name="Assign" defStyleNum="dsOthers" bold="1" italic="0" spellChecking="false"/>
+		<itemData name="Control Structure" defStyleNum="dsControlFlow" spellChecking="false"/>
+		<itemData name="Reserved Words" defStyleNum="dsConstant" spellChecking="false"/>
+		<itemData name="Error" defStyleNum="dsError" spellChecking="false"/>
+		<itemData name="Operator" defStyleNum="dsSpecialChar" spellChecking="false"/>
+		<itemData name="String Char"  defStyleNum="dsSpecialChar" spellChecking="false"/>
+		<itemData name="Float" defStyleNum="dsFloat" spellChecking="false"/>
+		<itemData name="Int" defStyleNum="dsDecVal" spellChecking="false"/>
 	</itemDatas>
 </highlighting>
 
 <general>
 	<comments>
-		<comment name="singleLine" start="#" end=""/>
+		<comment name="singleLine" start="#"/>
 	</comments>
 	<keywords casesensitive="true" weakDeliminator="." additionalDeliminator="$"/>
 </general>
 </language>
+<!-- kate: replace-tabs off; -->
diff --git a/syntax/relaxng.xml b/syntax/relaxng.xml
--- a/syntax/relaxng.xml
+++ b/syntax/relaxng.xml
@@ -16,7 +16,7 @@
    - Namespace rules
 -->
 
-<language version="3"
+<language version="4"
           kateversion="2.4"
           name="RELAX NG"
           section="Markup"
@@ -94,6 +94,7 @@
         <StringDetect attribute="Comment" context="#pop"  String="--&gt;" endRegion="comment"/>
         <RegExpr attribute="Error" context="#stay" String="-(-(?!-&gt;))+"/>
         <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
         <DetectIdentifier/>
       </context>
     </contexts>
@@ -112,8 +113,9 @@
   </highlighting>
   <general>
     <comments>
-      <comment name="multiLine" start="&lt;!--" end="--&gt;" />
+      <comment name="multiLine" start="&lt;!--" end="--&gt;" region="comment" />
     </comments>
     <keywords casesensitive="0" weakDeliminator="-:" additionalDeliminator="&quot;{}"/>
   </general>
 </language>
+<!-- kate: replace-tabs on; indent-width 2; -->
diff --git a/syntax/relaxngcompact.xml b/syntax/relaxngcompact.xml
--- a/syntax/relaxngcompact.xml
+++ b/syntax/relaxngcompact.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="RelaxNG-Compact" version="1" kateversion="2.4" section="Markup" extensions="*.rnc" casesensitive="1" author="Rintze Zelle" license="LGPL">
+<language name="RelaxNG-Compact" version="2" kateversion="2.4" section="Markup" extensions="*.rnc" casesensitive="1" author="Rintze Zelle" license="LGPL">
   <highlighting>
     <list name="Keywords">
       <item>default</item>
@@ -81,6 +81,9 @@
 	<RegExpr attribute="Definitions" context="Definitions" String="[\w\.-]+[\s]+=" lookAhead="true" />
       </context>
       <context attribute="Comments" lineEndContext="#pop" name="Comments" >
+        <DetectSpaces />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
       <context attribute="String" lineEndContext="#stay" name="String" >
         <DetectChar attribute="String" context="#pop" char="&quot;" />
@@ -104,5 +107,8 @@
   </highlighting>
   <general>
     <keywords weakDeliminator="-:"/>
+    <comments>
+      <comment name="singleLine" start="#" />
+    </comments>
   </general>
 </language>
diff --git a/syntax/rest.xml b/syntax/rest.xml
--- a/syntax/rest.xml
+++ b/syntax/rest.xml
@@ -14,7 +14,7 @@
   Copyright 2010 Matt Williams (matt@milliams.com)
   Copyright 2014 Matthew Woehlke (mw_triad@users.sourceforge.net)
   -->
-<language name="reStructuredText" extensions="*.rst" section="Markup" mimetype="text/x-rst" version="6" kateversion="5.0" casesensitive="1">
+<language name="reStructuredText" extensions="*.rst" section="Markup" mimetype="text/x-rst" version="7" kateversion="5.0" casesensitive="1">
 
   <highlighting>
 
@@ -70,6 +70,7 @@
         <RegExpr attribute="Code" String="^%1   " context="#stay" column="0" dynamic="true"/>
         <RegExpr attribute="Normal" String="^(.|$)" lookAhead="true" column="0" context="#pop"/>
         <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
 
       <context name="CodeBlock" attribute="Code" lineEndContext="#stay">
@@ -117,3 +118,4 @@
   </general>
 
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/rhtml.xml b/syntax/rhtml.xml
--- a/syntax/rhtml.xml
+++ b/syntax/rhtml.xml
@@ -2,7 +2,7 @@
 <!DOCTYPE language SYSTEM "language.dtd"
 [
 	<!ENTITY name    "[A-Za-z_:][\w.:_-]*">
-	<!ENTITY entref  "&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);">
+	<!ENTITY entref  "&amp;(?:#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);">
 ]>
 	
 <!--
@@ -44,7 +44,7 @@
 -->
 	
 <!-- Hold the "language" opening tag on a single line, as mentioned in "language.dtd". -->
-<language name="Ruby/Rails/RHTML" version="9" kateversion="5.0" section="Markup" extensions="*.rhtml;*.RHTML;*.html.erb" mimetype="" author="Richard Dale rdale@foton.es" license="LGPLv2+">
+<language name="Ruby/Rails/RHTML" version="11" kateversion="5.63" section="Markup" extensions="*.rhtml;*.RHTML;*.html.erb" mimetype="" author="Richard Dale rdale@foton.es" license="LGPLv2+">
 	
 	<highlighting>
 	
@@ -315,12 +315,6 @@
 			<item>word_wrap</item>
 		</list>
 		
-		<list name="attention">
-			<item>TODO</item>
-			<item>FIXME</item>
-			<item>NOTE</item>
-		</list>
-		
 		<contexts>
 			
 		<!-- BEGIN HTML contexts -->
@@ -332,22 +326,22 @@
 				<DetectSpaces/>
 				<DetectIdentifier/>
 				
-				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
-				<DetectChar attribute="Keyword" context="rubysourceline" char="%" />
+				<IncludeRules context="find-rubysource" />
+				<DetectChar attribute="Ruby Source" context="rubysourceline" char="%" />
 				
 				<StringDetect attribute="Comment" context="Comment" String="&lt;!--" beginRegion="comment" />
 				<StringDetect attribute="CDATA" context="CDATA" String="&lt;![CDATA[" beginRegion="cdata" />
 				<RegExpr attribute="Doctype" context="Doctype" String="&lt;!DOCTYPE\s+" beginRegion="doctype" />
 				<RegExpr attribute="Processing Instruction" context="PI" String="&lt;\?[\w:-]*" beginRegion="pi" />
-				<RegExpr attribute="Element" context="CSS" String="&lt;style\b" insensitive="true" beginRegion="style" />
-				<RegExpr attribute="Element" context="JS" String="&lt;script\b" insensitive="true" beginRegion="script" />
-				<RegExpr attribute="Element" context="El Open" String="&lt;pre\b" insensitive="true" beginRegion="pre" />
-				<RegExpr attribute="Element" context="El Open" String="&lt;div\b" insensitive="true" beginRegion="div" />
-				<RegExpr attribute="Element" context="El Open" String="&lt;table\b" insensitive="true" beginRegion="table" />
+				<WordDetect attribute="Element" context="CSS" String="&lt;style" insensitive="true" beginRegion="style" />
+				<WordDetect attribute="Element" context="JS" String="&lt;script" insensitive="true" beginRegion="script" />
+				<WordDetect attribute="Element" context="El Open" String="&lt;pre" insensitive="true" beginRegion="pre" />
+				<WordDetect attribute="Element" context="El Open" String="&lt;div" insensitive="true" beginRegion="div" />
+				<WordDetect attribute="Element" context="El Open" String="&lt;table" insensitive="true" beginRegion="table" />
 				<RegExpr attribute="Element" context="El Open" String="&lt;&name;" />
-				<RegExpr attribute="Element" context="El Close" String="&lt;/pre\b" insensitive="true" endRegion="pre" />
-				<RegExpr attribute="Element" context="El Close" String="&lt;/div\b" insensitive="true" endRegion="div" />
-				<RegExpr attribute="Element" context="El Close" String="&lt;/table\b" insensitive="true" endRegion="table" />
+				<WordDetect attribute="Element" context="El Close" String="&lt;/pre" insensitive="true" endRegion="pre" />
+				<WordDetect attribute="Element" context="El Close" String="&lt;/div" insensitive="true" endRegion="div" />
+				<WordDetect attribute="Element" context="El Close" String="&lt;/table" insensitive="true" endRegion="table" />
 				<RegExpr attribute="Element" context="El Close" String="&lt;/&name;" />
 				<!-- as long as kde gives DTDs the text/html mimetype--><IncludeRules context="FindDTDRules" />
 				<IncludeRules context="FindEntityRefs" />
@@ -371,15 +365,16 @@
 			</context>
 			
 			<context name="FindDTDRules" attribute="Normal Text" lineEndContext="#stay">
-				<RegExpr attribute="Doctype" context="Doctype Markupdecl" String="&lt;!(ELEMENT|ENTITY|ATTLIST|NOTATION)\b" />
+				<RegExpr attribute="Doctype" context="Doctype Markupdecl" String="&lt;!(?:ELEMENT|ENTITY|ATTLIST|NOTATION)\b" />
 			</context>
 			
 			
 			<context name="Comment" attribute="Comment" lineEndContext="#stay">
 				<DetectSpaces/>
+				<StringDetect attribute="Comment" context="#pop" String="--&gt;" endRegion="comment" />
 				<IncludeRules context="##Alerts" />
+				<IncludeRules context="##Modelines" />
 				<DetectIdentifier/>
-				<StringDetect attribute="Comment" context="#pop" String="--&gt;" endRegion="comment" />
 				<RegExpr attribute="Error" context="#stay" String="-(-(?!-&gt;))+" />
 			</context>
 			
@@ -414,21 +409,21 @@
 			</context>
 			
 			<context name="Doctype Markupdecl DQ" attribute="Value" lineEndContext="#stay">
-				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
+				<IncludeRules context="find-rubysource" />
 				
 				<DetectChar attribute="Value" context="#pop" char="&quot;" />
 				<IncludeRules context="FindPEntityRefs" />
 			</context>
 			
 			<context name="Doctype Markupdecl SQ" attribute="Value" lineEndContext="#stay">
-				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
+				<IncludeRules context="find-rubysource" />
 				
 				<DetectChar attribute="Value" context="#pop" char="&apos;" />
 				<IncludeRules context="FindPEntityRefs" />
 			</context>
 			
 			<context name="El Open" attribute="Normal Text" lineEndContext="#stay">
-				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
+				<IncludeRules context="find-rubysource" />
 				
 				<Detect2Chars attribute="Element" context="#pop" char="/" char1="&gt;" />
 				<DetectChar attribute="Element" context="#pop" char="&gt;" />
@@ -437,28 +432,28 @@
 			</context>
 			
 			<context name="El Close" attribute="Normal Text" lineEndContext="#stay">
-				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
+				<IncludeRules context="find-rubysource" />
 				
 				<DetectChar attribute="Element" context="#pop" char="&gt;" />
 				<RegExpr attribute="Error" context="#stay" String="\S" />
 			</context>
 			
 			<context name="El Close 2" attribute="Normal Text" lineEndContext="#stay">
-				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
+				<IncludeRules context="find-rubysource" />
 				
 				<DetectChar attribute="Element" context="#pop#pop#pop" char="&gt;" />
 				<RegExpr attribute="Error" context="#stay" String="\S" />
 			</context>
 			
 			<context name="El Close 3" attribute="Normal Text" lineEndContext="#stay">
-				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
+				<IncludeRules context="find-rubysource" />
 				
 				<DetectChar attribute="Element" context="#pop#pop#pop#pop" char="&gt;" />
 				<RegExpr attribute="Error" context="#stay" String="\S" />
 			</context>
 			
 			<context name="CSS" attribute="Normal Text" lineEndContext="#stay">
-				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
+				<IncludeRules context="find-rubysource" />
 				
 				<Detect2Chars attribute="Element" context="#pop" char="/" char1="&gt;" endRegion="style" />
 				<DetectChar attribute="Element" context="CSS content" char="&gt;" />
@@ -467,14 +462,14 @@
 			</context>
 			
 			<context name="CSS content" attribute="Normal Text" lineEndContext="#stay">
-				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
+				<IncludeRules context="find-rubysource" />
 				
-				<RegExpr attribute="Element" context="El Close 2" String="&lt;/style\b" insensitive="true" endRegion="style" />
+				<WordDetect attribute="Element" context="El Close 2" String="&lt;/style" insensitive="true" endRegion="style" />
 				<IncludeRules context="##CSS" includeAttrib="true"/>
 			</context>
 			
 			<context name="JS" attribute="Normal Text" lineEndContext="#stay">
-				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
+				<IncludeRules context="find-rubysource" />
 				
 				<Detect2Chars attribute="Element" context="#pop" char="/" char1="&gt;" endRegion="script" />
 				<DetectChar attribute="Element" context="JS content" char="&gt;" />
@@ -483,9 +478,9 @@
 			</context>
 			
 			<context name="JS content" attribute="Normal Text" lineEndContext="#stay">
-				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
+				<IncludeRules context="find-rubysource" />
 				
-				<RegExpr attribute="Element" context="El Close 2" String="&lt;/script\b" insensitive="true" endRegion="script" />
+				<WordDetect attribute="Element" context="El Close 2" String="&lt;/script" insensitive="true" endRegion="script" />
 				<RegExpr attribute="Comment" context="JS comment close" String="//(?=.*&lt;/script\b)" insensitive="true" />
 				<IncludeRules context="Normal##JavaScript" includeAttrib="true"/>
 			</context>
@@ -496,7 +491,7 @@
 			</context>
 			
 			<context name="Value" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="Value NQ">
-				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
+				<IncludeRules context="find-rubysource" />
 				
 				<DetectChar attribute="Value" context="Value DQ" char="&quot;" />
 				<DetectChar attribute="Value" context="Value SQ" char="&apos;" />
@@ -504,7 +499,7 @@
 			</context>
 			
 			<context name="Value NQ" attribute="Normal Text" lineEndContext="#pop#pop" fallthrough="true" fallthroughContext="#pop#pop">
-				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
+				<IncludeRules context="find-rubysource" />
 				
 				<IncludeRules context="FindEntityRefs" />
 				<RegExpr attribute="Value" context="#stay" String="/(?!&gt;)" />
@@ -512,14 +507,14 @@
 			</context>
 			
 			<context name="Value DQ" attribute="Value" lineEndContext="#stay">
-				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
+				<IncludeRules context="find-rubysource" />
 				
 				<DetectChar attribute="Value" context="#pop#pop" char="&quot;" />
 				<IncludeRules context="FindEntityRefs" />
 			</context>
 			
 			<context name="Value SQ" attribute="Value" lineEndContext="#stay">
-				<RegExpr attribute="Keyword" context="rubysource" String="&lt;%=?" />
+				<IncludeRules context="find-rubysource" />
 				
 				<DetectChar attribute="Value" context="#pop#pop" char="&apos;" />
 				<IncludeRules context="FindEntityRefs" />
@@ -533,26 +528,36 @@
 				<IncludeRules context="rubysource" />
 			</context>
 			
+			<context name="find-rubysource" attribute="Normal Text" lineEndContext="#stay">
+				<Detect2Chars attribute="Ruby Source" context="rubysource-markup" char="&lt;" char1="%" />
+			</context>
+			<context name="rubysource-markup" attribute="Ruby Source" lineEndContext="#pop!rubysource-block-content" fallthrough="true" fallthroughContext="#pop!rubysource-block-content">
+				<AnyChar attribute="Ruby Source" context="#pop!rubysource-block-content" String="=-" /> <!-- <%= and <%- -->
+			</context>
+			<context name="rubysource-block-content" attribute="RUBY RAILS ERB Text" lineEndContext="#stay">
+				<StringDetect attribute="Ruby Source" context="#pop" String="-%&gt;" />
+				<Detect2Chars attribute="Ruby Source" context="#pop" char="%" char1="&gt;" />
+				<IncludeRules context="rubysource" />
+			</context>
+
 			<context name="rubysource" attribute="RUBY RAILS ERB Text" lineEndContext="#stay">
 				<!-- ruby ignores newline after \ -->
 				<LineContinue attribute="Ruby Normal Text" context="Line Continue"/>
-				
-				<RegExpr attribute="Keyword" context="#pop" String="-?%&gt;" />
-				
+
 				<!-- __END__ token on own line. -->
 				<RegExpr attribute="Keyword" String="__END__$" context="DATA" column="0"/>
 				
 				<!-- "shebang" line -->
-				<RegExpr attribute="Keyword" String="#!\/.*" context="#stay" column="0"/>
+				<StringDetect attribute="Keyword" String="#!/" context="ShebangLine" column="0"/>
 				
 				<!-- "def" - "end" blocks -->
 				<!-- check for statement modifiers with regexes -->
-				<RegExpr attribute="Keyword" String="(\=|\(|\[|\{)\s*(if|unless|while|until)\b" context="#stay" beginRegion="def block"/>
+				<RegExpr attribute="Keyword" String="(?:\=|\(|\[|\{)\s*(?:if|unless|while|until)\b" context="#stay" beginRegion="def block"/>
 				<RegExpr attribute="Keyword" String="(while|until)\b(?!.*\bdo\b)" context="#stay" beginRegion="def block" firstNonSpace="true"/>
-				<RegExpr attribute="Keyword" String="\;\s*(while|until)\b(?!.*\bdo\b)" context="#stay" beginRegion="def block"/>
+				<RegExpr attribute="Keyword" String="\;\s*(?:while|until)\b(?!.*\bdo\b)" context="#stay" beginRegion="def block"/>
 				<WordDetect attribute="Keyword" String="if" context="#stay" beginRegion="def block" firstNonSpace="true"/>
 				<WordDetect attribute="Keyword" String="unless" context="#stay" beginRegion="def block" firstNonSpace="true"/>
-				<RegExpr attribute="Keyword" String="\;\s*(if|unless)\b" context="#stay" beginRegion="def block"/>
+				<RegExpr attribute="Keyword" String="\;\s*(?:if|unless)\b" context="#stay" beginRegion="def block"/>
 				<WordDetect attribute="Keyword" String="class" context="#stay" beginRegion="def block"/>
 				<WordDetect attribute="Keyword" String="module" context="#stay" beginRegion="def block"/>
 				<WordDetect attribute="Keyword" String="begin" context="#stay" beginRegion="def block"/>
@@ -562,16 +567,16 @@
 				<WordDetect attribute="Keyword" String="def" context="#stay" beginRegion="def block"/>
 				<WordDetect attribute="Keyword" String="end" context="#stay" endRegion="def block"/>
 				<!-- elsif/else close the current block and start a new one -->
-				<RegExpr attribute="Keyword" String="(\b|^\s*)(else|elsif|rescue|ensure)(\s+|$)" context="#stay" endRegion="def block" beginRegion="def block"/>
+				<RegExpr attribute="Keyword" String="(?:\b|^\s*)(?:else|elsif|rescue|ensure)(?:\s+|$)" context="#stay" endRegion="def block" beginRegion="def block"/>
 				
 				<StringDetect attribute="Operator" String="..." context="#stay"/>
 				<Detect2Chars attribute="Operator" char="." char1="." context="#stay"/>
 				
 				<!-- marks a message (being sent, not defined) -->
-				<RegExpr attribute="Message" String="\.[_a-z][_a-zA-Z0-9]*(\?|\!|\b)" context="#stay"/>
+				<RegExpr attribute="Message" String="\.[_a-z][_a-zA-Z0-9]*(?:\?|\!|\b)" context="#stay"/>
 				
 				<!-- Check for "ASCII code operator". e.g.: ?a -->
-				<RegExpr attribute="Dec" String="\s\?(\\M\-)?(\\C\-)?\\?\S" context="#stay"/>
+				<RegExpr attribute="Dec" String="\s\?(?:\\M\-)?(?:\\C\-)?\\?\S" context="#stay"/>
 				
 				<keyword attribute="Keyword" String="keywords" context="#stay"/>
 				<keyword attribute="Attribute Definition" String="attribute-definitions"  context="#stay"/>
@@ -584,18 +589,18 @@
 				<!-- (global) vars starting with $
 					Match them before $_.
 					-->
-				<RegExpr attribute="Global Variable" String="\$(\w+|\-[a-zA-Z_]\b)" context="#stay"/>
+				<RegExpr attribute="Global Variable" String="\$(?:\w+|\-[a-zA-Z_]\b)" context="#stay"/>
 				<!-- special-character globals -->
 				<RegExpr attribute="Default globals" String="\$[\d_*`\!:?'/\\\-\&amp;]" context="#stay"/>
 				<RegExpr attribute="Global Constant" String="\b[_A-Z]+[A-Z_0-9]+\b" context="#stay"/>
 				<!-- Generally a module or class name like "File", "MyModule_1", .. -->
-				<RegExpr attribute="Constant" String="\b[A-Z]+_*([0-9]|[a-z])[_a-zA-Z0-9]*\b" context="#stay"/>
+				<RegExpr attribute="Constant" String="\b[A-Z]+_*(?:[0-9]|[a-z])[_a-zA-Z0-9]*\b" context="#stay"/>
 				
-				<RegExpr attribute="Hex" String="\b\-?0[xX][_0-9a-fA-F]+" context="#stay"/>
-				<RegExpr attribute="Bin" String="\b\-?0[bB][_01]+" context="#stay"/>
-				<RegExpr attribute="Octal" String="\b\-?0[1-7][_0-7]*" context="#stay"/>
-				<RegExpr attribute="Float" String="\b\-?[0-9][0-9_]*\.[0-9][0-9_]*([eE]\-?[1-9][0-9]*(\.[0-9]*)?)?" context="#stay"/>
-				<RegExpr attribute="Dec" String="\b\-?[1-9][0-9_]*\b" context="#stay"/>
+				<RegExpr attribute="Hex" String="(?:\-|\b)0[xX][_0-9a-fA-F]+" context="#stay"/>
+				<RegExpr attribute="Bin" String="(?:\-|\b)0[bB][_01]+" context="#stay"/>
+				<RegExpr attribute="Octal" String="(?:\-|\b)0[1-7][_0-7]*" context="#stay"/>
+				<RegExpr attribute="Float" String="(?:\-|\b)[0-9][0-9_]*\.[0-9][0-9_]*(?:[eE]\-?[1-9][0-9]*(?:\.[0-9]*)?)?" context="#stay"/>
+				<RegExpr attribute="Dec" String="(?:\-|\b)[1-9][0-9_]*\b" context="#stay"/>
 				<Int attribute="Dec" context="#stay"/>
 				<HlCChar attribute="Char" context="#stay"/>
 				
@@ -650,9 +655,11 @@
 				<!-- this moves to the next context to separate out the exact nature of the GDL input -->
 				<RegExpr attribute="GDL input" context="find_gdl_input" String="\s*[%](?=[Qqxw]?[^\s&gt;])" beginRegion="GdlInput" />
 			</context>
+
+			<context name="ShebangLine" attribute="Keyword" lineEndContext="#pop" />
 			
 			<context name="Line Continue" attribute="Ruby Normal Text" lineEndContext="#pop">
-				<RegExpr attribute="Keyword" String="(while|until)\b(?!.*\bdo\b)" context="#stay" firstNonSpace="true"/>
+				<RegExpr attribute="Keyword" String="(?:while|until)\b(?!.*\bdo\b)" context="#stay" firstNonSpace="true"/>
 				<WordDetect attribute="Keyword" String="if" context="#stay" firstNonSpace="true"/>
 				<WordDetect attribute="Keyword" String="unless" context="#stay" firstNonSpace="true"/>
 				<IncludeRules context="rubysource"/>
@@ -711,10 +718,10 @@
 			<!-- This handles access of nested module classes and class methods -->
 			<context name="Member Access" attribute="Member" lineEndContext="#pop">
 				<!-- marks a message (being sent, not defined) -->
-				<RegExpr attribute="Message" String="\.?[_a-z]\w*(\?|\!)?(?=[^\w\d\.\:])" context="#pop"/>
-				<RegExpr attribute="Message" String="\.?[_a-z]\w*(\?|\!)?" context="#stay"/>
-				<RegExpr attribute="Constant" String="[A-Z]+_*(\d|[a-z])\w*(?=[^\w\d\.\:])" context="#pop"/>
-				<RegExpr attribute="Constant" String="[A-Z]+_*([0-9]|[a-z])\w*" context="#stay"/>
+				<RegExpr attribute="Message" String="\.?[_a-z]\w*[\?\!]?(?=[^\w\d\.\:])" context="#pop"/>
+				<RegExpr attribute="Message" String="\.?[_a-z]\w*[\?\!]?" context="#stay"/>
+				<RegExpr attribute="Constant" String="[A-Z]+_*[\da-z]\w*(?=[^\w\d\.\:])" context="#pop"/>
+				<RegExpr attribute="Constant" String="[A-Z]+_*[0-9a-z]\w*" context="#stay"/>
 				<RegExpr attribute="Constant Value" String="[_A-Z][_A-Z0-9]*(?=[^\w\d\.\:])" context="#pop"/>
 				<RegExpr attribute="Constant Value" String="[_A-Z][_A-Z0-9]*" context="#stay"/>
 				<Detect2Chars attribute="Operator" char=":" char1=":" context="#stay"/>
@@ -727,13 +734,18 @@
 			</context>
 			
 			<context name="Comment Line" attribute="Ruby Comment" lineEndContext="#pop">
+				<DetectSpaces />
+				<StringDetect context="#pop" String="-%&gt;" lookAhead="true" />
+				<Detect2Chars context="#pop" char="%" char1="&gt;" lookAhead="true" />
 				<RegExpr attribute="Ruby Comment" String="\w\:\:\s" context="RDoc Label"/>
-				<keyword attribute="Alert" String="attention" context="#stay"/>
-				<RegExpr attribute="Keyword" context="#pop#pop" String="-?%&gt;" />
+				<IncludeRules context="##Alerts"/>
+				<IncludeRules context="##Modelines"/>
 			</context>
 			
 			<context name="General Comment" attribute="Ruby Comment" lineEndContext="#pop">
-				<keyword attribute="Dec" String="attention" context="#stay"/>
+				<DetectSpaces/>
+				<IncludeRules context="##Alerts"/>
+				<IncludeRules context="##Modelines"/>
 			</context>
 			
 			<context name="RDoc Label" attribute="RDoc Value" lineEndContext="#pop"/>
@@ -885,7 +897,7 @@
 				-->
 			<context name="gdl_dq_string_5" attribute="String" lineEndContext="#stay" dynamic="true">
 				<IncludeRules context="dq_string_rules" />
-				<RegExpr attribute="String" String="\\%1" context="#stay" dynamic="true" />
+				<StringDetect attribute="String" String="\%1" context="#stay" dynamic="true" />
 				<RegExpr attribute="GDL input" context="#pop#pop" String="\s*%1" dynamic="true" endRegion="GdlInput" />
 			</context>
 			<!-- rules to be included in all dq_string contexts -->
@@ -950,7 +962,7 @@
 				-->
 			<context name="gdl_token_array_5" attribute="String" lineEndContext="#stay" dynamic="true">
 				<IncludeRules context="token_array_rules" />
-				<RegExpr attribute="String" String="\\%1" context="#stay" dynamic="true"/>
+				<StringDetect attribute="String" String="\%1" context="#stay" dynamic="true"/>
 				<RegExpr attribute="GDL input" context="#pop#pop" String="\s*%1" dynamic="true" endRegion="GdlInput" />
 			</context>
 			
@@ -1014,7 +1026,7 @@
 				-->
 			<context name="gdl_apostrophed_5" attribute="Raw String" lineEndContext="#stay" dynamic="true">
 				<IncludeRules context="apostrophed_rules" />
-				<RegExpr attribute="Raw String" String="\\%1" context="#stay" dynamic="true"/>
+				<StringDetect attribute="Raw String" String="\%1" context="#stay" dynamic="true"/>
 				<RegExpr attribute="GDL input" context="#pop#pop" String="\s*%1" dynamic="true" endRegion="GdlInput" />
 			</context>
 			
@@ -1078,7 +1090,7 @@
 				-->
 			<context name="gdl_shell_command_5" attribute="Command" lineEndContext="#stay" dynamic="true">
 				<IncludeRules context="shell_command_rules" />
-				<RegExpr attribute="Command" String="\\%1" context="#stay" dynamic="true" />
+				<StringDetect attribute="Command" String="\%1" context="#stay" dynamic="true" />
 				<RegExpr attribute="GDL input" context="#pop#pop" String="\s*%1" dynamic="true" endRegion="GdlInput" />
 			</context>
 			
@@ -1144,7 +1156,7 @@
 				-->
 			<context name="gdl_regexpr_5" attribute="Regular Expression" lineEndContext="#stay" dynamic="true">
 				<IncludeRules context="regexpr_rules" />
-				<RegExpr attribute="Regular Expression" String="\\%1" context="#stay" dynamic="true" />
+				<StringDetect attribute="Regular Expression" String="\%1" context="#stay" dynamic="true" />
 				<RegExpr attribute="GDL input" context="#pop#pop" String="\s*%1[uiomxn]*" dynamic="true" endRegion="GdlInput" />
 			</context>
 			
@@ -1165,73 +1177,74 @@
 		<itemDatas>
 		<!-- BEGIN Ruby itemData -->
 			<itemData name="Ruby Normal Text" defStyleNum="dsNormal"/>
-			<itemData name="RUBY RAILS ERB Text" defStyleNum="dsExtension"/>
+			<itemData name="RUBY RAILS ERB Text" defStyleNum="dsExtension" bold="0" spellChecking="false"/>
+			<itemData name="Ruby Source" defStyleNum="dsDataType" bold="1" spellChecking="false"/>
 			
-			<itemData name="Keyword" defStyleNum="dsKeyword"/>
-			<itemData name="Attribute Definition" defStyleNum="dsOthers"/>
-			<itemData name="Access Control" defStyleNum="dsKeyword" color="#0000FF"/>
-			<itemData name="Definition" defStyleNum="dsKeyword"/>
-			<itemData name="Pseudo variable" defStyleNum="dsDecVal"/>
+			<itemData name="Keyword" defStyleNum="dsKeyword" spellChecking="false"/>
+			<itemData name="Attribute Definition" defStyleNum="dsOthers" spellChecking="false"/>
+			<itemData name="Access Control" defStyleNum="dsAttribute" bold="1" spellChecking="false"/> <!-- #0000FF -->
+			<itemData name="Definition" defStyleNum="dsKeyword" spellChecking="false"/>
+			<itemData name="Pseudo variable" defStyleNum="dsDecVal" spellChecking="false"/>
 			
-			<itemData name="Dec" defStyleNum="dsDecVal"/>
-			<itemData name="Float" defStyleNum="dsFloat"/>
-			<itemData name="Char" defStyleNum="dsChar"/>
-			<itemData name="Octal" defStyleNum="dsBaseN"/>
-			<itemData name="Hex" defStyleNum="dsBaseN"/>
-			<itemData name="Bin" defStyleNum="dsBaseN"/>
+			<itemData name="Dec" defStyleNum="dsDecVal" spellChecking="false"/>
+			<itemData name="Float" defStyleNum="dsFloat" spellChecking="false"/>
+			<itemData name="Char" defStyleNum="dsChar" spellChecking="false"/>
+			<itemData name="Octal" defStyleNum="dsBaseN" spellChecking="false"/>
+			<itemData name="Hex" defStyleNum="dsBaseN" spellChecking="false"/>
+			<itemData name="Bin" defStyleNum="dsBaseN" spellChecking="false"/>
 			
-			<itemData name="Symbol" defStyleNum="dsString" color="#D40000"/>
+			<itemData name="Symbol" defStyleNum="dsWarning" bold="0" underline="0" spellChecking="false"/> <!-- #D40000 -->
 			<itemData name="String" defStyleNum="dsString"/>
-			<itemData name="Raw String" defStyleNum="dsString" color="#DD4A4A" selColor="#DD4A4A"/>
-			<itemData name="Command" defStyleNum="dsString" color="#AA3000"/>
-			<itemData name="Message" defStyleNum="dsNormal" color="#4000A7"/> <!-- #4A00C0 -->
-			<itemData name="Regular Expression" defStyleNum="dsOthers" color="#4A5704"/>
-			<itemData name="Substitution"	defStyleNum="dsOthers"/>
+			<itemData name="Raw String" defStyleNum="dsVerbatimString"/> <!-- #DD4A4A -->
+			<itemData name="Command" defStyleNum="dsInformation"/> <!-- #AA3000 -->
+			<itemData name="Message" defStyleNum="dsAttribute" spellChecking="false"/> <!-- #4000A7 -->
+			<itemData name="Regular Expression" defStyleNum="dsSpecialString" spellChecking="false"/> <!-- #4A5704 -->
+			<itemData name="Substitution"	defStyleNum="dsSpecialChar" spellChecking="false"/>
 			<itemData name="Data" defStyleNum="dsNormal"/>
 			<!-- short for 'general delimited input' -->
 			<itemData name="GDL input" defStyleNum="dsOthers" />
 			
-			<itemData name="Default globals" defStyleNum="dsDataType" color="#C00000" bold="1"/>
-			<itemData name="Global Variable" defStyleNum="dsDataType" color="#C00000"/>
-			<itemData name="Global Constant" defStyleNum="dsDataType" color="#bb1188" bold="1"/>
-			<itemData name="Constant" defStyleNum="dsDataType"/>
-			<itemData name="Constant Value" defStyleNum="dsDataType" color="#bb1188"/>
-			<itemData name="Kernel methods" defStyleNum="dsNormal" color="#000080" selColor="#ffffff"/> <!-- #CC0E86 -->
-			<itemData name="Member" defStyleNum="dsNormal"/>
-			<itemData name="Instance Variable" defStyleNum="dsOthers"/>
-			<itemData name="Class Variable" defStyleNum="dsOthers"/>
+			<itemData name="Default globals" defStyleNum="dsVariable" bold="1" spellChecking="false"/> <!-- #C00000 -->
+			<itemData name="Global Variable" defStyleNum="dsVariable" spellChecking="false"/> <!-- #C00000 -->
+			<itemData name="Global Constant" defStyleNum="dsConstant" bold="1" spellChecking="false"/> <!-- #bb1188 -->
+			<itemData name="Constant" defStyleNum="dsDataType" spellChecking="false"/>
+			<itemData name="Constant Value" defStyleNum="dsConstant" bold="0" spellChecking="false"/> <!-- #bb1188 -->
+			<itemData name="Kernel methods" defStyleNum="dsFunction" bold="1" spellChecking="false"/> <!-- #000080, #CC0E86 -->
+			<itemData name="Member" defStyleNum="dsNormal" spellChecking="false"/>
+			<itemData name="Instance Variable" defStyleNum="dsOthers" spellChecking="false"/>
+			<itemData name="Class Variable" defStyleNum="dsOthers" spellChecking="false"/>
 			
 			<itemData name="Ruby Comment" defStyleNum="dsComment"/>
 			<itemData name="Blockcomment" defStyleNum="dsComment"/>
 			<itemData name="RDoc Value" defStyleNum="dsOthers"/>
 			
 			<!-- use these to mark errors and alerts things -->
-			<itemData name="Error" defStyleNum="dsError" />
-			<itemData name="Alert" defStyleNum="dsAlert" />
+			<itemData name="Error" defStyleNum="dsError" spellChecking="false"/>
 
-			<itemData name="Delimiter" defStyleNum="dsChar"/>
-			<itemData name="Operator" defStyleNum="dsChar"/>
+			<itemData name="Delimiter" defStyleNum="dsChar" spellChecking="false"/>
+			<itemData name="Operator" defStyleNum="dsChar" spellChecking="false"/>
 		<!-- END Ruby itemData -->
 			
 		<!-- BEGIN HTML itemData -->
 			<itemData name="Normal Text" defStyleNum="dsNormal" />
 			<itemData name="Comment" defStyleNum="dsComment" />
-			<itemData name="CDATA" defStyleNum="dsBaseN" bold="1" />
-			<itemData name="Processing Instruction" defStyleNum="dsKeyword" />
-			<itemData name="Doctype" defStyleNum="dsDataType" bold="1" />
-			<itemData name="Element" defStyleNum="dsKeyword" />
-			<itemData name="Attribute" defStyleNum="dsOthers" />
-			<itemData name="Value" defStyleNum="dsString" />
-			<itemData name="EntityRef" defStyleNum="dsDecVal" />
-			<itemData name="PEntityRef" defStyleNum="dsDecVal" />
+			<itemData name="CDATA" defStyleNum="dsBaseN" bold="1" spellChecking="false"/>
+			<itemData name="Processing Instruction" defStyleNum="dsKeyword" spellChecking="false"/>
+			<itemData name="Doctype" defStyleNum="dsDataType" bold="1" spellChecking="false"/>
+			<itemData name="Element" defStyleNum="dsKeyword" spellChecking="false"/>
+			<itemData name="Attribute" defStyleNum="dsOthers" spellChecking="false"/>
+			<itemData name="Value" defStyleNum="dsString" spellChecking="false"/>
+			<itemData name="EntityRef" defStyleNum="dsDecVal" spellChecking="false"/>
+			<itemData name="PEntityRef" defStyleNum="dsDecVal" spellChecking="false"/>
 		<!-- END HTML itemData -->
 		
 		</itemDatas>
 	</highlighting>
 	<general>
 		<comments>
-			<comment name="multiLine" start="&lt;!--" end="--&gt;" />
+			<comment name="multiLine" start="&lt;!--" end="--&gt;" region="comment" />
 		</comments>
 		<keywords casesensitive="1" weakDeliminator="!?"/> 
 	</general>
 </language>
+<!-- kate: replace-tabs off; -->
diff --git a/syntax/roff.xml b/syntax/roff.xml
--- a/syntax/roff.xml
+++ b/syntax/roff.xml
@@ -7,7 +7,7 @@
   <!ENTITY argsep1 "([^\\]|\\[&#37; |\^{}'`\-!?@)/,&amp;:~0E_acdeprtu])">
   <!ENTITY argsep2 "([^\\0-9]|\\[&#37;:{}'`\-_!@/cep])">
 ]>
-<language name="Roff" section="Markup" version="3" kateversion="2.4" extensions="" author="Matthew Woehlke (mw_triad@users.sourceforge.net)" license="GPL">
+<language name="Roff" section="Markup" version="4" kateversion="2.4" extensions="" author="Matthew Woehlke (mw_triad@users.sourceforge.net)" license="GPL">
 
   <highlighting>
 
@@ -79,7 +79,9 @@
 
       <!-- comment -->
       <context name="Comment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces />
         <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
 
       <!-- error -->
@@ -195,3 +197,4 @@
   </general>
 
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/ruby.xml b/syntax/ruby.xml
--- a/syntax/ruby.xml
+++ b/syntax/ruby.xml
@@ -31,7 +31,7 @@
 
 <!-- Hold the "language" opening tag on a single line, as mentioned in "language.dtd". -->
 <language name="Ruby" section="Scripts"
-	  version="10" kateversion="3.3"
+	  version="12" kateversion="3.3"
 	  extensions="*.rb;*.rjs;*.rxml;*.xml.erb;*.js.erb;*.rake;Rakefile;Gemfile;*.gemspec;Vagrantfile"
 	  mimetype="application/x-ruby"
 	  style="ruby" indenter="ruby"
@@ -389,6 +389,7 @@
 
 			<context name="Embedded documentation" attribute="Blockcomment" lineEndContext="#stay">
 				<RegExpr attribute="Comment" String="^=end(?:\s.*|$)" context="#pop" endRegion="comment block" column="0"/>
+				<DetectSpaces />
 				<IncludeRules context="##Alerts" />
 			</context>
 
@@ -431,7 +432,9 @@
 			</context>
 
 			<context name="General Comment" attribute="Comment" lineEndContext="#pop">
+				<DetectSpaces />
 				<IncludeRules context="##Alerts" />
+				<IncludeRules context="##Modelines" />
 			</context>
 
 			<!-- HEREDOC support
@@ -878,9 +881,9 @@
 		<itemDatas>
 			<itemData name="Normal Text" defStyleNum="dsNormal"/>
 
-			<itemData name="Keyword" defStyleNum="dsKeyword"/>
+			<itemData name="Keyword" defStyleNum="dsControlFlow"/>
 			<itemData name="Attribute Definition" defStyleNum="dsOthers"/>
-			<itemData name="Access Control" defStyleNum="dsKeyword" color="#0000FF"/>
+			<itemData name="Access Control" defStyleNum="dsAttribute" bold="1"/> <!-- #0000FF -->
 			<itemData name="Definition" defStyleNum="dsKeyword"/>
 			<itemData name="Pseudo variable" defStyleNum="dsDecVal"/>
 
@@ -891,24 +894,24 @@
 			<itemData name="Hex" defStyleNum="dsBaseN"/>
 			<itemData name="Bin" defStyleNum="dsBaseN"/>
 
-			<itemData name="Symbol" defStyleNum="dsString" color="#D40000"/>
+			<itemData name="Symbol" defStyleNum="dsWarning" bold="0" underline="0"/> <!-- #D40000 -->
 			<itemData name="String" defStyleNum="dsString"/>
-			<itemData name="Raw String" defStyleNum="dsString" color="#DD4A4A" selColor="#DD4A4A"/>
-			<itemData name="Command" defStyleNum="dsString" color="#AA3000"/>
-			<itemData name="Message" defStyleNum="dsNormal" color="#4000A7"/> <!-- #4A00C0 -->
-			<itemData name="Regular Expression" defStyleNum="dsOthers" color="#4A5704"/>
-			<itemData name="Substitution"	defStyleNum="dsOthers"/>
+			<itemData name="Raw String" defStyleNum="dsVerbatimString" /> <!-- #DD4A4A -->
+			<itemData name="Command" defStyleNum="dsInformation"/> <!-- #AA3000 -->
+			<itemData name="Message" defStyleNum="dsAttribute" bold="0"/> <!-- #4000A7 -->
+			<itemData name="Regular Expression" defStyleNum="dsSpecialString"/> <!-- #4A5704 -->
+			<itemData name="Substitution"	defStyleNum="dsSpecialChar"/>
 			<itemData name="Data" defStyleNum="dsNormal"/>
 			<!-- short for 'general delimited input' -->
 			<itemData name="GDL input" defStyleNum="dsOthers" />
 
-			<itemData name="Default globals" defStyleNum="dsDataType" color="#C00000" bold="1"/>
-			<itemData name="Global Variable" defStyleNum="dsDataType" color="#C00000"/>
-			<itemData name="Global Constant" defStyleNum="dsDataType" color="#bb1188" bold="1"/>
+			<itemData name="Default globals" defStyleNum="dsVariable" bold="1"/> <!-- #C00000 -->
+			<itemData name="Global Variable" defStyleNum="dsVariable"/> <!-- #C00000 -->
+			<itemData name="Global Constant" defStyleNum="dsConstant" bold="1"/> <!-- #bb1188 -->
 			<itemData name="Constant" defStyleNum="dsDataType"/>
-			<itemData name="Constant Value" defStyleNum="dsDataType" color="#bb1188"/>
-			<itemData name="Kernel methods" defStyleNum="dsNormal" color="#000080" selColor="#ffffff"/> <!-- #CC0E86 -->
-			<itemData name="Module mixin methods" defStyleNum="dsNormal" color="#000080" selColor="#ffffff"/> <!-- #CC0E86 -->
+			<itemData name="Constant Value" defStyleNum="dsConstant" bold="0"/> <!-- #bb1188 -->
+			<itemData name="Kernel methods" defStyleNum="dsFunction" bold="1"/> <!-- #CC0E86 -->
+			<itemData name="Module mixin methods" defStyleNum="dsFunction" bold="1"/> <!-- #CC0E86 -->
 			<itemData name="Member" defStyleNum="dsNormal"/>
 			<itemData name="Instance Variable" defStyleNum="dsOthers"/>
 			<itemData name="Class Variable" defStyleNum="dsOthers"/>
@@ -916,15 +919,15 @@
 			<itemData name="Comment" defStyleNum="dsComment"/>
 			<itemData name="Blockcomment" defStyleNum="dsComment"/>
 
-			<itemData name="Here Document" defStyleNum="dsOthers"/>
+			<itemData name="Here Document" defStyleNum="dsDocumentation"/>
 
-			<itemData name="Delimiter" defStyleNum="dsNormal" color="#FF9FEC"/>
-			<itemData name="Operator" defStyleNum="dsNormal" color="#FF9FEC"/>
+			<itemData name="Delimiter" defStyleNum="dsKeyword"/> <!-- #FF9FEC -->
+			<itemData name="Operator" defStyleNum="dsKeyword"/> <!-- #FF9FEC -->
 		</itemDatas>
 	</highlighting>
 	<general>
 		<comments>
-			<comment name="singleLine" start="#"/>
+			<comment name="singleLine" start="#" position="afterwhitespace"/>
 		</comments>
 		<keywords casesensitive="1" weakDeliminator="!?"/>
 	</general>
diff --git a/syntax/rust.xml b/syntax/rust.xml
--- a/syntax/rust.xml
+++ b/syntax/rust.xml
@@ -28,12 +28,12 @@
 -->
 <!DOCTYPE language SYSTEM "language.dtd"
 [
-	<!ENTITY rustIdent "([a-zA-Z_]|[^[:ascii:]])(\w|[^[:ascii:]])*">
-	<!ENTITY rustIntSuf "([iu](8|16|32|64|128|size)?)?">
-	<!ENTITY commonEscape "([trn0&apos;&quot;\\]|x[0-9a-fA-F]{2})">
-	<!ENTITY unicodeEscape "u\{([0-9a-fA-F]_*){1,6}\}">
+	<!ENTITY rustIdent "(?:[a-zA-Z_]|[^[:ascii:]])(?:\w|[^[:ascii:]])*">
+	<!ENTITY rustIntSuf "(?:[iu](?:8|16|32|64|128|size)?)?">
+	<!ENTITY commonEscape "(?:[trn0&apos;&quot;\\]|x[0-9a-fA-F]{2})">
+	<!ENTITY unicodeEscape "u\{(?:[0-9a-fA-F]_*){1,6}\}">
 ]>
-<language name="Rust" version="7" kateversion="5.0" section="Sources" extensions="*.rs" mimetype="text/rust" priority="15" license="MIT" author="The Rust Project Developers">
+<language name="Rust" version="9" kateversion="5.0" section="Sources" extensions="*.rs" mimetype="text/rust" priority="15" license="MIT" author="The Rust Project Developers">
 <highlighting>
 	<list name="fn">
 		<item>fn</item>
@@ -372,11 +372,11 @@
 			<keyword String="traits" attribute="Trait" context="#stay"/>
 			<IncludeRules context="FindComments"/>
 			<!-- Hexadecimal, Octal & Binary -->
-			<RegExpr String="\b0(x[0-9a-fA-F_]+|o[0-7_]+|b[01_]+)&rustIntSuf;\b" attribute="Number" context="#stay"/>
+			<RegExpr String="\b0(?:x[0-9a-fA-F_]+|o[0-7_]+|b[01_]+)&rustIntSuf;\b" attribute="Number" context="#stay"/>
 			<!-- Float & Decimal -->
-			<RegExpr String="\b[0-9][0-9_]*((\.[0-9][0-9_]*)?([eE][\+\-]?[0-9_]+)?(f32|f64)?|&rustIntSuf;)\b" attribute="Number" context="#stay"/>
+			<RegExpr String="\b[0-9][0-9_]*(?:(?:\.[0-9][0-9_]*)?(?:[eE][\+\-]?[0-9_]+)?(?:f32|f64)?|&rustIntSuf;)\b" attribute="Number" context="#stay"/>
 			<!-- Invalid number -->
-			<RegExpr String="\b0(b[01_]*[^01_]|o[0-7_]*[^0-7_]|x[0-9a-fA-F_]*[^0-9a-fA-F_])\w*&rustIntSuf;\b" attribute="Error" context="#stay"/>
+			<RegExpr String="\b0(?:b[01_]*[^01_]|o[0-7_]*[^0-7_]|x[0-9a-fA-F_]*[^0-9a-fA-F_])\w*&rustIntSuf;\b" attribute="Error" context="#stay"/>
 			<Detect2Chars char="#" char1="[" attribute="Attribute" context="Attribute" beginRegion="Attribute"/>
 			<StringDetect String="#![" attribute="Attribute" context="Attribute" beginRegion="Attribute"/>
 			<RegExpr String="&rustIdent;::" attribute="Scope"/>
@@ -386,13 +386,13 @@
 			<DetectChar char="{" attribute="Symbol" context="#stay" beginRegion="Brace" />
 			<DetectChar char="}" attribute="Symbol" context="#stay" endRegion="Brace" />
 			<!-- Raw Strings -->
-			<RegExpr String="b?r(#*)&quot;" attribute="String" context="RawString" dynamic="true"/>
+			<RegExpr String="b?r(#*)&quot;" attribute="String" context="RawString"/>
 			<!-- Byte Strings -->
 			<Detect2Chars char="b" char1="&quot;" attribute="String" context="ByteString"/>
 			<!-- Strings -->
 			<DetectChar char="&quot;" attribute="String" context="String"/>
 			<!-- Byte -->
-			<RegExpr String="b&apos;(?=([^&apos;\\]|\\&commonEscape;)&apos;)" attribute="Character" context="Character"/>
+			<RegExpr String="b&apos;(?=(?:[^&apos;\\]|\\&commonEscape;)&apos;)" attribute="Character" context="Character"/>
 			<!-- Character -->
 			<DetectChar char="&apos;" attribute="Character" context="Character"/>
 			<DetectChar char="[" attribute="Normal Text" context="#stay" beginRegion="Bracket" />
@@ -429,14 +429,14 @@
 			<DetectChar char="\" attribute="CharEscape" context="CharEscape"/>
 			<DetectChar attribute="String" context="#pop" char="&quot;"/>
 		</context>
-		<context attribute="String" lineEndContext="#stay" name="RawString" dynamic="true">
-			<RegExpr String="&quot;%1" attribute="String" context="#pop" dynamic="true"/>
+		<context attribute="String" lineEndContext="#stay" name="RawString">
+			<StringDetect String="&quot;%1" attribute="String" context="#pop" dynamic="true"/>
 		</context>
 		<context attribute="Character" lineEndContext="#pop" name="Character" fallthrough="true" fallthroughContext="#pop">
 			<RegExpr String="[^&apos;\\](?=&apos;)" attribute="Character" context="#stay"/>
-			<RegExpr String="\\(&unicodeEscape;|&commonEscape;)(?=&apos;)" attribute="CharEscape" context="#stay"/>
+			<RegExpr String="\\(?:&unicodeEscape;|&commonEscape;)(?=&apos;)" attribute="CharEscape" context="#stay"/>
 			<DetectChar attribute="Character" context="#pop" char="&apos;"/>
-			<RegExpr String="(\\.|[^&apos;\\])[^&apos;]*(?=&apos;([\d\s!&quot;#&#036;&#037;&amp;&#039;\(\)\*\+,\-\./:;&lt;\=&gt;\?@\[\\\]\^&#096;\{\|\}~[:cntrl:]]|$))" attribute="Error" context="#stay"/>
+			<RegExpr String="(?:\\.|[^&apos;\\])[^&apos;]*(?=&apos;(?:[\d\s!&quot;#&#036;&#037;&amp;&#039;\(\)\*\+,\-\./:;&lt;\=&gt;\?@\[\\\]\^&#096;\{\|\}~[:cntrl:]]|$))" attribute="Error" context="#stay"/>
 		</context>
 		<context attribute="CharEscape" lineEndContext="#pop" name="CharEscape">
 			<RegExpr String="&commonEscape;" attribute="CharEscape" context="#pop"/>
@@ -451,6 +451,7 @@
 			<Detect2Chars char="/" char1="*" attribute="Comment" context="Commentar 2" beginRegion="Comment"/>
 		</context>
 		<context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
+			<DetectSpaces/>
 			<IncludeRules context="##Alerts" />
 			<IncludeRules context="##Modelines" />
 		</context>
diff --git a/syntax/scala.xml b/syntax/scala.xml
--- a/syntax/scala.xml
+++ b/syntax/scala.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Scala" version="6" kateversion="2.3" section="Sources"
+<language name="Scala" version="8" kateversion="2.3" section="Sources"
           extensions="*.scala;*.sbt" mimetype="text/x-scala" license="LGPL"
           author="Stephane Micheloud (stephane.micheloud@epfl.ch)">
 <!--
@@ -3425,8 +3425,8 @@
         <RegExpr attribute="Keyword" context="Imports" String="\b(package|import)\b" />
 -->
         <RegExpr attribute="Function" context="#stay" String="\b[_\w][_\w\d]*(?=[\s]*(/\*\s*\d+\s*\*/\s*)?[(])" />
-        <RegExpr attribute="Symbol" context="Member" String="[.]{1,1}" />
-        <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/.*&lt;=&gt;?[]|~^&#59;"/>
+        <DetectChar attribute="Symbol" context="Member" char="." />
+        <AnyChar attribute="Symbol" context="#stay" String=":!%&amp;()+,-/*&lt;=&gt;?[]|~^&#59;"/>
       </context>
       <context name="Float Suffixes" attribute="Float" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop">
           <AnyChar String="fF" attribute="Float" context="#pop"/>
@@ -3469,9 +3469,16 @@
         <RegExpr attribute="Imports" context="#pop" String="\s*.*$" />
       </context>
 -->
-      <context attribute="Comment" lineEndContext="#pop" name="Commentar 1"/>
+      <context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
+      </context>
       <context attribute="Comment" lineEndContext="#stay" name="Commentar 2">
+        <DetectSpaces />
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
     </contexts>
     <itemDatas>
@@ -3498,8 +3505,9 @@
   <general>
     <comments>
       <comment name="singleLine" start="//"/>
-      <comment name="multiLine" start="/*" end="*/"/>
+      <comment name="multiLine" start="/*" end="*/" region="Comment"/>
     </comments>
     <keywords casesensitive="1"/>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/scheme.xml b/syntax/scheme.xml
--- a/syntax/scheme.xml
+++ b/syntax/scheme.xml
@@ -1,394 +1,1393 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE language SYSTEM "language.dtd">
-<language version="6" kateversion="5.0" name="Scheme" section="Scripts" extensions="*.scm;*.ss;*.scheme;*.guile" mimetype="text/x-scheme" author="Dominik Haumann (dhaumann@kde.org)" license="MIT" priority="9">
-  <highlighting>
-    <list name="operators">
-      <item>&lt;=</item>
-      <item>&lt;</item>
-      <item>=</item>
-      <item>=&gt;</item>
-      <item>&gt;=</item>
-      <item>&gt;</item>
-      <item>-</item>
-      <item>/</item>
-      <item>*,*</item>
-      <item>*)</item>
-      <item>+</item>
-    </list>
-    <list name="characters">
-      <item>#\nul</item>
-      <item>#\soh</item>
-      <item>#\stx</item>
-      <item>#\etx</item>
-      <item>#\eot</item>
-      <item>#\enq</item>
-      <item>#\ack</item>
-      <item>#\bel</item>
-      <item>#\bs</item>
-      <item>#\ht</item>
-      <item>#\nl</item>
-      <item>#\vt</item>
-      <item>#\np</item>
-      <item>#\cr</item>
-      <item>#\so</item>
-      <item>#\si</item>
-      <item>#\dle</item>
-      <item>#\dc1</item>
-      <item>#\dc2</item>
-      <item>#\dc3</item>
-      <item>#\dc4</item>
-      <item>#\nak</item>
-      <item>#\syn</item>
-      <item>#\etb</item>
-      <item>#\can</item>
-      <item>#\em</item>
-      <item>#\sub</item>
-      <item>#\esc</item>
-      <item>#\fs</item>
-      <item>#\gs</item>
-      <item>#\rs</item>
-      <item>#\us</item>
-      <item>#\space</item>
-      <item>#\sp</item>
-      <item>#\newline</item>
-      <item>#\nl</item>
-      <item>#\tab</item>
-      <item>#\ht</item>
-      <item>#\backspace</item>
-      <item>#\bs</item>
-      <item>#\return</item>
-      <item>#\cr</item>
-      <item>#\page</item>
-      <item>#\np</item>
-      <item>#\null</item>
-      <item>#\nul</item>
-    </list>
-    <list name="defines">
-      <item>define</item>
-      <item>define*</item>
-      <item>define-accessor</item>
-      <item>define-class</item>
-      <item>defined?</item>
-      <item>define-generic</item>
-      <item>define-macro</item>
-      <item>define-method</item>
-      <item>define-module</item>
-      <item>define-private</item>
-      <item>define-public</item>
-      <item>define*-public</item>
-      <item>define-reader-ctor</item>
-      <item>define-syntax</item>
-      <item>define-syntax-macro</item>
-      <item>defmacro</item>
-      <item>defmacro*</item>
-      <item>defmacro*-public</item>
-    </list>
-    <list name="keywords">
-      <item>abs</item>
-      <item>acos</item>
-      <item>and</item>
-      <item>angle</item>
-      <item>append</item>
-      <item>applymap</item>
-      <item>asin</item>
-      <item>assoc</item>
-      <item>assq</item>
-      <item>assv</item>
-      <item>atan</item>
-      <item>begin</item>
-      <item>boolean?</item>
-      <item>break</item>
-      <item>caaaar</item>
-      <item>caaadr</item>
-      <item>caaar</item>
-      <item>caadar</item>
-      <item>caaddr</item>
-      <item>caadr</item>
-      <item>caar</item>
-      <item>cadaar</item>
-      <item>cadadr</item>
-      <item>cadar</item>
-      <item>caddar</item>
-      <item>cadddr</item>
-      <item>caddr</item>
-      <item>cadr</item>
-      <item>call/cc</item>
-      <item>call-with-current-continuation</item>
-      <item>call-with-input-file</item>
-      <item>call-with-output-file</item>
-      <item>call-with-values</item>
-      <item>car</item>
-      <item>case</item>
-      <item>catch</item>
-      <item>cdaaar</item>
-      <item>cdaadr</item>
-      <item>cdaar</item>
-      <item>cdadar</item>
-      <item>cdaddr</item>
-      <item>cdadr</item>
-      <item>cdar</item>
-      <item>cddaar</item>
-      <item>cddadr</item>
-      <item>cddar</item>
-      <item>cdddar</item>
-      <item>cddddr</item>
-      <item>cdddr</item>
-      <item>cddr</item>
-      <item>cdr</item>
-      <item>ceiling</item>
-      <item>char-alphabetic?</item>
-      <item>char-ci&gt;=?</item>
-      <item>char-ci&gt;?</item>
-      <item>char-ci=?</item>
-      <item>char-ci&lt;=?</item>
-      <item>char-downcase</item>
-      <item>char-&gt;integer</item>
-      <item>char&gt;=?</item>
-      <item>char&gt;?</item>
-      <item>char=?</item>
-      <item>char?</item>
-      <item>char-lower-case?</item>
-      <item>char&lt;?c</item>
-      <item>char&lt;=?</item>
-      <item>char-numeric?</item>
-      <item>char-ready?</item>
-      <item>char-upcase</item>
-      <item>char-upper-case?</item>
-      <item>char-whitespace?</item>
-      <item>close-input-port</item>
-      <item>close-output-port</item>
-      <item>complex?</item>
-      <item>cond</item>
-      <item>cons</item>
-      <item>continue</item>
-      <item>cos</item>
-      <item>current-input-port</item>
-      <item>current-output-port</item>
-      <item>denominator</item>
-      <item>display</item>
-      <item>do</item>
-      <item>dynamic-wind</item>
-      <item>else</item>
-      <item>eof-object?</item>
-      <item>eq?</item>
-      <item>equal?</item>
-      <item>eqv?</item>
-      <item>eval</item>
-      <item>even?</item>
-      <item>exact->inexact</item>
-      <item>exact?</item>
-      <item>exp</item>
-      <item>expt</item>
-      <item>floor</item>
-      <item>force</item>
-      <item>for-each</item>
-      <item>gcd</item>
-      <item>har-ci&lt;?</item>
-      <item>if</item>
-      <item>imag-part</item>
-      <item>inexact-&gt;exact</item>
-      <item>inexact?</item>
-      <item>input-port?</item>
-      <item>integer-&gt;char</item>
-      <item>integer?</item>
-      <item>interaction-environment</item>
-      <item>lambda</item>
-      <item>lcm</item>
-      <item>length</item>
-      <item>let</item>
-      <item>let*</item>
-      <item>letrec</item>
-      <item>letrec-syntax</item>
-      <item>let-syntax</item>
-      <item>list-&gt;string</item>
-      <item>list</item>
-      <item>list?</item>
-      <item>list-ref</item>
-      <item>list-tail</item>
-      <item>load</item>
-      <item>log</item>
-      <item>magnitude</item>
-      <item>make-polar</item>
-      <item>make-rectangular</item>
-      <item>make-string</item>
-      <item>make-vector</item>
-      <item>max</item>
-      <item>member</item>
-      <item>memq</item>
-      <item>memv</item>
-      <item>min</item>
-      <item>modulo</item>
-      <item>negative?</item>
-      <item>newline</item>
-      <item>not</item>
-      <item>null-environment</item>
-      <item>null?</item>
-      <item>number?</item>
-      <item>number->string</item>
-      <item>numerator</item>
-      <item>odd?</item>
-      <item>open-input-file</item>
-      <item>open-output-file</item>
-      <item>or</item>
-      <item>output-port?</item>
-      <item>pair?</item>
-      <item>peek-char</item>
-      <item>port?</item>
-      <item>positive?</item>
-      <item>procedure?</item>
-      <item>quotient</item>
-      <item>rational?</item>
-      <item>rationalize</item>
-      <item>read-char</item>
-      <item>read</item>
-      <item>real?</item>
-      <item>real-part</item>
-      <item>remainder</item>
-      <item>reverse</item>
-      <item>round</item>
-      <item>scheme-report-environment</item>
-      <item>set-car!</item>
-      <item>set-cdr!</item>
-      <item>sin</item>
-      <item>sqrt</item>
-      <item>string-append</item>
-      <item>string-ci&gt;=?</item>
-      <item>string-ci&gt;?</item>
-      <item>string-ci=?</item>
-      <item>string-ci&lt;=?</item>
-      <item>string-ci&lt;?</item>
-      <item>string-copy</item>
-      <item>string-fill!</item>
-      <item>string&gt;=?</item>
-      <item>string&gt;?</item>
-      <item>string-&gt;list</item>
-      <item>string-&gt;number</item>
-      <item>string-&gt;symbol</item>
-      <item>string=?</item>
-      <item>string</item>
-      <item>string?</item>
-      <item>string-length</item>
-      <item>string&lt;=?</item>
-      <item>string&lt;?</item>
-      <item>string-ref</item>
-      <item>string-set!</item>
-      <item>substring</item>
-      <item>symbol-&gt;string</item>
-      <item>symbol?</item>
-      <item>syntax-rules</item>
-      <item>tan</item>
-      <item>transcript-off</item>
-      <item>transcript-on</item>
-      <item>truncate</item>
-      <item>values</item>
-      <item>vector-fill!</item>
-      <item>vector-&gt;listlist->vector</item>
-      <item>vector</item>
-      <item>vector?</item>
-      <item>vector-length</item>
-      <item>vector-ref</item>
-      <item>vector-set!</item>
-      <item>while</item>
-      <item>with-input-from-file</item>
-      <item>with-output-to-file</item>
-      <item>write-char</item>
-      <item>write</item>
-      <item>zero?</item>
-    </list>
-    <contexts>
-      <context name="Level0" attribute="Normal" lineEndContext="#stay">
-            <DetectChar attribute="Brackets1" context="Level1" char="("/>
-            <IncludeRules context="Default" />
-      </context>
-      <context name="Default" attribute="Normal" lineEndContext="#stay">
-        <RegExpr attribute="Region Marker" context="#stay" String=";+\s*BEGIN.*$" beginRegion="region"/>
-        <RegExpr attribute="Region Marker" context="#stay" String=";+\s*END.*$" endRegion="region"/>
-        <RegExpr attribute="Comment" context="#stay" String=";.*$"/>
-        <Detect2Chars attribute="Comment" context="MultiLineComment" char="#" char1="!" beginRegion="region"/>
-        <keyword attribute="Keyword" context="#stay" String="keywords"/>
-        <keyword attribute="Operator" context="#stay" String="operators"/>
-        <keyword attribute="Definition" context="function_decl" String="defines"/>
-        <keyword attribute="Char" context="#stay" String="characters"/>
-        <RegExpr attribute="Char" context="#stay" String="#\\."/>
-        <DetectChar attribute="String" context="String" char="&quot;"/>
-        <RegExpr attribute="Char" context="SpecialNumber" String="#[bodxei]"/>
-        <RegExpr attribute="Decimal" context="#stay" String="#[tf]"/>
-        <Float attribute="Float" context="#stay"/>
-        <Int attribute="Decimal" context="#stay"/>
-        <DetectChar attribute="Brackets1" context="Level1" char="("/>
-      </context>
-      <context name="MultiLineComment" attribute="Comment" lineEndContext="#stay">
-        <RegExpr attribute="Comment" context="#pop" String="!#\s*$" endRegion="region" column="0"/>
-      </context>
-      <context name="SpecialNumber" attribute="Normal" fallthrough="true" lineEndContext="#pop">
-        <RegExpr attribute="Decimal" context="#pop" String="\d*(\.\d+)?"/>
-      </context>
-      <context name="String" attribute="String" lineEndContext="#stay">
-        <keyword attribute="Char" context="#stay" String="characters"/>
-        <RegExpr attribute="Char" context="#stay" String="#\\."/>
-        <Detect2Chars attribute="Char" context="#stay" char="\" char1="&quot;"/>
-        <Detect2Chars attribute="Char" context="#stay" char="\" char1="\"/>
-        <DetectChar attribute="String" context="#pop" char="&quot;"/>
-      </context>
-      <context name="function_decl" attribute="Function" lineEndContext="#stay">
-        <RegExpr attribute="Function" context="#pop" String="\s*[A-Za-z0-9-+\&lt;\&gt;//\*]*\s*" />
-      </context>
-      <context name="Level1" attribute="Normal" lineEndContext="#stay">
-           <DetectChar attribute="Brackets2" context="Level2" char="("/>
-           <DetectChar attribute="Brackets1" context="#pop" char=")" />
-           <IncludeRules context="Default" />
-      </context>
-      <context name="Level2" attribute="Normal" lineEndContext="#stay">
-           <DetectChar attribute="Brackets3" context="Level3" char="("/>
-           <DetectChar attribute="Brackets2" context="#pop" char=")" />
-           <IncludeRules context="Default" />
-      </context>
-      <context name="Level3" attribute="Normal" lineEndContext="#stay">
-           <DetectChar attribute="Brackets4" context="Level4" char="("/>
-           <DetectChar attribute="Brackets3" context="#pop" char=")" />
-           <IncludeRules context="Default" />
-      </context>
-      <context name="Level4" attribute="Normal" lineEndContext="#stay">
-           <DetectChar attribute="Brackets5" context="Level5" char="("/>
-           <DetectChar attribute="Brackets4" context="#pop" char=")" />
-           <IncludeRules context="Default" />
-      </context>
-      <context name="Level5" attribute="Normal" lineEndContext="#stay">
-           <DetectChar attribute="Brackets6" context="Level6" char="("/>
-           <DetectChar attribute="Brackets5" context="#pop" char=")" />
-           <IncludeRules context="Default" />
-      </context>
-      <context name="Level6" attribute="Normal" lineEndContext="#stay">
-           <DetectChar attribute="Brackets1" context="Level1" char="("/>
-           <DetectChar attribute="Brackets6" context="#pop" char=")" />
-           <IncludeRules context="Default" />
-      </context>
-    </contexts>
-    <itemDatas>
-      <itemData name="Normal"      defStyleNum="dsNormal"/>
-      <itemData name="Keyword"     defStyleNum="dsKeyword"/>
-      <itemData name="Definition"  defStyleNum="dsExtension"/>
-      <itemData name="Operator"    defStyleNum="dsOperator"/>
-      <itemData name="Function"    defStyleNum="dsFunction"/>
-      <itemData name="Decimal"     defStyleNum="dsDecVal"/>
-      <itemData name="Float"       defStyleNum="dsFloat"/>
-      <itemData name="Char"        defStyleNum="dsChar"/>
-      <itemData name="String"      defStyleNum="dsString"/>
-      <itemData name="Comment"     defStyleNum="dsComment"/>
-      <itemData name="Region Marker" defStyleNum="dsRegionMarker"/>
-      <itemData name="Brackets1"    defStyleNum="dsNormal" color="#ff0000" bold="1"/>
-      <itemData name="Brackets2"    defStyleNum="dsNormal" color="#ff8800" bold="1"/>
-      <itemData name="Brackets3"    defStyleNum="dsNormal" color="#888800" bold="1"/>
-      <itemData name="Brackets4"    defStyleNum="dsNormal" color="#008800" bold="1"/>
-      <itemData name="Brackets5"    defStyleNum="dsNormal" color="#000088" bold="1"/>
-      <itemData name="Brackets6"    defStyleNum="dsNormal" color="#880088" bold="1"/>
-    </itemDatas>
-  </highlighting>
-  <general>
-    <keywords casesensitive="1" weakDeliminator="-+*?!&lt;&gt;=/:#\"/>
-    <comments>
-      <comment name="singleLine" start=";;" />
-      <comment name="multiLine" start="#!" end="!#" />
-    </comments>
-  </general>
-</language>
+<!DOCTYPE language SYSTEM "language.dtd"
+[
+  <!ENTITY xmlattrs "\s+([^&quot;/>]++|&quot;[^&quot;]*+&quot;)*+">
+  <!ENTITY tab      "&#009;">
+  <!ENTITY regex    "(?:[^\\(\[/]++|\\.|\[\^?\]?([^\\\[\]]++|\\.|\[(:[^:]+:\])?)++\]|\((?R)\))+">
+
+  <!ENTITY initial_ascii_set "a-zA-Z!$&#37;&amp;*/:&lt;=&gt;?~_^">
+  <!ENTITY initial_unicode_set "\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Mn}\p{Nl}\p{No}\p{Pd}\p{Pc}\p{Po}\p{Sc}\p{Sm}\p{Sk}\p{So}\p{Co}">
+  <!ENTITY initial_others "\\x[0-9a-fA-F]++;|(?![\x01-\x7f])[&initial_unicode_set;]">
+  <!ENTITY initial "(?:[&initial_ascii_set;]|&initial_others;)">
+  <!ENTITY subsequent "(?:[&initial_ascii_set;0-9-@.+\p{Nd}\p{Mc}\p{Me}]|&initial_others;)">
+  <!ENTITY symbol "(?:&initial;&subsequent;*+)">
+]>
+<!--
+  https://www.scheme.com/tspl4/
+  https://www.gnu.org/software/kawa/Syntax.html
+  https://www.gnu.org/software/guile/manual/html_node/Scheme-Syntax.html
+-->
+<language version="10" kateversion="5.62" name="Scheme" section="Scripts" extensions="*.scm;*.ss;*.scheme;*.guile;*.chicken;*.meta" mimetype="text/x-scheme" author="Dominik Haumann (dhaumann@kde.org)" license="MIT" priority="9">
+  <highlighting>
+    <list name="operators">
+      <item>&lt;=</item>
+      <item>&lt;</item>
+      <item>=</item>
+      <item>=&gt;</item>
+      <item>&gt;=</item>
+      <item>&gt;</item>
+      <item>-</item>
+      <item>/</item>
+      <item>*,*</item>
+      <item>+</item>
+      <item>!</item>
+      <item>$</item>
+      <item>%</item>
+      <item>*</item>
+      <item>/</item>
+      <item>=</item>
+      <item>></item>
+      <item>?</item>
+      <item>^</item>
+      <item>_</item>
+      <item>~</item>
+      <item>.</item>
+      <item>...</item>
+    </list>
+    <list name="characters">
+      <item>alarm</item>
+      <item>backspace</item>
+      <item>delete</item>
+      <item>esc</item>
+      <item>linefeed</item>
+      <item>newline</item>
+      <item>page</item>
+      <item>return</item>
+      <item>space</item>
+      <item>tab</item>
+      <item>vtab</item>
+      <!-- extension -->
+      <item>nul</item>
+      <item>soh</item>
+      <item>stx</item>
+      <item>etx</item>
+      <item>eot</item>
+      <item>enq</item>
+      <item>ack</item>
+      <item>bel</item>
+      <item>bs</item>
+      <item>ht</item>
+      <item>nl</item>
+      <item>vt</item>
+      <item>np</item>
+      <item>cr</item>
+      <item>so</item>
+      <item>si</item>
+      <item>dle</item>
+      <item>dc1</item>
+      <item>dc2</item>
+      <item>dc3</item>
+      <item>dc4</item>
+      <item>nak</item>
+      <item>syn</item>
+      <item>etb</item>
+      <item>can</item>
+      <item>em</item>
+      <item>sub</item>
+      <item>fs</item>
+      <item>gs</item>
+      <item>rs</item>
+      <item>us</item>
+      <item>sp</item>
+      <item>nl</item>
+      <item>ht</item>
+      <item>bs</item>
+      <item>cr</item>
+      <item>np</item>
+      <item>null</item>
+      <item>nul</item>
+    </list>
+    <list name="defines">
+      <item>define</item>
+      <item>define*</item>
+      <item>define-accessor</item>
+      <item>define-class</item>
+      <item>defined?</item>
+      <item>define-generic</item>
+      <item>define-macro</item>
+      <item>define-method</item>
+      <item>define-module</item>
+      <item>define-private</item>
+      <item>define-public</item>
+      <item>define*-public</item>
+      <item>define-reader-ctor</item>
+      <item>define-syntax</item>
+      <item>define-syntax-macro</item>
+      <item>defmacro</item>
+      <item>defmacro*</item>
+      <item>defmacro*-public</item>
+    </list>
+    <list name="keywords">
+      <item>&amp;assertion</item>
+      <item>&amp;condition</item>
+      <item>&amp;error</item>
+      <item>&amp;i/o-decoding</item>
+      <item>&amp;i/o-encoding</item>
+      <item>&amp;i/o-file-already-exists</item>
+      <item>&amp;i/o-file-does-not-exist</item>
+      <item>&amp;i/o-file-is-read-only</item>
+      <item>&amp;i/o-file-protection</item>
+      <item>&amp;i/o-filename</item>
+      <item>&amp;i/o-invalid-position</item>
+      <item>&amp;i/o-port</item>
+      <item>&amp;i/o-read</item>
+      <item>&amp;i/o-write</item>
+      <item>&amp;i/o</item>
+      <item>&amp;implementation-restriction</item>
+      <item>&amp;implementation-violation</item>
+      <item>&amp;irritants</item>
+      <item>&amp;lexical</item>
+      <item>&amp;message</item>
+      <item>&amp;mistake</item>
+      <item>&amp;no-infinities</item>
+      <item>&amp;no-nans</item>
+      <item>&amp;non-continuable</item>
+      <item>&amp;serious</item>
+      <item>&amp;syntax</item>
+      <item>&amp;undefined</item>
+      <item>&amp;violation</item>
+      <item>&amp;warning</item>
+      <item>&amp;who</item>
+      <item>&amp;xcond</item>
+      <item>abs</item>
+      <item>acos</item>
+      <item>and</item>
+      <item>angle</item>
+      <item>append</item>
+      <item>applymap</item>
+      <item>asin</item>
+      <item>assert</item>
+      <item>assertion-violation</item>
+      <item>assertion-violation?</item>
+      <item>assoc</item>
+      <item>assp</item>
+      <item>assq</item>
+      <item>assv</item>
+      <item>atan</item>
+      <item>begin</item>
+      <item>binary-port?</item>
+      <item>bitwise-and</item>
+      <item>bitwise-arithmetic-shift-left</item>
+      <item>bitwise-arithmetic-shift-right</item>
+      <item>bitwise-arithmetic-shift</item>
+      <item>bitwise-bit-count</item>
+      <item>bitwise-bit-field</item>
+      <item>bitwise-bit-set?</item>
+      <item>bitwise-copy-bit-field</item>
+      <item>bitwise-copy-bit</item>
+      <item>bitwise-first-bit-set</item>
+      <item>bitwise-if</item>
+      <item>bitwise-ior</item>
+      <item>bitwise-length</item>
+      <item>bitwise-not</item>
+      <item>bitwise-reverse-bit-field</item>
+      <item>bitwise-rotate-bit-field</item>
+      <item>bitwise-xor</item>
+      <item>boolean=?</item>
+      <item>boolean?</item>
+      <item>bound-identifier=?</item>
+      <item>break</item>
+      <item>buffer-mode</item>
+      <item>buffer-mode?</item>
+      <item>bytevector-&gt;sint-list</item>
+      <item>bytevector-&gt;string</item>
+      <item>bytevector-&gt;u8-list</item>
+      <item>bytevector-&gt;uint-list</item>
+      <item>bytevector-copy!</item>
+      <item>bytevector-copy</item>
+      <item>bytevector-fill!</item>
+      <item>bytevector-ieee-double-native-ref</item>
+      <item>bytevector-ieee-double-native-set!</item>
+      <item>bytevector-ieee-double-ref</item>
+      <item>bytevector-ieee-double-set!</item>
+      <item>bytevector-ieee-single-native-ref</item>
+      <item>bytevector-ieee-single-native-set!</item>
+      <item>bytevector-ieee-single-ref</item>
+      <item>bytevector-ieee-single-set!</item>
+      <item>bytevector-length</item>
+      <item>bytevector-s16-native-ref</item>
+      <item>bytevector-s16-native-set!</item>
+      <item>bytevector-s16-ref</item>
+      <item>bytevector-s16-set!</item>
+      <item>bytevector-s32-native-ref</item>
+      <item>bytevector-s32-native-set!</item>
+      <item>bytevector-s32-ref</item>
+      <item>bytevector-s32-set!</item>
+      <item>bytevector-s64-native-ref</item>
+      <item>bytevector-s64-native-set!</item>
+      <item>bytevector-s64-ref</item>
+      <item>bytevector-s64-set!</item>
+      <item>bytevector-s8-ref</item>
+      <item>bytevector-s8-set!</item>
+      <item>bytevector-sint-ref</item>
+      <item>bytevector-sint-set!</item>
+      <item>bytevector-u16-native-ref</item>
+      <item>bytevector-u16-native-set!</item>
+      <item>bytevector-u16-ref</item>
+      <item>bytevector-u16-set!</item>
+      <item>bytevector-u32-native-ref</item>
+      <item>bytevector-u32-native-set!</item>
+      <item>bytevector-u32-ref</item>
+      <item>bytevector-u32-set!</item>
+      <item>bytevector-u64-native-ref</item>
+      <item>bytevector-u64-native-set!</item>
+      <item>bytevector-u64-ref</item>
+      <item>bytevector-u64-set!</item>
+      <item>bytevector-u8-ref</item>
+      <item>bytevector-u8-set!</item>
+      <item>bytevector-uint-ref</item>
+      <item>bytevector-uint-set!</item>
+      <item>bytevector=?</item>
+      <item>bytevector?</item>
+      <item>caaaar</item>
+      <item>caaadr</item>
+      <item>caaar</item>
+      <item>caadar</item>
+      <item>caaddr</item>
+      <item>caadr</item>
+      <item>caar</item>
+      <item>cadaar</item>
+      <item>cadadr</item>
+      <item>cadar</item>
+      <item>caddar</item>
+      <item>cadddr</item>
+      <item>caddr</item>
+      <item>cadr</item>
+      <item>call-with-bytevector-output-port</item>
+      <item>call-with-current-continuation</item>
+      <item>call-with-input-file</item>
+      <item>call-with-output-file</item>
+      <item>call-with-port</item>
+      <item>call-with-string-output-port</item>
+      <item>call-with-values</item>
+      <item>call/cc</item>
+      <item>car</item>
+      <item>case-lambda</item>
+      <item>case</item>
+      <item>catch</item>
+      <item>cdaaar</item>
+      <item>cdaadr</item>
+      <item>cdaar</item>
+      <item>cdadar</item>
+      <item>cdaddr</item>
+      <item>cdadr</item>
+      <item>cdar</item>
+      <item>cddaar</item>
+      <item>cddadr</item>
+      <item>cddar</item>
+      <item>cdddar</item>
+      <item>cddddr</item>
+      <item>cdddr</item>
+      <item>cddr</item>
+      <item>cdr</item>
+      <item>ceiling</item>
+      <item>char&gt;=?</item>
+      <item>char&gt;?</item>
+      <item>char&lt;=?</item>
+      <item>char&lt;?</item>
+      <item>char&lt;?c</item>
+      <item>char-&gt;integer</item>
+      <item>char-alphabetic?</item>
+      <item>char-ci&gt;=?</item>
+      <item>char-ci&gt;?</item>
+      <item>char-ci&lt;=?</item>
+      <item>char-ci&lt;?</item>
+      <item>char-ci=?</item>
+      <item>char-downcase</item>
+      <item>char-foldcase</item>
+      <item>char-general-category</item>
+      <item>char-lower-case?</item>
+      <item>char-numeric?</item>
+      <item>char-ready?</item>
+      <item>char-title-case?</item>
+      <item>char-titlecase</item>
+      <item>char-upcase</item>
+      <item>char-upper-case?</item>
+      <item>char-whitespace?</item>
+      <item>char=?</item>
+      <item>char?</item>
+      <item>close-input-port</item>
+      <item>close-output-port</item>
+      <item>close-port</item>
+      <item>complex?</item>
+      <item>cond</item>
+      <item>condition-accessor</item>
+      <item>condition-irritants</item>
+      <item>condition-message</item>
+      <item>condition-predicate</item>
+      <item>condition-who</item>
+      <item>condition</item>
+      <item>condition?</item>
+      <item>cons*</item>
+      <item>cons</item>
+      <item>continue</item>
+      <item>cos</item>
+      <item>current-error-port</item>
+      <item>current-input-port</item>
+      <item>current-output-port</item>
+      <item>datum-&gt;syntax</item>
+      <item>define-condition-type</item>
+      <item>define-enumeration</item>
+      <item>define-record-type</item>
+      <item>delete-file</item>
+      <item>denominator</item>
+      <item>display</item>
+      <item>div-and-mod</item>
+      <item>div0-and-mod0</item>
+      <item>div0</item>
+      <item>div</item>
+      <item>do</item>
+      <item>dynamic-wind</item>
+      <item>else</item>
+      <item>endianness</item>
+      <item>enum-set-&gt;list</item>
+      <item>enum-set-complement</item>
+      <item>enum-set-constructor</item>
+      <item>enum-set-difference</item>
+      <item>enum-set-indexer</item>
+      <item>enum-set-intersection</item>
+      <item>enum-set-member?</item>
+      <item>enum-set-projection</item>
+      <item>enum-set-subset?</item>
+      <item>enum-set-union</item>
+      <item>enum-set-universe</item>
+      <item>enum-set=?</item>
+      <item>eof-object</item>
+      <item>eof-object?</item>
+      <item>eol-style</item>
+      <item>eq?</item>
+      <item>equal-hash</item>
+      <item>equal?</item>
+      <item>eqv?</item>
+      <item>error-handling-mode</item>
+      <item>error</item>
+      <item>error?</item>
+      <item>eval</item>
+      <item>even?</item>
+      <item>exact-&gt;inexact</item>
+      <item>exact->inexact</item>
+      <item>exact-integer-sqrt</item>
+      <item>exact</item>
+      <item>exact?</item>
+      <item>exp</item>
+      <item>expt</item>
+      <item>file-exists?</item>
+      <item>file-options</item>
+      <item>filter</item>
+      <item>find</item>
+      <item>finite?</item>
+      <item>fixnum-&gt;flonum</item>
+      <item>fixnum-width</item>
+      <item>fixnum?</item>
+      <item>fl&gt;=?</item>
+      <item>fl&gt;?</item>
+      <item>fl&lt;=?</item>
+      <item>fl&lt;?</item>
+      <item>fl*</item>
+      <item>fl+</item>
+      <item>fl-</item>
+      <item>fl/</item>
+      <item>fl=?</item>
+      <item>flabs</item>
+      <item>flacos</item>
+      <item>flasin</item>
+      <item>flatan</item>
+      <item>flceiling</item>
+      <item>flcos</item>
+      <item>fldenominator</item>
+      <item>fldiv-and-mod</item>
+      <item>fldiv0-and-mod0</item>
+      <item>fldiv0</item>
+      <item>fldiv</item>
+      <item>fleven?</item>
+      <item>flexp</item>
+      <item>flexpt</item>
+      <item>flfinite?</item>
+      <item>flfloor</item>
+      <item>flinfinite?</item>
+      <item>flinteger?</item>
+      <item>fllog</item>
+      <item>flmax</item>
+      <item>flmin</item>
+      <item>flmod0</item>
+      <item>flmod</item>
+      <item>flnan?</item>
+      <item>flnegative?</item>
+      <item>flnumerator</item>
+      <item>flodd?</item>
+      <item>flonum?</item>
+      <item>floor</item>
+      <item>flpositive?</item>
+      <item>flround</item>
+      <item>flsin</item>
+      <item>flsqrt</item>
+      <item>fltan</item>
+      <item>fltruncate</item>
+      <item>flush-output-port</item>
+      <item>flzero?</item>
+      <item>for-each</item>
+      <item>force</item>
+      <item>free-identifier=?</item>
+      <item>fx&gt;=?</item>
+      <item>fx&gt;?</item>
+      <item>fx&lt;=?</item>
+      <item>fx&lt;?</item>
+      <item>fx*/carry</item>
+      <item>fx*</item>
+      <item>fx+/carry</item>
+      <item>fx+</item>
+      <item>fx-/carry</item>
+      <item>fx-</item>
+      <item>fx=?</item>
+      <item>fxand</item>
+      <item>fxarithmetic-shift-left</item>
+      <item>fxarithmetic-shift-right</item>
+      <item>fxarithmetic-shift</item>
+      <item>fxbit-count</item>
+      <item>fxbit-field</item>
+      <item>fxbit-set?</item>
+      <item>fxcopy-bit-field</item>
+      <item>fxcopy-bit</item>
+      <item>fxdiv-and-mod</item>
+      <item>fxdiv0-and-mod0</item>
+      <item>fxdiv0</item>
+      <item>fxdiv</item>
+      <item>fxeven?</item>
+      <item>fxfirst-bit-set</item>
+      <item>fxif</item>
+      <item>fxior</item>
+      <item>fxlength</item>
+      <item>fxmax</item>
+      <item>fxmin</item>
+      <item>fxmod0</item>
+      <item>fxmod</item>
+      <item>fxnegative?</item>
+      <item>fxnot</item>
+      <item>fxodd?</item>
+      <item>fxpositive?</item>
+      <item>fxreverse-bit-field</item>
+      <item>fxrotate-bit-field</item>
+      <item>fxxor</item>
+      <item>fxzero?</item>
+      <item>gcd</item>
+      <item>generate-temporaries</item>
+      <item>get-bytevector-all</item>
+      <item>get-bytevector-n!</item>
+      <item>get-bytevector-n</item>
+      <item>get-bytevector-some</item>
+      <item>get-char</item>
+      <item>get-datum</item>
+      <item>get-line</item>
+      <item>get-string-all</item>
+      <item>get-string-n!</item>
+      <item>get-string-n</item>
+      <item>get-u8</item>
+      <item>greatest-fixnum</item>
+      <item>guard</item>
+      <item>har-ci&lt;?</item>
+      <item>hashtable-clear!</item>
+      <item>hashtable-contains?</item>
+      <item>hashtable-copy</item>
+      <item>hashtable-delete!</item>
+      <item>hashtable-entries</item>
+      <item>hashtable-equivalence-function</item>
+      <item>hashtable-hash-function</item>
+      <item>hashtable-keys</item>
+      <item>hashtable-mutable?</item>
+      <item>hashtable-ref</item>
+      <item>hashtable-set!</item>
+      <item>hashtable-size</item>
+      <item>hashtable-update!</item>
+      <item>hashtable?</item>
+      <item>i/o-decoding-error?</item>
+      <item>i/o-encoding-error-char</item>
+      <item>i/o-encoding-error?</item>
+      <item>i/o-error-filename</item>
+      <item>i/o-error-port</item>
+      <item>i/o-error-position</item>
+      <item>i/o-error?</item>
+      <item>i/o-file-already-exists-error?</item>
+      <item>i/o-file-does-not-exist-error?</item>
+      <item>i/o-file-is-read-only-error?</item>
+      <item>i/o-file-protection-error?</item>
+      <item>i/o-filename-error?</item>
+      <item>i/o-invalid-position-error?</item>
+      <item>i/o-port-error?</item>
+      <item>i/o-read-error?</item>
+      <item>i/o-write-error?</item>
+      <item>identifier-syntax</item>
+      <item>identifier?</item>
+      <item>if</item>
+      <item>imag-part</item>
+      <item>implementation-restriction-violation?</item>
+      <item>inexact-&gt;exact</item>
+      <item>inexact</item>
+      <item>inexact?</item>
+      <item>infinite?</item>
+      <item>input-port?</item>
+      <item>integer-&gt;char</item>
+      <item>integer-valued?</item>
+      <item>integer?</item>
+      <item>interaction-environment</item>
+      <item>irritants-condition?</item>
+      <item>lambda</item>
+      <item>latin-1-codec</item>
+      <item>lcm</item>
+      <item>least-fixnum</item>
+      <item>length</item>
+      <item>let*-values</item>
+      <item>let*</item>
+      <item>let-syntax</item>
+      <item>let-values</item>
+      <item>let</item>
+      <item>letrec*</item>
+      <item>letrec-syntax</item>
+      <item>letrec</item>
+      <item>lexical-violation?</item>
+      <item>list-&gt;string</item>
+      <item>list-&gt;vector</item>
+      <item>list-ref</item>
+      <item>list-sort</item>
+      <item>list-tail</item>
+      <item>list</item>
+      <item>list?</item>
+      <item>load</item>
+      <item>log</item>
+      <item>lookahead-char</item>
+      <item>lookahead-u8</item>
+      <item>magnitude</item>
+      <item>make-assertion-violation</item>
+      <item>make-bytevector</item>
+      <item>make-custom-binary-input-port</item>
+      <item>make-custom-binary-input/output-port</item>
+      <item>make-custom-binary-output-port</item>
+      <item>make-custom-textual-input-port</item>
+      <item>make-custom-textual-input/output-port</item>
+      <item>make-custom-textual-output-port</item>
+      <item>make-enumeration</item>
+      <item>make-eq-hashtable</item>
+      <item>make-eqv-hashtable</item>
+      <item>make-error</item>
+      <item>make-hashtable</item>
+      <item>make-i/o-decoding-error</item>
+      <item>make-i/o-encoding-error</item>
+      <item>make-i/o-error</item>
+      <item>make-i/o-file-already-exists-error</item>
+      <item>make-i/o-file-does-not-exist-error</item>
+      <item>make-i/o-file-is-read-only-error</item>
+      <item>make-i/o-file-protection-error</item>
+      <item>make-i/o-filename-error</item>
+      <item>make-i/o-invalid-position-error</item>
+      <item>make-i/o-port-error</item>
+      <item>make-i/o-read-error</item>
+      <item>make-i/o-write-error</item>
+      <item>make-implementation-restriction-violation</item>
+      <item>make-irritants-condition</item>
+      <item>make-lexical-violation</item>
+      <item>make-message-condition</item>
+      <item>make-no-infinities-violation</item>
+      <item>make-no-nans-violation</item>
+      <item>make-non-continuable-violation</item>
+      <item>make-polar</item>
+      <item>make-record-constructor-descriptor</item>
+      <item>make-record-type-descriptor</item>
+      <item>make-rectangular</item>
+      <item>make-serious-condition</item>
+      <item>make-string</item>
+      <item>make-syntax-violation</item>
+      <item>make-transcoder</item>
+      <item>make-undefined-violation</item>
+      <item>make-variable-transformer</item>
+      <item>make-vector</item>
+      <item>make-violation</item>
+      <item>make-warning</item>
+      <item>make-who-condition</item>
+      <item>max</item>
+      <item>member</item>
+      <item>memp</item>
+      <item>memq</item>
+      <item>memv</item>
+      <item>message-condition?</item>
+      <item>min</item>
+      <item>mod0</item>
+      <item>mod</item>
+      <item>modulo</item>
+      <item>nan?</item>
+      <item>native-endianness</item>
+      <item>native-eol-style</item>
+      <item>native-transcoder</item>
+      <item>negative?</item>
+      <item>newline</item>
+      <item>no-infinities-violation?</item>
+      <item>no-nans-violation?</item>
+      <item>non-continuable-violation?</item>
+      <item>not</item>
+      <item>null-environment</item>
+      <item>null?</item>
+      <item>number-&gt;string</item>
+      <item>number->string</item>
+      <item>number?</item>
+      <item>numerator</item>
+      <item>odd?</item>
+      <item>open-bytevector-input-port</item>
+      <item>open-bytevector-output-port</item>
+      <item>open-file-input-port</item>
+      <item>open-file-input/output-port</item>
+      <item>open-file-output-port</item>
+      <item>open-input-file</item>
+      <item>open-output-file</item>
+      <item>open-string-input-port</item>
+      <item>open-string-output-port</item>
+      <item>or</item>
+      <item>output-port-buffer-mode</item>
+      <item>output-port?</item>
+      <item>pair?</item>
+      <item>partition</item>
+      <item>peek-char</item>
+      <item>port-eof?</item>
+      <item>port-has-port-position?</item>
+      <item>port-has-set-port-position!?</item>
+      <item>port-position</item>
+      <item>port-transcoder</item>
+      <item>port?</item>
+      <item>positive?</item>
+      <item>procedure?</item>
+      <item>put-bytevector</item>
+      <item>put-char</item>
+      <item>put-datum</item>
+      <item>put-string</item>
+      <item>put-u8</item>
+      <item>quasiquote</item>
+      <item>quasisyntax</item>
+      <item>quote</item>
+      <item>quotient</item>
+      <item>raise-continuable</item>
+      <item>raise</item>
+      <item>rational-valued?</item>
+      <item>rational?</item>
+      <item>rationalize</item>
+      <item>read-char</item>
+      <item>read</item>
+      <item>real-&gt;flonum</item>
+      <item>real-part</item>
+      <item>real-valued?</item>
+      <item>real?</item>
+      <item>record-accessor</item>
+      <item>record-constructor-descriptor</item>
+      <item>record-constructor</item>
+      <item>record-field-mutable?</item>
+      <item>record-mutator</item>
+      <item>record-predicate</item>
+      <item>record-rtd</item>
+      <item>record-type-descriptor</item>
+      <item>record-type-descriptor?</item>
+      <item>record-type-field-names</item>
+      <item>record-type-generative?</item>
+      <item>record-type-name</item>
+      <item>record-type-opaque?</item>
+      <item>record-type-parent</item>
+      <item>record-type-sealed?</item>
+      <item>record-type-uid</item>
+      <item>record?</item>
+      <item>remainder</item>
+      <item>remove</item>
+      <item>remp</item>
+      <item>remq</item>
+      <item>remv</item>
+      <item>reverse</item>
+      <item>round</item>
+      <item>scheme-report-environment</item>
+      <item>serious-condition?</item>
+      <item>set!</item>
+      <item>set-car!</item>
+      <item>set-cdr!</item>
+      <item>set-port-position!</item>
+      <item>simple-conditions</item>
+      <item>sin</item>
+      <item>sint-list-&gt;bytevector</item>
+      <item>sqrt</item>
+      <item>standard-error-port</item>
+      <item>standard-input-port</item>
+      <item>standard-output-port</item>
+      <item>string&gt;=?</item>
+      <item>string&gt;?</item>
+      <item>string&lt;=?</item>
+      <item>string&lt;?</item>
+      <item>string-&gt;bytevector</item>
+      <item>string-&gt;list</item>
+      <item>string-&gt;number</item>
+      <item>string-&gt;symbol</item>
+      <item>string-&gt;utf16</item>
+      <item>string-&gt;utf32</item>
+      <item>string-&gt;utf8</item>
+      <item>string-append</item>
+      <item>string-ci&gt;=?</item>
+      <item>string-ci&gt;?</item>
+      <item>string-ci&lt;=?</item>
+      <item>string-ci&lt;?</item>
+      <item>string-ci-hash</item>
+      <item>string-ci=?</item>
+      <item>string-copy</item>
+      <item>string-downcase</item>
+      <item>string-fill!</item>
+      <item>string-foldcase</item>
+      <item>string-hash</item>
+      <item>string-length</item>
+      <item>string-normalize-nfc</item>
+      <item>string-normalize-nfd</item>
+      <item>string-normalize-nfkc</item>
+      <item>string-normalize-nfkd</item>
+      <item>string-ref</item>
+      <item>string-set!</item>
+      <item>string-titlecase</item>
+      <item>string-upcase</item>
+      <item>string</item>
+      <item>string=?</item>
+      <item>string?</item>
+      <item>substring</item>
+      <item>symbol-&gt;string</item>
+      <item>symbol-hash</item>
+      <item>symbol=?</item>
+      <item>symbol?</item>
+      <item>syntax-&gt;datum</item>
+      <item>syntax-case</item>
+      <item>syntax-rules</item>
+      <item>syntax-violation-form</item>
+      <item>syntax-violation-subform</item>
+      <item>syntax-violation</item>
+      <item>syntax-violation?</item>
+      <item>syntax</item>
+      <item>tan</item>
+      <item>textual-port?</item>
+      <item>transcoded-port</item>
+      <item>transcoder-codec</item>
+      <item>transcoder-eol-style</item>
+      <item>transcoder-error-handling-mode</item>
+      <item>transcript-off</item>
+      <item>transcript-on</item>
+      <item>truncate</item>
+      <item>u8-list-&gt;bytevector</item>
+      <item>uint-list-&gt;bytevector</item>
+      <item>undefined-violation?</item>
+      <item>unquote-splicing</item>
+      <item>unquote</item>
+      <item>unsyntax-splicing</item>
+      <item>unsyntax</item>
+      <item>utf-16-codec</item>
+      <item>utf-8-codec</item>
+      <item>utf16-&gt;string</item>
+      <item>utf32-&gt;string</item>
+      <item>utf8-&gt;string</item>
+      <item>values</item>
+      <item>vector-&gt;list</item>
+      <item>vector-&gt;listlist->vector</item>
+      <item>vector-fill!</item>
+      <item>vector-length</item>
+      <item>vector-ref</item>
+      <item>vector-set!</item>
+      <item>vector-sort!</item>
+      <item>vector-sort</item>
+      <item>vector</item>
+      <item>vector?</item>
+      <item>violation?</item>
+      <item>warning?</item>
+      <item>while</item>
+      <item>who-condition?</item>
+      <item>with-exception-handler</item>
+      <item>with-input-from-file</item>
+      <item>with-output-to-file</item>
+      <item>with-syntax</item>
+      <item>write-char</item>
+      <item>write</item>
+      <item>zero?</item>
+    </list>
+    <contexts>
+      <context name="Level0" attribute="Normal" lineEndContext="#stay">
+        <DetectChar attribute="Brackets1" context="Level1" char="("/>
+        <Detect2Chars attribute="Brackets1" context="Level1" char="'" char1="("/>
+        <Detect2Chars attribute="Brackets1" context="Level1" char="`" char1="("/>
+        <Detect2Chars attribute="Brackets1" context="Level1" char="#" char1="("/>
+        <Detect2Chars attribute="Brackets1" context="Level1" char="@" char1="("/>
+        <IncludeRules context="Default"/>
+      </context>
+
+      <context name="Default" attribute="Normal" lineEndContext="#stay">
+        <DetectSpaces/>
+        <DetectChar attribute="Comment" context="hash" char="#" lookAhead="1"/>
+        <DetectChar attribute="Comment" context="semicolon" char=";" lookAhead="1"/>
+        <DetectChar attribute="String" context="String" char="&quot;"/>
+        <Detect2Chars attribute="String" context="Template" char="&amp;" char1="{"/>
+        <AnyChar attribute="Other Brackets" context="#stay" String="{}[]"/>
+        <keyword attribute="Keyword" context="#stay" String="keywords"/>
+        <keyword attribute="Definition" context="function_decl" String="defines"/>
+        <keyword attribute="Operator" context="#stay" String="operators"/>
+        <RegExpr attribute="Normal" context="#stay" String="&symbol;"/>
+        <!-- s, f, d, l are extensions of Kawa -->
+        <RegExpr attribute="Float" context="#stay" String="[0-9]*+\.[0-9]++([esfdl][+-]?[0-9]++)?|[0-9]++[esfdl][+-]?[0-9]++"/>
+        <RegExpr attribute="Decimal" context="#stay" String="[0-9]++"/>
+      </context>
+
+
+      <context name="Template" attribute="String" lineEndContext="#stay">
+        <DetectSpaces/>
+        <DetectIdentifier/>
+        <DetectChar attribute="String" context="#pop" char="}"/>
+        <DetectChar attribute="String" context="Template" char="{"/>
+        <DetectChar attribute="Char" context="TemplateTemplate" char="&amp;" lookAhead="1"/>
+      </context>
+      <context name="TemplateTemplate" attribute="String" lineEndContext="#pop">
+        <Detect2Chars attribute="Operator" context="#stay" char="&amp;" char1="|" firstNonSpace="1"/>
+        <Detect2Chars attribute="Operator" context="#pop!NotNewlineTemplate" char="&amp;" char1="-"/>
+        <Detect2Chars attribute="Brackets1" context="#pop!Level1" char="&amp;" char1="("/>
+        <Detect2Chars attribute="Brackets1" context="#pop!EmbeddedExpressionTemplate" char="&amp;" char1="["/>
+        <Detect2Chars attribute="Extension" context="#pop!FormatTemplate" char="&amp;" char1="~"/>
+        <StringDetect attribute="Comment" context="#pop!MultiLineComment" String="&amp;#|" beginRegion="comment"/>
+        <RegExpr attribute="Char" context="#pop!EndCharTemplate" String="(&amp;(?:#(?:[0-9]+|x[0-9a-fA-F]+)|[_a-zA-Z][-:_a-zA-Z0-9]*))" lookAhead="1"/>
+        <DetectChar attribute="String" context="#pop" char="&amp;"/>
+      </context>
+      <context name="FormatTemplate" attribute="Extension" lineEndContext="#pop" fallthroughContext="#pop">
+        <AnyChar attribute="Extension" context="#pop" String="({["/>
+        <AnyChar attribute="Extension" context="FormatTemplate" String=")}]"/>
+        <RegExpr attribute="Extension" context="#pop" String="[^(){}\[\]]+"/>
+      </context>
+      <context name="EmbeddedExpressionTemplate" attribute="Normal" lineEndContext="#stay">
+        <DetectChar attribute="Brackets1" context="#pop" char="]"/>
+        <IncludeRules context="Level1"/>
+      </context>
+      <context name="NotNewlineTemplate" attribute="String" lineEndContext="#pop" fallthroughContext="#pop">
+        <DetectSpaces/>
+        <Detect2Chars attribute="Comment" context="#pop!MultiLineComment" char="#" char1="|" beginRegion="comment"/>
+      </context>
+      <context name="EndCharTemplate" attribute="Comment" lineEndContext="#stay">
+        <StringDetect attribute="Char" context="#pop" String="%1;" dynamic="1"/>
+        <StringDetect attribute="Error" context="#pop" String="%1" dynamic="1"/>
+      </context>
+
+
+      <context name="semicolon" attribute="Comment" lineEndContext="#stay" fallthroughContext="#pop!comment">
+        <RegExpr attribute="Region Marker" context="#pop" String=";+\s*BEGIN\b.*" beginRegion="region"/>
+        <RegExpr attribute="Region Marker" context="#pop" String=";+\s*END\b.*" endRegion="region"/>
+      </context>
+      <context name="comment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces/>
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+        <DetectIdentifier/>
+      </context>
+
+      <context name="hash" attribute="Normal" lineEndContext="#stay">
+        <Detect2Chars attribute="Decimal" context="#pop" char="#" char1="t"/>
+        <Detect2Chars attribute="Decimal" context="#pop" char="#" char1="T"/>
+        <Detect2Chars attribute="Decimal" context="#pop" char="#" char1="f"/>
+        <Detect2Chars attribute="Decimal" context="#pop" char="#" char1="F"/>
+        <Detect2Chars attribute="Base Prefix" context="#pop!Num16" char="#" char1="x"/>
+        <Detect2Chars attribute="Base Prefix" context="#pop!Num8" char="#" char1="o"/>
+        <Detect2Chars attribute="Base Prefix" context="#pop!Num2" char="#" char1="b"/>
+        <Detect2Chars attribute="Base Prefix" context="#pop!Num10" char="#" char1="e"/>
+        <Detect2Chars attribute="Base Prefix" context="#pop!Num10" char="#" char1="i"/>
+        <Detect2Chars attribute="Base Prefix" context="#pop!Num10" char="#" char1="d"/>
+        <Detect2Chars attribute="Char" context="#pop!Char" char="#" char1="\"/>
+        <Detect2Chars attribute="Comment" context="#pop!DatumComment" char="#" char1=";"/>
+        <Detect2Chars attribute="Comment" context="#pop!MultiLineComment" char="#" char1="|" beginRegion="comment"/>
+        <Detect2Chars attribute="Comment" context="#pop!MultiLineGuileCommentOrExtension" char="#" char1="!" lookAhead="1"/>
+
+        <!-- Kawa extension -->
+        <Detect2Chars attribute="Operator" context="#pop!Regex" char="#" char1="/"/>
+        <Detect2Chars attribute="XML Tag" context="#pop!XML" char="#" char1="&lt;" lookAhead="1"/>
+
+        <DetectChar attribute="Normal" context="#pop" char="#"/>
+      </context>
+
+
+      <context name="XML" attribute="XML Tag" lineEndContext="#pop">
+        <StringDetect attribute="XML Tag" context="#pop!XMLProc" String="#&lt;?"/>
+        <StringDetect attribute="XML Comment" context="#pop!XMLComment" String="#&lt;!--"/>
+        <StringDetect attribute="XML Tag" context="#pop!XMLCDATA" String="#&lt;![CDATA["/>
+        <StringDetect attribute="XML Tag" context="#pop!XMLTagExpr1" String="#&lt;("/>
+        <StringDetect attribute="XML Tag" context="#pop!XMLTagExpr2" String="#&lt;{"/>
+        <RegExpr attribute="XML Tag" context="#pop!XMLTag" String="#&lt;[^\s>]++"/>
+        <Detect2Chars attribute="Error" context="#pop" char="#" char1="&lt;"/>
+      </context>
+
+      <context name="XMLTagExpr1" attribute="Normal" lineEndContext="#stay">
+        <DetectChar attribute="Brackets1" context="Level1" char="("/>
+        <DetectChar attribute="XML Tag" context="#pop!XMLTag" char=")"/>
+        <IncludeRules context="Default"/>
+      </context>
+      <context name="XMLTagExpr2" attribute="Normal" lineEndContext="#stay">
+        <DetectChar attribute="Brackets1" context="Level1" char="("/>
+        <DetectChar attribute="XML Tag" context="#pop!XMLTag" char="}"/>
+        <IncludeRules context="Default"/>
+      </context>
+
+      <context name="XMLTag" attribute="XML Attribute" lineEndContext="#stay">
+        <DetectSpaces/>
+        <Detect2Chars attribute="XML Tag" context="#pop" char="/" char1=">"/>
+        <DetectChar attribute="XML Tag" context="#pop!XMLInnerTag" char=">"/>
+        <RegExpr attribute="XML Attribute" context="XMLAttribute" String="[^\s=/>]++\s*"/>
+      </context>
+      <context name="XMLInnerTag" attribute="XML Tag" lineEndContext="#stay">
+        <DetectSpaces/>
+        <DetectIdentifier/>
+        <DetectChar attribute="XML String" context="XMLEscape" char="&amp;" lookAhead="1"/>
+        <DetectChar attribute="XML Tag" context="XMLFindXML" char="&lt;" lookAhead="1"/>
+      </context>
+      <context name="XMLFindXML" attribute="String" lineEndContext="#stay">
+        <Detect2Chars attribute="XML Tag" context="#pop!XMLProc" char="&lt;" char1="?"/>
+        <Detect2Chars attribute="XML Tag" context="#pop!XMLTagExpr1" char="&lt;" char1="("/>
+        <Detect2Chars attribute="XML Tag" context="#pop!XMLTagExpr2" char="&lt;" char1="{"/>
+        <StringDetect attribute="XML Comment" context="#pop!XMLComment" String="&lt;!--"/>
+        <StringDetect attribute="XML Tag" context="#pop!XMLCDATA" String="&lt;![CDATA["/>
+        <Detect2Chars attribute="XML Tag" context="#pop!XMLCloseTag" char="&lt;" char1="/" lookAhead="1"/>
+        <RegExpr attribute="XML Tag" context="#pop!XMLTag" String="&lt;[^\s>]++"/>
+        <DetectChar attribute="XML Error" context="#pop" char="&lt;"/>
+      </context>
+      <context name="XMLCloseTag" attribute="String" lineEndContext="#pop#pop">
+        <RegExpr attribute="XML Tag" context="#pop#pop" String="&lt;/[^\s>]*>"/>
+        <Detect2Chars attribute="XML Error" context="#pop#pop" char="&lt;" char1="/"/>
+      </context>
+
+      <context name="XMLAttribute" attribute="XML Attribute" lineEndContext="#stay" fallthroughContext="#pop">
+        <DetectSpaces/>
+        <DetectChar attribute="XML Attribute" context="XMLAttributeValue" char="="/>
+      </context>
+      <context name="XMLAttributeValue" attribute="XML Attribute" lineEndContext="#stay" fallthroughContext="#pop#pop">
+        <DetectSpaces/>
+        <DetectChar attribute="XML String" context="XMLDQ" char="&quot;"/>
+        <DetectChar attribute="XML String" context="XMLSQ" char="'"/>
+      </context>
+      <context name="XMLDQ" attribute="XML String" lineEndContext="#stay">
+        <DetectSpaces/>
+        <DetectIdentifier/>
+        <DetectChar attribute="XML String" context="#pop#pop#pop" char="&quot;"/>
+        <IncludeRules context="XMLStringEscape"/>
+      </context>
+      <context name="XMLSQ" attribute="XML String" lineEndContext="#stay">
+        <DetectSpaces/>
+        <DetectIdentifier/>
+        <DetectChar attribute="XML String" context="#pop#pop#pop" char="'"/>
+        <IncludeRules context="XMLStringEscape"/>
+      </context>
+      <context name="XMLStringEscape" attribute="XML String" lineEndContext="#stay">
+        <DetectChar attribute="XML String" context="XMLEscape" char="&amp;" lookAhead="1"/>
+        <DetectChar attribute="XML Error" context="#stay" char="&lt;"/>
+      </context>
+
+      <context name="XMLEscape" attribute="XML String" lineEndContext="#stay">
+        <Detect2Chars attribute="Brackets1" context="#pop!XMLEnclosedExpr1" char="&amp;" char1="("/>
+        <Detect2Chars attribute="Brackets1" context="#pop!XMLEnclosedExpr2" char="&amp;" char1="{"/>
+        <RegExpr attribute="XML Entity" context="#pop" String="&amp;(?:lt|gt|amp|quot|apos|#[0-9]+|x[0-9a-fA-F]+);"/>
+        <DetectChar attribute="XML Error" context="#pop" char="&amp;"/>
+      </context>
+      <context name="XMLEnclosedExpr1" attribute="Normal" lineEndContext="#pop">
+        <DetectChar attribute="Brackets2" context="Level2" char="("/>
+        <DetectChar attribute="Brackets1" context="#pop" char=")"/>
+        <IncludeRules context="Default"/>
+      </context>
+      <context name="XMLEnclosedExpr2" attribute="Normal" lineEndContext="#pop">
+        <DetectChar attribute="Brackets2" context="Level2" char="("/>
+        <DetectChar attribute="Brackets1" context="#pop" char="}"/>
+        <IncludeRules context="Default"/>
+      </context>
+
+      <context name="XMLProc" attribute="XML Attribute" lineEndContext="#stay" fallthroughContext="XMLProcAttrs">
+        <RegExpr attribute="XML Tag" context="XMLProcAttrs" String="[^\s?]+"/>
+      </context>
+      <context name="XMLProcAttrs" attribute="XML Attribute" lineEndContext="#stay">
+        <Detect2Chars attribute="XML Tag" context="#pop#pop" char="?" char1=">"/>
+      </context>
+
+      <context name="XMLComment" attribute="XML Comment" lineEndContext="#stay">
+        <DetectSpaces/>
+        <DetectIdentifier/>
+        <Detect2Chars attribute="XML Comment" context="XMLCommentCheck" char="-" char1="-" lookAhead="1"/>
+      </context>
+      <context name="XMLCommentCheck" attribute="Comment" lineEndContext="#stay">
+        <StringDetect attribute="XML Tag" context="#pop#pop" String="-->"/>
+        <Detect2Chars attribute="XML Error" context="#pop" char="-" char1="-"/>
+      </context>
+
+      <context name="XMLCDATA" attribute="XML CDATA" lineEndContext="#stay">
+        <DetectSpaces/>
+        <DetectIdentifier/>
+        <StringDetect attribute="XML Tag" context="#pop" String="]]>"/>
+      </context>
+
+
+      <context name="Regex" attribute="Extension" lineEndContext="#pop" fallthroughContext="#pop">
+        <RegExpr attribute="Extension" context="RegexEnd" String="&regex;"/>
+      </context>
+      <context name="RegexEnd" attribute="Extension" lineEndContext="#pop#pop" fallthroughContext="#pop#pop">
+        <DetectChar attribute="Operator" context="RegexModifier" char="/"/>
+      </context>
+      <context name="RegexModifier" attribute="Extension" lineEndContext="#pop#pop#pop" fallthroughContext="#pop#pop#pop">
+        <AnyChar attribute="Extension" context="#stay" String="ism"/>
+      </context>
+
+
+      <context name="Num2" attribute="Decimal" lineEndContext="#pop" fallthroughContext="#pop!Digit2">
+        <IncludeRules context="NumPrefix"/>
+        <AnyChar attribute="Function" context="#pop!Digit2" String="+-"/>
+      </context>
+      <context name="Digit2" attribute="Decimal" lineEndContext="#pop" fallthroughContext="#pop">
+        <AnyChar attribute="Decimal" context="#stay" String="01"/>
+      </context>
+
+      <context name="Num8" attribute="Decimal" lineEndContext="#pop" fallthroughContext="#pop!Digit8">
+        <IncludeRules context="NumPrefix"/>
+        <AnyChar attribute="Function" context="#pop!Digit8" String="+-"/>
+      </context>
+      <context name="Digit8" attribute="Decimal" lineEndContext="#pop" fallthroughContext="#pop">
+        <AnyChar attribute="Decimal" context="#stay" String="01234567"/>
+      </context>
+
+      <context name="Num10" attribute="Decimal" lineEndContext="#pop" fallthroughContext="#pop!Digit10">
+        <IncludeRules context="NumPrefix"/>
+        <AnyChar attribute="Function" context="#pop!Digit10" String="+-"/>
+      </context>
+      <context name="Digit10" attribute="Decimal" lineEndContext="#pop" fallthroughContext="#pop">
+        <!-- s, f, d, l are extensions of Kawa -->
+        <RegExpr attribute="Float" context="#pop" String="[0-9]*+\.[0-9]++([esfdl][+-]?[0-9]++)?|[0-9]++[esfdl][+-]?[0-9]++"/>
+        <RegExpr attribute="Decimal" context="#pop" String="[0-9]++"/>
+      </context>
+
+      <context name="Num16" attribute="Decimal" lineEndContext="#pop" fallthroughContext="#pop!Digit16">
+        <IncludeRules context="NumPrefix"/>
+        <AnyChar attribute="Function" context="#pop!Digit16" String="+-"/>
+      </context>
+      <context name="Digit16" attribute="Decimal" lineEndContext="#pop" fallthroughContext="#pop">
+        <RegExpr attribute="Decimal" context="#pop" String="[0-9a-fA-F]+"/>
+      </context>
+
+      <context name="NumPrefix" attribute="Decimal" lineEndContext="#pop">
+        <Detect2Chars attribute="Decimal" context="#stay" char="#" char1="e"/>
+        <Detect2Chars attribute="Decimal" context="#stay" char="#" char1="i"/>
+      </context>
+
+
+      <context name="Char" attribute="Char" lineEndContext="#pop">
+        <DetectChar attribute="Char" context="HexChar" char="x"/>
+        <keyword attribute="Char" context="#pop" String="characters" insensitive="1"/>
+        <RegExpr attribute="Char" context="#pop" String=".(?!\w)"/>
+        <RegExpr attribute="Error" context="#pop" String="\w+|."/>
+      </context>
+      <context name="HexChar" attribute="Char" lineEndContext="#pop#pop">
+        <RegExpr attribute="Char" context="#pop#pop" String="[0-9a-fA-F]+"/>
+      </context>
+
+
+      <context name="MultiLineGuileCommentOrExtension" attribute="Comment" lineEndContext="#stay">
+        <RegExpr attribute="Extension" context="#pop" String="#!\w+"/>
+        <Detect2Chars attribute="Comment" context="#pop!MultiLineGuileComment" char="#" char1="!" beginRegion="comment"/>
+      </context>
+
+      <context name="MultiLineGuileComment" attribute="Comment" lineEndContext="#stay" fallthroughContext="comment">
+        <RegExpr attribute="Comment" context="#pop" String="^!#\s*$" endRegion="comment" column="0"/>
+      </context>
+
+      <context name="MultiLineComment" attribute="Comment" lineEndContext="#stay">
+        <DetectSpaces/>
+        <Detect2Chars attribute="Comment" context="#pop" char="|" char1="#" endRegion="comment"/>
+        <Detect2Chars attribute="Comment" context="MultiLineComment" char="#" char1="|" beginRegion="comment"/>
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+        <DetectIdentifier/>
+      </context>
+
+
+      <context name="DatumComment" attribute="Comment" lineEndContext="#pop" fallthroughContext="#pop">
+        <DetectChar attribute="Comment" context="#pop!DatumCommentParent" char="(" beginRegion="comment"/>
+        <DetectChar attribute="Comment" context="#pop!DatumCommentBracket" char="[" beginRegion="comment"/>
+        <DetectChar attribute="Comment" context="#pop!DatumCommentBrace" char="{" beginRegion="comment"/>
+        <DetectChar attribute="Comment" context="#pop!DatumCommentString" char="&quot;"/>
+
+        <DetectChar attribute="Comment" context="#pop!DatumCommentHash" char="#"/>
+
+        <RegExpr attribute="Comment" context="#pop!DatumCommentExpr" String="[^{}\[\]()\s]+"/>
+      </context>
+      <context name="DatumCommentHash" attribute="Comment" lineEndContext="#pop" fallthroughContext="#pop">
+        <DetectChar attribute="Comment" context="#pop!DatumCommentRegex" char="/"/>
+        <DetectChar attribute="Comment" context="#pop!DatumCommentXML" char="&lt;"/>
+        <Detect2Chars attribute="Comment" context="#pop!DatumCommentTemplate" char="&amp;" char1="{"/>
+        <DetectIdentifier/>
+      </context>
+
+      <context name="DatumCommentTemplate" attribute="Comment" lineEndContext="#stay">
+        <DetectSpaces/>
+        <DetectIdentifier/>
+        <DetectChar attribute="Comment" context="#pop" char="}"/>
+        <DetectChar attribute="Comment" context="DatumCommentTemplate" char="{"/>
+        <DetectChar attribute="Comment" context="DatumCommentTemplateTemplate" char="&amp;"/>
+      </context>
+      <context name="DatumCommentTemplateTemplate" attribute="Comment" lineEndContext="#pop" fallthroughContext="#pop">
+        <DetectChar attribute="Comment" context="#pop!DatumCommentParent2" char="("/>
+        <DetectChar attribute="Comment" context="#pop!DatumCommentBracket2" char="["/>
+        <Detect2Chars attribute="Comment" context="#pop!MultiLineComment" char="#" char1="|"/>
+        <DetectChar attribute="Comment" context="#pop!DatumCommentFormatTemplate" char="~"/>
+        <RegExpr attribute="Comment" context="#pop" String="&amp;(?:#(?:[0-9]+|x[0-9a-fA-F]+)|[_a-zA-Z][-:_a-zA-Z0-9]*);?"/>
+      </context>
+      <context name="DatumCommentFormatTemplate" attribute="Comment" lineEndContext="#pop" fallthroughContext="#pop">
+        <AnyChar attribute="Comment" context="#pop" String="({["/>
+        <AnyChar attribute="Comment" context="DatumCommentFormatTemplate" String=")}]"/>
+        <RegExpr attribute="Comment" context="#pop" String="[^(){}\[\]]+"/>
+      </context>
+
+      <context name="DatumCommentRegex" attribute="Comment" lineEndContext="#pop" fallthroughContext="#pop">
+        <RegExpr attribute="Comment" context="DatumCommentRegexEnd" String="&regex;"/>
+      </context>
+      <context name="DatumCommentRegexEnd" attribute="Comment" lineEndContext="#pop#pop" fallthroughContext="#pop#pop">
+        <DetectChar attribute="Comment" context="DatumCommentRegexModifier" char="/"/>
+      </context>
+      <context name="DatumCommentRegexModifier" attribute="Comment" lineEndContext="#pop#pop#pop" fallthroughContext="#pop#pop#pop">
+        <AnyChar attribute="Comment" context="#stay" String="ism"/>
+      </context>
+
+      <context name="DatumCommentXML" attribute="Comment" lineEndContext="#pop" fallthroughContext="#pop">
+        <DetectChar attribute="Comment" context="#pop!DatumCommentXMLProc" char="?"/>
+        <DetectChar attribute="Comment" context="#pop!DatumCommentXMLTagExpr1" char="("/>
+        <DetectChar attribute="Comment" context="#pop!DatumCommentXMLTagExpr2" char="{"/>
+        <Detect2Chars attribute="Comment" context="#pop" char="/" char1=">"/>
+        <StringDetect attribute="Comment" context="#pop!DatumCommentXMLComment" String="!--"/>
+        <StringDetect attribute="Comment" context="#pop!DatumCommentXMLCDATA" String="![CDATA["/>
+        <RegExpr attribute="Comment" context="#pop!DatumCommentXMLTag" String="[^\s>]++\s*"/>
+      </context>
+
+      <context name="DatumCommentXMLProc" attribute="Comment" lineEndContext="#stay">
+        <Detect2Chars attribute="Comment" context="#pop" char="?" char1=">"/>
+      </context>
+      <context name="DatumCommentXMLCDATA" attribute="Comment" lineEndContext="#stay">
+        <StringDetect attribute="Comment" context="#pop" String="]]>"/>
+      </context>
+      <context name="DatumCommentXMLComment" attribute="Comment" lineEndContext="#stay">
+        <StringDetect attribute="Comment" context="#pop" String="-->"/>
+      </context>
+      <context name="DatumCommentXMLTagExpr1" attribute="Comment" lineEndContext="#stay">
+        <DetectChar attribute="Comment" context="#pop!DatumCommentXMLTag" char=")"/>
+        <IncludeRules context="DatumCommentInExpr"/>
+      </context>
+      <context name="DatumCommentXMLTagExpr2" attribute="Comment" lineEndContext="#stay">
+        <DetectChar attribute="Comment" context="#pop!DatumCommentXMLTag" char="}"/>
+        <IncludeRules context="DatumCommentInExpr"/>
+      </context>
+
+      <context name="DatumCommentXMLTag" attribute="Comment" lineEndContext="#stay">
+        <DetectSpaces/>
+        <Detect2Chars attribute="Comment" context="#pop" char="/" char1=">"/>
+        <DetectChar attribute="Comment" context="#pop!DatumCommentXMLInnerTag" char=">"/>
+        <RegExpr attribute="Comment" context="DatumCommentXMLAttribute" String="[^\s=/>]++\s*"/>
+      </context>
+      <context name="DatumCommentXMLInnerTag" attribute="Comment" lineEndContext="#stay">
+        <DetectSpaces/>
+        <DetectIdentifier/>
+        <DetectChar attribute="Comment" context="DatumCommentXMLEscape" char="&amp;" lookAhead="1"/>
+        <DetectChar attribute="Comment" context="DatumCommentXMLFindXML" char="&lt;" lookAhead="1"/>
+      </context>
+      <context name="DatumCommentXMLFindXML" attribute="Comment" lineEndContext="#stay">
+        <Detect2Chars attribute="Comment" context="#pop!DatumCommentXMLProc" char="&lt;" char1="?"/>
+        <Detect2Chars attribute="Comment" context="#pop!DatumCommentXMLTagExpr1" char="&lt;" char1="("/>
+        <Detect2Chars attribute="Comment" context="#pop!DatumCommentXMLTagExpr2" char="&lt;" char1="{"/>
+        <StringDetect attribute="Comment" context="#pop!DatumCommentXMLComment" String="&lt;!--"/>
+        <StringDetect attribute="Comment" context="#pop!DatumCommentXMLCDATA" String="&lt;![CDATA["/>
+        <Detect2Chars attribute="Comment" context="#pop!DatumCommentXMLCloseTag" char="&lt;" char1="/" lookAhead="1"/>
+        <RegExpr attribute="Comment" context="#pop!DatumCommentXMLTag" String="&lt;[^\s>]++"/>
+        <DetectChar attribute="Comment" context="#pop" char="&lt;"/>
+      </context>
+      <context name="DatumCommentXMLCloseTag" attribute="Comment" lineEndContext="#pop#pop">
+        <RegExpr attribute="Comment" context="#pop#pop" String="&lt;/[^\s>]*>"/>
+        <Detect2Chars attribute="XML Error" context="#pop#pop" char="&lt;" char1="/"/>
+      </context>
+
+      <context name="DatumCommentXMLAttribute" attribute="Comment" lineEndContext="#stay" fallthroughContext="#pop">
+        <DetectSpaces/>
+        <DetectChar attribute="Comment" context="DatumCommentXMLAttributeValue" char="="/>
+      </context>
+      <context name="DatumCommentXMLAttributeValue" attribute="Comment" lineEndContext="#stay" fallthroughContext="#pop#pop">
+        <DetectSpaces/>
+        <DetectChar attribute="Comment" context="DatumCommentXMLDQ" char="&quot;"/>
+        <DetectChar attribute="Comment" context="DatumCommentXMLSQ" char="'"/>
+      </context>
+      <context name="DatumCommentXMLDQ" attribute="Comment" lineEndContext="#stay">
+        <DetectSpaces/>
+        <DetectIdentifier/>
+        <DetectChar attribute="Comment" context="#pop#pop#pop" char="&quot;"/>
+        <IncludeRules context="DatumCommentXMLStringEscape"/>
+      </context>
+      <context name="DatumCommentXMLSQ" attribute="Comment" lineEndContext="#stay">
+        <DetectSpaces/>
+        <DetectIdentifier/>
+        <DetectChar attribute="Comment" context="#pop#pop#pop" char="'"/>
+        <IncludeRules context="DatumCommentXMLStringEscape"/>
+      </context>
+      <context name="DatumCommentXMLStringEscape" attribute="Comment" lineEndContext="#stay">
+        <DetectChar attribute="Comment" context="DatumCommentXMLEscape" char="&amp;" lookAhead="1"/>
+        <DetectChar attribute="XML Error" context="#stay" char="&lt;"/>
+      </context>
+
+      <context name="DatumCommentXMLEscape" attribute="Comment" lineEndContext="#stay">
+        <Detect2Chars attribute="Comment" context="#pop!DatumCommentParent2" char="&amp;" char1="("/>
+        <Detect2Chars attribute="Comment" context="#pop!DatumCommentBrace2" char="&amp;" char1="{"/>
+        <RegExpr attribute="Comment" context="#pop" String="&amp;(?:lt|gt|amp|quot|apos|#[0-9]+|x[0-9a-fA-F]+);"/>
+        <DetectChar attribute="XML Error" context="#pop" char="&amp;"/>
+      </context>
+
+      <context name="DatumCommentExpr" attribute="Comment" lineEndContext="#pop" fallthroughContext="#pop">
+        <DetectChar attribute="Comment" context="#pop!DatumCommentParent2" char="("/>
+        <DetectChar attribute="Comment" context="#pop!DatumCommentBrace2" char="{"/>
+        <DetectChar attribute="Comment" context="#pop!DatumCommentBracket2" char="["/>
+      </context>
+
+      <context name="DatumCommentString" attribute="Comment" lineEndContext="#stay">
+        <DetectChar attribute="Comment" context="#pop" char="&quot;"/>
+        <RegExpr attribute="Comment" context="#stay" String="(?:[^\\&quot;]++|\\.)++"/>
+      </context>
+
+      <context name="DatumCommentParent" attribute="Comment" lineEndContext="#stay">
+        <DetectChar attribute="Comment" context="#pop" char=")" endRegion="comment"/>
+        <IncludeRules context="DatumCommentInExpr"/>
+      </context>
+      <context name="DatumCommentParent2" attribute="Comment" lineEndContext="#stay">
+        <DetectChar attribute="Comment" context="#pop" char=")"/>
+        <IncludeRules context="DatumCommentInExpr"/>
+      </context>
+      <context name="DatumCommentBracket" attribute="Comment" lineEndContext="#stay">
+        <DetectChar attribute="Comment" context="#pop" char="]" endRegion="comment"/>
+        <IncludeRules context="DatumCommentInExpr"/>
+      </context>
+      <context name="DatumCommentBracket2" attribute="Comment" lineEndContext="#stay">
+        <DetectChar attribute="Comment" context="#pop" char="]"/>
+        <IncludeRules context="DatumCommentInExpr"/>
+      </context>
+      <context name="DatumCommentBrace" attribute="Comment" lineEndContext="#stay">
+        <DetectChar attribute="Comment" context="#pop" char="}" endRegion="comment"/>
+        <IncludeRules context="DatumCommentInExpr"/>
+      </context>
+      <context name="DatumCommentBrace2" attribute="Comment" lineEndContext="#stay">
+        <DetectChar attribute="Comment" context="#pop" char="}"/>
+        <IncludeRules context="DatumCommentInExpr"/>
+      </context>
+
+      <context name="DatumCommentInExpr" attribute="Comment" lineEndContext="#stay">
+        <DetectSpaces/>
+        <DetectIdentifier/>
+        <DetectChar attribute="Comment" context="DatumCommentParent2" char="("/>
+        <DetectChar attribute="Comment" context="DatumCommentBrace2" char="{"/>
+        <DetectChar attribute="Comment" context="DatumCommentBracket2" char="["/>
+        <DetectChar attribute="Comment" context="DatumCommentString" char="&quot;"/>
+        <DetectChar attribute="Comment" context="DatumCommentHash" char="#"/>
+      </context>
+
+
+      <context name="String" attribute="String" lineEndContext="#stay">
+        <DetectChar attribute="String" context="#pop" char="&quot;"/>
+        <DetectChar attribute="Char" context="EscapeString" char="\"/>
+      </context>
+      <context name="EscapeString" attribute="Char" lineEndContext="#pop" fallthroughContext="#pop">
+        <AnyChar attribute="Char" context="#pop" String="abfnrtv&quot;\"/>
+        <AnyChar attribute="Char" context="MultiLineString" String="&tab; "/>
+        <RegExpr attribute="Char" context="#pop" String="[xXu][0-9a-fA-F]+;|\\[0-7]{3}|(?:[MC]-|\^)?."/>
+      </context>
+      <context name="MultiLineString" attribute="String" lineEndContext="#stay" fallthroughContext="#pop#pop">
+        <DetectSpaces/>
+      </context>
+
+
+      <context name="function_decl" attribute="Function" lineEndContext="#stay">
+        <RegExpr attribute="Function" context="#pop" String="\s*[A-Za-z0-9-!$%&quot;*/:&lt;=>?~_^+.@]*\s*"/>
+      </context>
+
+
+      <context name="Level1" attribute="Normal" lineEndContext="#stay">
+        <DetectChar attribute="Brackets2" context="Level2" char="("/>
+        <Detect2Chars attribute="Brackets2" context="Level2" char="'" char1="("/>
+        <Detect2Chars attribute="Brackets2" context="Level2" char="`" char1="("/>
+        <Detect2Chars attribute="Brackets2" context="Level2" char="#" char1="("/>
+        <Detect2Chars attribute="Brackets2" context="Level2" char="@" char1="("/>
+        <DetectChar attribute="Brackets1" context="#pop" char=")"/>
+        <IncludeRules context="Default"/>
+      </context>
+      <context name="Level2" attribute="Normal" lineEndContext="#stay">
+        <DetectChar attribute="Brackets3" context="Level3" char="("/>
+        <Detect2Chars attribute="Brackets3" context="Level3" char="'" char1="("/>
+        <Detect2Chars attribute="Brackets3" context="Level3" char="`" char1="("/>
+        <Detect2Chars attribute="Brackets3" context="Level3" char="#" char1="("/>
+        <Detect2Chars attribute="Brackets3" context="Level3" char="@" char1="("/>
+        <DetectChar attribute="Brackets2" context="#pop" char=")"/>
+        <IncludeRules context="Default"/>
+      </context>
+      <context name="Level3" attribute="Normal" lineEndContext="#stay">
+        <DetectChar attribute="Brackets4" context="Level4" char="("/>
+        <Detect2Chars attribute="Brackets4" context="Level4" char="'" char1="("/>
+        <Detect2Chars attribute="Brackets4" context="Level4" char="`" char1="("/>
+        <Detect2Chars attribute="Brackets4" context="Level4" char="#" char1="("/>
+        <Detect2Chars attribute="Brackets4" context="Level4" char="@" char1="("/>
+        <DetectChar attribute="Brackets3" context="#pop" char=")"/>
+        <IncludeRules context="Default"/>
+      </context>
+      <context name="Level4" attribute="Normal" lineEndContext="#stay">
+        <DetectChar attribute="Brackets5" context="Level5" char="("/>
+        <Detect2Chars attribute="Brackets5" context="Level5" char="'" char1="("/>
+        <Detect2Chars attribute="Brackets5" context="Level5" char="`" char1="("/>
+        <Detect2Chars attribute="Brackets5" context="Level5" char="#" char1="("/>
+        <Detect2Chars attribute="Brackets5" context="Level5" char="@" char1="("/>
+        <DetectChar attribute="Brackets4" context="#pop" char=")"/>
+        <IncludeRules context="Default"/>
+      </context>
+      <context name="Level5" attribute="Normal" lineEndContext="#stay">
+        <DetectChar attribute="Brackets6" context="Level6" char="("/>
+        <Detect2Chars attribute="Brackets6" context="Level6" char="'" char1="("/>
+        <Detect2Chars attribute="Brackets6" context="Level6" char="`" char1="("/>
+        <Detect2Chars attribute="Brackets6" context="Level6" char="#" char1="("/>
+        <Detect2Chars attribute="Brackets6" context="Level6" char="@" char1="("/>
+        <DetectChar attribute="Brackets5" context="#pop" char=")"/>
+        <IncludeRules context="Default"/>
+      </context>
+      <context name="Level6" attribute="Normal" lineEndContext="#stay">
+        <DetectChar attribute="Brackets1" context="Level1" char="("/>
+        <Detect2Chars attribute="Brackets1" context="Level1" char="'" char1="("/>
+        <Detect2Chars attribute="Brackets1" context="Level1" char="`" char1="("/>
+        <Detect2Chars attribute="Brackets1" context="Level1" char="#" char1="("/>
+        <Detect2Chars attribute="Brackets1" context="Level1" char="@" char1="("/>
+        <DetectChar attribute="Brackets6" context="#pop" char=")"/>
+        <IncludeRules context="Default"/>
+      </context>
+    </contexts>
+    <itemDatas>
+      <itemData name="Normal"      defStyleNum="dsNormal"/>
+      <itemData name="Keyword"     defStyleNum="dsKeyword" spellChecking="0"/>
+      <itemData name="Definition"  defStyleNum="dsExtension" spellChecking="0"/>
+      <itemData name="Operator"    defStyleNum="dsOperator" spellChecking="0"/>
+      <itemData name="Function"    defStyleNum="dsFunction" spellChecking="0"/>
+      <itemData name="Base Prefix" defStyleNum="dsSpecialChar" spellChecking="0"/>
+      <itemData name="Decimal"     defStyleNum="dsDecVal" spellChecking="0"/>
+      <itemData name="Float"       defStyleNum="dsFloat" spellChecking="0"/>
+      <itemData name="Char"        defStyleNum="dsChar" spellChecking="0"/>
+      <itemData name="String"      defStyleNum="dsString"/>
+      <itemData name="Comment"     defStyleNum="dsComment"/>
+      <itemData name="Error"       defStyleNum="dsError" spellChecking="0"/>
+      <itemData name="Extension"   defStyleNum="dsExtension" spellChecking="0"/>
+      <itemData name="Region Marker" defStyleNum="dsRegionMarker"/>
+      <itemData name="XML Tag"     defStyleNum="dsString" spellChecking="0"/>
+      <itemData name="XML Comment" defStyleNum="dsComment"/>
+      <itemData name="XML CDATA"   defStyleNum="dsString"/>
+      <itemData name="XML Attribute" defStyleNum="dsOthers" spellChecking="0"/>
+      <itemData name="XML String"  defStyleNum="dsString"/>
+      <itemData name="XML Error"   defStyleNum="dsError" spellChecking="0"/>
+      <itemData name="XML Entity"  defStyleNum="dsDecVal" spellChecking="0"/>
+      <itemData name="Brackets1"   defStyleNum="dsNormal" color="#ff0000" bold="1" spellChecking="0"/>
+      <itemData name="Brackets2"   defStyleNum="dsNormal" color="#ff8800" bold="1" spellChecking="0"/>
+      <itemData name="Brackets3"   defStyleNum="dsNormal" color="#888800" bold="1" spellChecking="0"/>
+      <itemData name="Brackets4"   defStyleNum="dsNormal" color="#008800" bold="1" spellChecking="0"/>
+      <itemData name="Brackets5"   defStyleNum="dsNormal" color="#3689e6" bold="1" spellChecking="0"/> <!-- #000088 -->
+      <itemData name="Brackets6"   defStyleNum="dsNormal" color="#a100a1" bold="1" spellChecking="0"/> <!-- #880088 -->
+      <itemData name="Other Brackets" defStyleNum="dsOperator" spellChecking="0"/>
+    </itemDatas>
+  </highlighting>
+  <general>
+    <keywords casesensitive="1" weakDeliminator="-+*?!&lt;&gt;=/:.,\&amp;" additionalDeliminator="&quot;;#"/>
+    <comments>
+      <comment name="singleLine" start=";;"/>
+      <comment name="multiLine" start="#|" end="|#" region="comment"/>
+    </comments>
+  </general>
+</language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/sci.xml b/syntax/sci.xml
--- a/syntax/sci.xml
+++ b/syntax/sci.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="scilab" version="3" kateversion="2.2" section="Scientific" extensions="*.sci;*.sce" mimetype="text/x-sci">
+<language name="scilab" version="5" kateversion="2.2" section="Scientific" extensions="*.sci;*.sce" mimetype="text/x-sci">
   <highlighting>
     <list name="Structure-keywords">
       <item>do</item>
@@ -1164,9 +1164,14 @@
         <keyword attribute="functions" context="#stay" String="functions"/>
         <Float attribute = "Float" context="#stay"/>
         <Int attribute = "Decimal" context="#stay"/>
-        <RegExpr String= "//.*$" attribute = "Comment" context="#stay"/>
+        <Detect2Chars char = "/" char1 = "/" attribute = "Comment" context="Comment"/>
         <RangeDetect char = "&quot;" char1 = "&quot;" attribute = "String" context="#stay"/>
      </context>
+     <context name="Comment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+     </context>
    </contexts>
     <itemDatas>
       <itemData name="Normal Text" defStyleNum="dsNormal"/>
@@ -1184,7 +1189,7 @@
   </highlighting>
   <general>
     <comments>
-      <comment name="singleLine" start="//" />
+      <comment name="singleLine" start="//" position="afterwhitespace" />
     </comments>
     <keywords casesensitive="1" weakDeliminator="%$" />
   </general>
diff --git a/syntax/sed.xml b/syntax/sed.xml
--- a/syntax/sed.xml
+++ b/syntax/sed.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="sed" section="Scripts" version="2" kateversion="2.4" extensions="*.sed" mimetype="text/x-sed" author="Bart Sas (bart.sas@gmail.com)" license="GPL">
+<language name="sed" section="Scripts" version="3" kateversion="2.4" extensions="*.sed" mimetype="text/x-sed" author="Bart Sas (bart.sas@gmail.com)" license="GPL">
         <highlighting>
                 <contexts>
                         <context name="BeginningOfLine" attribute="Normal" lineEndContext="#stay">
@@ -220,7 +220,11 @@
                                 <DetectChar   char="]"           attribute="Regex Escape" context="#stay"/>
                         </context>
 
-                        <context name="Comment" attribute="Comment" lineEndContext="BeginningOfLine"/>
+                        <context name="Comment" attribute="Comment" lineEndContext="#pop">
+                                <DetectSpaces />
+                                <IncludeRules context="##Alerts"/>
+                                <IncludeRules context="##Modelines"/>
+                        </context>
                         <context name="Error"   attribute="Error"   lineEndContext="BeginningOfLine"/>
                 </contexts>
 
@@ -265,3 +269,4 @@
                 </comments>
         </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 8; indent-width 8; -->
diff --git a/syntax/sgml.xml b/syntax/sgml.xml
--- a/syntax/sgml.xml
+++ b/syntax/sgml.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="SGML" version="2" kateversion="2.2" section="Markup" extensions="*.sgml" mimetype="text/sgml">
+<language name="SGML" version="3" kateversion="2.2" section="Markup" extensions="*.sgml" mimetype="text/sgml">
   <highlighting>
     <contexts>
        <context attribute="Normal Text" lineEndContext="#stay" name="Normal Text" >
-         <StringDetect attribute="Comment" context="Comment" String="&lt;!--"/>
+         <StringDetect attribute="Comment" context="Comment" String="&lt;!--" beginRegion="Comment"/>
          <RegExpr attribute="Tag" context="Attribute" String="&lt;\s*\/?\s*[a-zA-Z_:][a-zA-Z0-9._:-]*" />
        </context>
 
@@ -25,7 +25,10 @@
        </context>
 
        <context attribute="Comment" lineEndContext="#stay" name="Comment" >
-         <StringDetect attribute="Comment" context="#pop" String="--&gt;"/>
+         <DetectSpaces />
+         <StringDetect attribute="Comment" context="#pop" String="--&gt;" endRegion="Comment"/>
+         <IncludeRules context="##Alerts"/>
+         <IncludeRules context="##Modelines"/>
        </context>
 
     </contexts>
@@ -39,7 +42,7 @@
   </highlighting>
   <general>
     <comments>
-      <comment name="multiLine" start="&lt;!--" end="//--&gt;" />
+      <comment name="multiLine" start="&lt;!--" end="--&gt;" region="Comment" />
     </comments>
     <keywords casesensitive="0" />
   </general>
diff --git a/syntax/sml.xml b/syntax/sml.xml
--- a/syntax/sml.xml
+++ b/syntax/sml.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="SML" version="4" kateversion="2.3" section="Sources" extensions="*.sml;*.ml" mimetype="" author="Christoph Cullmann (cullmann@kde.org)" license="MIT">
+<language name="SML" version="5" kateversion="2.3" section="Sources" extensions="*.sml;*.ml" mimetype="" author="Christoph Cullmann (cullmann@kde.org)" license="MIT">
   <highlighting>
     <list name="keywords">
       <item>abstype</item>
@@ -65,7 +65,7 @@
     </list>
     <contexts>
       <context attribute="Normal Text" lineEndContext="#stay" name="Normal">
-        <Detect2Chars attribute="Comment" context="Multiline/Inline Comment" char="(" char1="*" />
+        <Detect2Chars attribute="Comment" context="Multiline/Inline Comment" char="(" char1="*" beginRegion="Comment" />
         <DetectChar attribute="String" context="String" char="&quot;" />
         <keyword attribute="Keyword" context="#stay" String="keywords" />
         <keyword attribute="Data Type" context="#stay" String="types" />
@@ -77,7 +77,10 @@
           <AnyChar String="fF" attribute="Float" context="#pop"/>
       </context>
       <context attribute="Comment" lineEndContext="#stay" name="Multiline/Inline Comment">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1=")" />
+        <DetectSpaces />
+        <Detect2Chars attribute="Comment" context="#pop" char="*" char1=")" endRegion="Comment" />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
       <context attribute="String" lineEndContext="#stay" name="String">
         <HlCStringChar attribute="String Char" context="#stay"/>
@@ -98,7 +101,8 @@
   <general>
     <keywords casesensitive="1" />
     <comments>
-      <comment name="multiLine" start="(*" end="*)" />
+      <comment name="multiLine" start="(*" end="*)" region="Comment" />
     </comments>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/sql-mysql.xml b/syntax/sql-mysql.xml
--- a/syntax/sql-mysql.xml
+++ b/syntax/sql-mysql.xml
@@ -6,7 +6,7 @@
   modifications by Milian Wolff (mail@milianw.de)
   v3 fix comments by Gene Thomas <gene@genethomas.com>
 -->
-<language name="SQL (MySQL)" version="5" kateversion="5.0" section="Database" extensions="*.sql;*.SQL;*.ddl;*.DDL" mimetype="text/x-sql" casesensitive="0" author="Shane Wright (me@shanewright.co.uk)" license="">
+<language name="SQL (MySQL)" version="6" kateversion="5.44" section="Database" extensions="*.sql;*.SQL;*.ddl;*.DDL" mimetype="text/x-sql" casesensitive="0" author="Shane Wright (me@shanewright.co.uk)" license="">
   <highlighting>
     <list name="controlFlow">
       <item>BEGIN</item>
@@ -381,7 +381,7 @@
         <DetectChar attribute="Comment" context="SingleLineComment" char="#"/>
         <Detect2Chars attribute="Comment" context="SingleLineComment" char="-" char1="-"/>
         <Detect2Chars attribute="Comment" context="MultiLineComment" char="/" char1="*" beginRegion="Comment"/>
-        <RegExpr attribute="Comment" context="SingleLineComment" String="rem\b" insensitive="true" column="0"/>
+        <WordDetect attribute="Comment" context="SingleLineComment" String="rem" insensitive="true" column="0"/>
 
         <LineContinue attribute="Symbol" context="#stay" char="/" column="0"/> <!-- conflict with "operators" keywords -->
 
@@ -443,10 +443,17 @@
         <DetectChar attribute="Name" context="#pop" char="`"/>
       </context>
       <!-- comments -->
-      <context name="SingleLineComment" attribute="Comment" lineEndContext="#pop"/>
+      <context name="SingleLineComment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
       <context name="MultiLineComment" attribute="Comment" lineEndContext="#stay">
         <LineContinue attribute="Comment" context="#pop"/>
+        <DetectSpaces />
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
       <!-- preprocessor -->
       <context name="Preprocessor" attribute="Preprocessor" lineEndContext="#pop"/>
@@ -472,10 +479,11 @@
   </highlighting>
   <general>
     <comments>
-      <comment name="singleLine" start="--"/>
-      <comment name="multiLine" start="/*" end="*/"/>
+      <comment name="singleLine" start="--" position="afterwhitespace"/>
+      <comment name="multiLine" start="/*" end="*/" region="Comment"/>
     </comments>
     <keywords casesensitive="0"/>
     <folding indentationsensitive="true"/>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/sql-postgresql.xml b/syntax/sql-postgresql.xml
--- a/syntax/sql-postgresql.xml
+++ b/syntax/sql-postgresql.xml
@@ -3,7 +3,7 @@
 <!-- PostgreSQL SQL, syntax definition based on sql.xml by Yury Lebedev
      v5 fix comments by Gene Thomas <gene@genethomas.com>
   -->
-<language name="SQL (PostgreSQL)" version="7" kateversion="5.0" section="Database" extensions="*.sql;*.SQL;*.ddl;*.DDL" mimetype="text/x-sql" casesensitive="0" author="Shane Wright (me@shanewright.co.uk)" license="">
+<language name="SQL (PostgreSQL)" version="10" kateversion="5.44" section="Database" extensions="*.sql;*.SQL;*.ddl;*.DDL" mimetype="text/x-sql" casesensitive="0" author="Shane Wright (me@shanewright.co.uk)" license="">
   <highlighting>
     <list name="controlFlow">
       <item>BEGIN</item>
@@ -991,7 +991,7 @@
         <DetectChar attribute="Comment" context="SingleLineComment" char="#"/>
         <Detect2Chars attribute="Comment" context="SingleLineComment" char="-" char1="-"/>
         <Detect2Chars attribute="Comment" context="MultiLineComment" char="/" char1="*" beginRegion="Comment"/>
-        <RegExpr attribute="Comment" context="SingleLineComment" String="rem\b" insensitive="true" column="0"/>
+        <WordDetect attribute="Comment" context="SingleLineComment" String="rem" insensitive="true" column="0"/>
 
         <!-- HACK: don't jump into MultiLineString for CREATE FUNCTION $funcName$...$funcName$ -->
         <RegExpr String="create\s+(or\s+replace\s+)?function" insensitive="true" context="CreateFunction" attribute="Keyword"/>
@@ -1007,10 +1007,10 @@
         <Float attribute="Float" context="#stay"/>
         <Int attribute="Decimal" context="#stay"/>
         <DetectChar attribute="String" context="String" char="'"/>
-        <DetectChar attribute="Comment" context="Identifier" char="&quot;"/>
+        <DetectChar attribute="Identifier" context="Identifier" char="&quot;"/>
         <AnyChar attribute="Symbol" context="#stay" String=":&#38;"/>
         <RegExpr attribute="Preprocessor" context="Preprocessor" String="@@?[^@ \t\r\n]" column="0"/>
-        <RegExpr attribute="Operator" context="MultiLineString" String="\$([^\$\n\r]*)\$" dynamic="true"/>
+        <RegExpr attribute="Operator" context="MultiLineString" String="\$([^\$\n\r]*)\$"/>
         <AnyChar attribute="Operator" context="#stay" String="+-*/=%^!&lt;&gt;&amp;|@~#"/>
         <Detect2Chars attribute="Operator" context="#stay" char=":" char1="="/>
         <Detect2Chars attribute="Operator" context="#stay" char="." char1="."/>
@@ -1020,7 +1020,7 @@
         <Detect2Chars attribute="Operator" context="#stay" char="?" char1="|"/>
       </context>
       <context name="CreateFunction" attribute="Normal Text" lineEndContext="#stay">
-        <RegExpr attribute="Function" context="FunctionBody" String="\$([^\$\n\r]*)\$" dynamic="true"/>
+        <RegExpr attribute="Function" context="FunctionBody" String="\$([^\$\n\r]*)\$"/>
         <IncludeRules context="Normal"/>
       </context>
       <context name="FunctionBody" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
@@ -1036,10 +1036,17 @@
         <DetectChar attribute="Symbol" context="#stay" char="&#38;"/>
         <DetectChar attribute="String" context="#pop" char="'"/>
       </context>
-      <context name="SingleLineComment" attribute="Comment" lineEndContext="#pop"/>
+      <context name="SingleLineComment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
       <context name="MultiLineComment" attribute="Comment" lineEndContext="#stay">
         <LineContinue attribute="Comment" context="#pop"/>
+        <DetectSpaces />
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
       <context name="Identifier" attribute="Identifier" lineEndContext="#pop">
         <DetectChar attribute="Identifier" context="#pop" char="&quot;"/>
@@ -1066,9 +1073,10 @@
   </highlighting>
   <general>
     <comments>
-      <comment name="singleLine" start="--"/>
-      <comment name="multiLine" start="/*" end="*/"/>
+      <comment name="singleLine" start="--" position="afterwhitespace"/>
+      <comment name="multiLine" start="/*" end="*/" region="Comment"/>
     </comments>
     <keywords casesensitive="0"/>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/sql.xml b/syntax/sql.xml
--- a/syntax/sql.xml
+++ b/syntax/sql.xml
@@ -5,7 +5,7 @@
      v3 fix comments by Gene Thomas <gene@genethomas.com>
   -->
 <!-- kate: space-indent on; indent-width 2; replace-tabs on; -->
-<language name="SQL" version="5" kateversion="5.0" section="Database" extensions="*.sql;*.SQL;*.ddl;*.DDL" mimetype="text/x-sql" casesensitive="0" author="Yury Lebedev (yurylebedev@mail.ru)" license="LGPL">
+<language name="SQL" version="6" kateversion="5.44" section="Database" extensions="*.sql;*.SQL;*.ddl;*.DDL" mimetype="text/x-sql" casesensitive="0" author="Yury Lebedev (yurylebedev@mail.ru)" license="LGPL">
   <highlighting>
     <list name="controlFlow">
       <item>BEGIN</item>
@@ -877,7 +877,7 @@
         <!-- comments, before operators -->
         <Detect2Chars attribute="Comment" context="Singleline PL/SQL-style comment" char="-" char1="-"/>
         <Detect2Chars attribute="Comment" context="Multiline C-style comment" char="/" char1="*" beginRegion="Comment"/>
-        <RegExpr attribute="Comment" context="SQL*Plus remark directive" String="^rem\b" insensitive="true" column="0"/>
+        <WordDetect attribute="Comment" context="SQL*Plus remark directive" String="rem" insensitive="true" column="0"/>
 
         <LineContinue attribute="Symbol" context="#stay" char="/" column="0"/> <!-- conflict with "operators" keywords -->
         <keyword attribute="Keyword" String="keywords" context="#stay"/>
@@ -915,11 +915,20 @@
         <Detect2Chars attribute="String Char" context="#stay" char="'" char1="'"/>
         <DetectChar attribute="String" context="#pop" char="'"/>
       </context>
-      <context name="Singleline PL/SQL-style comment" attribute="Comment" lineEndContext="#pop"/>
+      <context name="Singleline PL/SQL-style comment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
       <context name="Multiline C-style comment" attribute="Comment" lineEndContext="#stay">
+        <DetectSpaces />
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
-      <context name="SQL*Plus remark directive" attribute="Comment" lineEndContext="#pop"/>
+      <context name="SQL*Plus remark directive" attribute="Comment" lineEndContext="#pop">
+        <IncludeRules context="Singleline PL/SQL-style comment"/>
+      </context>
       <context name="User-defined identifier" attribute="Identifier" lineEndContext="#pop">
         <DetectChar attribute="Identifier" context="#pop" char="&quot;"/>
       </context>
@@ -947,8 +956,8 @@
   </highlighting>
   <general>
     <comments>
-      <comment name="singleLine" start="--"/>
-      <comment name="multiLine" start="/*" end="*/"/>
+      <comment name="singleLine" start="--" position="afterwhitespace"/>
+      <comment name="multiLine" start="/*" end="*/" region="Comment"/>
     </comments>
     <keywords casesensitive="0"/>
   </general>
diff --git a/syntax/stata.xml b/syntax/stata.xml
--- a/syntax/stata.xml
+++ b/syntax/stata.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Stata" version="10" kateversion="2.3" section="Scientific" extensions="*.do;*.ado;*.doh;*.DO;*.ADO;*.DOH"
+<language name="Stata" version="11" kateversion="2.3" section="Scientific" extensions="*.do;*.ado;*.doh;*.DO;*.ADO;*.DOH"
  casesensitive="1" priority="5" author="Larry Radbill (Larry.Radbill gmail com)" license="LGPL" >
 
   <highlighting>
@@ -3175,12 +3175,16 @@
       </context>
 
       <context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
+        <DetectSpaces />
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
 
       <context attribute="Comment" lineEndContext="#stay" name="Commentar 2">
+        <DetectSpaces />
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
 
       <context attribute="String" lineEndContext="#stay" name="string">
@@ -3214,10 +3218,11 @@
 
   <general>
     <comments>
-      <comment name="singleLine" start="//" />
-      <comment name="multiLine" start="/*" end="*/" />
+      <comment name="singleLine" start="//" position="afterwhitespace" />
+      <comment name="multiLine" start="/*" end="*/" region="Comment" />
     </comments>
     <keywords casesensitive="1" />
   </general>
 
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/tcl.xml b/syntax/tcl.xml
--- a/syntax/tcl.xml
+++ b/syntax/tcl.xml
@@ -28,7 +28,7 @@
 	    - Fixed detection of varaibles with names containing serval namespace delimiters (::)
 -->
 
-<language name="Tcl/Tk" version="4" kateversion="2.4" section="Scripts" extensions="*.tcl;*.tk" mimetype="text/x-tcl" license="BSD">
+<language name="Tcl/Tk" version="5" kateversion="2.4" section="Scripts" extensions="*.tcl;*.tk" mimetype="text/x-tcl" license="BSD">
   <highlighting>
     <list name="keywords">
       <item>after</item>
@@ -532,7 +532,11 @@
         <DetectChar char  = "$" attribute = "Variable" context="#stay"/>
       </context>
 
-      <context name = "Comment" attribute = "Comment" lineEndContext="#pop"/>
+      <context name = "Comment" attribute = "Comment" lineEndContext="#pop">
+        <DetectSpaces />
+        <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
+      </context>
 
       <context name = "New command line" attribute = "Normal Text" lineEndContext="#stay">
         <RegExpr String = "\s*#" attribute="Comment" context="Comment" />
@@ -563,3 +567,4 @@
   </general>
 
 </language>
+<!-- kate: replace-tabs on; indent-width 2; -->
diff --git a/syntax/tcsh.xml b/syntax/tcsh.xml
--- a/syntax/tcsh.xml
+++ b/syntax/tcsh.xml
@@ -8,7 +8,7 @@
         <!ENTITY noword   "(?![\w$+-])">		<!-- no word, $, + or - following -->
         <!ENTITY pathpart "([\w_@.&#37;*?+-]|\\ )">     <!-- valid character in a file name -->
 ]>
-<language name="Tcsh" version="6" kateversion="5.0" section="Scripts" extensions="*.csh;*.tcsh;csh.cshrc;csh.login;.tcshrc;.cshrc;.login" mimetype="application/x-csh" casesensitive="1" author="Matthew Woehlke (mw_triad@users.sourceforge.net)" license="LGPL">
+<language name="Tcsh" version="7" kateversion="5.0" section="Scripts" extensions="*.csh;*.tcsh;csh.cshrc;csh.login;.tcshrc;.cshrc;.login" mimetype="application/x-csh" casesensitive="1" author="Matthew Woehlke (mw_triad@users.sourceforge.net)" license="LGPL">
 
 <!-- (c) 2006 Matthew Woehlke (mw_triad@users.sourceforge.net)
     Based on the bash highlighter by Wilbert Berendsen (wilbert@kde.nl)
@@ -462,7 +462,9 @@
         <RegExpr attribute="Normal Text" context="Comment" String="[\s;](?=#)" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="Comment">
+        <DetectSpaces />
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
 
       <!-- FindCommentsParen consumes shell comments till EOL or a closing parenthese -->
@@ -655,7 +657,7 @@
       <context attribute="Normal Text" lineEndContext="#pop" name="CmdSetEnv" fallthrough="true" fallthroughContext="#pop">
         <!-- handle command line options -->
         <RegExpr attribute="Variable" context="#pop" String="\b&varname;" />
-        <RegExpr attribute="Variable" context="Assign" String=" " />
+        <RegExpr attribute="Variable" context="Assign" String="\s" />
         <IncludeRules context="FindMost" />
       </context>
 
@@ -815,3 +817,4 @@
     <keywords casesensitive="1" weakDeliminator="^%#[]$._{}:-" additionalDeliminator="`"/>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/texinfo.xml b/syntax/texinfo.xml
--- a/syntax/texinfo.xml
+++ b/syntax/texinfo.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Texinfo" extensions="*.texi" section="Markup" mimetype="application/x-texinfo" author="Daniel Franke (franke.daniel@gmail.com)" license="LGPL" version="1" kateversion="2.4">
+<language name="Texinfo" extensions="*.texi" section="Markup" mimetype="application/x-texinfo" author="Daniel Franke (franke.daniel@gmail.com)" license="LGPL" version="2" kateversion="2.4">
 
   <highlighting>
     <!--
@@ -15,7 +15,7 @@
       -->
     <contexts>
       <context name="Normal Text" attribute="Normal Text" lineEndContext="#stay">
-        <RegExpr attribute="Comment" context="singleLineComment" String="@c(omment)?\b" />
+        <RegExpr attribute="Comment" context="singleLineComment" String="@c(?:omment)?\b" />
         <RegExpr attribute="Comment" context="multiLineComment" String="@ignore\b" beginRegion="ignore" />
         <RegExpr attribute="Command" context="nodeFolding" String="@node\b" beginRegion="node" />
 
@@ -26,12 +26,16 @@
       </context>
 
       <context name="singleLineComment" attribute="Comment" lineEndContext="#pop">
-				<IncludeRules context="##Alerts" />
-			</context>
+        <DetectSpaces />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
+      </context>
 
       <context name="multiLineComment" attribute="Comment" lineEndContext="#stay">
+        <DetectSpaces />
         <StringDetect attribute="Comment" context="#pop" String="@end ignore" endRegion="ignore" />
-				<IncludeRules context="##Alerts" />
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
 
       <context name="nodeFolding" attribute="Normal Text" lineEndContext="#stay">
@@ -55,9 +59,10 @@
 
   <general>
     <comments>
-      <comment name="singleLine" start="@comment " />
-      <comment name="multiLine" start="@ignore" end="@end ignore" region="ignore" />
+      <comment name="singleLine" start="@c " />
+      <comment name="multiLine" start="@ignore " end="@end ignore" region="ignore" />
     </comments>
   </general>
 
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/toml.xml b/syntax/toml.xml
new file mode 100644
--- /dev/null
+++ b/syntax/toml.xml
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd"
+[
+	<!ENTITY more "(_\d+)*">
+	<!ENTITY int  "[+-]?(0|[1-9]\d*)&more;">
+	<!ENTITY frac "\.\d+&more;">
+	<!ENTITY exp  "[eE][+-]?\d+&more;">
+	
+	<!ENTITY offset   "[+-]\d\d:\d\d">
+	<!ENTITY time     "\d\d:\d\d:\d\d(\.\d+)?(&offset;|Z)?">
+	<!ENTITY datetime "\d\d\d\d-\d\d-\d\d(T&time;)?">
+]>
+<!-- https://github.com/toml-lang/toml -->
+<language name="TOML" section="Configuration" extensions="*.toml" mimetype="text/x-toml" version="6" kateversion="5.0" author="flying-sheep@web.de" license="LGPLv2+">
+<highlighting>
+	<list name="bools">
+		<item>true</item>
+		<item>false</item>
+	</list>
+	<contexts>
+		<context attribute="Error" lineEndContext="#stay" name="Toml">
+			<DetectSpaces attribute="Whitespace"/>
+			<Detect2Chars attribute="TableHeader" context="NestedTableHeader" char="[" char1="[" endRegion="Table"/>
+			<DetectChar attribute="TableHeader" context="TableHeader" char="[" endRegion="Table"/>
+			<RegExpr    attribute="Key" context="#stay"   String="[\w-]+" firstNonSpace="true"/>
+			<DetectChar attribute="Key" context="QuotedKey" char="&quot;" firstNonSpace="true"/>
+			<DetectChar attribute="Assignment" context="Value" char="="/>
+			<DetectChar char="#" attribute="Comment" context="Comment"/>
+		</context>
+		<!-- table headers -->
+		<context attribute="TableHeader" fallthrough="true" fallthroughContext="#pop" lineEndContext="#pop" name="TableHeader">
+			<IncludeRules context="TableHeaderCommon"/>
+			<DetectChar attribute="TableHeader" context="#pop" char="]" beginRegion="Table"/>
+		</context>
+		<context attribute="TableHeader" fallthrough="true" fallthroughContext="#pop" lineEndContext="#pop" name="NestedTableHeader">
+			<IncludeRules context="TableHeaderCommon"/>
+			<Detect2Chars attribute="TableHeader" context="#pop" char="]" char1="]" beginRegion="Table"/>
+		</context>
+		<context attribute="TableHeader" lineEndContext="#pop" name="TableHeaderCommon">
+			<DetectSpaces attribute="Whitespace"/>
+			<DetectChar attribute="TableHeader" context="#stay" char="."/>
+			<RegExpr    attribute="Key" context="#stay" String="[\w-]+"/>
+			<DetectChar attribute="Key" context="QuotedKey" char="&quot;"/>
+		</context>
+		<!-- values -->
+		<context attribute="Normal Text" lineEndContext="#pop" fallthrough="true" fallthroughContext="#pop" name="Value">
+			<DetectSpaces attribute="Whitespace"/>
+			<RegExpr attribute="Date"  context="#stay" String="&datetime;"/>
+			<keyword attribute="Bool" String="bools" context="#stay"/>
+			<RegExpr attribute="Float" context="#stay" String="&int;(&frac;&exp;|&frac;|&exp;)"/>
+			<RegExpr attribute="Int"   context="#stay" String="&int;"/>
+			<StringDetect attribute="String" context="MultilineString"    String="&quot;&quot;&quot;"/>
+			<DetectChar   attribute="String" context="String"               char="&quot;"/>
+			<StringDetect attribute="String" context="LitMultilineString" String="'''"/>
+			<DetectChar   attribute="String" context="LitString"            char="'"/>
+			<DetectChar attribute="Array" context="Array" char="["/>
+			<DetectChar attribute="InlineTable" context="InlineTable" char="{"/>
+			<DetectChar char="#" attribute="Comment" context="Comment"/>
+		</context>
+		<context attribute="Comment" lineEndContext="#pop" name="Comment">
+			<DetectSpaces/>
+			<IncludeRules context="##Alerts" />
+			<IncludeRules context="##Modelines" />
+			<DetectIdentifier/>
+		</context>
+		<!-- Quoted keys and Strings -->
+		<context attribute="Key" lineEndContext="#pop" name="QuotedKey">
+			<LineContinue attribute="Escape" context="#stay"/>
+			<RegExpr attribute="Escape" String="\\[btnfr&quot;\\]" context="#stay" />
+			<RegExpr attribute="Escape" String="\\(u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})" context="#stay" />
+			<RegExpr attribute="Error" String="\\." context="#stay" />
+			<DetectChar attribute="Key" context="#pop" char="&quot;"/>
+		</context>
+		<context attribute="String" lineEndContext="#pop" name="String">
+			<LineContinue attribute="Escape" context="#stay"/>
+			<RegExpr attribute="Escape" String="\\[btnfr&quot;\\]" context="#stay" />
+			<RegExpr attribute="Escape" String="\\(u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})" context="#stay" />
+			<RegExpr attribute="Error" String="\\." context="#stay" />
+			<DetectChar attribute="String" context="#pop" char="&quot;"/>
+		</context>
+		<context attribute="String" lineEndContext="#stay" name="MultilineString">
+			<LineContinue attribute="Escape" context="#stay"/>
+			<RegExpr attribute="Escape" String="\\[btnfr&quot;\\]" context="#stay" />
+			<RegExpr attribute="Escape" String="\\(u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})" context="#stay" />
+			<RegExpr attribute="Error" String="\\." context="#stay" />
+			<StringDetect attribute="String" context="#pop" String="&quot;&quot;&quot;"/>
+		</context>
+		<context attribute="LitString" lineEndContext="#pop" name="LitString">
+			<DetectChar attribute="String" context="#pop" char="'"/>
+		</context>
+		<context attribute="LitString" lineEndContext="#stay" name="LitMultilineString">
+			<StringDetect attribute="String" context="#pop" String="'''"/>
+		</context>
+		<!-- Arrays -->
+		<context attribute="Array" lineEndContext="#stay" name="Array">
+			<IncludeRules context="Value" />
+			<DetectChar context="#pop" attribute="Array" char="]" />
+			<DetectChar context="#stay" attribute="NextEntry" char="," />
+		</context>
+		<context attribute="InlineTable" lineEndContext="#stay" name="InlineTable">
+			<RegExpr    attribute="Key" context="#stay"   String="[\w-]+"/>
+			<DetectChar attribute="Key" context="QuotedKey" char="&quot;"/>
+			<DetectChar attribute="Assignment" context="Value" char="="/>
+			<DetectChar char="#" attribute="Comment" context="Comment"/>
+			<DetectChar context="#pop" attribute="InlineTable" char="}" />
+			<DetectChar context="#stay" attribute="NextEntry" char="," />
+		</context>
+	</contexts>
+	<itemDatas>
+		<itemData name="Normal Text" defStyleNum="dsNormal"/>
+		<itemData name="Key"         defStyleNum="dsDataType"/>
+		<itemData name="TableHeader" defStyleNum="dsKeyword"/>
+		<itemData name="Assignment"  defStyleNum="dsOperator"/>
+		<itemData name="Comment"     defStyleNum="dsComment"/>
+		
+		<itemData name="Date"        defStyleNum="dsBaseN"/>
+		<itemData name="Float"       defStyleNum="dsFloat"/>
+		<itemData name="Int"         defStyleNum="dsDecVal"/>
+		<itemData name="Bool"        defStyleNum="dsConstant"/>
+		<itemData name="String"      defStyleNum="dsString"/>
+		<itemData name="LitString"   defStyleNum="dsVerbatimString"/>
+		<itemData name="Escape"      defStyleNum="dsSpecialChar"/>
+		<itemData name="Array"       defStyleNum="dsOperator"/>
+		<itemData name="InlineTable" defStyleNum="dsOperator"/>
+		<itemData name="NextEntry"   defStyleNum="dsOperator"/>
+		
+		<itemData name="Whitespace"  defStyleNum="dsNormal"/>
+		<itemData name="Error"       defStyleNum="dsError"/>
+	</itemDatas>
+</highlighting>
+<general>
+	<comments>
+		<comment name="singleLine" start="#" position="afterwhitespace" />
+	</comments>
+</general>
+</language>
+<!-- kate: replace-tabs off; -->
diff --git a/syntax/typescript.xml b/syntax/typescript.xml
--- a/syntax/typescript.xml
+++ b/syntax/typescript.xml
@@ -1,14 +1,18 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd"
 [
-	<!ENTITY identifier   "[a-zA-Z_$[:^ascii:]][\w$[:^ascii:]]*">
-	<!ENTITY numSuffix    "(?=n?(?:[^\w]|$))">
-	<!ENTITY objectOp     "[\?!]?">
-	<!ENTITY objectPoint  "\s*&objectOp;\.">
-	<!ENTITY endLine      "\s*(?:$|//|(?:/\*.*\*/\s*)+(?:$|//))">
-	<!ENTITY utilityTypes "\b(?:Partial|Readonly|Record|Pick|Omit|Exclude|Extract|NonNullable|ReturnType|InstanceType|Required|ThisType)(?=\s*&lt;)">
+	<!ENTITY identifier     "[a-zA-Z_$[:^ascii:]][\w$[:^ascii:]]*">
+	<!ENTITY numSuffix      "(?=n?(?:[^\w]|$))">
+	<!ENTITY objectOp       "[\?!]?">
+	<!ENTITY objectPoint    "\s*&objectOp;\.">
+	<!ENTITY endLine        "\s*(?:$|//|(?:/\*.*\*/\s*)+(?:$|//))">
+	<!ENTITY parameter      "&identifier;(?=\s*&objectOp;:)">
+
+	<!ENTITY utilityTypes   "\b(?:Partial|Readonly|Record|Pick|Omit|Exclude|Extract|NonNullable|ReturnType|InstanceType|Required|ThisType)(?=\s*&lt;)">
 	<!-- function<...>( or function( -->
 	<!ENTITY functionSuffix "(?=\s*(?:&lt;(?:\{(?:[^\{\}]|\{[^\{\}]*\})*\}|\((?:[^\(\)]|\([^\(\)]*\))*\)|\[(?:[^\[\]]|\[[^\[\]]*\])*\]|'(?:\\.|[^'])*'|&quot;(?:\\.|[^&quot;])*&quot;|`(?:\\.|[^`])*`|[^&lt;&gt;]|&lt;.*&gt;)*&gt;)?\()">
+
+	<!ENTITY codeContent    "&quot;(?:[^&quot;]|\\.)*&quot;|'(?:[^']|\\.)*'|`(?:[^`]|\\.)`|/\*.*\*/|/(?:[^/\\\[]|\\.|\[(?:[^\]\\]|\\.)+\])+/">
 ]>
 
 <!--
@@ -16,7 +20,7 @@
 
       This file is part of the KDE's KSyntaxHighlighting framework.
 
-      Copyright 2018-2019 Nibaldo González S. (nibgonz@gmail.com)
+      Copyright 2018-2020 Nibaldo González S. (nibgonz@gmail.com)
 
       This Source Code Form is subject to the terms of the MIT License.
       If a copy of the license was not distributed with this file,
@@ -38,6 +42,10 @@
       Attributes: path, types, no-default-lib, name
 
     Change log:
+     * v11 [2020-06-03]: Improve tagged template literals.
+     * v10 [2020-04-13]: Add the 'awaited' type operator.
+     * v9 [2020-02-23]: Add private-named instance fields and type-only imports/exports.
+                        Improve conditional expressions.
      * v8 [2019-12-12]: Add "bigint" primitive type.
      * v7 [2019-11-20]: Move keywords of built-in object to "javascript.xml" and adapt.
      * v6 [2019-10-01]: Add "asserts" keyword in type predicates.
@@ -53,7 +61,7 @@
 -->
 
 <language name="TypeScript"
-          version="8"
+          version="11"
           kateversion="5.53"
           section="Scripts"
           extensions="*.ts"
@@ -72,13 +80,13 @@
 	</list>
 	<list name="keywords">
 		<include>keywords##JavaScript</include>
-		<item>declare</item> <!-- storage.modifier.ts -->
 	</list>
 	<list name="reserved">
 		<include>reserved##JavaScript</include>
 		<item>type</item>
 		<item>arguments</item>
 		<!-- Class -->
+		<item>declare</item> <!-- storage modifier -->
 		<item>readonly</item>
 		<item>abstract</item>
 		<item>constructor</item>
@@ -106,7 +114,8 @@
 	<list name="types_operator_expression">
 		<item>keyof</item>
 		<item>infer</item>
-		<!-- Also: is, typeof -->
+		<item>awaited</item>
+		<!-- Also: typeof, readonly -->
 	</list>
 	<!-- Datatypes & Primitive Types -->
 	<list name="types">
@@ -221,6 +230,18 @@
 		<context name="ShebangLine" attribute="Comment" lineEndContext="#pop!Normal" />
 
 		<context name="Normal" attribute="Normal Text" lineEndContext="#stay">
+			<IncludeRules context="Normal Pt1" />
+
+			<!-- NOTE & TODO: The identifiers before ":" are highlighted as "dsNormal".
+			     These identifiers should be highlighted in a different way depending on the
+			     context, for example, in the declaration of classes or interfaces, in sets, the
+			     parameters of a function, or after the keywords: "const", "var", "let" & "enum". -->
+			<RegExpr context="#stay" attribute="Parameter" String="&parameter;" />
+
+			<IncludeRules context="Normal Pt2" />
+		</context>
+
+		<context name="Normal Pt1" attribute="Normal Text" lineEndContext="#stay">
 			<StringDetect context="#stay" attribute="Symbol" String="..." />
 			<IncludeRules context="FindNumbers" />
 			<IncludeRules context="FindStrings" />
@@ -235,13 +256,8 @@
 			<!-- Keywords: control flow -->
 			<keyword context="#stay" attribute="ControlFlow" String="controlflow" />
 			<RegExpr context="#stay" attribute="ControlFlow" String="\bdefault(?=\s*&objectOp;:)" />
-
-			<!-- NOTE & TODO: The identifiers before ":" are highlighted as "dsNormal".
-			     These identifiers should be highlighted in a different way depending on the
-			     context, for example, in the declaration of classes or interfaces, in sets, the
-			     parameters of a function, or after the keywords: "const", "var", "let" & "enum". -->
-			<RegExpr context="#stay" attribute="Parameter" String="&identifier;(?=\s*&objectOp;:)" />
-
+		</context>
+		<context name="Normal Pt2" attribute="Normal Text" lineEndContext="#stay">
 			<!-- Keywords -->
 			<WordDetect context="TypeDeclaration" attribute="Reserved" String="type" />
 			<WordDetect context="FunctionDeclaration" attribute="Keyword" String="function" />
@@ -260,6 +276,7 @@
 			<RegExpr context="Types" attribute="Module" String="\bas(?=\s)" />
 			<!-- Import -->
 			<WordDetect context="Import" attribute="Module" String="import" />
+			<RegExpr context="#stay" attribute="Module" String="\bexport\s+type\b" />
 			<!-- Export types -->
 			<keyword context="ControlExport" attribute="Module" String="control_export_types" />
 			<!-- Keywords -->
@@ -269,15 +286,27 @@
 
 			<!-- Functions: function(...) and function<...>(...) -->
 			<RegExpr context="Function" attribute="Function Name" String="(&identifier;)&functionSuffix;" lookAhead="true" />
+			<!-- Tagged Template Literals -->
+			<RegExpr context="#stay" attribute="Function Name" String="&identifier;(?=\s*`)" />
 
 			<!-- Symbols & Operators -->
-			<!-- NOTE: The brackets {}()[] are highlighted as Normal Text. -->
+			<!-- NOTE: - The brackets {}()[] are highlighted as Normal Text.
+			           - Bracket highlighting rules must be explicitly included here
+			             for the "Animate Bracket Highlighting" feature to work properly. -->
 			<DetectChar context="Object" attribute="Normal Text" char="{" beginRegion="Brace" />
 			<DetectChar context="#stay" attribute="Normal Text" char="[" beginRegion="List" />
 			<DetectChar context="NoRegExp" attribute="Normal Text" char="]" endRegion="List" />
-			<!-- NOTE: Avoid highlighting identifier?: string, -->
-			<RegExpr context="ConditionalExpression" attribute="Symbol" String="\?(?=.*&identifier;\s*\:)" />
+			<DetectChar context="#stay" attribute="Normal Text" char="(" />
+			<DetectChar context="NoRegExp" attribute="Normal Text" char=")" />
 
+			<Detect2Chars context="#stay" attribute="Symbol" char="?" char1="?" /> <!-- Null operator -->
+			<!-- Conditional Expressions:
+			       CASE 1:  '?' ... <identifier> ':'
+			       CASE 2:  '?' ... ( '||' | '&&' ) <end-line>
+			       CASE 3:  '?' (<identifier>)? <end-line>
+			-->
+			<RegExpr context="ConditionalExpression" attribute="Symbol" String="\?(?=\s*(?:(?:[^/&quot;'`\s\?:\.;,\=\}\]\)]|&codeContent;)(?:[^/&quot;'`]|&codeContent;)*)?&identifier;\s*(?:/\*.*\*/\s*)*:|(?:&amp;&amp;|\|\||\s*(?:/\*.*\*/\s*)*&identifier;)?&endLine;)" minimal="true" />
+
 			<!-- Type Parameter: Highlight types after ":" and between "<" and ">" -->
 			<DetectChar context="Types" attribute="Symbol" char=":" />
 			<RegExpr context="TypesAngleBracket" attribute="Symbol" String="&lt;(?=(?:&identifier;|[\[\{\(&lt;]).*&gt;)" />
@@ -285,35 +314,44 @@
 			<IncludeRules context="JSBase##JavaScript" />
 		</context>
 
+		<!-- Conditional Expressions: a ? b : c -->
 		<!-- Highlight keywords before ":" in conditional expressions. -->
-		<context name="ConditionalExpression" attribute="Normal Text" lineEndContext="#pop">
+		<context name="ConditionalExpression" attribute="Normal Text" lineEndContext="#stay">
+			<!-- NOTE: Don't start the "Types" context. See the context "Default Types". -->
 			<DetectChar context="#pop" attribute="Symbol" char=":" />
+			<IncludeRules context="ConditionalExpressionEnd" />
 			<DetectChar context="#stay" attribute="Symbol" char="?" />
 
-			<!-- Keywords -->
-			<WordDetect context="#stay" attribute="Reserved" String="type" />
-			<WordDetect context="FunctionDeclaration" attribute="Keyword" String="function" />
-			<keyword context="#stay" attribute="Keyword" String="keywords" /> <!-- NoRegExp? -->
-			<keyword context="#stay" attribute="Reserved" String="reserved" />
-			<!-- Utility Types -->
-			<RegExpr context="#stay" attribute="Built-in Objects" String="&utilityTypes;" />
-			<!-- Built-in Classes -->
-			<IncludeRules context="BuiltInClasses" />
-			<IncludeRules context="BuiltInConstants" />
-			<!-- Import -->
-			<WordDetect context="#stay" attribute="Module" String="import" />
-			<!-- Export types -->
-			<keyword context="#stay" attribute="Module" String="control_export_types" />
-			<!-- Keywords -->
-			<keyword context="#stay" attribute="Module" String="module" />
-			<keyword context="NoRegExp" attribute="Keyword" String="primitives" />
-			<keyword context="#stay" attribute="Keyword" String="types_operator_expression" />
-
-			<!-- NOTE: The identifiers before ":" should be highlighted as "Normal Text".
-			     However, currently, the "Parameter" attribute is equivalent to "Normal Text". -->
-			<!-- <RegExpr context="#stay" attribute="Normal Text" String="&identifier;(?=\s*&objectOp;:)" /> -->
+			<IncludeRules context="FindConditionalExpressionBrackets" />
+			<IncludeRules context="Normal-ParametersOverridden" />
+		</context>
+		<context name="Normal-ParametersOverridden" attribute="Normal Text" lineEndContext="#stay">
+			<IncludeRules context="Normal Pt1" />
+			<IncludeRules context="Normal Pt2" />
+			<RegExpr context="#stay" attribute="Parameter" String="&parameter;" />
+		</context>
+		<context name="ConditionalExpressionEnd" attribute="Normal Text" lineEndContext="#stay">
+			<AnyChar context="#pop" String=";,}])" lookAhead="true" />
+			<RegExpr context="#pop" String="\=(?!&gt;)" lookAhead="true" />
+			<!-- For TypeScript code embedded in HTML and Markdown -->
+			<StringDetect context="#pop" String="```" lookAhead="true" firstNonSpace="true" />
+			<StringDetect context="#pop" String="~~~" lookAhead="true" firstNonSpace="true" />
+			<RegExpr context="#pop" String="&lt;/script\s*(?:&gt;|$)" insensitive="true" lookAhead="true" />
+		</context>
+		<context name="FindConditionalExpressionBrackets" attribute="Normal Text" lineEndContext="#stay">
+			<DetectChar context="ConditionalExpressionRoundBracket" attribute="Normal Text" char="(" />
+			<DetectChar context="ConditionalExpressionSquareBracket" attribute="Symbol" char="[" beginRegion="List" />
+		</context>
+		<context name="ConditionalExpressionRoundBracket" attribute="Normal Text" lineEndContext="#stay">
+			<DetectChar context="#pop!NoRegExp" attribute="Normal Text" char=")" />
+			<IncludeRules context="FindConditionalExpressionBrackets" />
 			<IncludeRules context="Normal" />
 		</context>
+		<context name="ConditionalExpressionSquareBracket" attribute="Normal Text" lineEndContext="#stay">
+			<DetectChar context="#pop!NoRegExp" attribute="Symbol" char="]" endRegion="List" />
+			<IncludeRules context="FindConditionalExpressionBrackets" />
+			<IncludeRules context="Normal" />
+		</context>
 
 		<!-- Object, within { ... } -->
 		<context name="Object" attribute="Normal Text" lineEndContext="#stay">
@@ -358,13 +396,13 @@
 
 		<!-- Strings -->
 		<context name="FindStrings" attribute="Normal Text" lineEndContext="#stay">
-			<DetectChar context="Template" attribute="Template" char="`" />
+			<DetectChar context="Template" attribute="Template" char="`" beginRegion="Template" />
 			<IncludeRules context="FindStrings##JavaScript" />
 		</context>
 		<context name="Template" attribute="Template" lineEndContext="#stay">
 			<IncludeRules context="Escape##JavaScript" />
 			<Detect2Chars context="Substitution" attribute="Substitution" char="$" char1="{" />
-			<DetectChar context="RegExpAfterString##JavaScript" attribute="Template" char="`" />
+			<DetectChar context="RegExpAfterString##JavaScript" attribute="Template" char="`" endRegion="Template" />
 		</context>
 		<context name="Substitution" attribute="Normal Text" lineEndContext="#stay">
 			<DetectChar context="#pop" attribute="Substitution" char="}" />
@@ -396,11 +434,11 @@
 
 			<IncludeRules context="TypesFindBrackets" />
 			<IncludeRules context="DefaultTypes" />
-			<IncludeRules context="Normal" />
+			<IncludeRules context="Normal-ParametersOverridden" />
 		</context>
 		<!-- NOTE: Context used by "typescript-react.xml" -->
 		<context name="TypesEnd" attribute="Normal Text" lineEndContext="#stay">
-			<AnyChar context="#pop" String=";,})]" lookAhead="true" />
+			<AnyChar context="#pop" String=";,}])" lookAhead="true" />
 			<RegExpr context="#pop" String="\=(?!&gt;)" lookAhead="true" />
 			<Detect2Chars context="#pop" char="/" char1="/" lookAhead="true" />
 		</context>
@@ -429,8 +467,8 @@
 			     This rule fixes it provisionally. -->
 			<RegExpr context="#stay" attribute="Types" String="\b(?:string|number|bigint|boolean|symbol|any|void|never|unknown|undefined|null|object)(?=\})" />
 
-			<!-- Don't start this context again -->
-			<AnyChar context="#stay" attribute="Symbol" String="?:" />
+			<!-- Don't start this context again and don't start the "ConditionalExpression" context -->
+			<AnyChar context="#stay" attribute="Symbol" String=":?" />
 			<WordDetect context="#stay" attribute="Module" String="as" />
 		</context>
 		<context name="TypesFindBrackets" attribute="Normal Text" lineEndContext="#stay">
@@ -491,7 +529,10 @@
 		<!-- "import" keyword -->
 		<context name="Import" attribute="Normal Text" lineEndContext="#pop">
 			<DetectChar context="#pop!ImportRequireKey" attribute="Symbol" char="=" />
-			<WordDetect context="#pop!NoRegExp" attribute="Keyword" String="meta" /> <!-- importmeta_property -->
+			<!-- import type ... -->
+			<WordDetect context="#stay" attribute="Module" String="type" />
+			<!-- importmeta_property -->
+			<WordDetect context="#pop!NoRegExp" attribute="Keyword" String="meta" />
 			<!-- Fix context NoRegExp (#pop in new line) -->
 			<RegExpr context="#pop" String="." lookAhead="true" firstNonSpace="true" />
 			<AnyChar context="#pop" String="{}()[];," lookAhead="true" />
@@ -528,10 +569,13 @@
 			<!-- The order of these rules is important: 1) Functions. 2) Constants & Properties. 3) Obj. Members. -->
 			<!-- function(...) and function<...>(...) -->
 			<RegExpr context="#pop" attribute="Function Name" String="&identifier;&functionSuffix;" />
+			<!-- Tagged Template Literals -->
+			<RegExpr context="#pop" String="&identifier;\s*`" lookAhead="true" />
 			<!-- Generic constants and properties -->
 			<keyword context="#pop!NoRegExp" attribute="Object Property (Built-in)" String="variable_property" />
 			<keyword context="#pop!NoRegExp" attribute="Constant" String="dom_constant" />
 
+			<RegExpr context="#stay" attribute="Normal Text" String="#(?=&identifier;)" /> <!-- Private-Named Instance Fields -->
 			<RegExpr context="#stay" attribute="Object Member" String="&identifier;(?=&objectPoint;)" />
 			<RegExpr context="#pop!NoRegExp" attribute="Object Member" String="&identifier;" />
 			<IncludeRules context="NoRegExp" />
diff --git a/syntax/verilog.xml b/syntax/verilog.xml
--- a/syntax/verilog.xml
+++ b/syntax/verilog.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="Verilog" version="4" kateversion="2.4" section="Hardware" extensions="*.v;*.V;*.vl" mimetype="text/x-verilog-src" author="Yevgen Voronenko (ysv22@drexel.edu), Ryan Dalzell (ryan@tullyroan.com)" license="">
+<language name="Verilog" version="5" kateversion="2.4" section="Hardware" extensions="*.v;*.V;*.vl" mimetype="text/x-verilog-src" author="Yevgen Voronenko (ysv22@drexel.edu), Ryan Dalzell (ryan@tullyroan.com)" license="">
   <highlighting>
     <list name="keywords">
       <item>macromodule</item>
@@ -187,21 +187,27 @@
         <DetectChar attribute="String" context="#pop" char="&quot;"/>
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="Commentar 1">
+        <DetectSpaces />
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
       <context attribute="Comment" lineEndContext="#stay" name="Commentar 2">
-        <IncludeRules context="##Alerts" />
+        <DetectSpaces />
         <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+        <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
       <context attribute="Preprocessor" lineEndContext="#pop" name="Preprocessor">
         <LineContinue attribute="Preprocessor" context="Some Context"/>
         <RangeDetect attribute="Prep. Lib" context="#stay" char="&quot;" char1="&quot;"/>
         <RangeDetect attribute="Prep. Lib" context="#stay" char="&lt;" char1="&gt;"/>
         <Detect2Chars attribute="Comment" context="Commentar 1" char="/" char1="/"/>
-        <Detect2Chars attribute="Comment" context="Commentar/Preprocessor" char="/" char1="*"/>
+        <Detect2Chars attribute="Comment" context="Commentar/Preprocessor" char="/" char1="*" beginRegion="Comment"/>
       </context>
       <context attribute="Comment" lineEndContext="#stay" name="Commentar/Preprocessor">
-        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" />
+        <DetectSpaces />
+        <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
+        <IncludeRules context="##Alerts" />
       </context>
       <context attribute="Normal Text" lineEndContext="#pop" name="Some Context"/>
 
@@ -244,9 +250,10 @@
   </highlighting>
   <general>
     <comments>
-      <comment name="singleLine" start="//" />
+      <comment name="singleLine" start="//" position="afterwhitespace" />
       <comment name="multiLine" start="/*" end="*/" region="Comment"/>
     </comments>
     <keywords casesensitive="1" />
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/vhdl.xml b/syntax/vhdl.xml
--- a/syntax/vhdl.xml
+++ b/syntax/vhdl.xml
@@ -8,7 +8,7 @@
   <!ENTITY label     "((&varname;)\s*:\s*)?">
 
 ]>
-<language name="VHDL" version="7" kateversion="3.0" section="Hardware" extensions="*.vhdl;*.vhd" mimetype="text/x-vhdl" author="Rocky Scaletta (rocky@purdue.edu), Stefan Endrullis (stefan@endrullis.de), Florent Ouchet (outchy@users.sourceforge.net), Chris Higgs (chiggs.99@gmail.com), Jan Michel (jan@mueschelsoft.de), Luigi Calligaris (luigi.calligaris@stfc.ac.uk)">
+<language name="VHDL" version="10" kateversion="5.0" section="Hardware" extensions="*.vhdl;*.vhd" mimetype="text/x-vhdl" author="Rocky Scaletta (rocky@purdue.edu), Stefan Endrullis (stefan@endrullis.de), Florent Ouchet (outchy@users.sourceforge.net), Chris Higgs (chiggs.99@gmail.com), Jan Michel (jan@mueschelsoft.de), Luigi Calligaris (luigi.calligaris@stfc.ac.uk)">
   <highlighting>
     <list name="keywordsToplevel">
       <item>file</item>
@@ -218,16 +218,16 @@
       <context name="start" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
         <IncludeRules context="preDetection"/>
 
-        <RegExpr attribute="Control" context="architecture_main" insensitive="true" dynamic="true" lookAhead="true"
+        <RegExpr attribute="Control" context="architecture_main" insensitive="true" lookAhead="true"
                  String="&bos;architecture\s+(&varname;)&eos;"/>
         <StringDetect attribute="Control" context="entity" insensitive="true"
                  String="entity"/>
-        <RegExpr attribute="Control" context="package" insensitive="true" lookAhead="true" dynamic="true" beginRegion="PackageRegion1"
+        <RegExpr attribute="Control" context="package" insensitive="true" lookAhead="true" beginRegion="PackageRegion1"
                  String="&bos;package\s+(&varname;)\s+is&eos;"/>
-        <RegExpr attribute="Control" context="packagebody" lookAhead="true" insensitive="true" dynamic="true" beginRegion="PackageBodyRegion1"
+        <RegExpr attribute="Control" context="packagebody" lookAhead="true" insensitive="true" beginRegion="PackageBodyRegion1"
                  String="&bos;package\s+body\s+(&varname;)\s+is&eos;"/>
        <!-- <StringDetect  attribute="Control"  context="arch_decl"      String="package"     />temporary-->
-        <RegExpr attribute="Control" context="configuration" insensitive="true" dynamic="true" lookAhead="true"
+        <RegExpr attribute="Control" context="configuration" insensitive="true" lookAhead="true"
                  String="&bos;configuration\s+(&varname;)&eos;"/>
         <keyword attribute="Keyword" context="#stay" String="keywordsToplevel"/>
       </context>
@@ -269,7 +269,7 @@
       <context name="packagebodymain" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
         <IncludeRules context="preDetection"/>
         <RegExpr attribute="Keyword"   context="#pop" lookAhead="true" insensitive="true" String="&bos;end\s+package&eos;" />
-        <RegExpr attribute="Keyword"   context="packagebodyfunc1" beginRegion="PackBodyFunc" insensitive="true" dynamic="true" lookAhead="true" String="&bos;function\s+(&varname;)&eos;" />
+        <RegExpr attribute="Keyword"   context="packagebodyfunc1" beginRegion="PackBodyFunc" insensitive="true" lookAhead="true" String="&bos;function\s+(&varname;)&eos;" />
         <IncludeRules context="generalDetection"/>
       </context>
 
@@ -283,7 +283,7 @@
 
       <context name="packagebodyfunc2" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
         <IncludeRules context="preDetection"/>
-        <RegExpr attribute="Redirection" context="#pop" insensitive="true" dynamic="true" lookAhead="true" endRegion="RegionFunction"
+        <RegExpr attribute="Redirection" context="#pop" insensitive="true" lookAhead="true" endRegion="RegionFunction"
                  String="&bos;end(\s+function)?&eos;"/>
         <!--<RegExpr attribute="Error" context="#pop" insensitive="true" dynamic="true" lookAhead="true" endRegion="RegionFunction"
                  String="&bos;end\s+function(\s+&varname;)?&eos;"/>-->
@@ -296,11 +296,11 @@
 <!--====ARCHITECTURE ===============-->
       <context name="architecture_main" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
         <IncludeRules context="preDetection"/>
-        <RegExpr attribute="Control" context="arch_start" insensitive="true" lookAhead="true" dynamic="true" beginRegion="ArchitectureRegion1"
+        <RegExpr attribute="Control" context="arch_start" insensitive="true" lookAhead="true" beginRegion="ArchitectureRegion1"
                  String="&bos;architecture\s+(&varname;)\s+of\s+(&varname;)\s+is"/>
         <RegExpr attribute="Control" context="#pop#pop" insensitive="true" dynamic="true" endRegion="ArchitectureRegion1"
                  String="&bos;end(\s+architecture)?(\s+%2)?\s*;"/>
-        <RegExpr attribute="Error" context="#pop#pop" insensitive="true" dynamic="true" endRegion="ArchitectureRegion1"
+        <RegExpr attribute="Error" context="#pop#pop" insensitive="true" endRegion="ArchitectureRegion1"
                  String="&bos;end(\s+architecture)?(\s+&varname;)\s*;"/>
         <IncludeRules context="detect_arch_parts"/>
       </context>
@@ -333,7 +333,7 @@
 
       <context name="archfunc2" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
         <IncludeRules context="preDetection"/>
-        <RegExpr attribute="Redirection" context="#pop" insensitive="true" dynamic="true" lookAhead="true" endRegion="RegionFunction"
+        <RegExpr attribute="Redirection" context="#pop" insensitive="true" lookAhead="true" endRegion="RegionFunction"
                  String="&bos;end(\s+function)?&eos;"/>
         <!--<RegExpr attribute="Error" context="#pop" insensitive="true" dynamic="true" lookAhead="true" endRegion="RegionFunction"
                  String="&bos;end\s+function(\s+&varname;)?&eos;"/>-->
@@ -345,11 +345,11 @@
 
 <!-- parts of architecture body -->
       <context name="detect_arch_parts" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
-        <RegExpr attribute="Normal Text" context="generate1" lookAhead="true" insensitive="true" dynamic="true"
+        <RegExpr attribute="Normal Text" context="generate1" lookAhead="true" insensitive="true"
                  String="&bos;(&varname;\s*:\s*)(if|for).*\s+generate&eos;"/>
-        <RegExpr attribute="Normal Text" context="process1" lookAhead="true" insensitive="true" dynamic="true"
+        <RegExpr attribute="Normal Text" context="process1" lookAhead="true" insensitive="true"
                  String="&bos;(&varname;\s*:\s*)?process&eos;"/>
-        <RegExpr attribute="Normal Text" context="instance" lookAhead="true" insensitive="true" dynamic="true" beginRegion="InstanceRegion1"
+        <RegExpr attribute="Normal Text" context="instance" lookAhead="true" insensitive="true" beginRegion="InstanceRegion1"
                  String="&bos;(&varname;)\s*:\s*((entity\s+)?(&varname;)(\.&varname;)?)"/>
 
         <IncludeRules context="generalDetection"/>
@@ -384,7 +384,7 @@
         <IncludeRules context="preDetection"/>
         <RegExpr attribute="Process" context="#pop" insensitive="true" dynamic="true" endRegion="RegionProcess"
                  String="&bos;end\s+process(\s+%3)?"/>
-        <RegExpr attribute="Error" context="#pop" insensitive="true" dynamic="true" endRegion="RegionProcess"
+        <RegExpr attribute="Error" context="#pop" insensitive="true" endRegion="RegionProcess"
                  String="&bos;end\s+process(\s+&varname;)?"/>
         <RegExpr attribute="Process" context="#stay" insensitive="true" beginRegion="RegionProcess"
                  String="&bos;process&eos;"/>
@@ -400,7 +400,7 @@
                   String="&bos;if&eos;"/>
          <RegExpr attribute="Control" context="case1" lookAhead="true" insensitive="true"
                   String="&bos;case&eos;"/>
-         <RegExpr attribute="Control" context="forwhile1" dynamic="true" lookAhead="true" insensitive="true"
+         <RegExpr attribute="Control" context="forwhile1" lookAhead="true" insensitive="true"
                   String="&bos;((&varname;)\s*:\s*)?((for|while)\s+.+\s+)loop&eos;"/>
          <IncludeRules context="generalDetection"/>
       </context>
@@ -491,7 +491,7 @@
         <IncludeRules context="preDetection"/>
         <RegExpr attribute="Control" context="#pop#pop" insensitive="true" endRegion="CaseRegion1"
                  String="&bos;end\s+case(&varname;)?\s*;"/>
-        <RegExpr attribute="Control" context="caseWhen" lookAhead="true" dynamic="true" insensitive="true"
+        <RegExpr attribute="Control" context="caseWhen" lookAhead="true" insensitive="true"
                  String="&bos;when(\s+&varname;)?&eos;"/>
         <IncludeRules context="proc_rules"/>
       </context>
@@ -532,7 +532,7 @@
         <IncludeRules context="preDetection"/>
         <RegExpr attribute="Control" context="#pop#pop" dynamic="true" insensitive="true" endRegion="EntityRegion1"
                  String="&bos;end(\s+(entity|component))?(\s+%1)?\s*;"/>
-        <RegExpr attribute="Error" context="#pop#pop" dynamic="true" insensitive="true" endRegion="EntityRegion1"
+        <RegExpr attribute="Error" context="#pop#pop" insensitive="true" endRegion="EntityRegion1"
                  String="&bos;end(\s+(entity|component))?(\s+&varname;)?\s*;"/>
         <StringDetect attribute="Control" context="#stay" insensitive="true" String="generic"/>
         <StringDetect attribute="Control" context="#stay" insensitive="true" String="port"/>
@@ -543,11 +543,11 @@
 <!-- configuration environment -->
       <context name="configuration" attribute="Normal Text" lineEndContext="#stay" dynamic="true">
         <IncludeRules context="preDetection"/>
-        <RegExpr attribute="Control" context="conf_start" insensitive="true" lookAhead="true" dynamic="true" beginRegion="ConfigurationRegion1"
+        <RegExpr attribute="Control" context="conf_start" insensitive="true" lookAhead="true" beginRegion="ConfigurationRegion1"
                  String="&bos;configuration\s+(&varname;)\s+of\s+(&varname;)\s+is"/>
         <RegExpr attribute="Control" context="#pop#pop" insensitive="true" dynamic="true" endRegion="ConfigurationRegion1"
                  String="&bos;end(\s+configuration)?(\s+%2)?\s*;"/>
-        <RegExpr attribute="Error" context="#pop#pop" insensitive="true" dynamic="true" endRegion="ConfigurationRegion1"
+        <RegExpr attribute="Error" context="#pop#pop" insensitive="true" endRegion="ConfigurationRegion1"
                  String="&bos;end(\s+configuration)?(\s+&varname;)\s*;"/>
       </context>
 
@@ -599,7 +599,9 @@
 
 <!-- other environments -->
       <context name="comment" attribute="Comment" lineEndContext="#pop">
+        <DetectSpaces />
         <IncludeRules context="##Alerts"/>
+        <IncludeRules context="##Modelines"/>
       </context>
 
       <context name="string" attribute="Vector" lineEndContext="#stay">
@@ -635,22 +637,23 @@
       <itemData name="Integer" defStyleNum="dsDecVal"/>
       <itemData name="Bit" defStyleNum="dsChar"/>
       <itemData name="Reference" defStyleNum="dsFunction"/>
-      <itemData name="Error" defStyleNum="dsError" color="#ff0000" bold="1"/>
+      <itemData name="Error" defStyleNum="dsError" bold="1"/>
       <itemData name="Vector" defStyleNum="dsString"/>
       <itemData name="Operator" defStyleNum="dsOthers"/>
       <itemData name="Attribute" defStyleNum="dsBaseN"/>
       <itemData name="Signal" defStyleNum="dsOthers"/>
       <itemData name="Range" defStyleNum="dsOthers"/>
-      <itemData name="Redirection" defStyleNum="dsKeyword" color="#223388"/>
-      <itemData name="Process" defStyleNum="dsKeyword" color="#0099AA"/>
-      <itemData name="Control" defStyleNum="dsKeyword" color="#223388"/>
-      <itemData name="Name" defStyleNum="dsKeyword" color="#bb6600" bold="1"/>
+      <itemData name="Redirection" defStyleNum="dsAttribute" bold="1"/> <!-- #223388 -->
+      <itemData name="Process" defStyleNum="dsSpecialChar" bold="1"/> <!-- #0099AA -->
+      <itemData name="Control" defStyleNum="dsControlFlow"/> <!-- #223388 -->
+      <itemData name="Name" defStyleNum="dsDecVal" bold="1"/> <!-- #bb6600 -->
     </itemDatas>
   </highlighting>
   <general>
     <comments>
-      <comment name="singleLine" start="--"/>
+      <comment name="singleLine" start="--" position="afterwhitespace"/>
     </comments>
     <keywords casesensitive="0"/>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/xml.xml b/syntax/xml.xml
--- a/syntax/xml.xml
+++ b/syntax/xml.xml
@@ -4,9 +4,9 @@
 	<!-- names must start with a letter, ideogram or underscore. \w matches any
 		 word character *or* a number, hence the lookahead -->
 	<!ENTITY name    "(?![0-9])[\w_:][\w.:_-]*">
-	<!ENTITY entref  "&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);">
+	<!ENTITY entref  "&amp;(?:#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);">
 ]>
-<language name="XML" version="9" kateversion="3.4" section="Markup" extensions="*.docbook;*.xml;*.rc;*.daml;*.rdf;*.rss;*.xspf;*.xsd;*.svg;*.ui;*.kcfg;*.qrc;*.wsdl;*.scxml;*.xbel;*.dae;*.sch;*.brd" mimetype="text/xml;text/book;text/daml;text/rdf;application/rss+xml;application/xspf+xml;image/svg+xml;application/x-designer;application/x-xbel;application/xml;application/scxml+xml" casesensitive="1" indenter="xml" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL">
+<language name="XML" version="10" kateversion="3.4" section="Markup" extensions="*.docbook;*.xml;*.rc;*.daml;*.rdf;*.rss;*.xspf;*.xsd;*.svg;*.ui;*.kcfg;*.qrc;*.wsdl;*.scxml;*.xbel;*.dae;*.sch;*.brd" mimetype="text/xml;text/book;text/daml;text/rdf;application/rss+xml;application/xspf+xml;image/svg+xml;application/x-designer;application/x-xbel;application/xml;application/scxml+xml" casesensitive="1" indenter="xml" author="Wilbert Berendsen (wilbert@kde.nl)" license="LGPL">
 
 <highlighting>
 <contexts>
@@ -40,8 +40,9 @@
   <context name="Comment" attribute="Comment" lineEndContext="#stay">
     <DetectSpaces />
     <StringDetect attribute="Comment" context="#pop" String="--&gt;" endRegion="comment" />
-    <RegExpr attribute="Error" context="#stay" String="-(-(?!-&gt;))+" />
+    <RegExpr attribute="Error" context="#stay" String="-(?:\-(?!-&gt;))+" />
     <IncludeRules context="##Alerts" />
+    <IncludeRules context="##Modelines" />
     <DetectIdentifier />
   </context>
 
@@ -63,7 +64,7 @@
 
   <context name="Doctype Internal Subset" attribute="Other Text" lineEndContext="#stay">
     <DetectChar attribute="Doctype" context="#pop" char="]" endRegion="int_subset" />
-    <RegExpr attribute="Doctype" context="Doctype Markupdecl" String="&lt;!(ELEMENT|ENTITY|ATTLIST|NOTATION)\b" />
+    <RegExpr attribute="Doctype" context="Doctype Markupdecl" String="&lt;!(?:ELEMENT|ENTITY|ATTLIST|NOTATION)\b" />
     <StringDetect attribute="Comment" context="Comment" String="&lt;!--" beginRegion="comment" />
     <RegExpr attribute="Processing Instruction" context="PI" String="&lt;\?[\w:_-]*" beginRegion="pi" />
     <IncludeRules context="FindPEntityRefs" />
@@ -88,8 +89,7 @@
   <context name="Element" attribute="Other Text" lineEndContext="#stay">
     <Detect2Chars attribute="Element" context="#pop" char="/" char1="&gt;" endRegion="element" />
     <DetectChar attribute="Element" context="El Content" char="&gt;" />
-    <RegExpr attribute="Attribute" context="Attribute" String="^&name;" />
-    <RegExpr attribute="Attribute" context="Attribute" String="\s+&name;" />
+    <RegExpr attribute="Attribute" context="Attribute" String="(?:^|\s+)&name;" />
     <RegExpr attribute="Error" context="#stay" String="\S" />
   </context>
 
@@ -143,7 +143,8 @@
 </highlighting>
 <general>
   <comments>
-    <comment name="multiLine" start="&lt;!--" end="--&gt;" />
+    <comment name="multiLine" start="&lt;!--" end="--&gt;" region="comment" />
   </comments>
 </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/xorg.xml b/syntax/xorg.xml
--- a/syntax/xorg.xml
+++ b/syntax/xorg.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd">
-<language name="x.org Configuration" section="Configuration" extensions="xorg.conf" mimetype="" version="2" kateversion="2.4" author="Jan Janssen (medhefgo@web.de)" license="LGPL">
+<language name="x.org Configuration" section="Configuration" extensions="xorg.conf" mimetype="" version="3" kateversion="2.4" author="Jan Janssen (medhefgo@web.de)" license="LGPL">
 
 <highlighting>
 <contexts>
@@ -36,6 +36,7 @@
  <context name="Comment" attribute="Comment" lineEndContext="#pop">
   <DetectSpaces />
   <IncludeRules context="##Alerts" />
+  <IncludeRules context="##Modelines" />
   <DetectIdentifier />
  </context>
 </contexts>
@@ -63,3 +64,4 @@
 </general>
 
 </language>
+<!-- kate: replace-tabs on; tab-width 1; indent-width 1; -->
diff --git a/syntax/xslt.xml b/syntax/xslt.xml
--- a/syntax/xslt.xml
+++ b/syntax/xslt.xml
@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd"
 [
-	<!ENTITY qname    "[A-Za-z_:][\w.:_-]*">
-	<!ENTITY entref  "&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&qname;);">
-	<!ENTITY axisname  "ancestor|ancestor-or-self|attribute|child|descendant|descendant-or-self|following|following-sibling|namespace|parent|preceding|preceding-sibling|self">
+  <!ENTITY qname    "[A-Za-z_:][\w.:_-]*">
+  <!ENTITY entref  "&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&qname;);">
+  <!ENTITY axisname  "ancestor|ancestor-or-self|attribute|child|descendant|descendant-or-self|following|following-sibling|namespace|parent|preceding|preceding-sibling|self">
 ]>
 
 <!--
@@ -52,7 +52,7 @@
 
 -->
 
-<language version="4" kateversion="5.0" name="xslt" section="Markup" extensions="*.xsl;*.xslt" license="LGPL" author="Peter Lammich (views@gmx.de)">
+<language version="6" kateversion="5.0" name="xslt" section="Markup" extensions="*.xsl;*.xslt" license="LGPL" author="Peter Lammich (views@gmx.de)">
   <highlighting>
     <list name="keytags">
       <item>xsl:value-of</item>
@@ -362,7 +362,8 @@
        <context name="comment" attribute="Comment" lineEndContext="#stay">
          <StringDetect attribute="Comment" context="#pop" String="--&gt;" endRegion="comment" />
          <RegExpr attribute="Invalid" context="#stay" String="-(-(?!-&gt;))+" />
-         <RegExpr attribute="Alert" context="#stay" String="(FIXME|TODO|HACK)" />
+         <IncludeRules context="##Alerts" />
+         <IncludeRules context="##Modelines" />
        </context>
 
        <context name="xpath" attribute="XPath" lineEndContext="#stay">
@@ -406,35 +407,35 @@
     </contexts>
     <itemDatas>
       <itemData name="Normal Text" defStyleNum="dsNormal"/>
-      <itemData name="Tag" defStyleNum="dsKeyword"/>
-      <itemData name="Attribute" defStyleNum="dsOthers"/>
+      <itemData name="Tag" defStyleNum="dsKeyword" spellChecking="false"/>
+      <itemData name="Attribute" defStyleNum="dsOthers" spellChecking="false"/>
       <itemData name="Value" defStyleNum="dsAttribute"/>
-      <itemData name="Invalid" defStyleNum="dsError"/>
-      <itemData name="Alert" defStyleNum="dsAlert"/>
-      <itemData name="Attribute Value" defStyleNum="dsString" color="#800000" selColor="#ffffff" bold="0" italic="0"/>
-      <itemData name="XPath" defStyleNum="dsOthers" color="#008080" selColor="#ffffff" bold="0" italic="0"/>
-      <itemData name="XPath String" defStyleNum="dsString" color="#800000" selColor="#ffffff" bold="0" italic="0"/>
-      <itemData name="XPath Axis" defStyleNum="dsKeyword" color="#008080" selColor="#ffffff" bold="0" italic="1"/>
-      <itemData name="XPath/ XSLT Function" defStyleNum="dsKeyword" color="#008080" selColor="#ffffff" bold="1" italic="0"/>
-      <itemData name="XPath 2.0/ XSLT 2.0 Function" defStyleNum="dsKeyword" color="#008080" selColor="#ffffff" bold="1" italic="0"/>
-      <itemData name="XPath Attribute" defStyleNum="dsNormal" color="#008080" selColor="#ffffff" bold="0" italic="1" />
-      <itemData name="Variable" defStyleNum="dsNormal" color="#008080" selColor="#ffffff" bold="0" italic="1" />
+      <itemData name="Invalid" defStyleNum="dsError" spellChecking="false"/>
+      <itemData name="Attribute Value" defStyleNum="dsString"/>
+      <itemData name="XPath" defStyleNum="dsVariable" bold="0" italic="0"/>
+      <itemData name="XPath String" defStyleNum="dsString"/>
+      <itemData name="XPath Axis" defStyleNum="dsVariable" bold="0" italic="1"/>
+      <itemData name="XPath/ XSLT Function" defStyleNum="dsVariable" bold="1" italic="0" spellChecking="false"/>
+      <itemData name="XPath 2.0/ XSLT 2.0 Function" defStyleNum="dsVariable" bold="1" italic="0" spellChecking="false"/>
+      <itemData name="XPath Attribute" defStyleNum="dsVariable" bold="0" italic="1" spellChecking="false"/>
+      <itemData name="Variable" defStyleNum="dsVariable" bold="0" italic="1" spellChecking="false"/>
       <itemData name="Comment" defStyleNum="dsComment"/>
-      <itemData name="XSLT Tag" defStyleNum="dsKeyword" color="#000080" selColor="#ffffff" bold="1" italic="0" />
-      <itemData name="XSLT 2.0 Tag" defStyleNum="dsKeyword" color="#000080" selColor="#ffffff" bold="1" italic="0" />
-      <itemData name="Entity Reference" defStyleNum="dsDecVal" />
+      <itemData name="XSLT Tag" defStyleNum="dsBuiltIn" bold="1" spellChecking="false"/>
+      <itemData name="XSLT 2.0 Tag" defStyleNum="dsBuiltIn" bold="1" spellChecking="false"/>
+      <itemData name="Entity Reference" defStyleNum="dsDecVal" spellChecking="false"/>
 
-      <itemData name="CDATA" defStyleNum="dsBaseN" bold="1" />
-      <itemData name="Processing Instruction" defStyleNum="dsKeyword" />
-      <itemData name="Doctype" defStyleNum="dsDataType" bold="1" />
-      <itemData name="PEntity Reference" defStyleNum="dsDecVal" />
+      <itemData name="CDATA" defStyleNum="dsBaseN" bold="1" spellChecking="false"/>
+      <itemData name="Processing Instruction" defStyleNum="dsKeyword" spellChecking="false"/>
+      <itemData name="Doctype" defStyleNum="dsDataType" bold="1" spellChecking="false"/>
+      <itemData name="PEntity Reference" defStyleNum="dsDecVal" spellChecking="false"/>
 
     </itemDatas>
   </highlighting>
   <general>
     <comments>
-      <comment name="multiLine" start="&lt;!--" end="--&gt;" />
+      <comment name="multiLine" start="&lt;!--" end="--&gt;" region="comment" />
     </comments>
     <keywords casesensitive="0" weakDeliminator="-:" additionalDeliminator="&quot;{}"/>
   </general>
 </language>
+<!-- kate: space-indent on; replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/xul.xml b/syntax/xul.xml
--- a/syntax/xul.xml
+++ b/syntax/xul.xml
@@ -4,7 +4,7 @@
 	<!ENTITY name    "[A-Za-z_:][\w.:_-]*">
 	<!ENTITY entref  "&amp;(#[0-9]+|#[xX][0-9A-Fa-f]+|&name;);">
 ]>
-<language name="XUL" version="5" kateversion="5.0" section="Markup" extensions="*.xul;*.xbl" mimetype="text/xul" casesensitive="1" indenter="xml" author="Wilbert Berendsen (wilbert@kde.nl), Anders Lund (anders@alweb.dk), Joseph Wenninger (jowenn@kde.org), Whitehawk Stormchaser (zerokode@gmx.net), Marc Dassonneville (marc.dassonneville@gmail.com)" license="LGPL">
+<language name="XUL" version="7" kateversion="5.0" section="Markup" extensions="*.xul;*.xbl" mimetype="text/xul" casesensitive="1" indenter="xml" author="Wilbert Berendsen (wilbert@kde.nl), Anders Lund (anders@alweb.dk), Joseph Wenninger (jowenn@kde.org), Whitehawk Stormchaser (zerokode@gmx.net), Marc Dassonneville (marc.dassonneville@gmail.com)" license="LGPL">
 
 <highlighting>
    <list name="keywords">
@@ -426,6 +426,7 @@
     <StringDetect attribute="Comment" context="#pop" String="--&gt;" endRegion="comment" />
     <RegExpr attribute="Error" context="#stay" String="-(-(?!-&gt;))+" />
     <IncludeRules context="##Alerts" />
+    <IncludeRules context="##Modelines" />
     <DetectIdentifier />
   </context>
 
@@ -519,8 +520,8 @@
      <DetectChar attribute="String" context="String" char="&quot;"/>
      <DetectChar attribute="String" context="String 1" char="'"/>
      <Detect2Chars attribute="Comment" context="JSComment" char="/" char1="/"/>
-     <Detect2Chars attribute="Comment" context="Multi/inline Comment" char="/" char1="*" beginRegion="Comment"/>
-     <RegExpr attribute="Normal Text" context="(Internal regex catch)" String="[=?:]" />
+     <Detect2Chars attribute="Comment" context="Multi/inline Comment" char="/" char1="*" beginRegion="JSBlockComment"/>
+     <AnyChar attribute="Normal Text" context="(Internal regex catch)" String="=?:" />
      <RegExpr attribute="Normal Text" context="(Internal regex catch)" String="\(" />
      <DetectChar attribute="Symbol" context="#stay" char="{" beginRegion="Brace1" />
      <DetectChar attribute="Symbol" context="#stay" char="}" endRegion="Brace1" />
@@ -544,8 +545,9 @@
      <DetectIdentifier />
   </context>
   <context attribute="Comment" lineEndContext="#stay" name="Multi/inline Comment">
+     <DetectSpaces />
+     <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="JSBlockComment"/>
      <IncludeRules context="##Alerts" />
-     <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="Comment"/>
   </context>
   
   <context attribute="Regular Expression" lineEndContext="#stay" name="Regular Expression">
@@ -562,7 +564,7 @@
      <RegExpr attribute="Normal Text" context="#stay" String="\s*" />
      <RegExpr attribute="Regular Expression" context="#pop" String="//(?=;)" />
      <Detect2Chars attribute="Comment" context="JSComment" char="/" char1="/" />
-     <Detect2Chars attribute="Comment" context="Multi/inline Comment" char="/" char1="*" />
+     <Detect2Chars attribute="Comment" context="Multi/inline Comment" char="/" char1="*" beginRegion="JSBlockComment" />
      <DetectChar attribute="Regular Expression" context="(regex caret first check)" char="/" />
   </context>
   <context attribute="Pattern Character Class" lineEndContext="#stay" name="Regular Expression Character Class">
@@ -615,10 +617,9 @@
 </highlighting>
 <general>
   <comments>
-    <comment name="multiLine" start="&lt;!--" end="--&gt;" />
-    <comment name="singleLine" start="//" />
-    <comment name="multiLine" start="/*" end="*/" />
+    <comment name="multiLine" start="&lt;!--" end="--&gt;" region="comment" />
   </comments>
   <keywords casesensitive="1" />
 </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/yacc.xml b/syntax/yacc.xml
--- a/syntax/yacc.xml
+++ b/syntax/yacc.xml
@@ -12,12 +12,12 @@
 == UPDATE HISTORY ==
 2018-02-20 // Nibaldo González <nibgonz@gmail.com>
 
-  Fix '$' symbol, highlighted as 'dsError' by C++ (isocpp.xml). 
+  Fix '$' symbol, highlighted as 'dsError' by C++ (isocpp.xml).
   Update syntax for Bison (3.0.4):
    - Add declarations, directives in rules and the '@' variable.
-   - Allow a tag in '%union', declarations in multiple lines and 
+   - Allow a tag in '%union', declarations in multiple lines and
      grammar declarations in the grammar rules section.
-   - The ';' char is not necessary to finish a rule. Allow '; |' 
+   - The ';' char is not necessary to finish a rule. Allow '; |'
      within rules.
   Add mimetypes and extensions '*.ypp' & '*.y++'.
 
@@ -32,7 +32,7 @@
 
 ========================================================================
 -->
-<language name="Yacc/Bison" version="5" kateversion="5.0" section="Sources" extensions="*.y;*.yy;*.ypp;*.y++" mimetype="text/x-yacc;text/x-bison" priority="5" author="Jan Villat (jan.villat@net2000.ch)" license="LGPL">
+<language name="Yacc/Bison" version="7" kateversion="5.0" section="Sources" extensions="*.y;*.yy;*.ypp;*.y++" mimetype="text/x-yacc;text/x-bison" priority="5" author="Jan Villat (jan.villat@net2000.ch)" license="LGPL">
 
 <highlighting>
 <contexts>
@@ -62,7 +62,7 @@
     <WordDetect attribute="Directive" context="Percent Command In" String="%&lt;flag&gt;" />
     <!-- Any word followed by '%' (End with ';' or '%') -->
     <DetectChar attribute="Directive" context="Percent Command" char="%" />
-  </context>  
+  </context>
   <context name="Grammar Declarations" attribute="Normal Text" lineEndContext="#stay">
     <WordDetect attribute="Directive" context="Union Start" String="%union" />
     <WordDetect attribute="Directive" context="Union Start" String="%code" />
@@ -74,7 +74,7 @@
     <IncludeRules context="Comment" />
     <DetectSpaces />
     <DetectChar attribute="Normal Text" context="Union In" char="{" beginRegion="union" />
-    <RegExpr attribute="Normal Text" context="#pop!Union Tag" String="[^\s\{](?=(\s|$|//))" />
+    <RegExpr attribute="Normal Text" context="#pop!Union Tag" String="[^\s\{](?=\s|$|//)" />
   </context>
   <context name="Union Tag" attribute="Normal Text" lineEndContext="#stay">
     <IncludeRules context="Comment" />
@@ -141,9 +141,9 @@
     <!-- Finish rule without the ';' character (see the 'rhses.1' rule in the 'src/parse-gram.y' file, from the Bison source) -->
     <RegExpr attribute="Open Rule" context="#pop" String="[\w\-\.](?=[\w\-\.]*:)" column="0" endRegion="rule" />
     <Detect2Chars attribute="Content-Type Delimiter" context="#pop" char="%" char1="%" lookAhead="true" firstNonSpace="true" endRegion="rule" />
-    <RegExpr attribute="Directive" context="#pop" String="%(union|code|destructor|printer|start|(no\-)?default\-prec|nterm|token|type|left|right|nonassoc|precedence)\b" lookAhead="true" column="0" endRegion="rule" />
+    <RegExpr attribute="Directive" context="#pop" String="%(?:union|code|destructor|printer|start|(?:no\-)?default\-prec|nterm|token|type|left|right|nonassoc|precedence)\b" lookAhead="true" column="0" endRegion="rule" />
   </context>
-  <!-- The Bison parser allows to have ';' followed by '|', without the rule ending. 
+  <!-- The Bison parser allows to have ';' followed by '|', without the rule ending.
        The problem here is that the ';' char has endRegion="rule" (although it is not very relevant). -->
   <context name="Rule End" attribute="Normal Text" lineEndContext="#stay" fallthrough="true" fallthroughContext="#pop#pop">
     <DetectSpaces />
@@ -164,7 +164,7 @@
     <WordDetect attribute="Directive" context="Percent Command In" String="%left" />
     <WordDetect attribute="Directive" context="Percent Command In" String="%right" />
     <WordDetect attribute="Directive" context="Percent Command In" String="%nonassoc" />
-    <WordDetect attribute="Directive" context="Percent Command In" String="%precedence" /> 
+    <WordDetect attribute="Directive" context="Percent Command In" String="%precedence" />
 
     <DetectChar attribute="Rule" context="#pop" char="%" /> <!-- End when there is an invalid declaration -->
     <DetectChar attribute="Normal Text" context="#pop" char=";" />
@@ -195,15 +195,17 @@
   </context>
 
   <context name="Comment" attribute="Comment" lineEndContext="#stay">
-    <Detect2Chars attribute="Comment" context="CommentStar" char="/" char1="*" />
+    <Detect2Chars attribute="Comment" context="CommentStar" char="/" char1="*" beginRegion="comment" />
     <Detect2Chars attribute="Comment" context="CommentSlash" char="/" char1="/" />
   </context>
   <context name="CommentStar" attribute="Comment" lineEndContext="#stay">
-    <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" />
+    <DetectSpaces />
+    <Detect2Chars attribute="Comment" context="#pop" char="*" char1="/" endRegion="comment" />
     <IncludeRules context="##Alerts" />
     <IncludeRules context="##Modelines" />
   </context>
   <context name="CommentSlash" attribute="Comment" lineEndContext="#pop">
+    <DetectSpaces />
     <IncludeRules context="##Alerts" />
     <IncludeRules context="##Modelines" />
   </context>
@@ -229,7 +231,7 @@
   </context>
   <context name="Symbol-Variable" attribute="Normal Text" lineEndContext="#stay">
     <DetectChar attribute="Directive" context="Dol" char="$" />
-    <RegExpr attribute="Directive" context="#stay" String="@(\$?)(\d+|[A-Za-z_]\w*)?" />
+    <RegExpr attribute="Directive" context="#stay" String="@\$?(?:\d+|[A-Za-z_]\w*)?" />
   </context>
   <context name="Dol" attribute="Normal Text" fallthrough="true" fallthroughContext="DolEnd" lineEndContext="#stay">
     <RegExpr attribute="Data Type" context="DolEnd" String="&lt;[^&gt;]+&gt;" />
@@ -259,7 +261,7 @@
 </highlighting>
 <general>
   <comments>
-    <comment name="multiLine" start="/*" end="*/" />
+    <comment name="multiLine" start="/*" end="*/" region="comment" />
     <comment name="singleLine" start="//" />
   </comments>
 </general>
diff --git a/syntax/yaml.xml b/syntax/yaml.xml
--- a/syntax/yaml.xml
+++ b/syntax/yaml.xml
@@ -1,20 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE language SYSTEM "language.dtd"
 [
-  <!ENTITY null "(null|Null|NULL|~)">
-  <!ENTITY bool "(y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)">
+  <!ENTITY null "(?:null|Null|NULL|~)">
+  <!ENTITY bool "(?:y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF)">
 
-  <!ENTITY int         "(0|[\-\+]?[1-9][0-9_]*)">
-  <!ENTITY intOther    "[\-\+]?0(x_*[0-9a-fA-F][0-9a-fA-F_]*|o?_*[0-7][0-7_]*|b_*[01][01_]*)"> <!-- Hex, Octal, Binary -->
-  <!ENTITY intBase60   "[\-\+]?[1-9][0-9_]*(:[0-5]?[0-9])+">
-  <!ENTITY allInt      "(&intBase60;|&intOther;|&int;)">
+  <!ENTITY int         "(?:0|[\-\+]?[1-9][0-9_]*)">
+  <!ENTITY intOther    "[\-\+]?0(?:x_*[0-9a-fA-F][0-9a-fA-F_]*|o?_*[0-7][0-7_]*|b_*[01][01_]*)"> <!-- Hex, Octal, Binary -->
+  <!ENTITY intBase60   "[\-\+]?[1-9][0-9_]*(?:\:[0-5]?[0-9])+">
+  <!ENTITY allInt      "(?:&intBase60;|&intOther;|&int;)">
 
-  <!ENTITY float       "[\-\+]?([0-9][0-9_]*\.[0-9\._]*|\._*[0-9][0-9\._]*)([eE][\-\+]?[0-9]+)?">
+  <!ENTITY float       "[\-\+]?(?:[0-9][0-9_]*\.[0-9\._]*|\._*[0-9][0-9\._]*)(?:[eE][\-\+]?[0-9]+)?">
   <!ENTITY floatExp    "[\-\+]?[0-9][0-9_]*[eE][\-\+]?[0-9]+">
-  <!ENTITY floatBase60 "[\-\+]?[0-9][0-9_]*(:[0-5]?[0-9])+\.[0-9_]*">
-  <!ENTITY inf         "[\-\+]?\.(inf|Inf|INF)\b">
-  <!ENTITY nan         "\.(nan|NaN|NAN)\b">
-  <!ENTITY allFloat    "(&float;|&floatExp;|&floatBase60;|&inf;|&nan;)">
+  <!ENTITY floatBase60 "[\-\+]?[0-9][0-9_]*(?:\:[0-5]?[0-9])+\.[0-9_]*">
+  <!ENTITY inf         "[\-\+]?\.(?:inf|Inf|INF)\b">
+  <!ENTITY nan         "\.(?:nan|NaN|NAN)\b">
+  <!ENTITY allFloat    "(?:&float;|&floatExp;|&floatBase60;|&inf;|&nan;)">
 
   <!ENTITY endValue       "(?:\s*$|\s+#)">
   <!ENTITY endValueInline "\s*[:,\[\]\{\}]">
@@ -37,7 +37,7 @@
 <!-- Modifications (YAML 1.2), values & support for literal/folded style:
        Nibaldo González S. <nibgonz@gmail.com>
        These modifications are under the MIT license. //-->
-<language name="YAML" version="6" kateversion="5.0" section="Markup"
+<language name="YAML" version="8" kateversion="5.0" section="Markup"
           extensions="*.yaml;*.yml" mimetype="text/yaml" priority="9"
           author="Dr Orlovsky MA (dr.orlovsky@gmail.com), Nibaldo González (nibgonz@gmail.com)" license="LGPL">
   <highlighting>
@@ -47,7 +47,7 @@
         <RegExpr attribute="End of Document" context="EOD" String="^\.\.\.$" column="0"/>
         <DetectChar attribute="Directive" context="directive" char="%" column="0"/>
 
-        <RegExpr attribute="Comment" context="comment" String="(^|\s+)#" />
+        <RegExpr attribute="Comment" context="comment" String="(?:^|\s+)#" />
 
         <!-- Literal/Folded Style -->
         <IncludeRules context="find-literal-block" />
@@ -62,10 +62,10 @@
         <RegExpr attribute="Alias" firstNonSpace="true" context="after-data" String="&alias;" />
         <RegExpr attribute="Reference" firstNonSpace="true" context="after-data" String="&reference;" />
 
-        <RegExpr attribute="Key" context="dpoints-attribute-pre" String="[^&quot;'#\-\s][^:#]*(?=:(\s|$))"/>
-        <RegExpr attribute="Key" context="dpoints-attribute-pre" String="\-([^\s:#][^:#]*)?(?=:(\s|$))"/>
-        <RegExpr attribute="Key" context="dpoints-attribute-pre" String="&keyDQ;(?=:(\s|$))"/>
-        <RegExpr attribute="Key" context="dpoints-attribute-pre" String="&keySQ;(?=:(\s|$))"/>
+        <RegExpr attribute="Key" context="dpoints-attribute-pre" String="[^&quot;'#\-\s][^:#]*(?=\:(?:\s|$))"/>
+        <RegExpr attribute="Key" context="dpoints-attribute-pre" String="\-(?:[^\s:#][^:#]*)?(?=\:(?:\s|$))"/>
+        <RegExpr attribute="Key" context="dpoints-attribute-pre" String="&keyDQ;(?=\:(?:\s|$))"/>
+        <RegExpr attribute="Key" context="dpoints-attribute-pre" String="&keySQ;(?=\:(?:\s|$))"/>
         <RegExpr attribute="Key Points Operator" context="attribute-pre" String=":(?=\s|$)"/>
 
         <DetectChar attribute="String" firstNonSpace="true" context="string" char="'" beginRegion="String" />
@@ -75,7 +75,7 @@
       </context>
 
       <context attribute="Normal Text" lineEndContext="#pop" name="mapping-key" fallthrough="true" fallthroughContext="#pop">
-        <RegExpr attribute="Comment" context="#pop!comment" String="(^|\s+)#" />
+        <RegExpr attribute="Comment" context="#pop!comment" String="(?:^|\s+)#" />
         <DetectSpaces />
         <RegExpr attribute="Operator" context="#pop!dash" String="\-(?=\s|$)" />
         <RegExpr attribute="Data Types" context="#pop!after-data" String="&dataTypes;" />
@@ -89,7 +89,7 @@
       </context>
 
       <context attribute="Normal Text" lineEndContext="#pop" name="dash" fallthrough="true" fallthroughContext="#pop">
-        <RegExpr attribute="Comment" context="comment" String="(^|\s+)#" />
+        <RegExpr attribute="Comment" context="comment" String="(?:^|\s+)#" />
         <DetectSpaces/>
         <RegExpr attribute="Data Types" context="#stay" String="&dataTypes;" />
         <RegExpr attribute="Alias" context="#stay" String="&alias;" />
@@ -106,7 +106,7 @@
 
       <!-- Highlight lists, hashes and strings after a data type, reference or alias -->
       <context attribute="Normal Text" lineEndContext="#pop" name="after-data" fallthrough="true" fallthroughContext="#pop">
-        <RegExpr attribute="Comment" context="#pop!comment" String="(^|\s+)#" />
+        <RegExpr attribute="Comment" context="#pop!comment" String="(?:^|\s+)#" />
         <DetectSpaces />
         <RegExpr attribute="Data Types" context="#stay" String="&dataTypes;" />
         <RegExpr attribute="Alias" context="#stay" String="&alias;" />
@@ -119,7 +119,7 @@
       </context>
 
       <context attribute="Document Header" lineEndContext="#pop" name="header">
-        <RegExpr attribute="Comment" context="comment" String="(^|\s+)#" />
+        <RegExpr attribute="Comment" context="comment" String="(?:^|\s+)#" />
         <RegExpr attribute="Literal/Folded Operator" context="header-literal-operator" String="\s&literalOp;(?=&endValue;)" lookAhead="true" />
       </context>
       <context attribute="Document Header" lineEndContext="#pop#pop" name="header-literal-operator" fallthrough="true" fallthroughContext="#pop">
@@ -134,16 +134,16 @@
       </context>
 
       <context attribute="Attribute" lineEndContext="#pop#pop" name="attribute">
-        <RegExpr attribute="Comment" context="comment" String="(^|\s+)#" />
+        <RegExpr attribute="Comment" context="comment" String="(?:^|\s+)#" />
       </context>
 
       <context attribute="Attribute" lineEndContext="#stay" name="list-attribute-inline">
         <AnyChar attribute="Operator" context="#pop#pop" lookAhead="true" String=",]" />
-        <RegExpr attribute="Comment" context="comment" String="(^|\s+)#" />
+        <RegExpr attribute="Comment" context="comment" String="(?:^|\s+)#" />
       </context>
       <context attribute="Attribute" lineEndContext="#stay" name="hash-attribute-inline">
         <AnyChar attribute="Operator" context="#pop#pop" lookAhead="true" String=",}" />
-        <RegExpr attribute="Comment" context="comment" String="(^|\s+)#" />
+        <RegExpr attribute="Comment" context="comment" String="(?:^|\s+)#" />
       </context>
 
       <!-- Attribute -->
@@ -151,7 +151,7 @@
         <DetectChar attribute="Key Points Operator" context="#pop!attribute-pre" char=":" /> <!-- Highlight two points after Key -->
       </context>
       <context attribute="Attribute" lineEndContext="#pop" name="attribute-pre" fallthrough="true" fallthroughContext="attribute">
-        <RegExpr attribute="Comment" context="comment" String="(^|\s+)#" />
+        <RegExpr attribute="Comment" context="comment" String="(?:^|\s+)#" />
         <DetectSpaces/>
         <DetectChar attribute="Operator" context="#stay" char="?" />
         <RegExpr attribute="Data Types" context="#stay" String="&dataTypes;" />
@@ -168,7 +168,7 @@
       </context>
 
       <context attribute="Attribute" lineEndContext="#pop" name="default-attribute-pre-inline">
-        <RegExpr attribute="Comment" context="comment" String="(^|\s+)#" />
+        <RegExpr attribute="Comment" context="comment" String="(?:^|\s+)#" />
         <DetectSpaces/>
 
         <DetectChar attribute="Operator" context="#stay" char="?" />
@@ -210,21 +210,21 @@
       <!-- List -->
       <!-- Context "find-values-list" highlights values and then sends to "list-element" -->
       <context attribute="List" lineEndContext="#stay" name="list" fallthrough="true" fallthroughContext="#pop!find-values-list" noIndentationBasedFolding="true">
-        <RegExpr attribute="Comment" context="comment" String="(^|\s+)#" />
+        <RegExpr attribute="Comment" context="comment" String="(?:^|\s+)#" />
         <DetectSpaces />
         <DetectChar attribute="Operator" context="#pop!find-values-list" char="?" />
       </context>
       <context attribute="List" lineEndContext="#stay" name="list-element" noIndentationBasedFolding="true">
-        <RegExpr attribute="Comment" context="comment" String="(^|\s+)#" />
+        <RegExpr attribute="Comment" context="comment" String="(?:^|\s+)#" />
 
         <DetectChar attribute="Operator" context="#pop" char="]" endRegion="List" />
         <DetectChar attribute="Operator" context="list" char="[" beginRegion="List" />
         <DetectChar attribute="Operator" context="hash" char="{" beginRegion="Hash" />
 
-        <RegExpr attribute="Key" context="dpoints-list-attribute-pre-inline" String="[^&quot;'#\-,\]\s][^:#,\]]*(?=:(\s|$))"/>
-        <RegExpr attribute="Key" context="dpoints-list-attribute-pre-inline" String="\-([^\s:#,\]][^:#,\]]*)?(?=:(\s|$))"/>
-        <RegExpr attribute="Key" context="dpoints-list-attribute-pre-inline" String="&keyDQ;(?=:(\s|$))"/>
-        <RegExpr attribute="Key" context="dpoints-list-attribute-pre-inline" String="&keySQ;(?=:(\s|$))"/>
+        <RegExpr attribute="Key" context="dpoints-list-attribute-pre-inline" String="[^&quot;'#\-,\]\s][^:#,\]]*(?=\:(?:\s|$))"/>
+        <RegExpr attribute="Key" context="dpoints-list-attribute-pre-inline" String="\-(?:[^\s:#,\]][^:#,\]]*)?(?=\:(?:\s|$))"/>
+        <RegExpr attribute="Key" context="dpoints-list-attribute-pre-inline" String="&keyDQ;(?=\:(?:\s|$))"/>
+        <RegExpr attribute="Key" context="dpoints-list-attribute-pre-inline" String="&keySQ;(?=\:(?:\s|$))"/>
         <RegExpr attribute="Key Points Operator" context="list-attribute-pre-inline" String=":(?=\s|$)" firstNonSpace="true" />
 
         <RegExpr attribute="Data Types" context="#stay" String="&dataTypes;" />
@@ -239,18 +239,18 @@
 
       <!-- Hash -->
       <context attribute="Hash" lineEndContext="#stay" name="hash" fallthrough="true" fallthroughContext="#pop!hash-element" noIndentationBasedFolding="true">
-        <RegExpr attribute="Comment" context="comment" String="(^|\s+)#" />
+        <RegExpr attribute="Comment" context="comment" String="(?:^|\s+)#" />
         <DetectSpaces />
         <DetectChar attribute="Operator" context="#pop!hash-element" char="?" />
       </context>
       <context attribute="Hash" lineEndContext="#stay" name="hash-element" noIndentationBasedFolding="true">
-        <RegExpr attribute="Comment" context="comment" String="(^|\s+)#" />
+        <RegExpr attribute="Comment" context="comment" String="(?:^|\s+)#" />
         <DetectSpaces/>
 
-        <RegExpr attribute="Key" context="dpoints-hash-attribute-pre-inline" String="[^\s&quot;'#\-,\}\s][^:#,\}]*(?=:(\s|$))"/>
-        <RegExpr attribute="Key" context="dpoints-hash-attribute-pre-inline" String="\-([^\s:#,\}][^:#,\}]*)?(?=:(\s|$))"/>
-        <RegExpr attribute="Key" context="dpoints-hash-attribute-pre-inline" String="&keyDQ;(?=:(\s|$))"/>
-        <RegExpr attribute="Key" context="dpoints-hash-attribute-pre-inline" String="&keySQ;(?=:(\s|$))"/>
+        <RegExpr attribute="Key" context="dpoints-hash-attribute-pre-inline" String="[^\s&quot;'#\-,\}\s][^:#,\}]*(?=\:(?:\s|$))"/>
+        <RegExpr attribute="Key" context="dpoints-hash-attribute-pre-inline" String="\-(?:[^\s:#,\}][^:#,\}]*)?(?=\:(?:\s|$))"/>
+        <RegExpr attribute="Key" context="dpoints-hash-attribute-pre-inline" String="&keyDQ;(?=\:(?:\s|$))"/>
+        <RegExpr attribute="Key" context="dpoints-hash-attribute-pre-inline" String="&keySQ;(?=\:(?:\s|$))"/>
         <RegExpr attribute="Key Points Operator" context="hash-attribute-pre-inline" String=":(?=\s|$)"/>
 
         <DetectChar attribute="Operator" context="#pop" char="}" endRegion="Hash" />
@@ -290,12 +290,12 @@
       </context>
 
       <context attribute="Error" lineEndContext="#pop#pop#pop" name="attribute-end">
-          <RegExpr attribute="Comment" context="comment" String="(^|\s+)#" />
+          <RegExpr attribute="Comment" context="comment" String="(?:^|\s+)#" />
           <DetectSpaces attribute="Normal Text" context="#stay"/>
       </context>
 
       <context attribute="Error" lineEndContext="#pop#pop#pop" name="attribute-end-inline">
-          <RegExpr attribute="Comment" context="comment" String="(^|\s+)#" />
+          <RegExpr attribute="Comment" context="comment" String="(?:^|\s+)#" />
           <DetectSpaces attribute="Normal Text" context="#stay"/>
           <AnyChar attribute="String" context="#pop#pop#pop"  lookAhead="true" String="}]"/>
           <DetectChar attribute="Operator" context="#pop#pop#pop" lookAhead="true" char="," />
@@ -314,7 +314,7 @@
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="escaped-char-doubleq">
-        <RegExpr attribute="Escaped Character" context="#stay" String="\\([\s0abtnvfre&quot;/\\N_Lp]|x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8})"/>
+        <RegExpr attribute="Escaped Character" context="#stay" String="\\(?:[\s0abtnvfre&quot;/\\N_Lp]|x[a-fA-F0-9]{2}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8})"/>
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="escaped-char-singleq">
@@ -322,6 +322,7 @@
       </context>
 
       <context attribute="Comment" lineEndContext="#pop" name="comment">
+        <DetectSpaces />
         <IncludeRules context="##Alerts" />
         <IncludeRules context="##Modelines" />
       </context>
@@ -347,10 +348,10 @@
       </context>
 
       <context attribute="Normal Text" lineEndContext="#stay" name="values-list">
-        <RegExpr attribute="Null" context="#stay" String="(\s|^)&null;(?=&endValueInline;|&endValue;)"/>
-        <RegExpr attribute="Boolean" context="#stay" String="(\s|^)&bool;(?=&endValueInline;|&endValue;)"/>
-        <RegExpr attribute="Float" context="#stay" String="(\s|^)&allFloat;(?=&endValueInline;|&endValue;)"/>
-        <RegExpr attribute="Integer" context="#stay" String="(\s|^)&allInt;(?=&endValueInline;|&endValue;)"/>
+        <RegExpr attribute="Null" context="#stay" String="(?:\s|^)&null;(?=&endValueInline;|&endValue;)"/>
+        <RegExpr attribute="Boolean" context="#stay" String="(?:\s|^)&bool;(?=&endValueInline;|&endValue;)"/>
+        <RegExpr attribute="Float" context="#stay" String="(?:\s|^)&allFloat;(?=&endValueInline;|&endValue;)"/>
+        <RegExpr attribute="Integer" context="#stay" String="(?:\s|^)&allInt;(?=&endValueInline;|&endValue;)"/>
       </context>
       <!-- If the value is found immediately at the beginning of the list item -->
       <context attribute="Normal Text" lineEndContext="#pop!list-element" name="find-values-list" fallthrough="true" fallthroughContext="#pop!list-element">
@@ -365,7 +366,7 @@
       <context attribute="Normal Text" lineEndContext="#stay" name="find-literal-block">
         <!-- Do not allow indentation with tabs: -->
         <RegExpr attribute="Alert" context="#stay" column="0"
-                 String="^&space;*\t+\s*(?=((&keyDQ;|&keySQ;|[^#])*[^#\w\|&lt;&gt;&quot;'])?&literalOp;&endValue;)" />
+                 String="^&space;*\t+\s*(?=(?:(?:&keyDQ;|&keySQ;|[^#])*[^#\w\|&lt;&gt;&quot;'])?&literalOp;&endValue;)" />
 
         <!-- CASE 1: The literal/folded operator is the first character of a line.
              The text after a space is considered literal.
@@ -421,7 +422,7 @@
              >             ^Start the literal text
         -->
         <RegExpr context="start-literal-block-withdash" lookAhead="true" column="0"
-                 String="^&space;*(\?&space;*|\-&space;+){1,6}((&keyDQ;|&keySQ;|[^#\-\?\s]|\-[^\s#])((&keyDQ;|&keySQ;|[^#])*[^#\w\|&lt;&gt;&quot;'])?)?&literalOp;&endValue;" />
+                 String="^&space;*(?:\?&space;*|\-&space;+){1,6}(?:(?:&keyDQ;|&keySQ;|[^#\-\?\s]|\-[^\s#])(?:(?:&keyDQ;|&keySQ;|[^#])*[^#\w\|&lt;&gt;&quot;'])?)?&literalOp;&endValue;" />
 
         <!-- CASE 5: Literal/folded operator after a data type or other content.
              Ex:
@@ -433,7 +434,7 @@
              >    ^Start the literal text
         -->
         <RegExpr context="start-literal-block-other" lookAhead="true" column="0"
-                 String="^&space;*(([&amp;\*]|!!)\S+\s+)+&literalOp;&endValue;" />
+                 String="^&space;*(?:(?:[&amp;\*]|!!)\S+\s+)+&literalOp;&endValue;" />
       </context>
 
       <!-- If the line with the literal operator starts with the "-" or "?" operator.
@@ -471,7 +472,7 @@
       <context attribute="Attribute" lineEndContext="#pop#pop" name="before-literal-operator" noIndentationBasedFolding="true">
         <RegExpr attribute="Literal/Folded Operator" context="#pop!end-literal-operator" String="&literalOp;(?=&endValue;)" beginRegion="Literal" />
 
-        <RegExpr attribute="Error" context="#pop#pop" String="([&amp;\*]|!!)\S*&literalOp;(?=&endValue;)" />
+        <RegExpr attribute="Error" context="#pop#pop" String="(?:[&amp;\*]|!!)\S*&literalOp;(?=&endValue;)" />
         <RegExpr attribute="Data Types" context="#stay" String="&dataTypes;" />
         <RegExpr attribute="Alias" context="#stay" String="&alias;" />
         <RegExpr attribute="Reference" context="#stay" String="&reference;" />
@@ -490,7 +491,7 @@
         <DetectChar attribute="Operator" context="#stay" char="?" />
       </context>
       <context attribute="Attribute" lineEndContext="#pop" name="end-literal-operator" noIndentationBasedFolding="true">
-        <RegExpr attribute="Comment" context="#pop!comment" String="(^|\s+)#" />
+        <RegExpr attribute="Comment" context="#pop!comment" String="(?:^|\s+)#" />
       </context>
 
       <!-- Common rules for the content of the literal blocks -->
@@ -515,7 +516,7 @@
         <RegExpr attribute="Literal/Folded Block" context="#stay" String="^%1.*$" dynamic="true" column="0" />
 
         <RegExpr attribute="Normal Text" context="#pop" String="^\s*\S" lookAhead="true" column="0" endRegion="Literal" />
-        <RegExpr attribute="Comment" context="comment" String="(^|\s)#" />
+        <RegExpr attribute="Comment" context="comment" String="(?:^|\s)#" />
         <RegExpr context="#pop" String="\S" lookAhead="true" endRegion="Literal" />
       </context>
       <!-- If the literal operator is the first character of a line (or after header) -->
@@ -523,7 +524,7 @@
         <RegExpr attribute="Literal/Folded Block" context="#stay" String="^\s.*$" column="0" />
 
         <RegExpr attribute="Normal Text" context="#pop" String="^\s*\S" lookAhead="true" column="0" endRegion="Literal" />
-        <RegExpr attribute="Comment" context="comment" String="(^|\s)#" />
+        <RegExpr attribute="Comment" context="comment" String="(?:^|\s)#" />
       </context>
       <!-- If there is a data type or other content before the liretal operator (use block indentation) -->
       <context attribute="Normal Text" lineEndContext="#stay" name="literal-block-after-data" dynamic="true" noIndentationBasedFolding="true">
@@ -633,3 +634,4 @@
     <keywords casesensitive="1"/>
   </general>
 </language>
+<!-- kate: replace-tabs on; tab-width 2; indent-width 2; -->
diff --git a/syntax/zsh.xml b/syntax/zsh.xml
--- a/syntax/zsh.xml
+++ b/syntax/zsh.xml
@@ -8,7 +8,7 @@
         <!ENTITY noword   "(?![\w$+-])">                <!-- no word, $, + or - following -->
         <!ENTITY pathpart "([\w_@.&#37;*?+-]|\\ )">     <!-- valid character in a file name -->
 ]>
-<language name="Zsh" version="3" kateversion="2.4" section="Scripts" extensions="*.sh;*.zsh;.zshrc;.zprofile;.zlogin;.zlogout;.profile" mimetype="application/x-shellscript" casesensitive="1" author="Jonathan Kolberg (bulldog98@kubuntu-de.org)" license="LGPL">
+<language name="Zsh" version="5" kateversion="2.4" section="Scripts" extensions="*.sh;*.zsh;.zshrc;.zprofile;.zlogin;.zlogout;.profile" mimetype="application/x-shellscript" casesensitive="1" author="Jonathan Kolberg (bulldog98@kubuntu-de.org)" license="LGPL">
 
 <!-- (c) 2011 by Jonathan Kolberg (bulldog98@kubuntu-de.org)
   modified for zsh -->
@@ -534,7 +534,9 @@
         <RegExpr attribute="Normal Text" context="Comment" String="[\s;](?=#)" />
       </context>
       <context attribute="Comment" lineEndContext="#pop" name="Comment">
+        <DetectSpaces />
         <IncludeRules context="##Alerts" />
+        <IncludeRules context="##Modelines" />
       </context>
 
       <!-- FindCommentsParen consumes shell comments till EOL or a closing parenthese -->
@@ -600,7 +602,8 @@
         <!-- handle here document -->
         <Detect2Chars attribute="Redirection" context="HereDoc" char="&lt;" char1="&lt;" lookAhead="true" />
         <!-- handle process subst -->
-        <RegExpr attribute="Redirection" context="ProcessSubst" String="[&lt;&gt;]\(" />
+        <Detect2Chars attribute="Redirection" context="ProcessSubst" char="&lt;" char1="(" />
+        <Detect2Chars attribute="Redirection" context="ProcessSubst" char="&gt;" char1="(" />
         <!-- handle redirection -->
         <RegExpr attribute="Redirection" context="#stay" String="([0-9]*(&gt;{1,2}|&lt;)(&amp;[0-9]+-?)?|&amp;&gt;|&gt;&amp;|[0-9]*&lt;&gt;)" />
         <!-- handle &, &&, | and || -->
@@ -957,3 +960,4 @@
     <keywords casesensitive="1" weakDeliminator="^%#[]$._{}:-/" additionalDeliminator="`"/>
   </general>
 </language>
+<!-- kate: replace-tabs on; indent-width 2; -->
diff --git a/test/Cheapskate_QCA.hs b/test/Cheapskate_QCA.hs
deleted file mode 100644
--- a/test/Cheapskate_QCA.hs
+++ /dev/null
@@ -1,47 +0,0 @@
-module Cheapskate_QCA where
-
-import           Cheapskate.Types
-import qualified Data.Sequence as Seq ()
-import           Network.Mattermost.QuickCheck (genText, genSeq)
-import           Test.Tasty.QuickCheck
-
-genBlocks :: Gen Blocks
-genBlocks = genSeq genBlock
-
-genBlock :: Gen Block
-genBlock = oneof [ Para <$> genInlines
-                 , Header <$> arbitrary <*> genInlines
-                 , Blockquote <$> genBlocks
-                 , List <$> arbitrary <*> genListType <*> listOf (genBlocks)
-                 , CodeBlock <$> genCodeAttr <*> genText
-                 , HtmlBlock <$> genText
-                 , return HRule
-                 ]
-
-genInlines :: Gen Inlines
-genInlines = genSeq genInline
-
-genInline :: Gen Inline
-genInline = oneof [ Str <$> genText
-                  , return Space
-                  , return SoftBreak
-                  , return LineBreak
-                  , Emph <$> genInlines
-                  , Strong <$> genInlines
-                  , Code <$> genText
-                  , Link <$> genInlines <*> genText <*> genText
-                  , Image <$> genInlines <*> genText <*> genText
-                  , Entity <$> genText
-                  , RawHtml <$> genText
-                  ]
-
-genListType :: Gen ListType
-genListType = oneof [ Bullet <$> arbitrary
-                      , Numbered <$> genNumWrapper <*> arbitrary
-                      ]
-
-genNumWrapper :: Gen NumWrapper
-genNumWrapper = elements [ PeriodFollowing, ParenFollowing ]
-
-genCodeAttr :: Gen CodeAttr
-genCodeAttr = CodeAttr <$> genText <*> genText
diff --git a/test/Message_QCA.hs b/test/Message_QCA.hs
--- a/test/Message_QCA.hs
+++ b/test/Message_QCA.hs
@@ -3,7 +3,7 @@
 
 module Message_QCA where
 
-import Cheapskate_QCA
+import RichText_QCA
 import Control.Monad (replicateM)
 import Data.Map hiding (foldr)
 import Data.Maybe (fromMaybe)
@@ -16,7 +16,6 @@
 
 import Matterhorn.Types.Messages
 import Matterhorn.Types.Posts
-import Matterhorn.Types.RichText
 
 genMap :: Ord key => Gen key -> Gen value -> Gen (Map key value)
 genMap gk gv = let kv = (,) <$> gk <*> gv in fromList <$> listOf kv
@@ -32,7 +31,7 @@
 
 genMessage :: Gen Message
 genMessage = Message
-             <$> (fromMarkdownBlocks Nothing <$> genBlocks)
+             <$> genBlocks
              <*> genText
              <*> genUserRef
              <*> genTime
@@ -60,7 +59,7 @@
 genMessage__DeletedPost :: Gen Message__DeletedPost
 genMessage__DeletedPost = Message__DeletedPost
                           <$> (Message
-                              <$> (fromMarkdownBlocks Nothing <$> genBlocks)
+                              <$> genBlocks
                               <*> genText
                               <*> genUserRef
                               <*> genTime
@@ -82,7 +81,7 @@
 genMessage__Posted :: Gen Message__Posted
 genMessage__Posted = Message__Posted
                      <$> (Message
-                         <$> (fromMarkdownBlocks Nothing <$> genBlocks)
+                         <$> genBlocks
                          <*> genText
                          <*> genUserRef
                          <*> genTime
diff --git a/test/RichText_QCA.hs b/test/RichText_QCA.hs
new file mode 100644
--- /dev/null
+++ b/test/RichText_QCA.hs
@@ -0,0 +1,70 @@
+module RichText_QCA
+  ( genBlocks
+  )
+where
+
+import qualified Data.Sequence as Seq
+import           Network.Mattermost.Types ( PostId(..), Id(..) )
+import           Network.Mattermost.QuickCheck (genText, genSeq)
+import           Test.Tasty.QuickCheck
+import           Matterhorn.Types.RichText
+
+genBlocks :: Gen Blocks
+genBlocks = Blocks <$> genSeq genBlock
+
+seqOf :: Gen a -> Gen (Seq.Seq a)
+seqOf g = fmap Seq.fromList (listOf g)
+
+genBlock :: Gen Block
+genBlock = oneof [ Para <$> genInlines
+                 , Header <$> arbitrary <*> genInlines
+                 , Blockquote <$> genBlocks
+                 , List <$> genListType <*> genListSpacing <*> seqOf genBlocks
+                 , CodeBlock <$> genCodeBlockInfo <*> genText
+                 , HTMLBlock <$> genText
+                 , return HRule
+                 ]
+
+genCodeBlockInfo :: Gen CodeBlockInfo
+genCodeBlockInfo = CodeBlockInfo <$> genMaybe genText <*> genMaybe genText
+
+genMaybe :: Gen a -> Gen (Maybe a)
+genMaybe g =
+    oneof [ Just <$> g
+          , return Nothing
+          ]
+
+genInlines :: Gen Inlines
+genInlines = Inlines <$> genSeq genInline
+
+genInline :: Gen Inline
+genInline = oneof [ EText <$> genText
+                  , return ESpace
+                  , return ESoftBreak
+                  , return ELineBreak
+                  , EEmph <$> genInlines
+                  , EStrong <$> genInlines
+                  , ECode <$> genInlines
+                  , EStrikethrough <$> genInlines
+                  , EHyperlink <$> (URL <$> genText) <*> genInlines
+                  , EPermalink <$> (TeamURLName <$> genText) <*> genPostId <*> (genMaybe genInlines)
+                  , EImage <$> (URL <$> genText) <*> genInlines
+                  , ERawHtml <$> genText
+                  ]
+
+genPostId :: Gen PostId
+genPostId = PI <$> Id <$> genText
+
+genListType :: Gen ListType
+genListType = oneof [ BulletList <$> arbitrary
+                    , OrderedList <$> arbitrary <*> genEnumTy <*> genDelimTy
+                    ]
+
+genListSpacing :: Gen ListSpacing
+genListSpacing = elements [ TightList, LooseList ]
+
+genEnumTy :: Gen EnumeratorType
+genEnumTy = elements [ Decimal, UpperAlpha, LowerAlpha, UpperRoman, LowerRoman ]
+
+genDelimTy :: Gen DelimiterType
+genDelimTy = elements [ Period, OneParen, TwoParens ]
diff --git a/test/test_messages.hs b/test/test_messages.hs
--- a/test/test_messages.hs
+++ b/test/test_messages.hs
@@ -70,7 +70,7 @@
           tick (ServerTime (UTCTime d t)) = ServerTime $ UTCTime d $ succ t
 
 makeMsg :: ServerTime -> Maybe MessageId -> Message
-makeMsg t mId = Message Seq.empty mempty NoUser t (CP NormalPost) False False Seq.empty NotAReply
+makeMsg t mId = Message mempty mempty NoUser t (CP NormalPost) False False Seq.empty NotAReply
                         mId Map.empty Nothing False False Nothing
 
 makeMsgs :: [Message] -> Messages
