diff --git a/lib/grpmat.gd b/lib/grpmat.gd
index 5ef8db275d..d2c9d0a906 100644
--- a/lib/grpmat.gd
+++ b/lib/grpmat.gd
@@ -345,7 +345,8 @@ DeclareAttribute( "InvariantBilinearForm", IsMatrixGroup );
##
## This property tests, whether a matrix group matgrp is the full
## subgroup of GL or SL (the property determines
-## which it is) respecting the form stored as the value of
+## which it is) in the right dimension over the (smallest) ring which
+## contains all entries of its elements, respecting the form stored as the value of
## for matgrp.
##
##
@@ -462,7 +463,9 @@ DeclareAttribute( "InvariantQuadraticForm", IsMatrixGroup );
##
## This property tests, whether the matrix group matgrp is the full
## subgroup of GL or SL (the property determines
-## which it is) respecting the value
+## which it is) in the right dimension over the (smallest) ring which
+## contains all entries of its elements,
+## respecting the value
## of matgrp.
## g:= Sp( 2, 3 );;
diff --git a/lib/grpmat.gi b/lib/grpmat.gi
index 1338ce2dcd..1f0940b39c 100644
--- a/lib/grpmat.gi
+++ b/lib/grpmat.gi
@@ -1266,3 +1266,53 @@ InstallMethod( InvariantBilinearForm,
Q:= InvariantQuadraticForm( matgrp ).matrix;
return rec( matrix:= ( Q + TransposedMat( Q ) ) );
end );
+
+#############################################################################
+##
+#M ConjugateGroup( , ) of a matrix group
+##
+InstallMethod( ConjugateGroup, ", ", IsCollsElms,
+ [ IsMatrixGroup, IsMultiplicativeElementWithInverse ],
+ function( G, g )
+ local H, m, ginv;
+
+ H := GroupByGenerators( OnTuples( GeneratorsOfGroup( G ), g ), One(G) );
+ UseIsomorphismRelation( G, H );
+ if HasIsGeneralLinearGroup( G ) then
+ SetIsGeneralLinearGroup( H, IsGeneralLinearGroup( G ) );
+ fi;
+ if HasIsSpecialLinearGroup( G ) then
+ SetIsSpecialLinearGroup( H, IsSpecialLinearGroup( G ) );
+ fi;
+ if HasIsSubgroupSL( G ) then
+ SetIsSubgroupSL( H, IsSubgroupSL( G ) );
+ fi;
+ if HasInvariantBilinearForm( G ) or HasInvariantQuadraticForm( G ) then
+ ginv := g^-1;
+ fi;
+ if HasInvariantBilinearForm( G ) then
+ m := ginv * InvariantBilinearForm(G).matrix * TransposedMat(ginv);
+ SetInvariantBilinearForm( H, rec( matrix := m ) );
+ fi;
+ if HasInvariantQuadraticForm( G ) then
+ m := ginv * InvariantQuadraticForm(G).matrix * TransposedMat(ginv);
+ SetInvariantQuadraticForm( H, rec( matrix := m ) );
+ fi;
+ if IsSubset( FieldOfMatrixGroup( G ), FieldOfMatrixList( [ g ] ) ) then
+ if HasIsNaturalGL( G ) then
+ SetIsNaturalGL( H, IsNaturalGL( G ) );
+ fi;
+ if HasIsNaturalSL( G ) then
+ SetIsNaturalSL( H, IsNaturalSL( G ) );
+ fi;
+ if HasIsFullSubgroupGLorSLRespectingBilinearForm( G )
+ and IsFullSubgroupGLorSLRespectingBilinearForm( G ) then
+ SetIsFullSubgroupGLorSLRespectingBilinearForm( H, true );
+ fi;
+ if HasIsFullSubgroupGLorSLRespectingQuadraticForm( G )
+ and IsFullSubgroupGLorSLRespectingQuadraticForm( G ) then
+ SetIsFullSubgroupGLorSLRespectingQuadraticForm( H, true );
+ fi;
+ fi;
+ return H;
+end );
diff --git a/tst/testinstall/grp/classic-forms.tst b/tst/testinstall/grp/classic-forms.tst
index d5e8b696e7..908e0693c4 100644
--- a/tst/testinstall/grp/classic-forms.tst
+++ b/tst/testinstall/grp/classic-forms.tst
@@ -54,6 +54,8 @@ gap> grps:=[];;
gap> for d in [3,5,7] do
> for q in [2,3,4,5,7,8,9,16,17,25,27] do
> Add(grps, GO(d,q));
+> Add(grps, GO(d,q) ^ RandomInvertibleMat(d,GF(q)));
+> Add(grps, GO(d,q) ^ RandomInvertibleMat(d,GF(q^2)));
> od;
> od;
gap> ForAll(grps, CheckGeneratorsInvertible);
@@ -71,6 +73,10 @@ gap> for d in [2,4,6,8] do
> for q in [2,3,4,5,7,8,9,16,17,25,27] do
> Add(grps, GO(+1,d,q));
> Add(grps, GO(-1,d,q));
+> Add(grps, GO(+1,d,q) ^ RandomInvertibleMat(d,GF(q)));
+> Add(grps, GO(-1,d,q) ^ RandomInvertibleMat(d,GF(q)));
+> Add(grps, GO(+1,d,q) ^ RandomInvertibleMat(d,GF(q^2)));
+> Add(grps, GO(-1,d,q) ^ RandomInvertibleMat(d,GF(q^2)));
> od;
> od;
gap> ForAll(grps, CheckGeneratorsInvertible);
@@ -87,6 +93,8 @@ gap> grps:=[];;
gap> for d in [3,5,7] do
> for q in [2,3,4,5,7,8,9,16,17,25,27] do
> Add(grps, SO(d,q));
+> Add(grps, SO(d,q) ^ RandomInvertibleMat(d,GF(q)));
+> Add(grps, SO(d,q) ^ RandomInvertibleMat(d,GF(q^2)));
> od;
> od;
gap> ForAll(grps, CheckGeneratorsSpecial);
@@ -104,6 +112,10 @@ gap> for d in [2,4,6,8] do
> for q in [2,3,4,5,7,8,9,16,17,25,27] do
> Add(grps, SO(+1,d,q));
> Add(grps, SO(-1,d,q));
+> Add(grps, SO(+1,d,q) ^ RandomInvertibleMat(d,GF(q)));
+> Add(grps, SO(-1,d,q) ^ RandomInvertibleMat(d,GF(q)));
+> Add(grps, SO(+1,d,q) ^ RandomInvertibleMat(d,GF(q^2)));
+> Add(grps, SO(-1,d,q) ^ RandomInvertibleMat(d,GF(q^2)));
> od;
> od;
gap> ForAll(grps, CheckGeneratorsSpecial);
@@ -124,6 +136,8 @@ gap> grps:=[];;
gap> for d in [3,5,7] do
> for q in [2,3,4,5,7,8,9,16,17,25,27] do
> Add(grps, Omega(d,q));
+> Add(grps, Omega(d,q) ^ RandomInvertibleMat(d,GF(q)));
+> Add(grps, Omega(d,q) ^ RandomInvertibleMat(d,GF(q^2)));
> od;
> od;
gap> ForAll(grps, CheckGeneratorsSpecial);
@@ -141,6 +155,10 @@ gap> for d in [2,4,6,8] do
> for q in [2,3,4,5,7,8,9,16,17,25,27] do
> Add(grps, Omega(+1,d,q));
> Add(grps, Omega(-1,d,q));
+> Add(grps, Omega(+1,d,q) ^ RandomInvertibleMat(d,GF(q)));
+> Add(grps, Omega(-1,d,q) ^ RandomInvertibleMat(d,GF(q)));
+> Add(grps, Omega(+1,d,q) ^ RandomInvertibleMat(d,GF(q^2)));
+> Add(grps, Omega(-1,d,q) ^ RandomInvertibleMat(d,GF(q^2)));
> od;
> od;
gap> ForAll(grps, CheckGeneratorsSpecial);
@@ -191,6 +209,8 @@ gap> grps:=[];;
gap> for d in [2,4,6,8] do
> for q in [2,3,4,5,7,8,9,16,17,25,27] do
> Add(grps, Sp(d,q));
+> Add(grps, Sp(d,q) ^ RandomInvertibleMat(d,GF(q)));
+> Add(grps, Sp(d,q) ^ RandomInvertibleMat(d,GF(q^2)));
> od;
> od;
gap> ForAll(grps, CheckGeneratorsSpecial);