derived from the aster of 0xlab: https://gitorious.org/aster and https://code.google.com/p/aster/