synced changes from trunk library into branches/i-campbell
branch trunk library to branches/i-campbell/