ABSTRACT: This poster describes a method for utilizing, detecting and synchronizing task and data parallelism. It is based on a modified data-flow paradigm with annotations called “contexts” that constitute a simple language for expressing the use of state by each task in the data-flow graph. Once the use of state in the graph is known, possibilities for both data, task and nested parallelism can be automatically inferred by the run-time system. The information inferred includes the precise locations on the graph where data parallelism is possible as well the points where synchronization will be necessary. Our current system uses rational “weight throwing” in order to synchronize states declared “on-the-fly” over streamed data.