diff --git a/changelog.md b/changelog.md
new file mode 100644
index 0000000000000000000000000000000000000000..cc8041804bee9de43bc368e703fe02d6253b6ad8
--- /dev/null
+++ b/changelog.md
@@ -0,0 +1,51 @@
+# Keeping track of major Flatland Changes
+
+## Changes since Flatland 0.3
+### Changes in level generation
+- Separation of `schedule_generator` from `rail_generator`: 
+  - Renaming of `flatland/envs/generators.py` to `flatland/envs/rail_generators.py`
+  - `rail_generator` now only returns the grid and optionally hints (a python dictionary); the hints are currently use for distance_map and communication of start and goal position in complex rail generator.
+  - `schedule_generator` takes a `GridTransitionMap` and the number of agents and optionally the `agents_hints` field of the hints dictionary.
+  - Inrodcution of types hints: 
+``` 
+RailGeneratorProduct = Tuple[GridTransitionMap, Optional[Any]]
+RailGenerator = Callable[[int, int, int, int], RailGeneratorProduct]
+AgentPosition = Tuple[int, int]
+ScheduleGeneratorProduct = Tuple[List[AgentPosition], List[AgentPosition], List[AgentPosition], List[float]]
+ScheduleGenerator = Callable[[GridTransitionMap, int, Optional[Any]], ScheduleGeneratorProduct]
+```
+
+### Multi Speed
+
+- Different agent speeds are introduced. Agents now travel at a max speed which is afraction of 1.
+    - Fastest speed is 1. At this speed an agent can move to a new cell at each time step t.
+    - Slower speeds are smaller than one. At each time step an agent moves the fraction of its speed forward within a cell. It only changes cell when it's fractional position is greater or equal to 1.
+    - Multi-speed introduces the challenge of ordering the trains correctly when traveling in the same direction.
+- Agents always travel at their full speed when moving.
+
+To set up multiple speeds you have to modify the `agent.speed_data` within your `schedule_generator`. See [this file](https://gitlab.aicrowd.com/flatland/flatland/blob/master/flatland/envs/schedule_generators.py#L59) for a good example.
+
+
+### Stochastic events
+Just like in real-worl transportation systems we introduced stochastic events to disturb normal traffic flow. Currently we implemented a malfunction process that stops agents at random time intervalls for a random time of duration.
+Currently the Flatland environment can be initiated with the following poisson process parameters:
+
+```
+# Use a the malfunction generator to break agents from time to time
+stochastic_data = {'prop_malfunction': 0.1,  # Percentage of defective agents
+                   'malfunction_rate': 30,  # Rate of malfunction occurence
+                   'min_duration': 3,  # Minimal duration of malfunction
+                   'max_duration': 20  # Max duration of malfunction
+                   }
+```
+The duration of a malfunction is uniformly drawn from the intervall `[min_duration,max_duration0]` and the occurance of malfunctions follows a point poisson process with mean rate `malfunctin_rate`.
+
+## Changes since Flatland 0.2
+
+Please list all major changes since the last version:
+
+- Refactoring of rendering code: CamelCase functions changed to snake_case
+- Tree Observation Added a new Featuer: `unusable_switch` which indicates switches that are not branchingpoints for the observing agent
+- Updated the shortest path predictor
+- Updated conflict detection with predictor
+- Episodes length can be set as maximum number of steps allowed.
\ No newline at end of file