added missing toString()
handle broken extensions gracefully