diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9a1bebc64bef8b690fc5d6cc0d0845c894c7b22c..74ade33e41757339dc4b13d5a6c8a41692aad2b2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,16 +9,16 @@ Changes in and extensions of the theory:
 
 * [#] Add new modality: â–  ("plainly").
 * [#] Camera morphisms have to be homomorphisms, not just monotone functions.
-* [#] A proof that `f` has a fixed point if `f^k` is contractive.
+* Add a proof that `f` has a fixed point if `f^k` is contractive.
 * Constructions for least and greatest fixed points over monotone predicates
   (defined in the logic of Iris using impredicative quantification).
-* A proof of the inverse of `wp_bind`.
+* Add a proof of the inverse of `wp_bind`.
 
 Changes in Coq:
 
-* Some things got renamed and notation changed:
+* Rename some things and change notation:
   - The unit of a camera: `empty` -> `unit`, `∅` -> `ε`
-  - The proof mode type class `IntoOp` -> `IsOp`
+  - A proof mode type class `IntoOp` -> `IsOp`
   - OFEs with all elements being discrete: `Discrete` -> `OfeDiscrete`
   - OFE elements whose equality is discrete: `Timeless` -> `Discrete`
   - Timeless propositions: `TimelessP` -> `Timeless`
@@ -36,7 +36,8 @@ Changes in Coq:
     + `DRAMixin` -> `DraMixin`
     + `DRAT` -> `DraT`
     + `STS` -> `Sts`
-  - Many lemmas also changed their name.  A partial list:
+  - Many lemmas also changed their name.  `always_*` became `persistently_*`,
+    and furthermore: (the following list is not complete)
     + `impl_wand` -> `impl_wand_1` (it only involves one direction of the
       equivalent)
     + `always_impl_wand` -> `impl_wand`
@@ -49,7 +50,7 @@ Changes in Coq:
       direction of this equivalence got swapped for consistency's sake)
   The following `sed` snippet should get you most of the way:
 ```
-sed 's/\bPersistentP\b/Persistent/g; s/\bTimelessP\b/Timeless/g; s/\bCMRADiscrete\b/CmraDiscrete/g; s/\bSTS\b/Sts/g' -i $(find -name "*.v")
+sed 's/\bPersistentP\b/Persistent/g; s/\bTimelessP\b/Timeless/g; s/\bCMRADiscrete\b/CmraDiscrete/g; s/\bCMRAT\b/CmraT/g; s/\bCMRAMixin\b/CmraMixin/g; s/\bUCMRAT\b/UcmraT/g; s/\bUCMRAMixin\b/UcmraMixin/g; s/\bSTS\b/Sts/g' -i $(find -name "*.v")
 ```
 * Fix a bunch of consistency issues in the proof mode, and make it overall more
   usable.  In particular:
@@ -63,21 +64,27 @@ sed 's/\bPersistentP\b/Persistent/g; s/\bTimelessP\b/Timeless/g; s/\bCMRADiscret
   - There is a new connective `tc_opaque`, which can be used to make definitions
     opaque for type classes, and thus opaque for most tactics of the proof
     mode.
-  - Many missing type class instances for distributing connectives have been
-    defined.
-* The generic `fill` operation of the `ectxi_language` construct has been
-  defined in terms of a left fold instead of a right fold. This gives rise to
-  more definitional equalities.
-* The big operators have been improved:
+  - Define Many missing type class instances for distributing connectives.
+  - Implement the tactics `iIntros (?)` and `iIntros "!#"` (i.e. `iAlways`)
+    using type classes. This makes them more generic, e.g., `iIntros (?)` also
+    works when the universal quantifier is below a modality, and `iAlways` also
+    works for the plainness modality.  A breaking change, however, is that these
+    tactics now no longer work when the universal quantifier or modality is
+    behind a type class opaque definition.  Furthermore, this can change the
+    name of anonymous identifiers introduced with the "%" pattern.
+* Define the generic `fill` operation of the `ectxi_language` construct in terms
+  of a left fold instead of a right fold. This gives rise to more definitional
+  equalities.
+* Improved big operators:
   + They are no longer tied to cameras, but work on any monoid
-  + The version of big operations over lists was redefined so that it enjoy more
-    definitional equalities.
+  + The version of big operations over lists was redefined so that it enjoys
+    more definitional equalities.
 * Various improvements to `solve_ndisj`.
 * Improve handling of pure (non-state-dependent) reductions in heap_lang.
 * Use `Hint Mode` to prevent Coq from making arbitrary guesses in the presence
   of evars, which often led to divergence. There are a few places where type
   annotations are now needed.
-* The `prelude` folder has been moved to its own project: std++
+* Move the `prelude` folder to its own project: std++
 
 ## Iris 3.0.0 (released 2017-01-11)
 
diff --git a/docs/algebra.tex b/docs/algebra.tex
index b5050387cb9299a45f6fa1066d4e3a39e90402c3..972778a8217596cd47a8057cd0941ac803bf4fa9 100644
--- a/docs/algebra.tex
+++ b/docs/algebra.tex
@@ -75,6 +75,7 @@ The function space $\ofe \nfn \cofeB$ is a COFE if $\cofeB$ is a COFE (\ie the d
 
 Completeness is necessary to take fixed-points.
 For once, every \emph{contractive function} $f : \ofe \to \cofeB$ where $\cofeB$ is a COFE and inhabited has a \emph{unique} fixed-point $\fix(f)$ such that $\fix(f) = f(\fix(f))$.
+This also holds if $f^k$ is contractive for an arbitrary $k$.
 Furthermore, by America and Rutten's theorem~\cite{America-Rutten:JCSS89,birkedal:metric-space}, every contractive (bi)functor from $\COFEs$ to $\COFEs$ has a unique\footnote{Uniqueness is not proven in Coq.} fixed-point.
 
 
diff --git a/opam b/opam
index fb00c4be9e48ea236ebf57361b2d47649e82e6a2..8d467816530695255823779efa3d6d3b051830a9 100644
--- a/opam
+++ b/opam
@@ -12,5 +12,5 @@ remove: ["rm" "-rf" "%{lib}%/coq/user-contrib/iris"]
 depends: [
   "coq" { >= "8.6.1" & < "8.8~" }
   "coq-mathcomp-ssreflect" { (>= "1.6.1" & < "1.7~") | (= "dev") }
-  "coq-stdpp" { (= "dev.2017-10-16.0") | (= "dev") }
+  "coq-stdpp" { (= "dev.2017-10-28.3") | (= "dev") }
 ]
diff --git a/theories/proofmode/class_instances.v b/theories/proofmode/class_instances.v
index 79d97821016a7879e31bfb90c6fe3543ed408811..39d4ec51568bd584701d3c025ba804a891332543 100644
--- a/theories/proofmode/class_instances.v
+++ b/theories/proofmode/class_instances.v
@@ -591,6 +591,9 @@ Proof. by rewrite /FromForall. Qed.
 Global Instance from_forall_pure {A} (φ : A → Prop) :
   @FromForall PROP A (⌜∀ a : A, φ a⌝)%I (λ a, ⌜ φ a ⌝)%I.
 Proof. by rewrite /FromForall pure_forall. Qed.
+Global Instance from_forall_pure_not (φ : Prop) :
+  @FromForall PROP φ (⌜¬ φ⌝)%I (λ a : φ, False)%I.
+Proof. by rewrite /FromForall pure_forall. Qed.
 Global Instance from_forall_impl_pure P Q φ :
   IntoPureT P φ → FromForall (P → Q)%I (λ _ : φ, Q)%I.
 Proof.
diff --git a/theories/proofmode/environments.v b/theories/proofmode/environments.v
index 53ceca1bd781f96fb7c07605633ea069fdc7b5e8..a39af00792b0d3fe778723ef09eb97d9c996f86b 100644
--- a/theories/proofmode/environments.v
+++ b/theories/proofmode/environments.v
@@ -156,7 +156,7 @@ Proof.
 Qed.
 
 Lemma env_lookup_delete_correct Γ i :
-  env_lookup_delete i Γ = x ← Γ !! i; Some (x,env_delete i Γ).
+  env_lookup_delete i Γ = (x ← Γ !! i; Some (x,env_delete i Γ)).
 Proof. induction Γ; intros; simplify; eauto. Qed.
 Lemma env_lookup_delete_Some Γ Γ' i x :
   env_lookup_delete i Γ = Some (x,Γ') ↔ Γ !! i = Some x ∧ Γ' = env_delete i Γ.
diff --git a/theories/tests/proofmode.v b/theories/tests/proofmode.v
index 449f4e9b17b79b7f0ea603beffa9733e73455d6b..b97d642d2bd159e41380556e34ce572d9f2078b0 100644
--- a/theories/tests/proofmode.v
+++ b/theories/tests/proofmode.v
@@ -247,4 +247,11 @@ Lemma test_iAlways P Q R :
   □ P -∗ bi_persistently Q → R -∗ bi_persistently (bi_affinely (bi_affinely P)) ∗ □ Q.
 Proof. iIntros "#HP #HQ HR". iSplitL. iAlways. done. iAlways. done. Qed.
 
+(* TODO: This test is broken in Coq 8.6. Should be restored once we drop Coq
+8.6 support. See also issue #108. *)
+(*
+Lemma test_iIntros_pure : (⌜ ¬False ⌝ : uPred M)%I.
+Proof. by iIntros (?). Qed.
+*)
+
 End tests.