  A 2-group is a `categorified' version of a group, in which the underlying set
G has been replaced by a category and the multiplication map m: G x G -> G has
been replaced by a functor. A number of precise definitions of this notion have
already been explored, but a full treatment of their relationships is difficult
to extract from the literature. Here we describe the relation between two of
the most important versions of this notion, which we call `weak' and `coherent'
2-groups. A weak 2-group is a weak monoidal category in which every morphism
has an inverse and every object x has a `weak inverse': an object y such that x
tensor y and y tensor x are isomorphic to 1. A coherent 2-group is a weak
2-group in which every object x is equipped with a specified weak inverse x*
and isomorphisms i_x: 1 -> x tensor x*, e_x: x* tensor x -> 1 forming an
adjunction. We define 2-categories of weak and coherent 2-groups and construct
an `improvement' 2-functor which turns weak 2-groups into coherent ones; using
this one can show that these 2-categories are biequivalent. We also internalize
the concept of a coherent 2-group. This gives a way of defining topological
2-groups, Lie 2-groups, and the like.
