A Write Once Memory (WOM) is a storage device that consists of binary cells, where each cell can change from the level zero to the level one only once. Examples of WOMs include punch cards, optical disks, and more recently flash memories. A length-$n$, $t$-write WOM-code is a coding scheme that allows $t$ messages to be stored in $n$ cells. If on the $i$-th write we write one of $M_i$ messages, then the rate of the $i$-th write is $\log_2M_i/n$. The sum-rate of the WOM-code is the sum of all individual rates on all writes. We address two different problems. The rates on all writes either have to be the same or can vary from one write to another. We call the first case a fixed-rate WOM-code and the latter an unrestricted-rate WOM-code. We first present a family of two-write WOM-codes. We follow the coset coding scheme, used to construct WOM-codes by Cohen et al. and recently by Wu, in order to construct from each linear code a two-write WOM-code. The two-write construction is generalized for WOM-codes with $q$ levels per cell, which is used with ternary cells to generate a family of $t$-write WOM-codes for all $t$. Another generalized construction is given which provides more WOM-codes families. Lastly, we show a recursive method to construct fixed-rate WOM-codes. We give a comparison showing that the WOM-codes constructed here outperform all previously known WOM-codes for $2\leq t\leq 10$ for both cases of fixed- and unrestricted-rate.