diff --git a/lily/incipit-engraver.cc b/lily/incipit-engraver.cc
new file mode 100644
index 0000000..05114d1
--- /dev/null
+++ b/lily/incipit-engraver.cc
@@ -0,0 +1,111 @@
+/*
+  incipit-engraver.cc -- implement Incipit_engraver
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 2008 Nicolas Sceaux <nicolas.sceaux@free.fr>
+*/
+
+
+#include "engraver.hh"
+#include "item.hh"
+#include "side-position-interface.hh"
+#include "translator.icc"
+
+class Incipit_engraver : public Engraver
+{
+public:
+  TRANSLATOR_DECLARATIONS (Incipit_engraver);
+
+protected:
+  Item *clef_;
+  Item *key_signature_;
+  Item *time_signature_;
+  bool done_;
+  
+  void process_music ();
+  void stop_translation_timestep ();
+};
+
+Incipit_engraver::Incipit_engraver ()
+{
+  clef_ = key_signature_ = time_signature_ = 0;
+  done_ = false;
+}
+
+void
+Incipit_engraver::process_music ()
+{
+  if (! done_)
+    {
+      /* Clef */
+      SCM cpos = get_property ("incipitClefPosition");
+      SCM clef_glyph = get_property ("incipitClefGlyph");
+      if (scm_is_number (cpos) && scm_is_string (clef_glyph))
+        {
+          clef_ = make_item ("IncipitClef", SCM_EOL);
+          clef_->set_property ("glyph", clef_glyph);
+          clef_->set_property ("staff-position", cpos);
+          
+          SCM oct = get_property ("incipitClefOctavation");
+          if (scm_is_number (oct) && scm_to_int (oct))
+            {
+              Item *g = make_item ("OctavateEight", SCM_EOL);
+              int abs_oct = scm_to_int (oct);
+              int dir = sign (abs_oct);
+              abs_oct = abs (abs_oct) + 1;
+              SCM txt = scm_number_to_string (scm_from_int (abs_oct),
+                                              scm_from_int (10));
+              g->set_property ("text",
+                               scm_list_n (ly_lily_module_constant ("vcenter-markup"),
+                                           txt, SCM_UNDEFINED));
+              Side_position_interface::add_support (g, clef_);
+              g->set_parent (clef_, Y_AXIS);
+              g->set_parent (clef_, X_AXIS);
+              g->set_property ("direction", scm_from_int (dir));
+            }
+          
+          /* Key signature */
+          SCM c0pos = get_property ("incipitMiddleCPosition");
+          SCM alterations = get_property ("incipitKeySignature");
+          if (scm_is_number (c0pos) && scm_to_int (c0pos)
+              && scm_is_pair (alterations))
+            {
+              key_signature_ = make_item ("IncipitKeySignature", SCM_EOL);
+              key_signature_->set_property ("c0-position", c0pos);
+              key_signature_->set_property ("alteration-alist", alterations);
+            }
+          
+          /* Time signature */
+          SCM fraction = get_property ("incipitTimeSignatureFraction");
+          if (scm_is_pair (fraction))
+            {
+              time_signature_ = make_item ("IncipitTimeSignature", SCM_EOL);
+              time_signature_->set_property ("fraction", fraction);
+            }
+        }
+      done_ = true;
+    }
+}
+
+void
+Incipit_engraver::stop_translation_timestep ()
+{
+  if (clef_)
+    clef_ = key_signature_ = time_signature_ = 0;
+}
+
+ADD_TRANSLATOR (Incipit_engraver,
+                /* doc */ "Create incipit Clef, KeySignature and TimeSignature.",
+		/* create */
+		"IncipitClef "
+		"OctavateEight "
+		"IncipitKeySignature "
+		"IncipitTimeSignature ",
+		/* read */ "incipitClefPosition "
+                "incipitClefGlyph "
+                "incipitClefOctavation "
+                "incipitMiddleCPosition "
+                "incipitKeySignature "
+                "incipitTimeSignatureFraction ",
+		/* write */ "");
diff --git a/scm/define-context-properties.scm b/scm/define-context-properties.scm
index 528bce0..33c2629 100644
--- a/scm/define-context-properties.scm
+++ b/scm/define-context-properties.scm
@@ -248,6 +248,18 @@ string selector for tablature notation.")
 printed as numbers, but only as extender lines.")
      (implicitTimeSignatureVisibility ,vector? "break visibility for
 the default time signature.")
+     (incipitClefGlyph ,string? "The name of the clef symbol to use from
+the incipit clef. See @code{clefGlyph}.")
+     (incipitClefPosition ,number? "Position of the incipit clef, from the
+center of the staff. See @code{clefPosition}.")
+     (incipitClefOctavation ,integer? "Octavation of the incipit clef,
+see @code{clefOctavation}.")
+     (incipitMiddleCPosition ,number? "The place of the middle C in
+incipit, see @{middleCPosition}.")
+     (incipitKeySignature ,list? "The incipit key signature, see
+@code{keySignature}.")
+     (incipitTimeSignatureFraction ,number-pair? "A pair of number
+signifying the incipit time signature. See @code{timeSignatureFraction}.")
      (instrumentCueName ,markup? "The name to print if another
 instrument is to be taken.")
      (instrumentName ,markup? "The name to print left of a staff.  The
diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm
index 800362e..146ca3d 100644
--- a/scm/define-grobs.scm
+++ b/scm/define-grobs.scm
@@ -402,6 +402,9 @@
 			      ;; begin of line
 			      (
 			       left-edge
+			       incipit-clef
+			       incipit-key-signature
+			       incipit-time-signature
 			       ambitus
 			       breathing-sign
 			       clef
@@ -822,6 +825,55 @@
 		 (interfaces . (system-start-text-interface
 				side-position-interface
 				font-interface))))))
+    (IncipitClef
+     . (
+	(stencil . ,ly:clef::print)
+	(glyph-name . ,ly:clef::calc-glyph-name)
+	(non-musical . #t)
+	(avoid-slur . inside)
+	(font-family . music)
+	(break-align-symbol . incipit-clef)
+	(break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
+	(break-visibility . ,begin-of-line-visible)
+	(space-alist . ((incipit-key-signature . (minimum-space . 3.5))
+			(incipit-time-signature . (minimum-space . 4.2))
+			(clef . (minimum-space . 4.5))))
+	(Y-offset . ,ly:staff-symbol-referencer::callback)
+	(meta . ((class . Item)
+		 (interfaces . (clef-interface
+				staff-symbol-referencer-interface
+				font-interface
+				break-aligned-interface))))))
+    (IncipitKeySignature
+     . (
+	(stencil . ,ly:key-signature-interface::print)
+	(glyph-name-alist . ,standard-alteration-glyph-name-alist)
+	(space-alist . ((incipit-time-signature . (extra-space . 1.15))
+			(clef . (minimum-space . 4.5))))
+	(Y-offset . ,ly:staff-symbol-referencer::callback)
+	(break-align-symbol . incipit-key-signature)
+	(break-align-anchor . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
+	(break-visibility . ,begin-of-line-visible)
+	(non-musical . #t)
+	(meta . ((class . Item)
+		 (interfaces . (key-signature-interface
+				font-interface
+				break-aligned-interface))))))
+    (IncipitTimeSignature
+     . (
+	(stencil . ,ly:time-signature::print)
+	(break-align-symbol . incipit-time-signature)
+	(break-align-anchor
+	 . ,ly:break-aligned-interface::calc-extent-aligned-anchor)
+	(break-visibility . ,all-visible)
+	(avoid-slur . inside)
+	(space-alist . ((clef . (minimum-space . 4.5))))
+	(non-musical . #t)
+	(style . C)
+	(meta . ((class . Item)
+		 (interfaces . (time-signature-interface
+				break-aligned-interface
+				font-interface))))))
 
     (InstrumentSwitch
      . (
