bugfix & optimize