diff --git a/Music/Typesetting/Ascribe.hs b/Music/Typesetting/Ascribe.hs
--- a/Music/Typesetting/Ascribe.hs
+++ b/Music/Typesetting/Ascribe.hs
@@ -5,26 +5,29 @@
 
 import Music.Typesetting.Literal
 import Music.Typesetting.Model
+import Music.Typesetting.Process
 import Music.Typesetting.Query
 
 -- | Predicate /or/.
 p_or :: (t -> Bool) -> (t -> Bool) -> t -> Bool
 p_or f1 f2 x = f1 x || f2 x
 
--- | Drop annotation on repeated notes.
+-- | Drop annotation on repeated notes, and do not tie rests.
 set_note_duration :: (T.Duration_A,Note) -> Note
 set_note_duration (d,n) =
     let (da_d,da_a) = d
         Note _ a = n
         a' = map from_d_annotation da_a
-    in case T.duration_a_tied_lr d of
-         (False,False) -> Note da_d (a ++ a')
-         (False,True) -> let fn = not . na_annotation_at_end_tied_only
-                         in Note da_d (filter fn a ++ a')
-         (True,True) -> Note da_d (filter na_annotation_at_tied_either a ++ a')
-         (True,False) -> let fn = na_annotation_at_tied_either `p_or`
-                                  na_annotation_at_end_tied_only
-                         in Note da_d (filter fn a ++ a')
+    in if n_is_rest n
+       then n_remove_ties (Note da_d (a ++ a'))
+       else case T.duration_a_tied_lr d of
+              (False,False) -> Note da_d (a ++ a')
+              (False,True) -> let fn = not . na_annotation_at_end_tied_only
+                              in Note da_d (filter fn a ++ a')
+              (True,True) -> Note da_d (filter na_annotation_at_tied_either a ++ a')
+              (True,False) -> let fn = na_annotation_at_tied_either `p_or`
+                                       na_annotation_at_end_tied_only
+                              in Note da_d (filter fn a ++ a')
 
 -- | Variant of 'T.mm_ascribe_chd' post-processed by 'set_note_duration'.
 mm_ascribe :: [[T.Duration_A]] -> [Note] -> [[Note]]
diff --git a/Music/Typesetting/Literal.hs b/Music/Typesetting/Literal.hs
--- a/Music/Typesetting/Literal.hs
+++ b/Music/Typesetting/Literal.hs
@@ -1,12 +1,15 @@
 module Music.Typesetting.Literal where
 
-import Data.List
-import Data.Maybe
-import Data.Ratio
+import Data.List {- base -}
+import Data.Maybe {- base -}
+import Data.Ratio {- base -}
+
 import Music.Theory.Clef {- hmt -}
-import Music.Theory.Duration
-import Music.Theory.Duration.Annotation
-import Music.Theory.Duration.RQ
+import Music.Theory.Duration {- hmt -}
+import Music.Theory.Duration.Annotation {- hmt -}
+import Music.Theory.Duration.RQ {- hmt -}
+import Music.Theory.Dynamic_Mark {- hmt -}
+
 import Music.Typesetting.Model
 import Music.Typesetting.Query
 
@@ -158,7 +161,7 @@
 end_slide = N_End_Slide
 
 laissez_vibrer :: N_Annotation
-laissez_vibrer = N_Direction D_Laissez_Vibrer
+laissez_vibrer = N_Direction (D_Words Above "l.v.")
 
 fermata :: N_Annotation
 fermata = N_Fermata
@@ -175,6 +178,9 @@
 pedal_up = N_Direction (D_Pedal Pedal_Stop True False)
 pedal_change = N_Direction (D_Pedal Pedal_Change True False)
 pedal_continue = N_Direction (D_Pedal Pedal_Continue True False)
+
+dynamic_mark :: Dynamic_Mark_T -> N_Annotation
+dynamic_mark = N_Direction . D_Dynamic_Mark -- N_Dynamic_Mark
 
 -- * Parts, groups etc.
 
diff --git a/Music/Typesetting/Literal/Dynamic.hs b/Music/Typesetting/Literal/Dynamic.hs
--- a/Music/Typesetting/Literal/Dynamic.hs
+++ b/Music/Typesetting/Literal/Dynamic.hs
@@ -2,10 +2,9 @@
 module Music.Typesetting.Literal.Dynamic where
 
 import Music.Theory.Dynamic_Mark {- hmt -}
-import Music.Typesetting.Model
 
-dynamic_mark :: Dynamic_Mark_T -> N_Annotation
-dynamic_mark = N_Direction . D_Dynamic_Mark -- N_Dynamic_Mark
+import Music.Typesetting.Literal
+import Music.Typesetting.Model
 
 niente,pppp,ppp,pp,p,mp,mf,f,ff,fff,ffff,fp,sfz :: N_Annotation
 niente = dynamic_mark Niente
diff --git a/Music/Typesetting/Model.hs b/Music/Typesetting/Model.hs
--- a/Music/Typesetting/Model.hs
+++ b/Music/Typesetting/Model.hs
@@ -5,6 +5,7 @@
 import Music.Theory.Dynamic_Mark
 import Music.Theory.Key
 import Music.Theory.Pitch
+import Music.Theory.Pitch.Note
 import Music.Theory.Tempo_Marking
 import Music.Theory.Time_Signature
 
@@ -57,13 +58,14 @@
              | Sound_Dynamics Double -- % of F (where F=90)
                deriving (Eq,Ord,Show)
 
-data Direction_T = D_Dynamic_Mark Dynamic_Mark_T
+data Direction_T = D_Rehearsal String
+                 | D_Words Placement_T String
                  | D_Hairpin Hairpin_T
-                 | D_Laissez_Vibrer
-                 | D_Tempo_Marking Tempo_Marking
+                 | D_Dynamic_Mark Dynamic_Mark_T
                  | D_Pedal {pedal_type :: Pedal_T
                            ,pedal_line :: Bool
                            ,pedal_sign :: Bool}
+                 | D_Tempo_Marking Tempo_Marking {- metronome -}
                     deriving (Eq,Ord,Show)
 
 data Beam_T = Beam_Begin | Beam_Continue | Beam_End
diff --git a/Music/Typesetting/Output/MusicXML.hs b/Music/Typesetting/Output/MusicXML.hs
--- a/Music/Typesetting/Output/MusicXML.hs
+++ b/Music/Typesetting/Output/MusicXML.hs
@@ -1,21 +1,24 @@
 module Music.Typesetting.Output.MusicXML where
 
-import Data.Char
-import Data.List
-import Data.Maybe
-import Data.Ratio
-import Music.Typesetting.Model
-import Music.Typesetting.Output.MusicXML.Binding
+import Data.Char {- base -}
+import Data.List {- base -}
+import Data.Maybe {- base -}
+import Data.Ratio {- base -}
+import qualified Text.XML.Light as X {- xml -}
+
 import qualified Music.Theory.Clef as T {- hmt -}
 import qualified Music.Theory.Duration as T
 import qualified Music.Theory.Duration.RQ as T
 import qualified Music.Theory.Dynamic_Mark as T
 import qualified Music.Theory.Key as T
 import qualified Music.Theory.Pitch as T
+import qualified Music.Theory.Pitch.Note as T
 import qualified Music.Theory.Time_Signature as T
 import qualified Music.Theory.Tempo_Marking as T
-import qualified Text.XML.Light as X {- xml -}
 
+import Music.Typesetting.Model
+import Music.Typesetting.Output.MusicXML.Binding
+
 x_clef_t :: T.Clef_T -> (String,Integer)
 x_clef_t c =
     case c of
@@ -292,9 +295,12 @@
       D_Hairpin T.End_Hairpin ->
           let ty = direction_type [] [wedge [type_A "stop"]]
           in Just (direction [x_placement_t Below] [ty])
-      D_Laissez_Vibrer ->
-          let ty = direction_type [] [words' [] [cdata "l.v."]]
-          in Just (direction [x_placement_t Above] [ty])
+      D_Rehearsal str ->
+          let ty = direction_type [] [rehearsal [] [cdata str]]
+          in Just (direction [] [ty])
+      D_Words plc str ->
+          let ty = direction_type [] [words' [] [cdata str]]
+          in Just (direction [x_placement_t plc] [ty])
       D_Pedal pt _ _ ->
           let ty = direction_type [] [pedal [x_pedal_type pt]]
           in Just (direction [x_placement_t Below] [ty])
diff --git a/Music/Typesetting/Output/MusicXML/Binding.hs b/Music/Typesetting/Output/MusicXML/Binding.hs
--- a/Music/Typesetting/Output/MusicXML/Binding.hs
+++ b/Music/Typesetting/Output/MusicXML/Binding.hs
@@ -62,6 +62,9 @@
 wedge :: EMPTY_ELEM
 wedge = mk_empty_elem "wedge"
 
+rehearsal :: ELEM
+rehearsal = mk_elem "rehearsal"
+
 words' :: ELEM
 words' = mk_elem "words"
 
diff --git a/Music/Typesetting/Process.hs b/Music/Typesetting/Process.hs
--- a/Music/Typesetting/Process.hs
+++ b/Music/Typesetting/Process.hs
@@ -16,6 +16,13 @@
 
 --  * Note
 
+-- | Remove any tie annotations at note
+n_remove_ties :: Note -> Note
+n_remove_ties (Note d a) =
+    let f e = e == N_End_Tied || e == N_Begin_Tied
+        a' = filter (not . f) a
+    in Note d a'
+
 -- | Process a 'Note' sequence adding 'D_End_Hairpin' annotations as
 -- required, ie. where there is an open hairpin annotation and a
 -- 'Note' has a dyamic annotation without a close hairpin annotation.
diff --git a/Music/Typesetting/Query.hs b/Music/Typesetting/Query.hs
--- a/Music/Typesetting/Query.hs
+++ b/Music/Typesetting/Query.hs
@@ -1,15 +1,17 @@
 module Music.Typesetting.Query where
 
-import Data.Function
-import Data.List
-import Data.Maybe
+import Data.Function {- base -}
+import Data.List {- base -}
+import Data.Maybe {- base -}
+
 import Music.Theory.Dynamic_Mark {- hmt -}
-import Music.Theory.Duration
-import Music.Theory.Duration.Name
-import Music.Theory.Duration.RQ
-import Music.Theory.Pitch
-import Music.Theory.Tempo_Marking
-import Music.Theory.Time_Signature
+import Music.Theory.Duration {- hmt -}
+import Music.Theory.Duration.Name {- hmt -}
+import Music.Theory.Duration.RQ {- hmt -}
+import Music.Theory.Pitch {- hmt -}
+import Music.Theory.Tempo_Marking {- hmt -}
+import Music.Theory.Time_Signature {- hmt -}
+
 import Music.Typesetting.Model
 
 -- * Note annotation
@@ -52,6 +54,7 @@
 data At_Tied = At_End_Tied | At_Either_Tied | At_Begin_Tied
                deriving (Eq,Enum,Ord,Show)
 
+-- | Determines where an annotation is placed at tied notes.
 na_annotation_at_tied :: N_Annotation -> At_Tied
 na_annotation_at_tied a =
     let err = error (show ("na_annotation_at_tied",a))
@@ -64,8 +67,8 @@
       N_Notehead _ -> At_Either_Tied
       N_Staff _ -> At_Either_Tied
       N_Beam _ _ -> At_Either_Tied
-      N_Begin_Tied -> err
-      N_End_Tied -> err
+      N_Begin_Tied -> At_End_Tied
+      N_End_Tied -> At_Begin_Tied
       N_Begin_Slur -> At_Begin_Tied
       N_End_Slur -> At_End_Tied
       N_Begin_Tuplet _ -> err
@@ -84,7 +87,9 @@
       N_Direction (D_Hairpin Crescendo) -> At_Begin_Tied
       N_Direction (D_Hairpin Diminuendo) -> At_Begin_Tied
       N_Direction (D_Hairpin End_Hairpin) -> At_End_Tied
-      N_Direction D_Laissez_Vibrer -> At_End_Tied
+      N_Direction (D_Words Above "l.v.") -> At_End_Tied
+      N_Direction (D_Words _ _) -> At_Begin_Tied
+      N_Direction (D_Rehearsal _) -> At_Begin_Tied
       N_Direction (D_Tempo_Marking _) -> At_Begin_Tied
       N_Direction (D_Pedal {}) -> At_Begin_Tied
       N_Voice _ -> At_Either_Tied
@@ -108,16 +113,19 @@
 n_is_chord_elem = n_has_annotation N_Chord
 
 n_is_untied :: Note -> Bool
-n_is_untied n = not (n_has_annotation N_Begin_Tied n ||
-                     n_has_annotation N_End_Tied n)
+n_is_untied n =
+    not (n_has_annotation N_Begin_Tied n ||
+         n_has_annotation N_End_Tied n)
 
 n_is_initial_tie :: Note -> Bool
-n_is_initial_tie n = n_has_annotation N_Begin_Tied n &&
-                     not (n_has_annotation N_End_Tied n)
+n_is_initial_tie n =
+    n_has_annotation N_Begin_Tied n &&
+    not (n_has_annotation N_End_Tied n)
 
 n_is_final_tie :: Note -> Bool
-n_is_final_tie n = n_has_annotation N_End_Tied n &&
-                   not (n_has_annotation N_Begin_Tied n)
+n_is_final_tie n =
+    n_has_annotation N_End_Tied n &&
+    not (n_has_annotation N_Begin_Tied n)
 
 n_pitch :: Note -> Maybe Pitch
 n_pitch (Note _ as) =
diff --git a/README b/README
--- a/README
+++ b/README
@@ -4,14 +4,13 @@
 A [haskell][hs] music notation model with output to
 [MusicXML][music-xml].
 
-See [hly][hly] for an alternative writing to [lilypond][ly].
+See [hly](?t=hly) for an alternative writing to [lilypond][ly].
 
 [hs]: http://haskell.org/
 [music-xml]: http://www.makemusic.com/musicxml/
-[hly]: http://rd.slavepianos.org/?t=hly
 [ly]: http://lilypond.org/
 
-© [rohan drape][rd], 2010-2013, [gpl][gpl].
+© [rohan drape][rd], 2010-2014, [gpl][gpl].
 
 [rd]:  http://rd.slavepianos.org/
 [gpl]: http://gnu.org/copyleft/
diff --git a/hts.cabal b/hts.cabal
--- a/hts.cabal
+++ b/hts.cabal
@@ -1,22 +1,22 @@
 Name:              hts
-Version:           0.14
+Version:           0.15
 Synopsis:          Haskell Music Typesetting
 Description:       A simple music typesetting model in haskell
 License:           GPL
 Category:          Music
-Copyright:         (c) Rohan Drape, 2010-2013
+Copyright:         (c) Rohan Drape, 2010-2014
 Author:            Rohan Drape
 Maintainer:        rd@slavepianos.org
 Stability:         Experimental
-Homepage:          http://rd.slavepianos.org/?t=hts
-Tested-With:       GHC == 7.6.1
+Homepage:          http://rd.slavepianos.org/t/hts
+Tested-With:       GHC == 7.8.2
 Build-Type:        Simple
 Cabal-Version:     >= 1.8
 Data-Files:        README
 
 Library
   Build-Depends:   base == 4.*,
-                   hmt==0.14.*,
+                   hmt == 0.15.*,
                    xml
   GHC-Options:     -Wall -fwarn-tabs
   Exposed-modules: Music.Typesetting.Ascribe
