so much added, many things adapted from emidln