diff --git a/CHANGELOG.md b/CHANGELOG.md
index ef13c26c6f4df724c2e0e77b4f3fb60689684c79..512182b99114b591ba061693771ecd21a35add9d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,735 +1,3 @@
 # v2.7.16
 
 * extended `Proxy`
-
-# v2.7.15
-
-* added `include_same_pairs` to `half_cartesian`
-
-# v2.7.14
-
-* multiple bugfixes for `Proxy` object
-* bugfix for `HashableWrapper`: now it works
-
-# v2.7.13
-
-* bugfix release: header of `half_cartesian` changed
-
-# v2.7.12
-
-* bugfix release: `even`, `odd` and `count` will now accept Iterables
-
-# v2.7.11
-
-* AggregateMetric has now the method `measure`
-* also, a bug in `measure_future` was fixed
-
-# v2.7.10
-
-* add `even` and `odd`
-
-# v2.7.9
-
-**Possibly API breaking change!**
-You are affected if you pass start_at to `count`
-using a kwargs. Not many people do that, most would
-prefer positional args, which work fine.
-
-* change `start_at` to `start` in `count`
-* added `skip_last` to `add_next`
-
-# v2.7.8
-
-* added `KeyAwareDefaultDict`
-
-# v2.7.7
-
-* added `count`
-
-# v2.7.6
-
-* bugfix release: failed initializing EmptyMetrics() with no arguments
-
-# v2.7.5
-
-* added extras to setup.py
-* fixed infinite hang in `satella.files.split` on Windows
-* made tests pass on Windows
-* added `AggregateMetric`
-* metrics can now measure futures
-* a GC fix for `TwoWayDictionary`
-* added `MetrifiedThreadPoolExecutor`
-* __slots__ for `EmptyMetric`
-
-# v2.7.4
-
-* fixed `wraps` to provide __annotations__ as well
-* a slight fix for PyPy
-* added __slots__ to JSONAble
-* added __slots__ to OmniHashableMixin
-
-# v2.7.3
-
-* further extended `Caster`
-
-# v2.7.2
-
-* changed behaviour of MergingSource a bit
-* added Caster to configuration schema
-
-# v2.7.1
-
-* API change reverted to before 2.7.0
-
-# v2.7.0
-
-*Possibly API breaking change: that's if you have
-had the time to implement a feature which's been
-out for like 4 hours*
-* change in `DirtyDict`
-
-# v2.6.4
-
-* added `DirtyDict`
-
-# v2.6.3
-
-* added `satella.files.split`
-
-# v2.6.1
-
-* added `shift`
-* added `other_sequence_no_longer_than`
-* deprecated `zip_shifted`. Use `zip(shift(...))` instead
-
-# v2.6.0
-
-**Possibly API breaking change!**
-
-You will be impacted if you assume that metric 
-levels were ints. They are subclasses of an 
-`enum.intEnum` how, but ints are still accepted
-as a argument.
-
-Furthermore, directly importing logging levels
-(as RUNTIME, DEBUG, etc.) is deprecated. Import
-MetricLevel instead.
-
-These imports will be removed in v3.0.
-
-* changed metric levels from ints to an enum
-
-# v2.5.15
-
-* added extra options to `log_exceptions`
-
-# v2.5.14
-
-* added `log_exceptions`
-
-# v2.5.13
-
-* `LockedStructure` is now generic
-* added `returns` to `rethrow_as`
-* patched `DictObject` to inherit from `UserDict` 
-  instead of `dict`
-* imports will log it's problem via warning, and now
-  to the log anymore
-* added [semantic versioning](https://semver.org/spec/v2.0.0.html) 
-
-# v2.5.12
-
-* added `iter_dict_of_list`
-
-# v2.5.11
-
-* removed redundant loggers
-* added `LockedStructure`
-* added `Proxy`
-
-# v2.5.10
-
-* exported CodedCustomExceptionMetaclass
-* adde `group_quantity`
-
-# v2.5.9
-
-* added `MutableMapping` to `TwoWayDictionary`
-* added `MutableSequence` to `SliceableDeque`
-* added `CodedCustomException`
-
-# v2.5.8
-
-* added `pop` and `popleft` to SortedList
-
-# v2.5.7
-
-* optimized `Ranking`
-* added `SlicableDeque`
-
-# v2.5.6
-
-* added `SortedList`
-
-# v2.5.5
-
-* added `TwoWayDictionary`
-* added `Ranking`
-
-# v2.5.4
-
-* changed the behavior of `find_files`
-* fixed a bug in `MemoryPressureManager` wherein consecutive states were
-  not entered
-
-# v2.5.3
-
-* added extra options to `find_files`
-* refactored `find_files`
-
-# v2.5.2
-
-* added `find_files`
-
-# v2.5.1
-
-* bugfix release: fixed constructor for `Not` in `MemoryPressureManager`
-
-# v2.5.0
-
-* added `CallableMetric`
-* added `MemoryPressureManager`
-
-# v2.4.45
-
-* added capability for Configuration to execute arbitary Python
-
-# v2.4.44
-
-* added typing for some members
-* added __slots__ to most classes
-* added test for MemoryErrorHandler (at last!)
-
-# v2.4.43
-
-* added `HashableWrapper`
-* made `CallableGroup` thread-safe 
-
-# v2.4.42
-
-* added `DictionaryView`
-* fixed export all from `satella.coding.structures`
-* added `__slots__` in multiple places
-
-# v2.4.41
-
-* added the context manager syntax for `Monitor`
-  Please note that `Monitor.acquire()` syntax will not be deprecated, owing to 
-  being a parallel to `Monitor.release()` which may be useful when we're
-  already holding the lock from another source (eg. decorator)
-
-# v2.4.40
-
-* fixed problems with __copy__stemming from https://github.com/python/typing/issues/498
-* docs fixed, Generics cleaned up
-
-# v2.4.39
-
-* added `Condition`
-
-# v2.4.38
-
-* `metric_data_collection_to_prometheus` won't export values marked as internal
-* minor doc fixes
-* added `MonitorList` and `MonitorDict`
-
-# v2.4.37
-
-* forbidden to instantiate `OmniHashableMixin` directly
-* added `wrap_with`, `wrap_property`, `dont_wrap`
-
-# v2.4.36
-
-* bugfix release: more bulletproof `wraps`
-* satella will internally use it's own `wraps` in lieu of `functools.wraps`
-
-# v2.4.35
-
-* added `Monitor.synchronize_on`
-
-# v2.4.34
-
-* added `wraps`
-
-# v2.4.33
-
-* added `stop_after`
-* made zip_shifted use less memory when the shift is negative
-  and argument is `Reversible`
-
-# v2.4.32
-
-* added `zip_shifted`
-
-# v2.4.31
-
-* added `skip_first`
-
-# v2.4.30
-
-* added `wrap_over` to `add_next`
-
-# v2.4.29
-
-* added `CustomException`
-* added support for Futures in `measure()`
-
-# v2.4.28
-
-* added `half_product`
-
-# v2.4.27
-
-* added `attach_arguments`
-
-# v2.4.26
-
-* bugfix release: fixed `add_next` behaviour with regards to empty arguments
-
-# v2.4.25
-
-* bugfix release: fixed `add_next` behaviour with regards to empty arguments
-
-# v2.4.24
-
-* added `add_next`
-
-# v2.4.23
-
-* improved `is_last` to work on any iterable
-* `internal` will be preserved during convering MetricData to JSON
-
-# v2.4.22
-
-* added `is_last`
-
-# v2.4.21
-
-* added default value for `staticvar`
-* bugfix release: fixed linkfail metric
-
-# v2.4.20
-
-* deprecated `infinite_counter` (use `itertools.count` instead)
-* added `is_instance` factory function
-
-# v2.4.19
-
-* added `internal` for `Metric`
-* added `LinkfailMetric`
-
-# v2.4.18
-
-* added `measure.update()`
-* added `measure.adjust()`
-* starting time of `measure` is now defined
-* added `import_class`
-* added `take_n`
-
-# v2.4.17
-
-* changed the behaviour of `JSONEncoder` when it comes to serializing unknown objects
-* moved the exception `LockIsHeld` to it's proper place
-* fixed `dump_frames_on` not to log on **sys.stderr**
-* added `satella.time.measure`
-
-# v2.4.16
-
-* can use `Metric.measure()` as a context manager
-* added `measure()` to `FloatMetric` and `CounterMetric`
-* added the `MetricAlreadyExists` exception
-
-# v2.4.15
-
-* fixed an import error that occurred on Python<3.7 when there were no requests installed
-* bugfix release: commotion with `inf` in `HistogramMetric` fixed
-* documented a behaviour in `precondition`
-* added `has_keys`
-
-# v2.4.14
-
-* added `ge` in histograms
-* fixed the warning in yaml loader
-
-# v2.4.13
-
-* fixed `precondition` to support kwargs
-* added `short_none`
-
-# v2.4.11
-
-* added `HistogramMetric.measure()`
-
-# v2.4.10
-
-* renamed `HistogramMetric` to `SummaryMetric` to reflect that way things
-  are done at [Prometheus](https://prometheus.io/docs/concepts/metric_types/#summary)
-* added `HistogramMetric`
-
-# v2.4.9
-
-* bugfix release: fixed behaviour of `SimpleMetrics` with regards to labels
-
-# v2.4.8
-
-* added `infinite_counter`
-
-# v2.4.7
-
-* `satella.instrumentation.metrics` now exports `Metric`
-* `QuantileMetric`(*quantile*) is now deprecated, use `HistogramMetric` (*histogram*) instead
-* `TerminableThread.terminate(force=True)` will raise `NotImplementedError` on PyPy.
-
-# v2.4.6
-
-* added `satella.files`
-
-# v2.4.5
-
-* `JSONEncoder` will encode even non-JSON-able objects
-
-# v2.4.4
-
-* added `PrometheusHTTPExporterThread`
-* added `EmptyMetric`
-
-# v2.4.3
-
-* better test coverage
-* bugfix release - add_labels would modify the result's hash!
-
-# v2.4.2
-
-* bugfix release
-
-# v2.4.1
-
-* add `add_labels` for MetricData and MetricDataCollection
-
-# v2.4.0
-
-* major refactor for metrics
-* added `frozendict`
-
-# v2.3.16
-
-* bugfix release, previous call would transform normal functions into generators and 
-  we want to avoid that
-
-# v2.3.15
-
-* `QuantileMetric.measure` will properly measure generators now
-
-# v2.3.14
-
-* set default `enable_timestamp` to False
-
-# v2.3.13
-
-* a bugfix release - again
-
-# v2.3.12
-
-* a bugfix release - massive iterator lossage in `update`
-
-# v2.3.11
-
-* a bugfix release - update wouldn't
-
-# v2.3.10
-
-* a bugfix release - children naming
-
-# v2.3.9
-
-* added `CounterMetric`
-
-# v2.3.8
-
-* bugfix release: made it possible to use measure
-
-# v2.3.7
-
-* finally got Prometheus exporter right
-
-# v2.3.6
-
-* bugfix release - wrong annotation mechanics
-
-# v2.3.5
-
-* added capability to export metric timestamp
-* added counting total amount of calls in `cps` metric
-
-# v2.3.4
-
-* bugfix in Prometheus exporter
-
-# v2.3.3
-
-* a bug fixed in `satella.instrumentation.metrics.json`
-* added counting total amount of calls and total time
-* removed `StringMetric`, as it is not readily Prometheus-exportable
-* `PercentileMetric` renamed to `QuantileMetric`
-
-# v2.3.2
-
-* added aggregation to `PercentileMetric`
-
-# v2.3.1
-
-* more descriptive exceptions in descriptors
-
-# v2.3.0
-
-* significant refactor of [metrics](satella/instrumentation/metrics).
-
-# v2.2.19
-
-* doc fix in `OmniHashableMixin`
-
-# v2.2.18
-
-* added _SingletonWithRegardsTo_
-* extra `functools.wraps()` on singleton's __init__
-
-# v2.2.17
-
-* added [choose](satella/coding/sequences/choose.py)
-
-# v2.2.16
-
-* `is_valid_schema` can be now passed in using kwargs
-
-# v2.2.15
-
-* added `DictObject.is_valid_schema`
-
-# v2.2.14
-
-* added `catch_exception`
-
-# v2.2.13
-
-* useless `print()`s removed in metrics
-* additional unit tests and doc fixes
-* added [SetHeap](satella/coding/structures/structures.py)
-
-# v2.2.12
-
-* bugfix where import_from would not pass all parameters to child calls
-* removed debug logs from import_from
-* far more extensive Python testing on Travis
-* fixed exception auto-str
-* DirectorySource has a new attribute *on_fail*
-* switched to nose2 for tests
-
-# v2.2.11
-
-* bugfix and extra features added to *import_from*
-
-# v2.2.10
-
-* added [import_from](satella/imports.py)
-
-# v2.2.9
-
-* fixed `metaclass_maker`
-* `self.assertEquals` -> `self.assertEqual` due to deprecation
-
-# v2.2.8
-
-* added [metaclass_maker](satella/coding/metaclasses.py)
-
-# v2.2.7
-
-* added inheritance from `abc` to Immutable
-
-# v2.2.6
-
-* added [Immutable](satella/coding/structures/immutable.py)
-
-# v2.2.5
-
-* made most of [satella.posix](satella/posix) routines behave
-  themselves on Windows.
-* bugfix in MemoryErrorHandler
-
-# v2.2.4
-
-* *bugfix release*: `signal.pause()` returned frequently, which translated
-  to high CPU usage in [hang_until_sig](satella/posix/signals.py).
-
-# v2.2.3
-
-* renamed `AcquirePIDLock` to `PIDFileLock`
-* more unit tests for `PIDFileLock`
-    * it finally works
-
-# v2.2.2
-
-* more docs
-* fixed `MemoryErrorExceptionHandler` not being importable from `satella.exception_handling`
-* fixed the custom_hook for `MemoryErrorExceptionHandler`: it won't
-  kill everything if the custom_hook returns True
-* added an unit test for `precondition` 
-* `Heap` now inherits from `UserList`
-
-# v2.2.1
-
-* added [TerminableThread](satella/coding/concurrent/thread.py)
-* **COMPATIBILITY BREAKERS**
-    * `Singleton` and family are meant to be imported from `satella.coding.structures`
-    * `CallableGroup` is meant to be imported from `satella.coding.concurrent`
-
-# v2.1.11
-
-* bugfix release: __all__ in [coding](satella/coding/__init__.py) fixed
-* more docs
-
-# v2.1.10
-
-* added [metrics](satella/instrumentation/metrics)
-* [documentation](https://satella.readthedocs.io/en/develop/) improved
-
-# v2.1.9
-
-* bugfix release: fixed an occurrence where next calls to 
-  [hang_until_sig](satella/posix/signals.py) would return immediately
-
-# v2.1.8
-
-* bugfix release: removed prints from LockedDataset
-
-# v2.1.7
-
-* bugfix release, don't use 2.1.6
-
-# v2.1.6
-
-* added [json](satella/json.py) support
-* added `apply_dict_object`
-* multiple bugfixes, thanks to finally listening to PyCharm's code inspection
-
-# v2.1.5
-
-* bugfix release: proper recovery of union from a dict thru `descriptor_from_dict`
-
-# v2.1.4
-
-* bugfix release: removed a print() from Descriptor
-
-# v2.1.3
-
-* bugfix in MergingSource
-* argument rename in MemoryErrorExceptionHandler `killpg` -> `kill_pg`
-* added the Union descriptor
-
-# v2.1.2
-
-* modified EnvironmentSource to accept custom config names
-* added new descriptor type _Boolean_
-* added _install_dump_frames_on_
-* changed _descriptor_from_dict_ to assume optionality 
-  when default value is provided
-* dict descriptor will display the value if it's not a dict
-* translated the [CHANGELOG](CHANGELOG.md) to English
-* fixed (with an unit test) a bug wherein _EnvironmentSource_ raising an exception would fail
-
-# v2.1.1
-
-* removed support for Python 2.7
-* most of the typecheck module was cut
-* implemented tracking standard stack frames, not only the exception ones
-* added support for _DictObject_
-* added _exception_handling_ and _configuration_
-
-## v2.0.24
-
-* added [LockedDataset](/satella/coding/concurrent/locked_dataset.py)
-* added [static_var](/satella/coding/fun_static.py)
-* added [treat_result_with](/satella/coding/decorators.py)
-
-## v2.0.22
-
-* fixes #14
-
-## v2.0.22rc3
-
-* fixes #15
-* fixes #20
-* fixes #21
-
-## v2.0.22rc2
-
-* fixes #18
-
-## v2.0.22rc1
-
-* fixes #16
-
-## v2.0.21
-
-* fixed #10
-* fixed #11
-
-## v2.0.20
-
-* requirements were fixed
-
-## v2.0.19
-
-* added `checked_coerce` and `for_argument`
-* added `precondition`
-* deprecated `checked_coerce` and `coerce`
-
-## v2.0.16 = v2.0.17 == v2.0.18
-
-* added `OmniHashableMixin`
-* fixed checker's behaviour facing `typing.*` annotations
-
-## v2.0.15
-
-* fixed `rethrow_as`
-* Travis will now deploy to PyPI, not me
-* added `typednamedtuple`
-* fixed the behaviour of `coerce`
-
-## v2.0.14
-
-* added `rethrow_as`
-
-## v2.0.13
-
-* Python 3.4 is back in the game
-* Default time for _TimeBasedHeap_ 
-* Traceback() called when not exceptions will result in ValueError
-
-## v2.0.12
-
-* minor improvements to TimeBasedHeap
-* added `self` to @typed
-* added `Number` type to @typed
-* Satella korzysta z [Code Climate](https://codeclimate.com/github/piotrmaslanka/satella)
-
-## v2.0.11
-
-* Heap added
-
-## v2.0.10
-
-* bugfix release
-
-## v2.0.9
-
-* `satella.coding.merge_dicts` added
diff --git a/README.md b/README.md
index c9c257ef125015abaccb050cacd222387a67e23c..b534f2e4153e5ef6f6090d03a570368a107168f3 100644
--- a/README.md
+++ b/README.md
@@ -26,6 +26,9 @@ Satella contains, among other things:
 Most Satella objects make heavy use of `__slots__`, so they are memory friendly and usable on embedded systems,
 where memory is at premium.
 
+Change log is kept as part of [release notes](https://github.com/piotrmaslanka/satella/releases).
+The [CHANGELOG.md](CHANGELOG.md) file is only to track changes since last release.
+
 Full [documentation](http://satella.readthedocs.io/en/latest/?badge=latest)
 is available for the brave souls that do decide to use this library.