Context-Aware Distributed Applications