diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,3 +5,8 @@
 - ZAF, NAM, USA, GBR, DEU
 - support for country regions
 - unit + property based tests
+
+## **0.2.0.0** - 2025-02-17
+- new Holiday data type
+- use "holidayKey" for a textual description
+- new countries supported: MOZ
diff --git a/holidays.cabal b/holidays.cabal
--- a/holidays.cabal
+++ b/holidays.cabal
@@ -1,7 +1,7 @@
 cabal-version: 3.8
 
 name: holidays
-version: 0.1.0.0
+version: 0.2.0.0
 synopsis: Library for country public holidays
 description:
   Library for country public holidays. Provides a small EDSL to describe holidays for a country.
@@ -37,6 +37,7 @@
     Holidays.DateFinder
     Holidays.DateTransform
     Holidays.Germany
+    Holidays.Mozambique
     Holidays.Namibia
     Holidays.SouthAfrica
     Holidays.UnitedKingdom
@@ -57,6 +58,7 @@
   other-modules:
     Test.Holidays
     Test.Holidays.Germany
+    Test.Holidays.Mozambique
     Test.Holidays.Namibia
     Test.Holidays.SouthAfrica
     Test.Holidays.UnitedKingdom
diff --git a/src/Holidays.hs b/src/Holidays.hs
--- a/src/Holidays.hs
+++ b/src/Holidays.hs
@@ -7,15 +7,17 @@
   ISO_3166_1_Alpha_3,
   Region,
   holidays,
+  hday,
+  Holiday (..),
 )
 where
 
 import Data.Set qualified as S
 import Data.Time
 import Holidays.Base
-import Holidays.DateFinder
 import Holidays.DateTransform
 import Holidays.Germany qualified as DEU
+import Holidays.Mozambique qualified as MOZ
 import Holidays.Namibia qualified as NAM
 import Holidays.SouthAfrica qualified as ZAF
 import Holidays.UnitedKingdom qualified as GBR
@@ -24,27 +26,28 @@
 {- |
 Returns a set of public holidays based on the country code (ISO_3166_1_Alpha_3) and a specific year.
 If a country is not supported an empty set is returned.
-Allowed to specify regions in a country to further determine holidays.
+Country regions are also supported.
 
 Examples:
 
 @
-holidays "DEU" ["BW","BY","BE"] 2025 -- Germany and various states
-holidays "USA" [] 2025
+holidays \"DEU\" [\"BW\",\"BY\",\"BE\"] 2025 -- Germany and various regions
+holidays \"USA\" [] 2025
 @
 -}
-holidays :: ISO_3166_1_Alpha_3 -> [Region] -> Year -> S.Set Day
+holidays :: ISO_3166_1_Alpha_3 -> [Region] -> Year -> S.Set Holiday
 holidays countryCode regions year =
   case countryCode of
     "DEU" -> DEU.holidays regions `apply` year
     "GBR" -> GBR.holidays `apply` year
+    "MOZ" -> MOZ.holidays `apply` year
     "NAM" -> NAM.holidays `apply` year
     "USA" -> USA.holidays `apply` year
     "ZAF" -> ZAF.holidays `apply` year
     _ -> S.empty
 
--- Applies year and transformations to holidays
-apply :: (DateFinders, DateTransforms) -> Year -> S.Set Day
-apply (finders, transforms) year =
-  let validDays = filter valid $ map (\d -> d year) finders -- apply year and filter out invalid days
+-- | Applies year and date transformations to holidays
+apply :: ([Year -> Holiday], [DateTransform]) -> Year -> S.Set Holiday
+apply (hs, transforms) year =
+  let validDays = filter (validDay . holidayValue) $ map (\d -> d year) hs -- apply year and filter out invalid days
   in  foldr (\d ds -> S.insert (foldr (\t d' -> t ds d') d transforms) ds) S.empty validDays -- apply transforms to valid days
diff --git a/src/Holidays/Base.hs b/src/Holidays/Base.hs
--- a/src/Holidays/Base.hs
+++ b/src/Holidays/Base.hs
@@ -1,17 +1,41 @@
 module Holidays.Base (
+  Holiday (..),
   ISO_3166_1_Alpha_3,
   Region,
   day,
+  hday,
+  nullDay,
+  validDay,
 ) where
 
 import Data.Text qualified as T
 import Data.Time
 
--- | 3-letter country codes
+-- | 3-letter country codes.
 type ISO_3166_1_Alpha_3 = T.Text
 
--- | Custom regions for a country
+-- | Custom regions for a country.
 type Region = T.Text
 
+data Holiday
+  = Holiday
+  { holidayKey :: T.Text,
+    holidayValue :: Day
+  }
+  deriving (Ord, Eq, Show)
+
+-- | Constructor for a Day. Equivalent to the fromGregorian function.
 day :: Year -> MonthOfYear -> DayOfMonth -> Day
 day = fromGregorian
+
+-- | Constructor for a Holiday.
+hday :: T.Text -> Day -> Holiday
+hday k d = Holiday {holidayKey = k, holidayValue = d}
+
+-- | Convention for filtering out invalid dates.
+nullDay :: Day
+nullDay = day 0 0 0
+
+-- | Day is valid if its not a nullDate
+validDay :: Day -> Bool
+validDay = not . (nullDay ==)
diff --git a/src/Holidays/DateFinder.hs b/src/Holidays/DateFinder.hs
--- a/src/Holidays/DateFinder.hs
+++ b/src/Holidays/DateFinder.hs
@@ -1,7 +1,7 @@
 module Holidays.DateFinder (
   after,
   before,
-  valid,
+  nextOpenDay,
   days,
   years,
   sun,
@@ -31,8 +31,6 @@
   newYearsDay,
   ascensionDay,
   workersDay,
-  nextOpenDay,
-  DateFinders,
 ) where
 
 import Data.Maybe
@@ -44,8 +42,6 @@
 
 data Direction = Past | Future
 
-type DateFinders = [Year -> Day]
-
 -- common dates
 newYearsDay :: Year -> Day
 newYearsDay = jan 1
@@ -71,18 +67,11 @@
 workersDay :: Year -> Day
 workersDay = may 1
 
--- utils
-nullDate :: Day
-nullDate = day 0 0 0
-
-valid :: Day -> Bool
-valid = not . (nullDate ==)
-
 days :: Integer -> (Integer -> Maybe DayOfWeek -> Day) -> Day
 days n f = f n Nothing
 
 years :: (Year -> Bool) -> Day -> Day
-years f d = if f (fromIntegral y) then d else nullDate
+years f d = if f (fromIntegral y) then d else nullDay
   where
     (y, _, _) = toGregorian d
 
@@ -125,14 +114,15 @@
 
 -- time travel
 
--- exclusive of before day
+-- | Time-travel to the past in number of days. Excludes the specified Day.
 before :: Day -> Integer -> Maybe DayOfWeek -> Day
 before = timeTravel Past
 
--- inclusive of after day
+-- | Time-travel to the past in number of days. Includes the specified Day.
 after :: Day -> Integer -> Maybe DayOfWeek -> Day
 after = timeTravel Future
 
+-- | Time-travels to the past or future by adding a number of days.
 timeTravel :: Direction -> Day -> Integer -> Maybe DayOfWeek -> Day
 timeTravel Past d n w
   | isNothing w = addDays (negate n) d
@@ -167,8 +157,11 @@
 sat :: Integer -> (Integer -> Maybe DayOfWeek -> Day) -> Day
 sat n f = f n (Just Saturday)
 
-nextOpenDay :: [DayOfWeek] -> S.Set Day -> Day -> Day
+-- | Get the next open day by skipping days which are already holidays or specified days of the week.
+nextOpenDay :: [DayOfWeek] -> S.Set Holiday -> Holiday -> Holiday
 nextOpenDay ds s d
-  | dayOfWeek d `elem` ds = nextOpenDay ds s (addDays 1 d)
-  | S.member d s = nextOpenDay ds s (addDays 1 d)
+  | dayOfWeek d' `elem` ds = nextOpenDay ds s (d {holidayValue = addDays 1 d'})
+  | S.member d s = nextOpenDay ds s (d {holidayValue = addDays 1 d'})
   | otherwise = d
+  where
+    d' = holidayValue d
diff --git a/src/Holidays/DateTransform.hs b/src/Holidays/DateTransform.hs
--- a/src/Holidays/DateTransform.hs
+++ b/src/Holidays/DateTransform.hs
@@ -1,19 +1,22 @@
 module Holidays.DateTransform (
   substituteRule,
   sundayRule,
-  DateTransforms
+  DateTransform,
 ) where
 
 import Data.Set qualified as S
 import Data.Time
+import Holidays.Base
 import Holidays.DateFinder
 
-
-type DateTransforms = [S.Set Day -> Day -> Day]
+type DateTransform = S.Set Holiday -> Holiday -> Holiday
 
--- general transformations
-sundayRule :: S.Set Day -> Day -> Day
-sundayRule _ d = if dayOfWeek d == Sunday then addDays 1 d else d -- mon after sunday
+-- | If day is on a sunday, it moves to monday
+sundayRule :: DateTransform
+sundayRule _ d = if dayOfWeek h == Sunday then d {holidayValue = addDays 1 h} else d -- mon after sunday
+  where
+    h = holidayValue d
 
-substituteRule :: S.Set Day -> Day -> Day
+-- | Looks for next open day (day which is not a holiday), also skipping saturday and sunday
+substituteRule :: DateTransform
 substituteRule = nextOpenDay [Saturday, Sunday]
diff --git a/src/Holidays/Germany.hs b/src/Holidays/Germany.hs
--- a/src/Holidays/Germany.hs
+++ b/src/Holidays/Germany.hs
@@ -9,11 +9,13 @@
   holidays,
 ) where
 
+import Data.Time
+
 import Holidays.Base
 import Holidays.DateFinder
 import Holidays.DateTransform
 
-holidays :: [Region] -> (DateFinders, DateTransforms)
+holidays :: [Region] -> ([Year -> Holiday], [DateTransform])
 holidays regions =
   ( concat
       [ federalHolidays,
@@ -22,20 +24,20 @@
     []
   )
 
-federalHolidays :: DateFinders
+federalHolidays :: [Year -> Holiday]
 federalHolidays =
-  [ newYearsDay,
-    goodFriday,
-    easterMonday,
-    workersDay, -- labour day
-    ascensionDay,
-    (50 `days`) . after . easterSunday, -- whit monday
-    oct 3, -- germany unity day
-    christmasDay,
-    boxingDay -- second day of christmas
+  [ hday "new_years_day" . newYearsDay,
+    hday "good_friday" . goodFriday,
+    hday "easter_monday" . easterMonday,
+    hday "labour_day" . workersDay,
+    hday "ascension_day" . ascensionDay,
+    hday "whit_monday" . (50 `days`) . after . easterSunday,
+    hday "germany_unity_day" . oct 3,
+    hday "christmas_day" . christmasDay,
+    hday "second_day_of_christmas" . boxingDay
   ]
 
-regionalHolidays :: [Region] -> DateFinders
+regionalHolidays :: [Region] -> [Year -> Holiday]
 regionalHolidays =
   concatMap
     ( \r -> case r of
@@ -58,96 +60,114 @@
         _ -> []
     )
 
-badenWurttembergHolidays :: DateFinders
+-- common holidays
+epiphany :: Year -> Holiday
+epiphany = hday "epiphany" . jan 6
+
+corpusChristi :: Year -> Holiday
+corpusChristi = hday "corpus_christi" . (60 `days`) . after . easterSunday
+
+allSaintsDay :: Year -> Holiday
+allSaintsDay = hday "all_saints_day" . nov 1
+
+assumptionDay :: Year -> Holiday
+assumptionDay = hday "assumption_day" . aug 15
+
+internationalWomensDay :: Year -> Holiday
+internationalWomensDay = hday "international_womens_day" . mar 8
+
+reformationDay :: Year -> Holiday
+reformationDay = hday "reformation_day" . oct 31
+
+badenWurttembergHolidays :: [Year -> Holiday]
 badenWurttembergHolidays =
-  [ jan 6, -- epiphany
-    (60 `days`) . after . easterSunday, -- corpus christi
-    nov 1 -- all saints day
+  [ epiphany,
+    corpusChristi,
+    allSaintsDay
   ]
 
-bavariaHolidays :: DateFinders
+bavariaHolidays :: [Year -> Holiday]
 bavariaHolidays =
-  [ jan 6, -- epiphany
-    (60 `days`) . after . easterSunday, -- corpus christi
-    aug 15, -- assumption day
-    nov 1 -- all saints day
+  [ epiphany,
+    corpusChristi,
+    assumptionDay,
+    allSaintsDay
   ]
 
-berlinHolidays :: DateFinders
+berlinHolidays :: [Year -> Holiday]
 berlinHolidays =
-  [ mar 8, -- international womens day
-    nov 1, -- all saints day
-    years (== 2025) . may 8 -- 80th anniversary of the end of world war 2
+  [ internationalWomensDay,
+    allSaintsDay,
+    hday "80th_anniversary_of_end_of_world_war_2" . years (== 2025) . may 8
   ]
 
-brandenburgHolidays :: DateFinders
+brandenburgHolidays :: [Year -> Holiday]
 brandenburgHolidays =
-  [ easterSunday,
-    (49 `days`) . after . easterSunday, -- whit sunday
-    oct 31 -- reformation day
+  [ hday "easter_sunday" . easterSunday,
+    hday "whit_sunday" . (49 `days`) . after . easterSunday,
+    reformationDay
   ]
 
-bremenHolidays :: DateFinders
+bremenHolidays :: [Year -> Holiday]
 bremenHolidays =
-  [ oct 31 -- reformation day
+  [ reformationDay
   ]
 
-hamburgHolidays :: DateFinders
+hamburgHolidays :: [Year -> Holiday]
 hamburgHolidays =
-  [ oct 31 -- reformation day
+  [ reformationDay
   ]
 
-hesseHolidays :: DateFinders
+hesseHolidays :: [Year -> Holiday]
 hesseHolidays =
-  [ (60 `days`) . after . easterSunday -- corpus christi
-  ]
+  [corpusChristi]
 
-mecklenburgVorpommernHolidays :: DateFinders
+mecklenburgVorpommernHolidays :: [Year -> Holiday]
 mecklenburgVorpommernHolidays =
-  [ mar 8, -- international womens day
-    oct 31 -- reformation day
+  [ internationalWomensDay,
+    reformationDay
   ]
 
-lowerSaxonyHolidays :: DateFinders
+lowerSaxonyHolidays :: [Year -> Holiday]
 lowerSaxonyHolidays =
-  [ oct 31 -- reformation day
+  [ reformationDay
   ]
 
-northRhineWestphaliaHolidays :: DateFinders
+northRhineWestphaliaHolidays :: [Year -> Holiday]
 northRhineWestphaliaHolidays =
-  [ (60 `days`) . after . easterSunday, -- corpus christi
-    nov 1 -- all saints day
+  [ corpusChristi,
+    allSaintsDay
   ]
 
-rhinelandPalatinateHolidays :: DateFinders
+rhinelandPalatinateHolidays :: [Year -> Holiday]
 rhinelandPalatinateHolidays =
-  [ (60 `days`) . after . easterSunday, -- corpus christi
-    nov 1 -- all saints day
+  [ corpusChristi,
+    allSaintsDay
   ]
 
-saarlandHolidays :: DateFinders
+saarlandHolidays :: [Year -> Holiday]
 saarlandHolidays =
-  [ (60 `days`) . after . easterSunday, -- corpus christi
-    aug 15, -- assumption day
-    nov 1 -- all saints day
+  [ corpusChristi,
+    assumptionDay,
+    allSaintsDay
   ]
 
-saxonyHolidays :: DateFinders
+saxonyHolidays :: [Year -> Holiday]
 saxonyHolidays =
-  [ (2 `wed`) . before . (4 `sun`) . before . christmasDay -- repentance and prayer day
+  [ hday "repentance_and_prayer_day" . (2 `wed`) . before . (4 `sun`) . before . christmasDay
   ]
 
-saxonyAnhaltHolidays :: DateFinders
+saxonyAnhaltHolidays :: [Year -> Holiday]
 saxonyAnhaltHolidays =
-  [ jan 6, -- epiphany
-    oct 31 -- reformation day
+  [ epiphany,
+    reformationDay
   ]
 
-schleswigHolsteinHolidays :: DateFinders
+schleswigHolsteinHolidays :: [Year -> Holiday]
 schleswigHolsteinHolidays =
   []
 
-thuringiaHolidays :: DateFinders
+thuringiaHolidays :: [Year -> Holiday]
 thuringiaHolidays =
-  [ sep 20 -- world childrens day
+  [ hday "worlds_children_day" . sep 20
   ]
diff --git a/src/Holidays/Mozambique.hs b/src/Holidays/Mozambique.hs
new file mode 100644
--- /dev/null
+++ b/src/Holidays/Mozambique.hs
@@ -0,0 +1,28 @@
+-- references:
+-- https://en.wikipedia.org/wiki/Public_holidays_in_Mozambique
+{-# LANGUAGE OverloadedStrings #-}
+
+module Holidays.Mozambique (
+  holidays,
+) where
+
+import Data.Time
+
+import Holidays.Base
+import Holidays.DateFinder
+import Holidays.DateTransform
+
+holidays :: ([Year -> Holiday], [DateTransform])
+holidays =
+  ( [ hday "new_years_day" . newYearsDay,
+      hday "heroes_day" . feb 3,
+      hday "womens_day" . apr 7,
+      hday "workers_day" . workersDay,
+      hday "independence_day" . jun 25,
+      hday "victory_day" . sep 7,
+      hday "armed_forces_day" . sep 25,
+      hday "day_of_peace_and_reconciliation" . oct 4,
+      hday "family_day" . christmasDay
+    ],
+    []
+  )
diff --git a/src/Holidays/Namibia.hs b/src/Holidays/Namibia.hs
--- a/src/Holidays/Namibia.hs
+++ b/src/Holidays/Namibia.hs
@@ -1,29 +1,32 @@
 -- references:
 -- https://en.wikipedia.org/wiki/Public_holidays_in_Namibia
+{-# LANGUAGE OverloadedStrings #-}
 
 module Holidays.Namibia (
   holidays,
 ) where
 
+import Data.Time
+
+import Holidays.Base
 import Holidays.DateFinder
-import Holidays.DateTransform
+import Holidays.DateTransform (DateTransform, sundayRule)
 
--- Namibia public holidays
-holidays :: (DateFinders, DateTransforms)
+holidays :: ([Year -> Holiday], [DateTransform])
 holidays =
-  ( [ newYearsDay,
-      mar 21, -- independence day
-      goodFriday,
-      easterSunday,
-      ascensionDay,
-      workersDay,
-      may 4, -- cassinga day
-      may 25, -- africa day
-      aug 26, -- heroes day
-      dec 10, -- human rights day
-      christmasDay,
-      boxingDay, -- family day
-      years (>= 2025) . may 28 -- genocide remembrance day
+  ( [ hday "new_years_day" . newYearsDay,
+      hday "independence_day" . mar 21,
+      hday "good_friday" . goodFriday,
+      hday "easter_sunday" . easterSunday,
+      hday "ascension_day" . ascensionDay,
+      hday "workers_day" . workersDay,
+      hday "cassinga_day" . may 4,
+      hday "africa_day" . may 25,
+      hday "heroes_day" . aug 26,
+      hday "human_rights_day" . dec 10,
+      hday "christmas_day" . christmasDay,
+      hday "family_day" . boxingDay,
+      hday "genocide_remembrance_day" . years (>= 2025) . may 28
     ],
     [sundayRule]
   )
diff --git a/src/Holidays/SouthAfrica.hs b/src/Holidays/SouthAfrica.hs
--- a/src/Holidays/SouthAfrica.hs
+++ b/src/Holidays/SouthAfrica.hs
@@ -1,28 +1,33 @@
 -- references:
 -- https://en.wikipedia.org/wiki/Public_holidays_in_South_Africa
+{-# LANGUAGE OverloadedStrings #-}
 
 module Holidays.SouthAfrica (
   holidays,
 ) where
 
+import Data.Time
+
+import Holidays.Base
 import Holidays.DateFinder
 import Holidays.DateTransform
 
-holidays :: (DateFinders, DateTransforms)
+holidays :: ([Year -> Holiday], [DateTransform])
 holidays =
-  ( [ newYearsDay,
-      goodFriday,
-      easterSunday, -- family day
-      mar 21, -- human right day
-      apr 27, -- freedom day
-      workersDay,
-      jun 16, -- youth day
-      aug 9, -- womens day
-      sep 24, -- heritage day
-      dec 16, -- day of reconciliation
-      christmasDay,
-      boxingDay, -- day of goodwill
-      years (== 2024) . may 29 -- general elections 2024
+  ( [ hday "new_years_day" . newYearsDay,
+      hday "good_friday" . goodFriday,
+      hday "family_day" . easterSunday,
+      hday "human_rights_day" . mar 21,
+      hday "freedom_day" . apr 27,
+      hday "workers_day" . workersDay,
+      hday "youth_day" . jun 16,
+      hday "womens_day" . aug 9,
+      hday "heritage_day" . sep 24,
+      hday "day_of_reconciliation" . dec 16,
+      hday "christmas_day" . christmasDay,
+      hday "day_of_goodwill" . boxingDay,
+      -- special days
+      hday "general_elections_2024" . years (== 2024) . may 29
     ],
     [sundayRule]
   )
diff --git a/src/Holidays/UnitedKingdom.hs b/src/Holidays/UnitedKingdom.hs
--- a/src/Holidays/UnitedKingdom.hs
+++ b/src/Holidays/UnitedKingdom.hs
@@ -1,23 +1,27 @@
 -- references:
 -- https://en.wikipedia.org/wiki/Public_holidays_in_the_United_Kingdom
+{-# LANGUAGE OverloadedStrings #-}
 
 module Holidays.UnitedKingdom (
   holidays,
 ) where
 
+import Data.Time
+
+import Holidays.Base
 import Holidays.DateFinder
 import Holidays.DateTransform
 
-holidays :: (DateFinders, DateTransforms)
+holidays :: ([Year -> Holiday], [DateTransform])
 holidays =
-  ( [ newYearsDay,
-      goodFriday,
-      easterSunday,
-      (1 `mon`) . after . may 1, -- early may bank holiday
-      (1 `mon`) . before . jun 1, -- spring bank holiday
-      (1 `mon`) . before . sep 1, -- summer bank holiday
-      christmasDay,
-      boxingDay
+  ( [ hday "new_years_day" . newYearsDay,
+      hday "good_friday" . goodFriday,
+      hday "easter_sunday" . easterSunday,
+      hday "early_may_bank_holiday" . (1 `mon`) . after . may 1,
+      hday "spring_bank_holiday" . (1 `mon`) . before . jun 1,
+      hday "summer_bank_holiday" . (1 `mon`) . before . sep 1,
+      hday "christmas_day" . christmasDay,
+      hday "boxing_day" . boxingDay
     ],
     [substituteRule]
   )
diff --git a/src/Holidays/UnitedStates.hs b/src/Holidays/UnitedStates.hs
--- a/src/Holidays/UnitedStates.hs
+++ b/src/Holidays/UnitedStates.hs
@@ -1,26 +1,30 @@
 -- references:
 -- https://en.wikipedia.org/wiki/Federal_holidays_in_the_United_States
+{-# LANGUAGE OverloadedStrings #-}
 
 module Holidays.UnitedStates (
   holidays,
 ) where
 
+import Data.Time
+
+import Holidays.Base
 import Holidays.DateFinder
 import Holidays.DateTransform
 
-holidays :: (DateFinders, DateTransforms)
+holidays :: ([Year -> Holiday], [DateTransform])
 holidays =
-  ( [ newYearsDay,
-      (3 `mon`) . after . jan 1, -- Martin Luther King's birthday
-      (3 `mon`) . after . feb 1, -- Georges Washington's birthday
-      (1 `mon`) . before . jun 1, -- memorial day, last monday of may
-      jun 19, -- juneteenth independence day
-      jul 4, -- independence day
-      (1 `mon`) . after . sep 1, -- labor day
-      (2 `mon`) . after . oct 1, -- columbus day
-      nov 11, -- veterans day,
-      (4 `thurs`) . after . nov 1, -- thanksgiving day
-      christmasDay
+  ( [ hday "new_years_day" . newYearsDay,
+      hday "martin_luther_kings_birthday" . (3 `mon`) . after . jan 1,
+      hday "george_washingtons_birthday" . (3 `mon`) . after . feb 1,
+      hday "memorial_day" . (1 `mon`) . before . jun 1,
+      hday "juneteenth_independence_day" . jun 19,
+      hday "independence_day" . jul 4,
+      hday "labor_day" . (1 `mon`) . after . sep 1,
+      hday "columbus_day" . (2 `mon`) . after . oct 1,
+      hday "veterans_day" . nov 11,
+      hday "thanksgiving_day" . (4 `thurs`) . after . nov 1,
+      hday "christmas_day" . christmasDay
     ],
     []
   )
diff --git a/tst/Main.hs b/tst/Main.hs
--- a/tst/Main.hs
+++ b/tst/Main.hs
@@ -1,6 +1,7 @@
 module Main where
 
 import Test.Holidays.Germany qualified as DEU
+import Test.Holidays.Mozambique qualified as MOZ
 import Test.Holidays.Namibia qualified as NAM
 import Test.Holidays.SouthAfrica qualified as ZAF
 import Test.Holidays.UnitedKingdom qualified as GBR
@@ -14,7 +15,7 @@
 tests = testGroup "Holidays tests" [unitTests, propTests]
 
 unitTests :: TestTree
-unitTests = testGroup "Unit tests" [DEU.unitTests, GBR.unitTests, NAM.unitTests, USA.unitTests, ZAF.unitTests]
+unitTests = testGroup "Unit tests" [DEU.unitTests, GBR.unitTests, MOZ.unitTests, NAM.unitTests, USA.unitTests, ZAF.unitTests]
 
 propTests :: TestTree
-propTests = testGroup "Holidays property based tests" [DEU.propTests, GBR.propTests, NAM.propTests, USA.propTests, ZAF.propTests]
+propTests = testGroup "Holidays property based tests" [DEU.propTests, GBR.propTests, MOZ.propTests, NAM.propTests, USA.propTests, ZAF.propTests]
diff --git a/tst/Test/Holidays.hs b/tst/Test/Holidays.hs
--- a/tst/Test/Holidays.hs
+++ b/tst/Test/Holidays.hs
@@ -18,7 +18,7 @@
         S.map
           ( \h ->
               let
-                (year', _, _) = toGregorian h
+                (year', _, _) = toGregorian (H.holidayValue h)
               in
                 year'
           )
diff --git a/tst/Test/Holidays/Germany.hs b/tst/Test/Holidays/Germany.hs
--- a/tst/Test/Holidays/Germany.hs
+++ b/tst/Test/Holidays/Germany.hs
@@ -5,6 +5,7 @@
   propTests,
 ) where
 
+import Data.List
 import Data.Set qualified as S
 import Holidays
 import Test.Holidays
@@ -12,35 +13,35 @@
 import Test.Tasty.HUnit
 
 -- german states
-regions :: [Region] 
-regions = ["BW","BY","BE","BB","HB","HH","HE","MV","NI","NW","RP","SL","SN","ST","SH","TH"]
+regions :: [Region]
+regions = ["BW", "BY", "BE", "BB", "HB", "HH", "HE", "MV", "NI", "NW", "RP", "SL", "SN", "ST", "SH", "TH"]
 
 unitTests :: TestTree
 unitTests =
   testGroup
     "DEU unit tests"
     [ testCase "2025" $
-        S.toAscList (holidays "DEU" regions 2025)
-          @?= [ day 2025 1 1,
-                day 2025 1 6,
-                day 2025 3 8,
-                day 2025 4 18,
-                day 2025 4 20,
-                day 2025 4 21,
-                day 2025 5 1,
-                day 2025 5 8,
-                day 2025 5 29,
-                day 2025 6 8,
-                day 2025 6 9,
-                day 2025 6 19,
-                day 2025 8 15,
-                day 2025 9 20,
-                day 2025 10 3,
-                day 2025 10 31,
-                day 2025 11 1,
-                day 2025 11 19,
-                day 2025 12 25,
-                day 2025 12 26
+        sortOn holidayValue (S.toAscList (holidays "DEU" regions 2025))
+          @?= [ hday "new_years_day" (day 2025 1 1),
+                hday "epiphany" (day 2025 1 6),
+                hday "international_womens_day" (day 2025 3 8),
+                hday "good_friday" (day 2025 4 18),
+                hday "easter_sunday" (day 2025 4 20),
+                hday "easter_monday" (day 2025 4 21),
+                hday "labour_day" (day 2025 5 1),
+                hday "80th_anniversary_of_end_of_world_war_2" (day 2025 5 8),
+                hday "ascension_day" (day 2025 5 29),
+                hday "whit_sunday" (day 2025 6 8),
+                hday "whit_monday" (day 2025 6 9),
+                hday "corpus_christi" (day 2025 6 19),
+                hday "assumption_day" (day 2025 8 15),
+                hday "worlds_children_day" (day 2025 9 20),
+                hday "germany_unity_day" (day 2025 10 3),
+                hday "reformation_day" (day 2025 10 31),
+                hday "all_saints_day" (day 2025 11 1),
+                hday "repentance_and_prayer_day" (day 2025 11 19),
+                hday "christmas_day" (day 2025 12 25),
+                hday "second_day_of_christmas" (day 2025 12 26)
               ]
     ]
 
diff --git a/tst/Test/Holidays/Mozambique.hs b/tst/Test/Holidays/Mozambique.hs
new file mode 100644
--- /dev/null
+++ b/tst/Test/Holidays/Mozambique.hs
@@ -0,0 +1,45 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Test.Holidays.Mozambique (
+  unitTests,
+  propTests,
+) where
+
+import Data.List
+import Data.Set qualified as S
+import Holidays
+import Test.Holidays
+import Test.Tasty
+import Test.Tasty.HUnit
+
+unitTests :: TestTree
+unitTests =
+  testGroup
+    "MOZ unit tests"
+    [ testCase "2025" $
+        sortOn holidayValue (S.toList (holidays "MOZ" [] 2025))
+          @?= [ hday "new_years_day" (day 2025 1 1),
+                hday "heroes_day" (day 2025 2 3),
+                hday "womens_day" (day 2025 4 7),
+                hday "workers_day" (day 2025 5 1),
+                hday "independence_day" (day 2025 6 25),
+                hday "victory_day" (day 2025 9 7),
+                hday "armed_forces_day" (day 2025 9 25),
+                hday "day_of_peace_and_reconciliation" (day 2025 10 4),
+                hday "family_day" (day 2025 12 25)
+              ]
+    ]
+
+propTests :: TestTree
+propTests = countryPropTests "MOZ" []
+
+{-
+ ( [ hday "new_years_day" . newYearsDay,
+      hday "heroes_day" . feb 3,
+      hday "womens_day" . apr 7,
+      hday "workers_day" . workersDay,
+      hday "independence_day" . jun 25,
+      hday "victory_day" . sep 7,
+      hday "armed_forces_day" . sep 25,
+      hday "day_of_peace_and_reconciliation" . oct 4,
+      hday "family_day" . christmasDay -}
diff --git a/tst/Test/Holidays/Namibia.hs b/tst/Test/Holidays/Namibia.hs
--- a/tst/Test/Holidays/Namibia.hs
+++ b/tst/Test/Holidays/Namibia.hs
@@ -5,6 +5,7 @@
   propTests,
 ) where
 
+import Data.List
 import Data.Set qualified as S
 import Holidays
 import Test.Holidays
@@ -16,35 +17,35 @@
   testGroup
     "NAM unit tests"
     [ testCase "2024" $
-        S.toAscList (holidays "NAM" [] 2024)
-          @?= [ day 2024 1 1,
-                day 2024 3 21,
-                day 2024 3 29,
-                day 2024 4 1,
-                day 2024 5 1,
-                day 2024 5 4,
-                day 2024 5 9,
-                day 2024 5 25,
-                day 2024 8 26,
-                day 2024 12 10,
-                day 2024 12 25,
-                day 2024 12 26
+        sortOn holidayValue (S.toAscList (holidays "NAM" [] 2024))
+          @?= [ hday "new_years_day" (day 2024 1 1),
+                hday "independence_day" (day 2024 3 21),
+                hday "good_friday" (day 2024 3 29),
+                hday "easter_sunday" (day 2024 4 1),
+                hday "workers_day" (day 2024 5 1),
+                hday "cassinga_day" (day 2024 5 4),
+                hday "ascension_day" (day 2024 5 9),
+                hday "africa_day" (day 2024 5 25),
+                hday "heroes_day" (day 2024 8 26),
+                hday "human_rights_day" (day 2024 12 10),
+                hday "christmas_day" (day 2024 12 25),
+                hday "family_day" (day 2024 12 26)
               ],
       testCase "2025" $
-        S.toAscList (holidays "NAM" [] 2025)
-          @?= [ day 2025 1 1,
-                day 2025 3 21,
-                day 2025 4 18,
-                day 2025 4 21,
-                day 2025 5 1,
-                day 2025 5 5,
-                day 2025 5 26,
-                day 2025 5 28,
-                day 2025 5 29,
-                day 2025 8 26,
-                day 2025 12 10,
-                day 2025 12 25,
-                day 2025 12 26
+        sortOn holidayValue (S.toAscList (holidays "NAM" [] 2025))
+          @?= [ hday "new_years_day" (day 2025 1 1),
+                hday "independence_day" (day 2025 3 21),
+                hday "good_friday" (day 2025 4 18),
+                hday "easter_sunday" (day 2025 4 21),
+                hday "workers_day" (day 2025 5 1),
+                hday "cassinga_day" (day 2025 5 5),
+                hday "africa_day" (day 2025 5 26),
+                hday "genocide_remembrance_day" (day 2025 5 28),
+                hday "ascension_day" (day 2025 5 29),
+                hday "heroes_day" (day 2025 8 26),
+                hday "human_rights_day" (day 2025 12 10),
+                hday "christmas_day" (day 2025 12 25),
+                hday "family_day" (day 2025 12 26)
               ]
     ]
 
diff --git a/tst/Test/Holidays/SouthAfrica.hs b/tst/Test/Holidays/SouthAfrica.hs
--- a/tst/Test/Holidays/SouthAfrica.hs
+++ b/tst/Test/Holidays/SouthAfrica.hs
@@ -5,6 +5,7 @@
   propTests,
 ) where
 
+import Data.List
 import Data.Set qualified as S
 import Holidays
 import Test.Holidays
@@ -16,35 +17,35 @@
   testGroup
     "ZAF unit tests"
     [ testCase "2024" $
-        S.toAscList (holidays "ZAF" [] 2024)
-          @?= [ day 2024 1 1,
-                day 2024 3 21,
-                day 2024 3 29,
-                day 2024 4 1,
-                day 2024 4 27,
-                day 2024 5 1,
-                day 2024 5 29,
-                day 2024 6 17,
-                day 2024 8 9,
-                day 2024 9 24,
-                day 2024 12 16,
-                day 2024 12 25,
-                day 2024 12 26
+        sortOn holidayValue (S.toAscList (holidays "ZAF" [] 2024))
+          @?= [ hday "new_years_day" (day 2024 1 1),
+                hday "human_rights_day" (day 2024 3 21),
+                hday "good_friday" (day 2024 3 29),
+                hday "family_day" (day 2024 4 1),
+                hday "freedom_day" (day 2024 4 27),
+                hday "workers_day" (day 2024 5 1),
+                hday "general_elections_2024" (day 2024 5 29),
+                hday "youth_day" (day 2024 6 17),
+                hday "womens_day" (day 2024 8 9),
+                hday "heritage_day" (day 2024 9 24),
+                hday "day_of_reconciliation" (day 2024 12 16),
+                hday "christmas_day" (day 2024 12 25),
+                hday "day_of_goodwill" (day 2024 12 26)
               ],
       testCase "2025" $
-        S.toAscList (holidays "ZAF" [] 2025)
-          @?= [ day 2025 1 1,
-                day 2025 3 21,
-                day 2025 4 18,
-                day 2025 4 21,
-                day 2025 4 28,
-                day 2025 5 1,
-                day 2025 6 16,
-                day 2025 8 9,
-                day 2025 9 24,
-                day 2025 12 16,
-                day 2025 12 25,
-                day 2025 12 26
+        sortOn holidayValue (S.toList (holidays "ZAF" [] 2025))
+          @?= [ hday "new_years_day" (day 2025 1 1),
+                hday "human_rights_day" (day 2025 3 21),
+                hday "good_friday" (day 2025 4 18),
+                hday "family_day" (day 2025 4 21),
+                hday "freedom_day" (day 2025 4 28),
+                hday "workers_day" (day 2025 5 1),
+                hday "youth_day" (day 2025 6 16),
+                hday "womens_day" (day 2025 8 9),
+                hday "heritage_day" (day 2025 9 24),
+                hday "day_of_reconciliation" (day 2025 12 16),
+                hday "christmas_day" (day 2025 12 25),
+                hday "day_of_goodwill" (day 2025 12 26)
               ]
     ]
 
diff --git a/tst/Test/Holidays/UnitedKingdom.hs b/tst/Test/Holidays/UnitedKingdom.hs
--- a/tst/Test/Holidays/UnitedKingdom.hs
+++ b/tst/Test/Holidays/UnitedKingdom.hs
@@ -5,6 +5,7 @@
   propTests,
 ) where
 
+import Data.List
 import Data.Set qualified as S
 import Holidays
 import Test.Holidays
@@ -16,26 +17,26 @@
   testGroup
     "GBR unit tests"
     [ testCase "2025" $
-        S.toAscList (holidays "GBR" [] 2025)
-          @?= [ day 2025 1 1,
-                day 2025 4 18,
-                day 2025 4 21,
-                day 2025 5 5,
-                day 2025 5 26,
-                day 2025 8 25,
-                day 2025 12 25,
-                day 2025 12 26
+        sortOn holidayValue (S.toList (holidays "GBR" [] 2025))
+          @?= [ hday "new_years_day" (day 2025 1 1),
+                hday "good_friday" (day 2025 4 18),
+                hday "easter_sunday" (day 2025 4 21),
+                hday "early_may_bank_holiday" (day 2025 5 5),
+                hday "spring_bank_holiday" (day 2025 5 26),
+                hday "summer_bank_holiday" (day 2025 8 25),
+                hday "christmas_day" (day 2025 12 25),
+                hday "boxing_day" (day 2025 12 26)
               ],
       testCase "2026" $
-        S.toAscList (holidays "GBR" [] 2026)
-          @?= [ day 2026 1 1,
-                day 2026 4 3,
-                day 2026 4 6,
-                day 2026 5 4,
-                day 2026 5 25,
-                day 2026 8 31,
-                day 2026 12 25,
-                day 2026 12 28
+        sortOn holidayValue (S.toList (holidays "GBR" [] 2026))
+          @?= [ hday "new_years_day" (day 2026 1 1),
+                hday "good_friday" (day 2026 4 3),
+                hday "easter_sunday" (day 2026 4 6),
+                hday "early_may_bank_holiday" (day 2026 5 4),
+                hday "spring_bank_holiday" (day 2026 5 25),
+                hday "summer_bank_holiday" (day 2026 8 31),
+                hday "christmas_day" (day 2026 12 25),
+                hday "boxing_day" (day 2026 12 28)
               ]
     ]
 
diff --git a/tst/Test/Holidays/UnitedStates.hs b/tst/Test/Holidays/UnitedStates.hs
--- a/tst/Test/Holidays/UnitedStates.hs
+++ b/tst/Test/Holidays/UnitedStates.hs
@@ -5,6 +5,7 @@
   propTests,
 ) where
 
+import Data.List
 import Data.Set qualified as S
 import Holidays
 import Test.Holidays
@@ -16,18 +17,18 @@
   testGroup
     "USA unit tests"
     [ testCase "2025" $
-        S.toAscList (holidays "USA" [] 2025)
-          @?= [ day 2025 1 1,
-                day 2025 1 20,
-                day 2025 2 17,
-                day 2025 5 26,
-                day 2025 6 19,
-                day 2025 7 4,
-                day 2025 9 1,
-                day 2025 10 13,
-                day 2025 11 11,
-                day 2025 11 27,
-                day 2025 12 25
+        sortOn holidayValue (S.toAscList (holidays "USA" [] 2025))
+          @?= [ hday "new_years_day" (day 2025 1 1),
+                hday "martin_luther_kings_birthday" (day 2025 1 20),
+                hday "george_washingtons_birthday" (day 2025 2 17),
+                hday "memorial_day" (day 2025 5 26),
+                hday "juneteenth_independence_day" (day 2025 6 19),
+                hday "independence_day" (day 2025 7 4),
+                hday "labor_day" (day 2025 9 1),
+                hday "columbus_day" (day 2025 10 13),
+                hday "veterans_day" (day 2025 11 11),
+                hday "thanksgiving_day" (day 2025 11 27),
+                hday "christmas_day" (day 2025 12 25)
               ]
     ]
 
