2.9.0
diff --git a/NEWS b/NEWS
index 79839ed..2d3e6a6 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,23 @@
+Overview of changes leading to 2.9.0
+Wednesday, August 18, 2021
+History Repeats Itself (Afghanistan)
+====================================
+- Subsetter API is being stabilized, with the first stable API to happen in
+  3.0.0 release (https://github.com/harfbuzz/harfbuzz/issues/3078).
+- Support multiple variation axes with same tag, aka HOI.
+- The “coretext” testing shaper now passes font variations to CoreText.
+- hb-shape/hb-view does not break line at new lines unless text is read from
+  file.
+- hb-view and hb-subset has a --batch now, similar to hb-shape.
+- The --batch mode now uses ; as argument separator instead of : used previously.
+- The --batch in hb-shape does not expect 0th argument anymore. That is, the
+  lines read are interpreted as argv[1:], instead of argv[0:].
+- The --batch option has been undocumented. We are ready to document it; send
+  feedback if you find it useful.
+- hb-subset got arguments revamps. Added much-requested --gids-file, --glyphs,
+  --glyphs-file, --unicodes-file, supporting ranges in --unicodes.
+- Various bug fixes.
+
 Overview of changes leading to 2.8.2
 Tuesday, July 8, 2021
 ====================================
diff --git a/configure.ac b/configure.ac
index f686408..90dfc71 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
 AC_PREREQ([2.64])
 AC_INIT([HarfBuzz],
-        [2.8.2],
+        [2.9.0],
         [https://github.com/harfbuzz/harfbuzz/issues/new],
         [harfbuzz],
         [http://harfbuzz.org/])
diff --git a/meson.build b/meson.build
index c74ec5b..474d1bd 100644
--- a/meson.build
+++ b/meson.build
@@ -1,6 +1,6 @@
 project('harfbuzz', 'c', 'cpp',
   meson_version: '>= 0.47.0',
-  version: '2.8.2',
+  version: '2.9.0',
   default_options: [
     'cpp_eh=none',          # Just to support msvc, we are passing -fno-rtti also anyway
     'cpp_rtti=false',       # Just to support msvc, we are passing -fno-exceptions also anyway
diff --git a/src/hb-subset-input.cc b/src/hb-subset-input.cc
index 2c483e9..e2e325f 100644
--- a/src/hb-subset-input.cc
+++ b/src/hb-subset-input.cc
@@ -275,7 +275,7 @@
  *
  * Return value: (transfer none): pointer to the #hb_set_t of name IDs.
  *
- * Since: REPLACE
+ * Since: 2.9.0
  **/
 HB_EXTERN hb_set_t *
 hb_subset_input_nameid_set (hb_subset_input_t *input)
@@ -292,7 +292,7 @@
  *
  * Return value: (transfer none): pointer to the #hb_set_t of language IDs.
  *
- * Since: REPLACE
+ * Since: 2.9.0
  **/
 HB_EXTERN hb_set_t *
 hb_subset_input_namelangid_set (hb_subset_input_t *input)
@@ -310,7 +310,7 @@
  *
  * Return value: (transfer none): pointer to the #hb_set_t of feature tags.
  *
- * Since: REPLACE
+ * Since: 2.9.0
  **/
 HB_EXTERN hb_set_t *
 hb_subset_input_layout_features_set (hb_subset_input_t *input)
@@ -327,7 +327,7 @@
  *
  * Return value: (transfer none): pointer to the #hb_set_t of table tags.
  *
- * Since: REPLACE
+ * Since: 2.9.0
  **/
 HB_EXTERN hb_set_t *
 hb_subset_input_drop_tables_set (hb_subset_input_t *input)
@@ -344,7 +344,7 @@
  *
  * Return value: (transfer none): pointer to the #hb_set_t of table tags.
  *
- * Since: REPLACE
+ * Since: 2.9.0
  **/
 HB_EXTERN hb_set_t *
 hb_subset_input_no_subset_tables_set (hb_subset_input_t *input)
@@ -359,7 +359,7 @@
  *
  * Return value: the subsetting flags bit field.
  *
- * Since: REPLACE
+ * Since: 2.9.0
  **/
 HB_EXTERN hb_subset_flags_t
 hb_subset_input_get_flags (hb_subset_input_t *input)
@@ -375,7 +375,7 @@
  * Set all of the flags in the input object to the values
  * specified by the bit field.
  *
- * Since: REPLACE
+ * Since: 2.9.0
  **/
 HB_EXTERN void
 hb_subset_input_set_flags (hb_subset_input_t *input,
@@ -396,7 +396,7 @@
  *
  * Return value: %true if success, %false otherwise
  *
- * Since: REPLACE
+ * Since: 2.9.0
  **/
 hb_bool_t
 hb_subset_input_set_user_data (hb_subset_input_t  *input,
@@ -418,7 +418,7 @@
  *
  * Return value: (transfer none): A pointer to the user data
  *
- * Since: REPLACE
+ * Since: 2.9.0
  **/
 void *
 hb_subset_input_get_user_data (const hb_subset_input_t *input,
diff --git a/src/hb-subset.cc b/src/hb-subset.cc
index cde73bd..9c4d644 100644
--- a/src/hb-subset.cc
+++ b/src/hb-subset.cc
@@ -346,7 +346,7 @@
  * Subsets a font according to provided input. Returns nullptr
  * if the subset operation fails.
  *
- * Since: REPLACE
+ * Since: 2.9.0
  **/
 hb_face_t *
 hb_subset_or_fail (hb_face_t *source, const hb_subset_input_t *input)
diff --git a/src/hb-subset.h b/src/hb-subset.h
index 6d22fa5..164a6f9 100644
--- a/src/hb-subset.h
+++ b/src/hb-subset.h
@@ -68,7 +68,7 @@
  *
  * List of boolean properties that can be configured on the subset input.
  *
- * Since: REPLACE
+ * Since: 2.9.0
  **/
 typedef enum { /*< flags >*/
   HB_SUBSET_FLAGS_DEFAULT =		     0x00000000u,
diff --git a/src/hb-version.h b/src/hb-version.h
index f335509..94bd707 100644
--- a/src/hb-version.h
+++ b/src/hb-version.h
@@ -47,20 +47,20 @@
  *
  * The minor component of the library version available at compile-time.
  */
-#define HB_VERSION_MINOR 8
+#define HB_VERSION_MINOR 9
 /**
  * HB_VERSION_MICRO:
  *
  * The micro component of the library version available at compile-time.
  */
-#define HB_VERSION_MICRO 2
+#define HB_VERSION_MICRO 0
 
 /**
  * HB_VERSION_STRING:
  *
  * A string literal containing the library version available at compile-time.
  */
-#define HB_VERSION_STRING "2.8.2"
+#define HB_VERSION_STRING "2.9.0"
 
 /**
  * HB_VERSION_ATLEAST: