This is unnecessary:

Code:
Item tmpItem = new Item();
tmpItem = iMasterList[tmpR];
You create a new object and immediately throw it away. Simply use

Code:
Item tmpItem = iMasterList[tmpR];