diff --git a/atlassian-connect-descriptor.cabal b/atlassian-connect-descriptor.cabal
--- a/atlassian-connect-descriptor.cabal
+++ b/atlassian-connect-descriptor.cabal
@@ -10,7 +10,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.3.0.1
+version:             0.4.0.0
 
 -- A short (one-line) description of the package.
 synopsis:            Code that helps you create a valid Atlassian Connect Descriptor.
diff --git a/src/Data/Connect/Descriptor.hs b/src/Data/Connect/Descriptor.hs
--- a/src/Data/Connect/Descriptor.hs
+++ b/src/Data/Connect/Descriptor.hs
@@ -43,7 +43,7 @@
 >
 > exampleJIRAModules :: JIRAModules
 > exampleJIRAModules = emptyJIRAModules
->     { jmWebPanels =
+>     { jmWebPanels = Just
 >         [ WebPanel
 >             { wpKey = "test-web-panel"
 >             , wpName = simpleText "Test Web Panel"
@@ -56,7 +56,7 @@
 >             , wpParams = noParams
 >             }
 >         ]
->     , jmGeneralPages =
+>     , jmGeneralPages = Just
 >         [ JIRAPage
 >             { jiraPageKey = "test-general-page"
 >             , jiraPageName = simpleText "Test General Page"
@@ -72,7 +72,7 @@
 >             , jiraPageParams = noParams
 >             }
 >         ]
->     , jmWebhooks =
+>     , jmWebhooks = Just
 >         [ Webhook
 >             { webhookEvent = JiraIssueDeleted
 >             , webhookUrl = "/webhook/handle-deletion"
diff --git a/src/Data/Connect/Modules.hs b/src/Data/Connect/Modules.hs
--- a/src/Data/Connect/Modules.hs
+++ b/src/Data/Connect/Modules.hs
@@ -100,23 +100,23 @@
 -- | A collection of all of the JIRA Modules that you can define. For more documentation on which Modules are supported
 -- the Atlassian Connect framework please see 'Modules'. You can also find more documentation on each of the modules.
 data JIRAModules = JIRAModules
-   { jmWebSections               :: [JIRAWebSection]
-   , jmWebItems                  :: [WebItem]
-   , jmWebPanels                 :: [WebPanel]
-   , jmGeneralPages              :: [JIRAPage]
-   , jmAdminPages                :: [JIRAPage]
+   { jmWebSections               :: Maybe [JIRAWebSection]
+   , jmWebItems                  :: Maybe [WebItem]
+   , jmWebPanels                 :: Maybe [WebPanel]
+   , jmGeneralPages              :: Maybe [JIRAPage]
+   , jmAdminPages                :: Maybe [JIRAPage]
    , jmConfigurePage             :: Maybe JIRAPage
-   , jmJiraSearchRequestViews    :: [JIRASearchRequestView]
-   , jmJiraProfileTabPanels      :: [JIRAGenericTabPanel]
-   , jmJiraVersionTabPanels      :: [JIRAGenericTabPanel]
-   , jmJiraProjectTabPanels      :: [JIRAGenericTabPanel]
-   , jmJiraProjectAdminTabPanels :: [JIRAProjectAdminTabPanel]
-   , jmJiraIssueTabPanels        :: [JIRAGenericTabPanel]
-   , jmJiraComponentTabPanels    :: [JIRAGenericTabPanel]
-   , jmJiraReports               :: [JIRAReport]
-   , jmWebhooks                  :: [Webhook]
-   , jmJiraWorkflowPostFunctions :: [JIRAWorkflowPostFunction]
-   , jmJiraEntityProperties      :: [JIRAEntityProperties]
+   , jmJiraSearchRequestViews    :: Maybe [JIRASearchRequestView]
+   , jmJiraProfileTabPanels      :: Maybe [JIRAGenericTabPanel]
+   , jmJiraVersionTabPanels      :: Maybe [JIRAGenericTabPanel]
+   , jmJiraProjectTabPanels      :: Maybe [JIRAGenericTabPanel]
+   , jmJiraProjectAdminTabPanels :: Maybe [JIRAProjectAdminTabPanel]
+   , jmJiraIssueTabPanels        :: Maybe [JIRAGenericTabPanel]
+   , jmJiraComponentTabPanels    :: Maybe [JIRAGenericTabPanel]
+   , jmJiraReports               :: Maybe [JIRAReport]
+   , jmWebhooks                  :: Maybe [Webhook]
+   , jmJiraWorkflowPostFunctions :: Maybe [JIRAWorkflowPostFunction]
+   , jmJiraEntityProperties      :: Maybe [JIRAEntityProperties]
    } deriving (Show, Generic)
 
 instance ToJSON JIRAModules where
@@ -127,7 +127,7 @@
 -- | A collection of all of the Confluence Modules that you can define. For more documentation on which Modules are supported
 -- the Atlassian Connect framework please see 'Modules'. You can also find more documentation on each of the modules.
 data ConfluenceModules = ConfluenceModules
-   { confluenceWebPanels :: [WebPanel]
+   { confluenceWebPanels :: Maybe [WebPanel]
    } deriving (Show, Generic)
 
 instance ToJSON ConfluenceModules where
@@ -137,11 +137,29 @@
 
 -- | Empty JIRA Modules; useful when you only want to define a few modules via Haskell record syntax.
 emptyJIRAModules :: JIRAModules
-emptyJIRAModules = JIRAModules [] [] [] [] [] Nothing [] [] [] [] [] [] [] [] [] [] []
+emptyJIRAModules
+   = JIRAModules
+      Nothing
+      Nothing
+      Nothing
+      Nothing
+      Nothing
+      Nothing
+      Nothing
+      Nothing
+      Nothing
+      Nothing
+      Nothing
+      Nothing
+      Nothing
+      Nothing
+      Nothing
+      Nothing
+      Nothing
 
 -- | Empty Confluence Modules; useful when you only want to define a few modules via Haskell record syntax.
 emptyConfluenceModules :: ConfluenceModules
-emptyConfluenceModules = ConfluenceModules []
+emptyConfluenceModules = ConfluenceModules Nothing
 
 -- | Represents the weight of an element in a menu.
 type Weight = Integer
diff --git a/tests/DescriptorTest.hs b/tests/DescriptorTest.hs
--- a/tests/DescriptorTest.hs
+++ b/tests/DescriptorTest.hs
@@ -39,7 +39,7 @@
 
 exampleJIRAModules :: JIRAModules
 exampleJIRAModules = emptyJIRAModules
-    { jmWebPanels =
+    { jmWebPanels = Just
         [ WebPanel
             { wpKey = "test-web-panel"
             , wpName = simpleText "Test Web Panel"
@@ -52,7 +52,7 @@
             , wpLayout = Just $ WebPanelLayout (Pixels 963) (Percentage 40)
             }
         ]
-    , jmGeneralPages =
+    , jmGeneralPages = Just
         [ JIRAPage
             { jiraPageKey = "test-general-page"
             , jiraPageName = simpleText "Test General Page"
@@ -68,7 +68,7 @@
             , jiraPageParams = HM.empty
             }
         ]
-    , jmWebhooks =
+    , jmWebhooks = Just
         [ Webhook
             { webhookEvent = JiraIssueDeleted
             , webhookUrl = "/webhook/handle-deletion"
diff --git a/tests/ModulesTest.hs b/tests/ModulesTest.hs
--- a/tests/ModulesTest.hs
+++ b/tests/ModulesTest.hs
@@ -16,7 +16,7 @@
 moduleTests = TestList
     [ testWebPanelCorrectFormat
     , testGeneralPageCorrectFormat
-    , testEmptyModulesAreShown
+    , testEmptyModulesAreNotShown
     ]
 
 testWebPanelCorrectFormat :: Test
@@ -65,9 +65,9 @@
     (getNumber =<< get "weight" jv) `isEqualTo` 10000
     (isArray <$> get "conditions" jv) @? "Expected the conditions to be present."
 
-testEmptyModulesAreShown :: Test
-testEmptyModulesAreShown = TestCase $ do
+testEmptyModulesAreNotShown :: Test
+testEmptyModulesAreNotShown = TestCase $ do
     let modules = Modules emptyJIRAModules emptyConfluenceModules
     let jv = toJSON modules
-    fieldIsPresent "webPanels" jv @? "Expected the field webPanels to be present"
-    fieldIsPresent "generalPages" jv @? "Expected the field webPanels to be present"
+    fieldIsNotPresent "webPanels" jv @? "Expected the field webPanels to be present"
+    fieldIsNotPresent "generalPages" jv @? "Expected the field webPanels to be present"
