diff --git a/lib/ring.gd b/lib/ring.gd
index c891332300..5c0741b1ab 100644
--- a/lib/ring.gd
+++ b/lib/ring.gd
@@ -491,9 +491,8 @@ DeclareOperation( "ClosureRing", [ IsRing, IsObject ] );
##
##
##
-## A ring R is called a unique factorization ring if it is an
-## integral ring (see ),
-## and every nonzero element has a unique factorization into
+## A ring R is called a unique factorization ring if
+## every nonzero element has a unique factorization into
## irreducible elements,
## i.e., a unique representation as product of irreducibles
## (see ).
@@ -501,19 +500,6 @@ DeclareOperation( "ClosureRing", [ IsRing, IsObject ] );
## up to multiplication of the factors by units
## (see ).
##
-## Mathematically, a field should therefore also be a unique factorization
-## ring, since every nonzero element is a unit.
-## In ⪆, however,
-## at least at present fields do not lie in the filter
-## ,
-## since operations such as ,
-## ,
-## and so on do
-## not apply to fields (the results would be trivial, and not
-## especially useful) and methods which require their arguments to
-## lie in expect these operations
-## to work.
-##
## (Note that we cannot install a subset maintained method for this filter
## since the factorization of an element needs not exist in a subring.
## As an example, consider the subring 4 &NN; + 1 of the ring
@@ -545,7 +531,7 @@ DeclareCategory( "IsUniqueFactorizationRing", IsRing );
##
##
##
-## A ring R is called a Euclidean ring if it is an integral ring and
+## A ring R is called a Euclidean ring if it is a non-trivial commutative ring and
## there exists a function \delta, called the Euclidean degree, from
## R-\{0_R\} into a well-ordered set (such as the nonnegative integers),
## such that for every pair r \in R and s \in R-\{0_R\} there
@@ -624,7 +610,7 @@ InstallSubsetMaintenance( IsIntegralRing,
InstallTrueMethod( IsIntegralRing,
IsRing and IsMagmaWithInversesIfNonzero and IsNonTrivial );
InstallTrueMethod( IsIntegralRing,
- IsUniqueFactorizationRing and IsNonTrivial );
+ IsRing and IsCyclotomicCollection and IsNonTrivial );
#############################################################################
diff --git a/lib/ring.gi b/lib/ring.gi
index 4b5b411ad7..ca631d6fe8 100644
--- a/lib/ring.gi
+++ b/lib/ring.gi
@@ -702,7 +702,7 @@ InstallMethod( IsIntegralRing,
zero := Zero( R );
for i in [1..Length(elms)] do
if elms[i] = zero then continue; fi;
- for k in [i+1..Length(elms)] do
+ for k in [i..Length(elms)] do
if elms[k] = zero then continue; fi;
if elms[i] * elms[k] = zero then
return false;
diff --git a/tst/testinstall/ring.tst b/tst/testinstall/ring.tst
new file mode 100644
index 0000000000..6123f470c5
--- /dev/null
+++ b/tst/testinstall/ring.tst
@@ -0,0 +1,34 @@
+gap> START_TEST("ring.tst");
+
+#####################################################################
+#
+# Tests for IsIntegralRing
+#
+# Trivial ring
+gap> IsIntegralRing( SmallRing(1,1) );
+false
+
+# Non-commutative ring
+gap> IsIntegralRing( SmallRing(4,7) );
+false
+
+# Zero divisors on the diagonal
+gap> IsIntegralRing( SmallRing(4,3) );
+false
+
+# Zero divisors not on the diagonal
+gap> IsIntegralRing( Integers mod 6 );
+false
+
+# Integral rings
+gap> IsIntegralRing( GF(5) );
+true
+gap> IsIntegralRing( Integers );
+true
+gap> IsIntegralRing( Rationals );
+true
+gap> IsIntegralRing( CF(4) );
+true
+
+#
+gap> STOP_TEST( "ring.tst" );