diff --git a/contrib/intarray/_int.sql.in b/contrib/intarray/_int.sql.in
index 93930b559d501d3b228509c79a94b5f920962a0a..645e9aeea2d0f348239a04a06e2c245751b9744b 100644
--- a/contrib/intarray/_int.sql.in
+++ b/contrib/intarray/_int.sql.in
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/intarray/_int.sql.in,v 1.30 2009/04/05 00:40:35 tgl Exp $ */
+/* $PostgreSQL: pgsql/contrib/intarray/_int.sql.in,v 1.31 2009/06/07 20:09:34 tgl Exp $ */
 
 -- Adjust this setting to control where the objects get created.
 SET search_path = public;
@@ -152,23 +152,23 @@ CREATE OPERATOR && (
 --	JOIN = neqjoinsel
 --);
 
---CREATE OPERATOR @> (
---	LEFTARG = _int4,
---	RIGHTARG = _int4,
---	PROCEDURE = _int_contains,
---	COMMUTATOR = '<@',
---	RESTRICT = contsel,
---	JOIN = contjoinsel
---);
+CREATE OPERATOR @> (
+	LEFTARG = _int4,
+	RIGHTARG = _int4,
+	PROCEDURE = _int_contains,
+	COMMUTATOR = '<@',
+	RESTRICT = contsel,
+	JOIN = contjoinsel
+);
 
---CREATE OPERATOR <@ (
---	LEFTARG = _int4,
---	RIGHTARG = _int4,
---	PROCEDURE = _int_contained,
---	COMMUTATOR = '@>',
---	RESTRICT = contsel,
---	JOIN = contjoinsel
---);
+CREATE OPERATOR <@ (
+	LEFTARG = _int4,
+	RIGHTARG = _int4,
+	PROCEDURE = _int_contained,
+	COMMUTATOR = '@>',
+	RESTRICT = contsel,
+	JOIN = contjoinsel
+);
 
 -- obsolete:
 CREATE OPERATOR @ (
@@ -365,8 +365,8 @@ CREATE OPERATOR CLASS gist__int_ops
 DEFAULT FOR TYPE _int4 USING gist AS
 	OPERATOR	3	&&,
 	OPERATOR	6	= (anyarray, anyarray),
-	OPERATOR	7	@> (anyarray, anyarray),
-	OPERATOR	8	<@ (anyarray, anyarray),
+	OPERATOR	7	@>,
+	OPERATOR	8	<@,
 	OPERATOR	13	@,
 	OPERATOR	14	~,
 	OPERATOR	20	@@ (_int4, query_int),
@@ -442,8 +442,8 @@ FOR TYPE _int4 USING gist
 AS
 	OPERATOR	3	&&,
 	OPERATOR	6	= (anyarray, anyarray),
-	OPERATOR	7	@> (anyarray, anyarray),
-	OPERATOR	8	<@ (anyarray, anyarray),
+	OPERATOR	7	@>,
+	OPERATOR	8	<@,
 	OPERATOR	13	@,
 	OPERATOR	14	~,
 	OPERATOR	20	@@ (_int4, query_int),
@@ -473,8 +473,8 @@ FOR TYPE _int4 USING gin
 AS
 	OPERATOR	3	&&,
 	OPERATOR	6	= (anyarray, anyarray),
-	OPERATOR	7	@> (anyarray, anyarray),
-	OPERATOR	8	<@ (anyarray, anyarray),
+	OPERATOR	7	@>,
+	OPERATOR	8	<@,
 	OPERATOR	13	@,
 	OPERATOR	14	~,
 	OPERATOR	20	@@ (_int4, query_int),
diff --git a/contrib/intarray/uninstall__int.sql b/contrib/intarray/uninstall__int.sql
index 42721ed2fb09c80107d2b2230b83c4e628ec673e..ba962cd0d574dfac91a6b1395123db2df6628630 100644
--- a/contrib/intarray/uninstall__int.sql
+++ b/contrib/intarray/uninstall__int.sql
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/intarray/uninstall__int.sql,v 1.11 2009/04/05 00:40:35 tgl Exp $ */
+/* $PostgreSQL: pgsql/contrib/intarray/uninstall__int.sql,v 1.12 2009/06/07 20:09:34 tgl Exp $ */
 
 -- Adjust this setting to control where the objects get created.
 SET search_path = public;
@@ -91,6 +91,10 @@ DROP FUNCTION icount(_int4);
 
 DROP FUNCTION intset(int4);
 
+DROP OPERATOR <@ (_int4, _int4);
+
+DROP OPERATOR @> (_int4, _int4);
+
 DROP OPERATOR ~ (_int4, _int4);
 
 DROP OPERATOR @ (_int4, _int4);
diff --git a/doc/src/sgml/intarray.sgml b/doc/src/sgml/intarray.sgml
index 2e77b57de3eea1f8f40c64cc79068504bfe1b390..9bd216ed49594dafc55d83e725dac7e768dc70ef 100644
--- a/doc/src/sgml/intarray.sgml
+++ b/doc/src/sgml/intarray.sgml
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/intarray.sgml,v 1.7 2009/04/05 00:40:35 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/intarray.sgml,v 1.8 2009/06/07 20:09:34 tgl Exp $ -->
 
 <sect1 id="intarray">
  <title>intarray</title>
@@ -134,12 +134,12 @@
       <entry>overlap &mdash; <literal>true</> if arrays have at least one common element</entry>
      </row>
      <row>
-      <entry><literal>int[] @ int[]</literal></entry>
+      <entry><literal>int[] @&gt; int[]</literal></entry>
       <entry><type>boolean</type></entry>
       <entry>contains &mdash; <literal>true</> if left array contains right array</entry>
      </row>
      <row>
-      <entry><literal>int[] ~ int[]</literal></entry>
+      <entry><literal>int[] &lt;@ int[]</literal></entry>
       <entry><type>boolean</type></entry>
       <entry>contained &mdash; <literal>true</> if left array is contained in right array</entry>
      </row>
@@ -203,13 +203,22 @@
   </table>
 
   <para>
-   The containment operators <literal>@</> and <literal>~</> are functionally
-   equivalent to <productname>PostgreSQL</>'s built-in operators
-   <literal>@&gt;</> and <literal>&lt;@</>, respectively, except that
-   <literal>@</> and <literal>~</> work only on integer arrays.  These
-   operator names are deprecated and will eventually be retired.  (Notice that
-   these names are reversed from the convention formerly followed by the core
-   geometric datatypes!)
+   (Before PostgreSQL 8.2, the containment operators <literal>@&gt;</> and
+   <literal>&lt;@</> were respectively called <literal>@</> and <literal>~</>.
+   These names are still available, but are deprecated and will eventually be
+   retired.  Notice that the old names are reversed from the convention
+   formerly followed by the core geometric datatypes!)
+  </para>
+
+  <para>
+   The containment operators <literal>@&gt;</> and <literal>&lt;@</> are
+   approximately equivalent to <productname>PostgreSQL</>'s built-in operators
+   of the same names, except that they work only on integer arrays while the
+   built-in operators work for any array type.  An important difference is
+   that <filename>intarray</>'s operators do not consider an empty array to be
+   contained in anything else.  This is consistent with the behavior of
+   GIN-indexed queries, but not with the usual mathematical definition of
+   containment.
   </para>
 
   <para>
@@ -230,10 +239,8 @@
 
   <para>
    <filename>intarray</> provides index support for the
-   <literal>&amp;&amp;</>, <literal>@</>, <literal>~</>,
-   and <literal>@@</> operators, as well as regular array equality
-   and the built-in <literal>@&gt;</> and <literal>&lt;@</> operators
-   (when used on integer arrays).
+   <literal>&amp;&amp;</>, <literal>@&gt;</>, <literal>&lt;@</>,
+   and <literal>@@</> operators, as well as regular array equality.
   </para>
 
   <para>
diff --git a/doc/src/sgml/release-8.4.sgml b/doc/src/sgml/release-8.4.sgml
index a567afffb7d6ca1c2d25d79bbed23ca887be1f05..cca2d033b2c8f773762f2f96164cdf069fdf85d5 100644
--- a/doc/src/sgml/release-8.4.sgml
+++ b/doc/src/sgml/release-8.4.sgml
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/release-8.4.sgml,v 1.7 2009/05/27 22:12:53 tgl Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/release-8.4.sgml,v 1.8 2009/06/07 20:09:34 tgl Exp $ -->
 <!-- See header comment in release.sgml about typical markup -->
 
  <sect1 id="release-8-4">
@@ -3321,20 +3321,6 @@
       </para>
      </listitem>
 
-     <listitem>
-      <para>
-       Remove <filename>contrib/intarray</>'s definitions of the
-       <literal>&lt;@</> and <literal>@&gt;</> operators (Tom)
-      </para>
-
-      <para>
-       This avoids confusion with the equivalent built-in operators.
-       If needed, the <filename>contrib/intarray</> implementations
-       are still available under their historical names <literal>@</>
-       and <literal>~</>.
-      </para>
-     </listitem>
-
      <listitem>
       <para>
        Make <filename>contrib/pg_standby</> recover all available WAL before