diff --git a/xtt/lib/ge/src/ge_graph.cpp b/xtt/lib/ge/src/ge_graph.cpp
index 5783c8821ab668a56d946b330c0f8f13f74a6b72..f3b511e2844ad5b82a921e74268603fb30c97102 100644
--- a/xtt/lib/ge/src/ge_graph.cpp
+++ b/xtt/lib/ge/src/ge_graph.cpp
@@ -3956,7 +3956,7 @@ int Graph::set_folder_index( const char *name, int idx)
   return grow_SetFolderIndex( object, idx);
 }
 
-int Graph::set_subwindow_source( const char *name, char *source)
+int Graph::set_subwindow_source( const char *name, char *source, char *owner)
 {
   int  sts;
   grow_tObject object;
@@ -3971,7 +3971,7 @@ int Graph::set_subwindow_source( const char *name, char *source)
   if ( grow_GetObjectType( object) != glow_eObjectType_GrowWindow)
     return 0;
 
-  sts =  grow_SetWindowSource( object, source);
+  sts =  grow_SetWindowSource( object, source, owner);
 
   if ( ctx != grow->ctx)
     grow->pop(ctx);
diff --git a/xtt/lib/ge/src/ge_graph.h b/xtt/lib/ge/src/ge_graph.h
index 2255788a7657c193e833b75793b5b21eede4ace8..6802a3986a02c2a3b48e6b2472924e73a1360598 100644
--- a/xtt/lib/ge/src/ge_graph.h
+++ b/xtt/lib/ge/src/ge_graph.h
@@ -1288,8 +1288,9 @@ class Graph {
   /*!
     \param name		Object name of window object.
     \param source      	Name of source graph.
+    \param owner      	Name of instance object. NULL if not used.
   */
-  int set_subwindow_source( const char *name, char *source);
+  int set_subwindow_source( const char *name, char *source, char *owner);
 
   //! Play a sound.
   /*!
diff --git a/xtt/lib/glow/src/glow_growapi.cpp b/xtt/lib/glow/src/glow_growapi.cpp
index f83a77ecd8780bea71f886195d7fefb666086801..7ec9c311b4c458e2f63d18d1650d1dd80decdfee 100644
--- a/xtt/lib/glow/src/glow_growapi.cpp
+++ b/xtt/lib/glow/src/glow_growapi.cpp
@@ -4769,9 +4769,9 @@ int grow_SetFolderIndex( grow_tObject folder, int idx)
   return ((GrowFolder *)folder)->set_folder( idx);
 }
 
-int grow_SetWindowSource( grow_tObject window, char *source)
+int grow_SetWindowSource( grow_tObject window, char *source, char *owner)
 {
-  return ((GrowWindow *)window)->set_source( source);
+  return ((GrowWindow *)window)->set_source( source, owner);
 }
 
 void grow_GetWindowSize( grow_tCtx ctx, int *width, int *height)
diff --git a/xtt/lib/glow/src/glow_growapi.h b/xtt/lib/glow/src/glow_growapi.h
index ca6f821bbb0c4dc514917e1f4a365f30fc90437d..700f8511eed281d9d0cf16720d8239c56e79f391 100644
--- a/xtt/lib/glow/src/glow_growapi.h
+++ b/xtt/lib/glow/src/glow_growapi.h
@@ -2993,7 +2993,7 @@ extern "C" {
   void grow_GetSubmenuPosition( grow_tObject menu, int item, double *x, double *y);
   int grow_GetMenuParent( grow_tObject menu, grow_tObject *parent);
   int grow_SetFolderIndex( grow_tObject folder, int idx);
-  int grow_SetWindowSource( grow_tObject window, char *source);
+  int grow_SetWindowSource( grow_tObject window, char *source, char *owner);
   void grow_GetWindowSize( grow_tCtx ctx, int *width, int *height);
   int grow_IsJava( char *name, int *is_frame, int *is_applet, char *java_name);
   void grow_GetOwner( grow_tCtx ctx, char *owner);
diff --git a/xtt/lib/glow/src/glow_growwindow.cpp b/xtt/lib/glow/src/glow_growwindow.cpp
index 91446fedd22574a8b04038edc9b96faf68771bd3..2fbbd7c0bac574648d4d1c9dd0f5f7594aac081d 100644
--- a/xtt/lib/glow/src/glow_growwindow.cpp
+++ b/xtt/lib/glow/src/glow_growwindow.cpp
@@ -981,7 +981,7 @@ int GrowWindow::get_background_object_limits(GlowTransform *t,
   return 0;
 }
 
-int GrowWindow::set_source( char *source)
+int GrowWindow::set_source( char *source, char *new_owner)
 {
   int clip_removed = 0;
 
@@ -992,6 +992,8 @@ int GrowWindow::set_source( char *source)
   }
 
   strcpy( input_file_name, source);
+  if ( new_owner)
+    strncpy( owner, new_owner, sizeof(owner));
   update_attributes();
   draw();
 
diff --git a/xtt/lib/glow/src/glow_growwindow.h b/xtt/lib/glow/src/glow_growwindow.h
index d4d790aa12b0bd4775f587c1546f49b7d7a632c4..bec309c7069d82fd09edb3dca91ef73e5a3ea3ee 100644
--- a/xtt/lib/glow/src/glow_growwindow.h
+++ b/xtt/lib/glow/src/glow_growwindow.h
@@ -282,7 +282,7 @@ class GrowWindow : public GrowRect {
 				   double x, double y, GlowArrayElem **background,
 				   double *min, double *max, glow_eDirection *direction);
   void set_input_focus( int focus, glow_eEvent event);
-  int set_source( char *source);
+  int set_source( char *source, char *new_owner);
 
   static void v_value_changed_cb( void *o, double value);
   static void h_value_changed_cb( void *o, double value);
diff --git a/xtt/lib/xtt/src/xtt_ge.cpp b/xtt/lib/xtt/src/xtt_ge.cpp
index 077681120661c08f7afb7971439a3cbb63b9fedb..a3e6e67516ec3a96641b5cf2800cf569204abe8c 100644
--- a/xtt/lib/xtt/src/xtt_ge.cpp
+++ b/xtt/lib/xtt/src/xtt_ge.cpp
@@ -193,9 +193,9 @@ int XttGe::set_folder_index( const char *name, int idx)
   return graph->set_folder_index( name, idx);
 }
 
-int XttGe::set_subwindow_source( const char *name, char *source)
+int XttGe::set_subwindow_source( const char *name, char *source, char *object)
 {
-  return graph->set_subwindow_source( name, source);
+  return graph->set_subwindow_source( name, source, object);
 }
 
 XttGe::~XttGe()
diff --git a/xtt/lib/xtt/src/xtt_ge.h b/xtt/lib/xtt/src/xtt_ge.h
index 2c8609fe5ede2e21ac99db1ba570d04dcc95370f..2c6e3091880f7fc1000fc0beecaed1d07cf35138 100644
--- a/xtt/lib/xtt/src/xtt_ge.h
+++ b/xtt/lib/xtt/src/xtt_ge.h
@@ -89,7 +89,7 @@ class XttGe {
   void print();
   int set_object_focus( const char *name, int empty);
   int set_folder_index( const char *name, int idx);
-  int set_subwindow_source( const char *name, char *source);
+  int set_subwindow_source( const char *name, char *source, char *object);
   void swap( int mode);
   void event_exec( int type, void *event, unsigned int size);
 
diff --git a/xtt/lib/xtt/src/xtt_xnav_command.cpp b/xtt/lib/xtt/src/xtt_xnav_command.cpp
index 8cf21129613ef7a9b6384aa9a479baab56658609..d6beacee44fa1b9f9fa9fbad8061eb52382435a1 100644
--- a/xtt/lib/xtt/src/xtt_xnav_command.cpp
+++ b/xtt/lib/xtt/src/xtt_xnav_command.cpp
@@ -340,7 +340,7 @@ dcli_tCmdTable	xnav_command_table[] = {
 			"SET",
 			&xnav_set_func,
 			{ "dcli_arg1", "dcli_arg2", "/NAME", "/VALUE",
-			  "/BYPASS", "/INDEX", "/SOURCE", ""}
+			  "/BYPASS", "/INDEX", "/SOURCE", "/OBJECT", ""}
 		},
 		{
 			"SETUP",
@@ -686,7 +686,7 @@ static int	xnav_logout_func(	void		*client_data,
 }
 
 static int	xnav_set_func(	void		*client_data,
-					void		*client_flag)
+			       	void		*client_flag)
 {
   XNav *xnav = (XNav *)client_data;
   char	arg1_str[80];
@@ -815,7 +815,9 @@ static int	xnav_set_func(	void		*client_data,
     // Command is "SET SUBWINDOW"
     XttGe *gectx;
     char graph_str[80];
-    char object_str[80];
+    char name_str[80];
+    pwr_tOName object_str;
+    char *object_p;
     char source_str[80];
 
     if ( EVEN( dcli_get_qualifier( "dcli_arg2", graph_str, sizeof(graph_str)))) {
@@ -823,7 +825,7 @@ static int	xnav_set_func(	void		*client_data,
       return XNAV__HOLDCOMMAND;
     }
 
-    if ( EVEN( dcli_get_qualifier( "/NAME", object_str, sizeof(object_str)))) {
+    if ( EVEN( dcli_get_qualifier( "/NAME", name_str, sizeof(name_str)))) {
       xnav->message('E', "Object name is missing");
       return XNAV__HOLDCOMMAND;
     }
@@ -833,12 +835,17 @@ static int	xnav_set_func(	void		*client_data,
       return XNAV__HOLDCOMMAND;
     }
 
+    if ( ODD( dcli_get_qualifier( "/OBJECT", object_str, sizeof(object_str))))
+      object_p = object_str;
+    else
+      object_p = 0;
+
     if ( !xnav->appl.find( applist_eType_Graph, graph_str, 0, 
 		  (void **) &gectx)) {
       xnav->message('E', "Graph is not open");
       return XNAV__HOLDCOMMAND; 	
     }
-    return gectx->set_subwindow_source( object_str, source_str);
+    return gectx->set_subwindow_source( name_str, source_str, object_p);
   }
   else if ( cdh_NoCaseStrncmp( arg1_str, "LANGUAGE", strlen( arg1_str)) == 0)
   {    
@@ -3683,6 +3690,23 @@ static int	xnav_open_func(	void		*client_data,
     fileview = xnav->fileview_new( aref.Objid, title_str, dir_str, file_str, type,
 				   target_str, trigger_str, filetype_p);
   }
+  else if ( cdh_NoCaseStrncmp( arg1_str, "NAVIGATOR", strlen( arg1_str)) == 0) {
+    pwr_tAName object_str;
+    pwr_tAttrRef aref;
+    pwr_tStatus sts;
+
+    if ( ODD( dcli_get_qualifier( "/OBJECT", object_str, sizeof(object_str)))) {
+      sts = gdh_NameToAttrref( pwr_cNObjid, object_str, &aref);
+      if ( EVEN(sts)) {
+	xnav->message('E', "Uable to find object");
+	return XNAV__HOLDCOMMAND;
+      }
+      
+      xnav->display_object( &aref, 0);
+    }
+
+    xnav->pop();
+  }
   else
     xnav->message('E',"Syntax error");