a lot of changes (but still unstable version)