added PerfectBT func