diff --git a/CHANGELOG.md b/CHANGELOG.md
index ddcebbbd75d20c7f9424a71c799b91219b8d1977..7b8c0480fe405f8fac31e6f60e36d05987617233 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,37 +1,55 @@
 # CHANGELOG.md
 
-## 0.4.0 (unreleased)
+## 0.5.0 (unreleased)
+
+## 0.4.0
+
+New features:
+
+- `IntegrateBlissScan`: optionally use a master file (not open during processing) and a data file (open during processing)
+- Integration tasks: argument to supply monitor and reference values
+- Add new task to sum images `SumImages`
+- Add new task to save images to EDF/TIFF `SaveImages`
+
+Bug fixes:
+
+- Handle numpy string when parsing units
+- `IntegrateBlissScan`: Link to raw data are now in the master file
 
 ## 0.3.0
 
 New features:
-  - Lima data from memory
+
+- Lima data from memory
 
 ## 0.2.0
 
 New features:
-  - Azimuthal integration of a bliss scan without saving
-  - Error model support
-  - HDF5 saving: NXprocess as default is optional
-  - Integration tasks: additional parameter for integration options,
-                       to be used to overwrite the options coming from
-                       the configuration task
-  - Diagnostic tasks: support square-root scale for 1D plots
-  - Support pyFAI's "detector_config"
-  - Integration tasks: argument to change the worker pool size
+
+- Azimuthal integration of a bliss scan without saving
+- Error model support
+- HDF5 saving: NXprocess as default is optional
+- Integration tasks: additional parameter for integration options,
+  to be used to overwrite the options coming from
+  the configuration task
+- Diagnostic tasks: support square-root scale for 1D plots
+- Support pyFAI's "detector_config"
+- Integration tasks: argument to change the worker pool size
 
 Bug fixes:
-  - respect integration option "do_mask"
+
+- respect integration option "do_mask"
 
 ## 0.1.0
 
 New features:
-  - Single and multi distance calibration
-  - Azimuthal integration of a single image
-  - Azimuthal integration of a bliss scan (during or after acquisition)
-  - Background subtraction
-  - Mask detection
-  - Save azimuthal integration results in HDF5
-  - Save azimuthal integration results in ASCII
-  - Azimuthal integration worker persistent in
-    the process for each configuration
+
+- Single and multi distance calibration
+- Azimuthal integration of a single image
+- Azimuthal integration of a bliss scan (during or after acquisition)
+- Background subtraction
+- Mask detection
+- Save azimuthal integration results in HDF5
+- Save azimuthal integration results in ASCII
+- Azimuthal integration worker persistent in
+  the process for each configuration
diff --git a/src/ewoksxrpd/__init__.py b/src/ewoksxrpd/__init__.py
index 44ae41fa4634df416e83983b1a0c35eba13a912a..ecd11bdc0945b45090124ed48e3608550bfdd997 100644
--- a/src/ewoksxrpd/__init__.py
+++ b/src/ewoksxrpd/__init__.py
@@ -1,4 +1,4 @@
-__version__ = "0.3.0"
+__version__ = "0.4.0"
 
 from .init_matplotlib import init_matplotlib