diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
 
 `fedora-releases` uses [PVP Versioning](https://pvp.haskell.org).
 
+## 0.2.1 (2025-02-07)
+- Release: add getRawhideVersion and getCurrentFedoraVersion
+- eitherBranch: fix misparse (read error) of "epel/" as branch
+
 ## 0.2.0 (2024-12-04)
 - newerBranch now returns Maybe Branch
 - custom Ord Branch instance to correct the order of EPELNext
diff --git a/fedora-releases.cabal b/fedora-releases.cabal
--- a/fedora-releases.cabal
+++ b/fedora-releases.cabal
@@ -1,27 +1,28 @@
 cabal-version:       1.18
 name:                fedora-releases
-version:             0.2.0
+version:             0.2.1
 synopsis:            Library for Fedora release versions
 description:
             This library provides the Branch and Release data types
             and various associated metadata functions for
             Fedora releases (Fedora and EPEL) needed for
             packaging development and building.
-            It uses current release data from Fedora Bodhi.
+            It caches current release data from Fedora Bodhi.
 homepage:            https://github.com/juhp/fedora-releases
 bug-reports:         https://github.com/juhp/fedora-releases/issues
 license:             GPL-3
 license-file:        LICENSE
 author:              Jens Petersen <petersen@fedoraproject.org>
 maintainer:          Jens Petersen <petersen@fedoraproject.org>
-copyright:           2018-2022,2024 Jens Petersen
+copyright:           2018-2022,2024-2025 Jens Petersen
 category:            Distribution
 build-type:          Simple
 extra-doc-files:     README.md
                      CHANGELOG.md
 tested-with:         GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4,
                      GHC == 8.6.5, GHC == 8.8.4, GHC == 8.10.7, GHC == 9.0.2,
-                     GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.6, GHC == 9.8.2
+                     GHC == 9.2.8, GHC == 9.4.8, GHC == 9.6.6, GHC == 9.8.4,
+                     GHC == 9.10.1
 
 source-repository head
   type:                git
diff --git a/src/Distribution/Fedora/Branch.hs b/src/Distribution/Fedora/Branch.hs
--- a/src/Distribution/Fedora/Branch.hs
+++ b/src/Distribution/Fedora/Branch.hs
@@ -27,11 +27,11 @@
 
 import Data.Char (isDigit)
 import Data.Either (partitionEithers)
-import Data.List.Extra (delete, elemIndex, replace, sortBy)
+import Data.List.Extra (delete, elemIndex, replace, sortBy, spanEnd)
 import Data.Maybe (mapMaybe)
 import Data.Ord (comparing, Down(Down))
 import Data.Tuple (swap)
-import Safe (headDef)
+import Safe (headDef, readMay)
 
 import Distribution.Fedora.Release
 
@@ -56,14 +56,23 @@
 
 -- | Read a Fedora Branch name, otherwise return branch string
 eitherBranch :: String -> Either String Branch
-eitherBranch "rawhide" = Right Rawhide
-eitherBranch ('f':ns) | all isDigit ns = let br = Fedora (read ns) in Right br
--- FIXME add proper parsing:
-eitherBranch "epel8-next" = Right $ EPELNext 8
-eitherBranch "epel9-next" = Right $ EPELNext 9
-eitherBranch ('e':'p':'e':'l':n) | all isDigit n = let br = EPEL (read n) in Right br
-eitherBranch ('e':'l':n) | all isDigit n = let br = EPEL (read n) in Right br
-eitherBranch cs = Left cs
+eitherBranch str =
+  case str of
+    "" -> Left str -- error or NonEmpty?
+    "rawhide" -> Right Rawhide
+    "epel8-next" -> Right $ EPELNext 8
+    "epel9-next" -> Right $ EPELNext 9
+    _ ->
+      case spanEnd isDigit str of
+        (pre,ns) ->
+          case readMay ns of
+            Nothing -> Left str
+            Just num ->
+              case pre of
+                   "f" -> Right $ Fedora num
+                   "epel" -> Right $ EPEL num
+                   "el" -> Right $ EPEL num
+                   _ -> Left str
 
 -- -- | Read a Fedora Branch name, otherwise return an error message
 -- eitherBranch' :: String -> Either String Branch
diff --git a/src/Distribution/Fedora/Release.hs b/src/Distribution/Fedora/Release.hs
--- a/src/Distribution/Fedora/Release.hs
+++ b/src/Distribution/Fedora/Release.hs
@@ -12,11 +12,13 @@
 -}
 
 module Distribution.Fedora.Release
-  ( Release(..),
-    getActiveReleases,
-    getFedoraReleases,
-    getEPELReleases,
-    getBranchRelease
+  ( Release(..)
+  , getActiveReleases
+  , getFedoraReleases
+  , getEPELReleases
+  , getBranchRelease
+  , getRawhideVersion
+  , getCurrentFedoraVersion
   )
 where
 
@@ -24,8 +26,12 @@
 import Data.Aeson(Object)
 import Data.Maybe (mapMaybe)
 import Distribution.Fedora.BodhiReleases
+import Numeric.Natural (Natural)
+import Safe (headMay)
 
 -- | Fedora Release data
+--
+-- See <https://bodhi.fedoraproject.org/releases/>
 data Release = Release {
     releaseName :: String,
     releaseVersion :: String,
@@ -63,7 +69,7 @@
   compare r1 r2 =
     compare (releaseName r1) (releaseName r2)
 
--- FIXME remove containers and flatpaks
+-- containers and flatpaks are filtered out by readRelease
 -- | Get list of all current Fedora Project releases (from Bodhi)
 getActiveReleases :: IO [Release]
 getActiveReleases =
@@ -96,3 +102,16 @@
     [] -> error $ "release not found for branch " ++ br
     [rel] -> return rel
     _ -> error $ "multiple releases for " ++ br ++ ":\n" ++ unwords (map releaseName rels)
+
+-- | Get the Fedora release version of Rawhide
+getRawhideVersion :: IO Natural
+getRawhideVersion =
+  read . releaseVersion <$> getBranchRelease "rawhide"
+
+-- | Get the latest current stable Fedora release version
+getCurrentFedoraVersion :: IO Natural
+getCurrentFedoraVersion = do
+  rels <- filter ((== "current") . releaseState) <$> getFedoraReleases
+  case headMay rels of
+    Just rel -> return $ read $ releaseVersion rel
+    Nothing -> error "current fedora release not found"
