Version 2.4.1
    * Incremental direct connection only done on change
    * Direct connection at startup is the non-incremental one for performance
    * Made minimal simulation kernel more complete

Version 2.4.0
    + Allow realtime interrupts on arbitrary ports
    + Allow realtime simulation to monitor specific ports
    * Fixed bug while removing a port
    * Fixed bug when adding a model during simulation
    * Incremental update of direct connection
    * Fixed external interrupts blocking internal transitions
    * Set elapsed time attribute to None when you shouldn't access it

Version 2.3.1
    + Added nicer configuration for the optimized, minimal simulation kernel

Version 2.3.0
    + Added an optimized simulation kernel for sequentiel simulation
    * Much faster direct connection algorithm
    * Fixed bug in checkpointing when no state saving was being done

Version 2.2.4
    + Add setuptools installation
    * Fixed bug in Dynamic Structure DEVS simulation for (dis)connectPorts
    * Fixed bug in realtime simulation
    * Fixed bug with checkpointing
    * Restructured project

Version 2.2.3
    * Fixed bug in the GVT algorithm where 'red' messages could be transient
    * Changed termination detection algorithm to prevent bottlenecks
    * Fixed missing import in realtime backend for exception handling
    * Updated GVT test for previously reformed GVT algorithm
    
Version 2.2.2
    * Changed realtime backend to not use threads in the 'threadless' variants
    * Fixed elapsed attribute at initialisation
    * Fixed allocator crashing due to new Z function support
    * Fixed locking fairness for GVT setting (faster relocation/allocation)
    * Fixed basic boundary relocator for when dynamic allocation

Version 2.2.1
    + Added user events in the loggers (optional) for 'state changes'
    + Allow continuing a previous simulation by calling simulate again
    + Added Z functions (output-to-input, input-to-input and output-to-output)
    * Changed the reinit interface to make continuing possible
    * Fixed massive memory leak by forgetting to set the
      'temporaryIrreversible' flag in local simulation
    * Change to the termination detection: wait for 100ms before sending
    * Fixed complete horizon revertion (beyond GVT!)
    * Activity-log file is only generated when useful
    * ManualRelocator generates activity traces

Version 2.2.0
    + Added templates for scheduler, relocator, tracer and experiment files
    + Allow custom activity functions for pre-transition and post-transition
    + Allow the definition of custom schedulers, defined externally
    + Pass the horizon to the relocators
    + No state saving when relocation caused sequential simulation
    + Allow local checkpointing (in most cases)
    + Possibility for a 'test cycle' which saves message count (+visualize)
    + Test cycle simulation creates an 'advised' initial distribution
    + Schedulers can now be configured per-node instead of globally
    + Allow for pull based termination conditions (NOT recommended)
    + Tracers are a lot more plugable, multiple tracers can work simultaneous
    + Realtime interrupts can happen with method calls on the simulator
    + Initial allocation can be loaded from file
    + Allowed local nested simulation in a distributed simulation
    + Included a model of a subset of PythonPDEVS
    + Much faster tracing due to trace message grouping (remove all RTT calls)
    + Method to reset a models alterations before reinitialising it
    + Method to force sequential simulation
    + Ignore state saving when sequential simulation is possible due to
      relocations
    + Added scaled realtime
    + Relocators can use a 'last state only' approach
    * File reading for realtime happens on-demand
    * Fixed GVT algorithm
    * Fixed checkpoint restoration with severely broken files
    * Rewrite of the realtime backend, works much better now
    * Yielding of the main thread for anti-messages and relocations
    * Split of the simulator configuration
    * Various bugfixes
    * External messages are processed differently, should give slight speedup
    * Removal of (most) global variables
    * Classic DEVS simulation bugfixes
    - Removed auto-allocation: use the new 'allocators' instead
    - Removed PyRO support

Version 2.1.5
    + Added optional memoization
    + Added the basis of an activity relocator, still very slow
    + User can choose between manual relocation, or automatic relocation
    + Relocation now uses 'async locking' and remote kernels will have a quick
      stop feature to prevent many transitions that will simply be removed
    + Added Dirty Heap scheduler
    + Added 'discrete time' Scheduler
    + Added Minimal List scheduler
    + Progress bar visualizes when an error happens, process is now killable
    + Dynamic Structure DEVS added for local simulation
    + Added a polymorphic scheduler (still very unstable)
    + Activity tracking in distributed simulation now returns something usable
    + Added Classic DEVS simulation as an option
    + Added a random number generator for deterministic simulation
    * Fixed deadlock in distributed simulation for an overfilled threadpool
    * Activity is only counted for not-reverted functions
    * Fixed the Syslog logger (some messages were in wrong order, some forgotten)
    * Fixed GVT algorithm, deadlocks and incorrect GVTs should be solved
    * Fixed termination algorithm

Version 2.1.4
    + Added a Cell DEVS styled activity tracer
    + Added a Cell DEVS styled location tracer
    + Added Cell DEVS styled tracer 'gnuplot' and 'libav' animation script
    + Start of Sphinx documentation
    + Added PyRO tests
    + Realtime simulation keeps track of the termination_time
    * Realtime backend is now compliant with Python3
    * Fixed PyRO simulation for nodes without actual models
    * Default message copy method now uses pickle's HIGHEST PROTOCOL
    * Fixed the *elapsed* attribute for the confluent transition function

Version 2.1.3
    + Added marshal library for use in the state saver
    + Added HeapSet scheduler
    + Added NoAge scheduler (only use when ALWAYS ta > 0)
    + Added SortedList scheduler
    + VCD and XML traces can also be saved to a user-defined filename
    + Added automatic model-to-node allocation as an option
    + Added some additional checks in the configuration setting
    + Checkpoint recovery for XML and VCD tracing is possible
    + Termination condition became somewhat more fine grained
    + Draw the model to a user-defined file
    + Added model reinitialisation: simply rerun simulate()
    + Added API for changing a model after it has been distributed (for reinit)
    * Split up the state savers
    * Game Loop realtime backend is now user-configurable for FPS
    * Added some configuration options
    * Nested simulation was completely rewritten
    * Logging now respects the logging settings and messages before this
      configuration are queued
    * Fixed a simulation bug where some messages get resent due to revertions
    * Fixed PyRO simulation
    * Fixed several problems with relocation, still somewhat buggy
    * Cleaned up tests
    * Fixed memory leak in the MPI backend
    * Fixed Python3 compliance
    * Message scheduler became much cleaner and more maintainable
    * Anti messages are sent 'en masse'
    * Model distribution is faster by a factor 10 due to different pickling
    - Nested simulation only works if both the nesting and the nested
      simulation are local
    - Configuration options for the nested simulation are removed as they are
      no longer necessary

Version 2.1.2
    + Added a looping backend for realtime simulation
    + Looping realtime backend builtin in the simulator with calls
      realtime_finished() and realtime_loop_call()
    + Allow even huge models to be transfered and checkpointed, by removing 
      artificial recursion when pickling fails otherwise (includes small test)
    + Added basic tests for VCD and XML tracing
    + Allow direct simulation of AtomicDEVS models
    + Added tests for the three different realtime backends
    + Added small smoke test for checkpointing
    + Model can be marked as 'used in termination condition'
    + Model has the new simSettings function to do model-specific configs
    + Lots of internal documentation added
    + Check for whether or not the number of used locations is actually
      available
    + Edge labels can be hidden when drawing the model for small graphs
    * Fixed a massive performance degradation in the MPI redirection
    * Don't attempt to load an incomplete checkpoint (and subsequently crash)
    * Minor changes to realtime simulation backends
    * Relocation directives can be denied in case it is a model used in
      termination condition
    * Used dictionary comprehension instead of for loop at some places
    * Progress bar now always ends with 'completely done' instead of partial
    * Minor code cleanup
    * Fixed a race condition in the external message scheduler
    * Message scheduler was leaking memory by not cleaning up everything
    - Termination condition can no longer run on any node, runs on controller

Version 2.1.1
    + Message copy can be ignored for performance (as in nearly all other
      simulators)
    + Added realtime test
    * Fixed several realtime termination bugs
    * Realtime component now uses sys.stdin instead of raw_input
    * Fixed PyRO middleware usage
    * Fixed some critical bugs in the XML and VCD tracers
    * Local simulation no longer runs on a thread for easy profiling/debugging
    * Huge performance improvement for when lots of models are transitioning
    * Changed the signalling protocol from message based (as in the abstract
      simulator) to an optimized implementation
    * Fixed some bugs in the scheduler
    * Increased performance for the scheduler
    * Bugfix for when a revertion was caused by an anti-message

Version 2.1
    + Models can be drawn before simulation using GraphViz
    + Added model migration
    + A node can now host any number of models, even atomics
    + Added model migration, including directives
    + Added an API to set all simulation options, with some sanity checking
    + Added a fetch_all option to the simulator to reconstruct the model
      locally
    + Added automatic detection of middleware
    + Added RootDEVS class
    + Added progress visualisation, rather handy in distributed simulation
    * Huge alterations to the internal representation of models
    * Reduced code size by completely refactoring model and simulation setup
    * Simulation can now be killed with ctrl-c without hanging
    * Coupled models get completely removed by direct connection
    * Direct connection works only once on the root model
    * Model is constructed locally and then broadcast to other kernels
    * Fixed fossil collection race condition
    * Simplified checkpoint restoration and creation
    * Cleaned up tests
    * Simplified Solver core due to more agressive direct connection
    - Removed the plethora of (incompatible) IDs in models
    - Removed the mpirunner.py scripts
    - Removed checks for wrong local invocations, should no longer happen
    - Removed RemoteCDEVS class
    - Removed irreversibility (except locally) due to problems with model relocation
    - Removed remote code execution for model construction, normal code
      execution is still possible
    - Removed special Cython parts and build scripts

Version 2.0
    + Further optimisations to the main simulation algorithm
    + Added Parallel DEVS simulation
    + Output function now returns a dictionary of outputs
    + Realtime simulation can use manual and automated input simultaneously
    + Added distributed simulation, both PyRO and MPI4Py
    + Added syslog logger
    + Added checkpointing
    + Allow for termination time instead of termination condition
    + Added direct saving to file of output
    + Allow nested simulation in distributed environment
    + Made Python3 compliant
    + Made PyPy compliant
    + Made Cython compliant
    + Messages got their own class
    + Added NestingException exception for nesting problems
    + Added irreversibility for faster distributed simulation
    + Added actual automated tests using Python unittest instead of ad-hoc manual testing
    * Split up several files due to huge amount of additions
    * Optimized memory consumption of VCD and XML output
    * Modularised simulation tracing
    * Updated examples
    * Transitions now take an additional argument indicating the input
    * Fixed realtime simulation bugs
    - Removed Classic DEVS simulation
    - Removed Peek and Poke methods
    - Removed Root output in verbose tracing

Version 1.2
    + Allow realtime simulation using Python threads and TkInter events

Version 1.1
    + Added custom 'copy()' function for messages
    + Added direct connection
    * Optimized message scheduler
    * Optimized message passing
    - Removed INFINITY object, redirected to a float

Version 1.0.5
    + Added VCD tracing option
    * Fixed non-determinism bug in sorting colliding models

Version 1.0.4
    + Added XML tracing option

Version 1.0.3
    * Cleanup of terminology
    * Use True/False instead of 1/0

Version 1.0.2
    + Added code to display atomic DEVS' initial conditions

Version 1.0.1
    * Deal with DeprecationWarning
    * Default timeAdvance returns INFINITY

Version 1.0
    + Initial version
