diff --git a/plugins/org.eclipse.gmf.bridge/transforms/Map2Gen.qvto b/plugins/org.eclipse.gmf.bridge/transforms/Map2Gen.qvto
index d6f3d94..24fe842 100644
--- a/plugins/org.eclipse.gmf.bridge/transforms/Map2Gen.qvto
+++ b/plugins/org.eclipse.gmf.bridge/transforms/Map2Gen.qvto
@@ -19,6 +19,7 @@
 --import DiagramRunTimeModel;
 import PropertySheet;
 import PreferencePages;
+import Navigator;
 
 configuration property rcp : Boolean;
 configuration property useMapMode : Boolean;
@@ -66,6 +67,7 @@
 	--new DiagramRunTimeModel(domainGenModel XXX need notation.genmodel here instead, gmfgenModel).transform();
 	new PropertySheet(mapModel, gmfgenModel).transform();
 	new PreferencePages(mapModel, gmfgenModel).transform();
+	if not rcp then new Navigator(mapModel, gmfgenModel).transform() endif;
 }
 
 mapping GMFMAP::Mapping::structure() : GMFGEN::GenEditorGenerator@gmfgenModel {
diff --git a/plugins/org.eclipse.gmf.bridge/transforms/Navigator.qvto b/plugins/org.eclipse.gmf.bridge/transforms/Navigator.qvto
new file mode 100644
index 0000000..d2ea8b4
--- /dev/null
+++ b/plugins/org.eclipse.gmf.bridge/transforms/Navigator.qvto
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2009 Borland Software Corporation
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Artem Tikhomirov (Borland) - initial API and implementation
+ */
+modeltype GMFMAP uses mappings('http://www.eclipse.org/gmf/2006/mappings');
+modeltype GMFGEN uses gmfgen('http://www.eclipse.org/gmf/2008/GenModel');
+
+transformation Navigator(in mapModel : GMFMAP, inout gmfgenModel : GMFGEN);
+
+-- FIXME result is not completely correct now
+main() {
+	var mapRoot := mapModel.rootObjects()![GMFMAP::Mapping];
+	var genEditor := gmfgenModel.rootObjects()![GMFGEN::GenEditorGenerator];
+	genEditor.navigator := mapRoot.diagram.map navigator(genEditor.diagram);
+}
+
+mapping GMFMAP::CanvasMapping::navigator(genDiagram : GMFGEN::GenDiagram) : GMFGEN::GenNavigator {
+	childReferences += genDiagram.map navigator();
+	childReferences += genDiagram.topLevelNodes.map navigator();
+	childReferences += genDiagram.childNodes->collect(n | n.containers.getNode().map navigator(n));
+	childReferences += genDiagram.links.map navigator();
+	childReferences += genDiagram.links->collect(l | l.getTargetGenNodes().showLinkTargets(l));
+	childReferences += genDiagram.links->collect(l | l.getTargetGenNodes().showIncomingLinks(l));
+	childReferences += genDiagram.links->collect(l | l.getSourceGenNodes().showLinkSources(l));
+	childReferences += genDiagram.links->collect(l | l.getSourceGenNodes().showOutgoingLinks(l));
+}
+
+mapping GMFGEN::GenDiagram::navigator() : GMFGEN::GenNavigatorChildReference {
+	GMFGEN::GenNavigatorReferenceType::children.populate(result, self, null);
+}
+mapping GMFGEN::GenTopLevelNode::navigator() : GMFGEN::GenNavigatorChildReference {
+	GMFGEN::GenNavigatorReferenceType::children.populate(result, self, self.diagram);
+}
+mapping GMFGEN::GenNode::navigator(childNode : GMFGEN::GenChildNode) : GMFGEN::GenNavigatorChildReference {
+	GMFGEN::GenNavigatorReferenceType::children.populate(result, childNode, self);
+}
+
+mapping GMFGEN::GenLink::navigator() : GMFGEN::GenNavigatorChildReference {
+	GMFGEN::GenNavigatorReferenceType::children.populate(result, self, self.diagram);
+	groupName := 'links';
+	groupIcon := 'icons/linksNavigatorGroup.gif';
+}
+
+helper GMFGEN::GenNavigatorReferenceType::populate(inout ref : GMFGEN::GenNavigatorChildReference, child : GMFGEN::GenCommonBase, parent : GMFGEN::GenCommonBase) : GMFGEN::GenNavigatorChildReference {
+	ref.child := child;
+	ref.referenceType := self;
+	ref.parent := parent;
+	return ref;
+}
+
+helper GMFGEN::GenLinkEnd::showLinkTargets(link : GMFGEN::GenLink) : GMFGEN::GenNavigatorChildReference {
+	var rv := object GMFGEN::GenNavigatorChildReference {};
+	GMFGEN::GenNavigatorReferenceType::out_target.populate(rv, self, link);
+	rv.groupName := 'target';
+	rv.groupIcon := 'icons/linkTargetNavigatorGroup.gif';
+	return rv;
+}
+-- XXX Odd. Processing a link, adding a childreference to GenNode. Perhaps, using GenLinkEnd.genIncomingLinks would be better?
+helper GMFGEN::GenLinkEnd::showIncomingLinks(link : GMFGEN::GenLink) : GMFGEN::GenNavigatorChildReference {
+	var rv := object GMFGEN::GenNavigatorChildReference {};
+	GMFGEN::GenNavigatorReferenceType::in_source.populate(rv, link, self);
+	rv.groupName := 'incoming links';
+	rv.groupIcon := 'icons/linkTargetNavigatorGroup.gif';
+	return rv;
+}
+helper GMFGEN::GenLinkEnd::showLinkSources(link : GMFGEN::GenLink) : GMFGEN::GenNavigatorChildReference {
+	var rv := object GMFGEN::GenNavigatorChildReference {};
+	GMFGEN::GenNavigatorReferenceType::in_source.populate(rv, self, link);
+	rv.groupName := 'source';
+	rv.groupIcon := 'icons/linkSourceNavigatorGroup.gif';
+	return rv;
+}
+helper GMFGEN::GenLinkEnd::showOutgoingLinks(link : GMFGEN::GenLink) : GMFGEN::GenNavigatorChildReference {
+	var rv := object GMFGEN::GenNavigatorChildReference {};
+	GMFGEN::GenNavigatorReferenceType::out_target.populate(rv, link, self);
+	rv.groupName := 'outgoing links';
+	rv.groupIcon := 'icons/outgoingLinksNavigatorGroup.gif';
+	return rv;
+}
+
+query GMFGEN::GenChildContainer::getNode() : GMFGEN::GenNode { assert (false) with log ('Abstract query call'); return null }
+query GMFGEN::GenNode::getNode() : GMFGEN::GenNode { return self }
+query GMFGEN::GenCompartment::getNode() : GMFGEN::GenNode { return self.node }
+
+query GMFGEN::GenLink::getSourceGenNodes() : OrderedSet(GMFGEN::GenLinkEnd) {
+	if self.modelFacet.oclIsUndefined() then return self.diagram.getAllNodes() endif;
+	return self.sources;
+}
+query GMFGEN::GenLink::getTargetGenNodes() : OrderedSet(GMFGEN::GenLinkEnd) {
+	if self.modelFacet.oclIsUndefined() then return self.diagram.getAllNodes() endif;
+	return self.targets;
+}
\ No newline at end of file
