We consider the problem of adaptive fault diagnosis in hypercube multiprocessor systems. Processors perform tests on one another and later tests can be scheduled on the basis of previous test results. Fault-free testers correctly identify the fault status of tested processors, while faulty testers can give arbitrary test results. The goal is to identify correctly the status of all processors, assuming that the number of faults does not exceed the hypercube dimension. We propose an adaptive diagnosis algorithm whose efficiency is drastically better than that of any previously known strategies. While the worst-case number of tests for any of them exceeds 2n log n for an n-dimensional hypercube, our method uses at most 2n + 3n/2 tests in the worst case. We can also modify our algorithm to improve the number of testing rounds. By slightly increasing the number of tests to 2n + (n + 1)2 (still a much better performance than 2n log n), we can carry out diagnosis in at most 11 rounds in the worst case (as opposed to over n rounds in the best previously known strategy).