In Members.pm, GetMember and GetMemberDetails do almost the same thing. This common behaviour should be combined so that changes to this kind of thing don't have to happen in multiple places. Aiming for 3.4.
GetMember is VASTLY more efficient that GetMemberDetails. For almost all purposes, GetMember is sufficient. For those rare occasions when you need more than what's in the borrower table, then use GetMemberDetails. But outside of the patron details pages, that should not be necessary. GetMemberDetails calls GetMemberAccountRecords and patronflags. GetMemberAccountRecords calls GetBiblioFromItemNumber for EVERY accountlines entry that has a borrowernumber. patronflags calls GetMemberAccountRecords (!), checkoverdues, and GetReservesFromBorrowernumber. checkoverdues does a join across biblio, biblioitems, items and issues GetReservesFromBorrowernumber is relatively benign. In any situation where more than a single borrowernumber per pageload is provided to GetMemberDetails, this gets to be a huge waste of resources. Either we need to completely rebuild these subroutines to be more efficient, or make sure GetMemberDetails is only used when absolutely necessary.