We describe a new, dynamic, floating-label approach to language-based information flow control. A labeled IO monad, LIO, keeps track of a current label and permits restricted access to IO functionality. The current label floats to exceed the labels of all data observed and restricts what can be modified. Unlike other language-based work, LIO also bounds the current label with a current clearance that provides a form of discretionary access control. Computations may encapsulate and pass around the results of computations with different labels. In addition, the LIO monad offers a simple form of labeled mutable references and exception handling. We give precise semantics and prove confidentiality and integrity properties of a call-by-name λ -calculus and provide an implementation in Haskell. be set in advance to impose an upper bound on the floating current label within that region. This restricts data access, limits the amount of code that could manipulate sensitive data, and reduces opportunities to exploit covert channels. Additionally, we introduce an operator, toLabeled, that allows the result of a computation that would have raised the current label to be encapsulated within the Labeled type. Finally, we present combinators for working with labeled references, and exceptions. Thanks to the flexibility of dynamic checking, LIO implements an IFC mechanism that is more permissive than previous static approaches (Pottier & Simonet, 2002;Li & Zdancewic, 2010;Russo et al., 2008) but provides similar security guarantees ). Though purely language-based, LIO explores a new design point centered on floating labels that draw on past OS work (Zeldovich et al., 2006).The main features of our system can be understood using the example of an online conference review system, called λ Chair. In this system, which we describe more fully later in the paper, authenticated users can read any paper and can normally read any review. This reflects the normal practice in conference reviewing, for example, where every member of the program committee can see submissions and their reviews, and participate in related discussion. Users can be added dynamically and assigned to review specific papers. As an illustration of the power of the labeling system, integrity labels are used to make sure that only assigned reviewers can write reviews for any given paper. Conversely, confidentiality labels are used to manage conflicts of interest. Users with a conflict of interest on a specific paper lack the privileges, represented by confidentiality labels, to read a review. As conflicts of interest are identified, confidentiality labels on the papers may change dynamically and become more restrictive.This paper extends an earlier conference version (Stefan et al., 2011b) by including formal proofs and extending the calculus and library implementation with exception handling. The main contributions of this work are:◮ We propose a new design point for IFC systems in which most values in lexical scope are protected by a single, mutable, current label, ...