This paper introduces the motivation for implementing algorithmic skeletons and demonstrates use of Lithium, a programming environment based on Java and Remote Method Invocation, for this purpose. Also discussed are three optimizations for skeletons on grids: a look-ahead mechanism that increases the overall degree of grid parallelism, a lazy task-binding technique that reduces interactions between grid servers and the task dispatcher, and dynamic improvements that optimize the collection of results and work-load balance.