diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,14 @@
 # Revision history for haskell-lsp
 
+## 0.5.0.0  -- 2018-xx-xx
+
+* Update Command.arguments to match specification
+* Update ClientCapabilities to v3.10
+* Add MarkupContent
+* Add new CompletionKinds
+* Add new SymbolKinds
+* Add preset version capabilities
+
 ## 0.4.0.0  -- 2018-07-10
 
 * CodeAction support as per v3.8 of the specification, by @Bubba
diff --git a/example/Main.hs b/example/Main.hs
--- a/example/Main.hs
+++ b/example/Main.hs
@@ -22,7 +22,6 @@
 import           Data.Monoid
 #endif
 import qualified Data.Text                             as T
-import qualified Data.Vector                           as V
 import qualified Language.Haskell.LSP.Control          as CTRL
 import qualified Language.Haskell.LSP.Core             as Core
 import           Language.Haskell.LSP.Diagnostics
@@ -260,7 +259,7 @@
               -- NOTE: the cmd needs to be registered via the InitializeResponse message. See lspOptions above
               cmd = "lsp-hello-command"
               -- need 'file' and 'start_pos'
-              args = J.Array$ V.fromList
+              args = J.List
                       [ J.Object $ H.fromList [("file",     J.Object $ H.fromList [("textDocument",J.toJSON doc)])]
                       , J.Object $ H.fromList [("start_pos",J.Object $ H.fromList [("position",    J.toJSON start)])]
                       ]
diff --git a/haskell-lsp.cabal b/haskell-lsp.cabal
--- a/haskell-lsp.cabal
+++ b/haskell-lsp.cabal
@@ -1,5 +1,5 @@
 name:                haskell-lsp
-version:             0.4.0.0
+version:             0.5.0.0
 synopsis:            Haskell library for the Microsoft Language Server Protocol
 
 description:         An implementation of the types, and basic message server to
@@ -44,7 +44,7 @@
                      , filepath
                      , hslogger
                      , hashable
-                     , haskell-lsp-types >= 0.4
+                     , haskell-lsp-types >= 0.5
                      , lens >= 4.15.2
                      , mtl
                      , network-uri
diff --git a/src/Language/Haskell/LSP/Types/Capabilities.hs b/src/Language/Haskell/LSP/Types/Capabilities.hs
--- a/src/Language/Haskell/LSP/Types/Capabilities.hs
+++ b/src/Language/Haskell/LSP/Types/Capabilities.hs
@@ -1,6 +1,201 @@
 module Language.Haskell.LSP.Types.Capabilities
   (
     module Language.Haskell.LSP.TH.ClientCapabilities
+  , fullCaps
+  , LSPVersion
+  , capsForVersion
   ) where
 
+import Prelude hiding (min)
 import Language.Haskell.LSP.TH.ClientCapabilities
+import Language.Haskell.LSP.TH.DataTypesJSON
+
+-- | The whole shebang. The real deal.
+-- Capabilities for full conformance to the current (v3.10) LSP specification.
+fullCaps :: ClientCapabilities
+fullCaps = capsForVersion (LSPVersion maxBound maxBound)
+
+-- | A specific version of the LSP specification.
+data LSPVersion = LSPVersion Int Int -- ^ Construct a major.minor version
+
+-- | Capabilities for full conformance to the LSP specification up until a version.
+-- Some important milestones:
+--
+-- * 3.9 completion item preselect
+-- * 3.8 codeAction literals
+-- * 3.7 related information in diagnostics
+-- * 3.6 workspace folders, colors, goto type/implementation
+-- * 3.4 extended completion item and symbol item kinds
+-- * 3.0 dynamic registration
+capsForVersion :: LSPVersion -> ClientCapabilities
+capsForVersion (LSPVersion maj min) = ClientCapabilities (Just w) (Just td) Nothing
+  where
+    w = WorkspaceClientCapabilities
+          (Just True)
+          (Just (WorkspaceEditClientCapabilities (Just True)))
+          (Just (DidChangeConfigurationClientCapabilities dynamicReg))
+          (Just (DidChangeWatchedFilesClientCapabilities dynamicReg))
+          (Just symbol)
+          (Just (ExecuteClientCapabilities dynamicReg))
+          (since 3 6 True)
+          (since 3 6 True)
+
+    symbol = SymbolClientCapabilities
+      dynamicReg
+      (since 3 4 symbolKind)
+
+    symbolKind = 
+      SymbolKindClientCapabilities (Just sKs)
+
+    sKs 
+      | maj >= 3 && min >= 4 = List (oldSKs ++ newSKs)
+      | otherwise            = List oldSKs
+    
+    oldSKs =   [ SkFile
+               , SkModule
+               , SkNamespace
+               , SkPackage
+               , SkClass
+               , SkMethod
+               , SkProperty
+               , SkField
+               , SkConstructor
+               , SkEnum
+               , SkInterface
+               , SkFunction
+               , SkVariable
+               , SkConstant
+               , SkString
+               , SkNumber
+               , SkBoolean
+               , SkArray
+               ]
+
+    newSKs = [ SkObject
+             , SkKey
+             , SkNull
+             , SkEnumMember
+             , SkStruct
+             , SkEvent
+             , SkOperator
+             , SkTypeParameter
+             ]
+
+    td = TextDocumentClientCapabilities
+          (Just sync)
+          (Just completion)
+          (Just hover)
+          (Just signatureHelp)
+          (Just (ReferencesClientCapabilities dynamicReg))
+          (Just (DocumentHighlightClientCapabilities dynamicReg))
+          (Just documentSymbol)
+          (Just (FormattingClientCapabilities (Just True)))
+          (Just (RangeFormattingClientCapabilities dynamicReg))
+          (Just (OnTypeFormattingClientCapabilities dynamicReg))
+          (Just (DefinitionClientCapabilities dynamicReg))
+          (since 3 6 (TypeDefinitionClientCapabilities dynamicReg))
+          (since 3 6 (ImplementationClientCapabilities dynamicReg))
+          (Just codeAction)
+          (Just (CodeLensClientCapabilities dynamicReg))
+          (Just (DocumentLinkClientCapabilities dynamicReg))
+          (since 3 6 (ColorProviderClientCapabilities dynamicReg))
+          (Just (RenameClientCapabilities dynamicReg))
+          (Just (PublishDiagnosticsClientCapabilities (since 3 7 True)))
+    sync =
+      SynchronizationTextDocumentClientCapabilities
+        dynamicReg
+        (Just True)
+        (Just True)
+        (Just True)
+     
+    completion =
+      CompletionClientCapabilities
+        dynamicReg
+        (Just completionItem)
+        (since 3 4 completionItemKind)
+        (since 3 3 True)
+
+    completionItem = CompletionItemClientCapabilities
+      (Just True)
+      (Just True)
+      (since 3 3 (List [MkPlainText, MkMarkdown]))
+      (Just True)
+      (since 3 9 True)
+
+    completionItemKind =
+      CompletionItemKindClientCapabilities (Just ciKs)
+
+    ciKs
+      | maj >= 3 && min >= 4 = List (oldCiKs ++ newCiKs)
+      | otherwise            = List oldCiKs
+
+    oldCiKs =   [ CiText
+                , CiMethod
+                , CiFunction
+                , CiConstructor
+                , CiField
+                , CiVariable
+                , CiClass
+                , CiInterface
+                , CiModule
+                , CiProperty
+                , CiUnit
+                , CiValue
+                , CiEnum
+                , CiKeyword
+                , CiSnippet
+                , CiColor
+                , CiFile
+                , CiReference
+                ]
+
+    newCiKs =   [ CiFolder
+                , CiEnumMember
+                , CiConstant
+                , CiStruct
+                , CiEvent
+                , CiOperator
+                , CiTypeParameter
+                ]
+    
+    hover =
+      HoverClientCapabilities
+        dynamicReg
+        (since 3 3 (List [MkPlainText, MkMarkdown]))
+
+    codeAction = CodeActionClientCapabilities
+                  dynamicReg
+                  (since 3 8 (CodeActionLiteralSupport caKs))
+    caKs = CodeActionKindClientCapabilities
+              (List [ CodeActionQuickFix
+                    , CodeActionRefactor
+                    , CodeActionRefactorExtract
+                    , CodeActionRefactorInline
+                    , CodeActionRefactorRewrite
+                    , CodeActionSource
+                    , CodeActionSourceOrganizeImports
+                    ])
+
+    signatureHelp =
+      SignatureHelpClientCapabilities
+        dynamicReg
+        (Just signatureInformation)
+    
+    signatureInformation =
+      SignatureInformationClientCapabilities
+        (Just (List [MkPlainText, MkMarkdown]))
+    
+    documentSymbol = DocumentSymbolClientCapabilities
+      dynamicReg
+      (since 3 4 documentSymbolKind)
+
+    documentSymbolKind =
+      DocumentSymbolKindClientCapabilities
+        (Just sKs) -- same as workspace symbol kinds
+
+    dynamicReg
+      | maj >= 3  = Just True
+      | otherwise = Nothing
+    since x y a
+      | maj >= x && min >= y = Just a
+      | otherwise            = Nothing
