His research focuses on using programming languages and analyses to improve the security, reliability, and availability of software. Noteworthy among his research accomplishments is the development of analysis and compilation tools for enabling software to be safely updated while it runs. He has explored the design of new programming languages and analysis tools for automatically discovering or remediating software flaws and security vulnerabilities. He has recently been exploring new approaches to privacy preserving computation and maintains an interest in distributed systems design and evaluation, particularly when adaptivity and security are system goals.