The Unified Parallel C (UPC) language is a parallel extension of C that features both private and shared data that can both be accessed through pointers. Arithmetic on pointers to shared data is legal but as error-prone as standard C pointer arithmetic is. A consequence is that erroneous writes to shared data can occur, resulting in inadvertent data races even if the appropriate synchronizations coordinate the legitimate writes and reads. This paper makes several contributions to protect shared data from races in UPC programs, add safety checks on pointers-to-shared, and reduce the run-time overhead of these checks. Notes: 24 Pages