added a lot of gnu extensions