  A Hilbert bimodule is a right Hilbert module X over a C*-algebra A together
with a left action of A as adjointable operators on X. We consider families X =
{X_s :s\in P} of Hilbert bimodules, indexed by a semigroup P, which are endowed
with a multiplication which implements isomorphisms X_s\otimes_A X_t \to
X_{st}; such a family is a called a product system. We define a generalized
Cuntz- Pimsner algebra O_X, and we show that every twisted crossed product of A
by P can be realized as O_X for a suitable product system X. Assuming P is
quasi- lattice ordered in the sense of Nica, we analyze a certain Toeplitz
extension T_{cov}(X) of O_X by embedding it in a crossed product B_P
\times_{\tau,X} P which has been ``twisted'' by X; our main Theorem is a
characterization of the faithful representations of B_P \times_{\tau,X} P.
