diff --git a/.version b/.version
index b46516ea90..d90f6a6779 100644
--- a/.version
+++ b/.version
@@ -1 +1 @@
-4.32.0-SNAPSHOT
+4.31.1
diff --git a/CHANGELOG.latest.md b/CHANGELOG.latest.md
index 4c07bb6f2b..3f23deae63 100644
--- a/CHANGELOG.latest.md
+++ b/CHANGELOG.latest.md
@@ -1,13 +1,7 @@
### RevenueCatUI
-* Paywalls: Fix navigation with close button in UIKit (#3466) via Andy Boedo (@aboedo)
-* `Paywalls`: `watchOS` support (#3291) via NachoSoto (@NachoSoto)
-### Dependency Updates
-* Bump cocoapods from 1.14.2 to 1.14.3 (#3464) via dependabot[bot] (@dependabot[bot])
-* Bump fastlane from 2.216.0 to 2.217.0 (#3415) via dependabot[bot] (@dependabot[bot])
-* Bump danger from 9.3.2 to 9.4.0 (#3414) via dependabot[bot] (@dependabot[bot])
+* `Paywalls`: remove empty space when template 4 has no offer details (#3469) via NachoSoto (@NachoSoto)
### Other Changes
-* Some `APITester` fixes (#3444) via NachoSoto (@NachoSoto)
-* `HTTPClient`: test all request headers (#3425) via NachoSoto (@NachoSoto)
-* `CircleCI`: fix snapshot generation for iOS 14 (#3431) via NachoSoto (@NachoSoto)
-* Remove `MockStoreMessagesHelper` from SDK (#3417) via NachoSoto (@NachoSoto)
-* Enable explicit_init lint rule and fix issues (#3418) via Mark Villacampa (@MarkVillacampa)
+* `Concurrency`: address strict concurrency issues on `SystemInfo` (#3462) via NachoSoto (@NachoSoto)
+* `CircleCI`: upgrade to Xcode 15.1 (#3403) via NachoSoto (@NachoSoto)
+* `Paywalls`: tests for `PurchaseButton` layout logic (#3468) via NachoSoto (@NachoSoto)
+* `Paywalls`: simplified `PaywallViewMode` logic (#3470) via NachoSoto (@NachoSoto)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index cce038640f..ca9dbfaeac 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+## 4.31.1
+### RevenueCatUI
+* `Paywalls`: remove empty space when template 4 has no offer details (#3469) via NachoSoto (@NachoSoto)
+### Other Changes
+* `Concurrency`: address strict concurrency issues on `SystemInfo` (#3462) via NachoSoto (@NachoSoto)
+* `CircleCI`: upgrade to Xcode 15.1 (#3403) via NachoSoto (@NachoSoto)
+* `Paywalls`: tests for `PurchaseButton` layout logic (#3468) via NachoSoto (@NachoSoto)
+* `Paywalls`: simplified `PaywallViewMode` logic (#3470) via NachoSoto (@NachoSoto)
+
## 4.31.0
### RevenueCatUI
* Paywalls: Fix navigation with close button in UIKit (#3466) via Andy Boedo (@aboedo)
diff --git a/RevenueCat.podspec b/RevenueCat.podspec
index 2d23835c46..02d2b7247a 100644
--- a/RevenueCat.podspec
+++ b/RevenueCat.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "RevenueCat"
- s.version = "4.32.0-SNAPSHOT"
+ s.version = "4.31.1"
s.summary = "Subscription and in-app-purchase backend service."
s.description = <<-DESC
diff --git a/RevenueCatUI.podspec b/RevenueCatUI.podspec
index 7ccbaa0358..fad8f2c37f 100644
--- a/RevenueCatUI.podspec
+++ b/RevenueCatUI.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "RevenueCatUI"
- s.version = "4.32.0-SNAPSHOT"
+ s.version = "4.31.1"
s.summary = "UI library for RevenueCat paywalls."
s.description = <<-DESC
diff --git a/Sources/Info.plist b/Sources/Info.plist
index 3678f8d53f..21feab3dee 100644
--- a/Sources/Info.plist
+++ b/Sources/Info.plist
@@ -17,7 +17,7 @@