should be fast enough now
slightly improved it