diff --git a/src/zmapWindow/zmapWindowRemoteReceive.c b/src/zmapWindow/zmapWindowRemoteReceive.c
index 32f89d08f6615935f65db312705e8fd8f1bb0842..bb6496e12a14cdf0b1406b0d122a8da87bb660bf 100755
--- a/src/zmapWindow/zmapWindowRemoteReceive.c
+++ b/src/zmapWindow/zmapWindowRemoteReceive.c
@@ -27,9 +27,9 @@
  *
  * Exported functions: See XXXXXXXXXXXXX.h
  * HISTORY:
- * Last edited: Feb 12 14:52 2009 (rds)
+ * Last edited: Aug 13 17:28 2009 (edgrif)
  * Created: Thu Jul 19 11:45:36 2007 (rds)
- * CVS info:   $Id: zmapWindowRemoteReceive.c,v 1.8 2009-02-12 14:56:03 rds Exp $
+ * CVS info:   $Id: zmapWindowRemoteReceive.c,v 1.9 2009-08-14 10:15:22 edgrif Exp $
  *-------------------------------------------------------------------
  */
 
@@ -40,6 +40,7 @@
 #include <ZMap/zmapGLibUtils.h> /* zMap_g_hash_table_nth */
 #include <zmapWindow_P.h>
 
+/* should be a type.... */
 enum
   {
     ZMAPWINDOW_REMOTE_INVALID,
@@ -48,11 +49,15 @@ enum
     ZMAPWINDOW_REMOTE_ZOOM_TO,
     ZMAPWINDOW_REMOTE_REGISTER_CLIENT,
     ZMAPWINDOW_REMOTE_GET_MARK,
+    ZMAPWINDOW_REMOTE_LOAD_FEATURES,
 
     /* ...but above here */
     ZMAPWINDOW_REMOTE_UNKNOWN
-  }ZMapViewValidXRemoteActions;
+  } ZMapViewValidXRemoteActions ;
 
+
+/* This struct should most certainly be a union of mutually exclusive fields, it's good
+ * documentation as well as good practice... */
 typedef struct
 {
   ZMapWindow window;
@@ -60,6 +65,8 @@ typedef struct
   ZMapFeatureContext orig_context;
   ZMapFeatureContext edit_context;
 
+  int action ;
+
   ZMapFeatureAlignment align;
   ZMapFeatureBlock     block;
   ZMapFeatureSet feature_set;
@@ -69,7 +76,10 @@ typedef struct
 
   GList *locations, *feature_list;
 
-  gboolean zoomed;
+  gboolean use_mark ;
+  GList *feature_sets ;
+
+  gboolean zoomed ;
 }RequestDataStruct, *RequestData;
 
 typedef struct
@@ -79,13 +89,17 @@ typedef struct
   GString *messages;
 } ResponseDataStruct, *ResponseData;
 
-static char *window_execute_command(char *command_text, gpointer user_data, int *statusCode);
-static void zoomWindowToFeature(ZMapWindow window, RequestData input_data, ResponseData output_data);
-static void reportWindowMark   (ZMapWindow window, RequestData input_data, ResponseData output_data);
+static char *window_execute_command(char *command_text, gpointer user_data, int *statusCode) ;
+static void zoomWindowToFeature(ZMapWindow window, RequestData input_data, ResponseData output_data) ;
+static void reportWindowMark(ZMapWindow window, RequestData input_data, ResponseData output_data) ;
+static void loadFeatures(ZMapWindow window, RequestData input_data, ResponseData output_data) ;
 
 static gboolean xml_zmap_start_cb(gpointer user_data, 
                                   ZMapXMLElement zmap_element, 
                                   ZMapXMLParser parser);
+static gboolean xml_request_start_cb(gpointer user_data, 
+				     ZMapXMLElement zmap_element, 
+				     ZMapXMLParser parser);
 static gboolean xml_featureset_start_cb(gpointer user_data, 
                                         ZMapXMLElement zmap_element, 
                                         ZMapXMLParser parser);
@@ -96,22 +110,27 @@ static gboolean xml_return_true_cb(gpointer user_data,
                                    ZMapXMLElement zmap_element, 
                                    ZMapXMLParser parser);
 
-static char *actions_G[ZMAPWINDOW_REMOTE_UNKNOWN + 1] = {
-  NULL, "zoom_to", "register_client", "get_mark", NULL
-};
+static char *actions_G[ZMAPWINDOW_REMOTE_UNKNOWN + 1] =
+  {
+    NULL, "zoom_to", "register_client", "get_mark", "load_features", NULL
+  };
 
-static ZMapXMLObjTagFunctionsStruct window_starts_G[] = {
-  { "zmap",       xml_zmap_start_cb                  },
-  { "client",     zMapXRemoteXMLGenericClientStartCB },
-  { "featureset", xml_featureset_start_cb            },
-  { "feature",    xml_feature_start_cb               },
-  {NULL, NULL}
-};
-static ZMapXMLObjTagFunctionsStruct window_ends_G[] = {
-  { "zmap",       xml_return_true_cb    },
-  { "feature",    xml_return_true_cb    },
-  {NULL, NULL}
-};
+static ZMapXMLObjTagFunctionsStruct window_starts_G[] =
+  {
+    { "zmap",       xml_zmap_start_cb                  },
+    { "request",    xml_request_start_cb               },
+    { "client",     zMapXRemoteXMLGenericClientStartCB },
+    { "featureset", xml_featureset_start_cb            },
+    { "feature",    xml_feature_start_cb               },
+    {NULL, NULL}
+  };
+static ZMapXMLObjTagFunctionsStruct window_ends_G[] =
+  {
+    { "zmap",       xml_return_true_cb    },
+    { "request",    xml_return_true_cb    },
+    { "feature",    xml_return_true_cb    },
+    {NULL, NULL}
+  };
 
 
 void zMapWindowSetupXRemote(ZMapWindow window, GtkWidget *widget)
@@ -164,6 +183,9 @@ static char *window_execute_command(char *command_text, gpointer user_data, int
 	case ZMAPWINDOW_REMOTE_GET_MARK:
 	  reportWindowMark(window, &input_data, &output_data);
 	  break;
+        case ZMAPWINDOW_REMOTE_LOAD_FEATURES:
+	  loadFeatures(window, &input_data, &output_data) ;
+          break ;
         case ZMAPWINDOW_REMOTE_INVALID:
         case ZMAPWINDOW_REMOTE_UNKNOWN:
         default:
@@ -224,7 +246,7 @@ static void zoomWindowToFeature(ZMapWindow window, RequestData input_data, Respo
 
   output_data->code = ZMAPXREMOTE_OK;
 
-  if((list = g_list_first(input_data->feature_list)))
+  if ((list = g_list_first(input_data->feature_list)))
     {
       ZMapFeature feature = (ZMapFeature)(list->data);
       input_data->zoomed  = FALSE;
@@ -233,8 +255,8 @@ static void zoomWindowToFeature(ZMapWindow window, RequestData input_data, Respo
 	zMapFeatureReverseComplement(input_data->edit_context, window->read_only_styles) ;
 
       zMapFeatureContextExecute((ZMapFeatureAny)(input_data->edit_context), ZMAPFEATURE_STRUCT_FEATURE,
-                                zoomToFeatureCB, input_data);
-      if(input_data->zoomed)
+                                zoomToFeatureCB, input_data) ;
+      if (input_data->zoomed)
         {
           g_string_append_printf(output_data->messages,
                                  "Zoom to feature %s executed",
@@ -248,7 +270,7 @@ static void zoomWindowToFeature(ZMapWindow window, RequestData input_data, Respo
                                  (char *)g_quark_to_string(feature->original_id));
         }
     }
-  else if((list = g_list_first(input_data->locations)))
+  else if ((list = g_list_first(input_data->locations)))
     {
       span = (ZMapSpan)(list->data);
       zMapWindowZoomToWorldPosition(window, FALSE, 
@@ -269,13 +291,13 @@ static void zoomWindowToFeature(ZMapWindow window, RequestData input_data, Respo
   return ;
 }
 
-static void reportWindowMark   (ZMapWindow window, RequestData input_data, ResponseData output_data)
+static void reportWindowMark(ZMapWindow window, RequestData input_data, ResponseData output_data)
 {
   ZMapWindowMark mark;
 
   output_data->code = ZMAPXREMOTE_OK;
 
-  if((mark = window->mark) && zmapWindowMarkIsSet(mark))
+  if ((mark = window->mark) && zmapWindowMarkIsSet(mark))
     {
       char *sequence_name;
       double wx1, wx2, wy1, wy2;
@@ -302,6 +324,32 @@ static void reportWindowMark   (ZMapWindow window, RequestData input_data, Respo
   return ;
 }
 
+
+/* Load features on request from a client. */
+static void loadFeatures(ZMapWindow window, RequestData input_data, ResponseData output_data)
+{
+  gboolean use_mark = FALSE ;
+
+  /* If mark then get mark, otherwise get big start/end. */
+  if (input_data->use_mark)
+    {
+      if ((window->mark) && zmapWindowMarkIsSet(window->mark))
+	{
+	  use_mark = TRUE ;
+	}
+      else
+	{
+	  g_string_append(output_data->messages, "Load features to marked region failed: no mark set.") ;
+	  output_data->code = ZMAPXREMOTE_BADREQUEST;
+	}
+    }
+
+  zmapWindowFetchData(window, input_data->block, input_data->feature_sets, use_mark) ;
+
+  return ;
+}
+
+
 static void populate_request_data(RequestData input_data)
 {
   input_data->orig_context = input_data->window->feature_context;
@@ -328,53 +376,190 @@ static gboolean xml_zmap_start_cb(gpointer user_data,
                                   ZMapXMLElement zmap_element,
                                   ZMapXMLParser parser)
 {
+  gboolean result = TRUE ;
+
+#ifdef ED_G_NEVER_INCLUDE_THIS_CODE
   ZMapXRemoteParseCommandData xml_data = (ZMapXRemoteParseCommandData)user_data;
   ZMapXMLAttribute attr = NULL;
   GQuark action = 0;
 
-  if((attr = zMapXMLElementGetAttributeByName(zmap_element, "action")) != NULL)
+  if ((attr = zMapXMLElementGetAttributeByName(zmap_element, "action")) != NULL)
     {
       int i;
       action = zMapXMLAttributeGetValue(attr);
 
       xml_data->common.action = ZMAPWINDOW_REMOTE_INVALID;
 
-      for(i = ZMAPWINDOW_REMOTE_INVALID + 1; i < ZMAPWINDOW_REMOTE_UNKNOWN; i++)
+      for (i = ZMAPWINDOW_REMOTE_INVALID + 1; i < ZMAPWINDOW_REMOTE_UNKNOWN; i++)
         {
-          if(action == g_quark_from_string(actions_G[i]))
-            xml_data->common.action = i;
+          if (action == g_quark_from_string(actions_G[i]))
+            xml_data->common.action = i ;
         }
 
       /* unless((action > INVALID) and (action < UNKNOWN)) */
-      if(!(xml_data->common.action > ZMAPWINDOW_REMOTE_INVALID &&
-           xml_data->common.action < ZMAPWINDOW_REMOTE_UNKNOWN))
+      if (!(xml_data->common.action > ZMAPWINDOW_REMOTE_INVALID
+	    && xml_data->common.action < ZMAPWINDOW_REMOTE_UNKNOWN))
         {
           zMapLogWarning("action='%s' is unknown", g_quark_to_string(action));
           xml_data->common.action = ZMAPWINDOW_REMOTE_UNKNOWN;
+
+	  result = FALSE ;
         }
     }
   else
     {
       zMapXMLParserRaiseParsingError(parser, "action is a required attribute for zmap.");
       xml_data->common.action = ZMAPWINDOW_REMOTE_INVALID;
+
+      result = FALSE ;
     }
 
-  switch(xml_data->common.action)
+  if (result)
     {
-    case ZMAPWINDOW_REMOTE_ZOOM_TO:
-      {
-        RequestData request_data = (RequestData)(xml_data->user_data);
-        populate_request_data(request_data);
-      }
-      break;
-    case ZMAPWINDOW_REMOTE_REGISTER_CLIENT:
-    case ZMAPWINDOW_REMOTE_GET_MARK:
-    default:
-      break;
+      RequestData request_data = (RequestData)(xml_data->user_data);
+
+      switch (xml_data->common.action)
+	{
+	case ZMAPWINDOW_REMOTE_ZOOM_TO:
+	  {
+	    populate_request_data(request_data);
+
+	    break;
+	  }
+	case ZMAPWINDOW_REMOTE_LOAD_FEATURES:
+	  {
+	    if ((attr = zMapXMLElementGetAttributeByName(zmap_element, "load")))
+	      {
+		GQuark load_id ;
+
+		load_id = zMapXMLAttributeGetValue(attr) ;
+
+		if (zMapLogQuarkIsStr(load_id, "mark"))
+		  request_data->use_mark = TRUE ;
+		else if (zMapLogQuarkIsStr(load_id, "full"))
+		  request_data->use_mark = FALSE ;
+		else
+		  {
+		    zMapLogWarning("Value \"%s\" for \"load\" attr is unknown.", g_quark_to_string(load_id));
+		    xml_data->common.action = ZMAPWINDOW_REMOTE_UNKNOWN;
+
+		    result = FALSE ;
+		  }
+	      }
+
+	    break;
+	  }
+
+	case ZMAPWINDOW_REMOTE_REGISTER_CLIENT:
+
+	  printf("got register_client\n") ;
+
+	case ZMAPWINDOW_REMOTE_GET_MARK:
+	default:
+	  break;
+	}
+
+      if (result)
+	request_data->action = xml_data->common.action ;
     }
+#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
 
 
-  return TRUE;
+  return result ;
+}
+
+static gboolean xml_request_start_cb(gpointer user_data, 
+				     ZMapXMLElement zmap_element,
+				     ZMapXMLParser parser)
+{
+  gboolean result = TRUE ;
+  ZMapXRemoteParseCommandData xml_data = (ZMapXRemoteParseCommandData)user_data;
+  ZMapXMLAttribute attr = NULL;
+  GQuark action = 0;
+
+  if ((attr = zMapXMLElementGetAttributeByName(zmap_element, "action")) != NULL)
+    {
+      int i;
+      action = zMapXMLAttributeGetValue(attr);
+
+      xml_data->common.action = ZMAPWINDOW_REMOTE_INVALID;
+
+      for (i = ZMAPWINDOW_REMOTE_INVALID + 1; i < ZMAPWINDOW_REMOTE_UNKNOWN; i++)
+        {
+          if (action == g_quark_from_string(actions_G[i]))
+            xml_data->common.action = i ;
+        }
+
+      /* unless((action > INVALID) and (action < UNKNOWN)) */
+      if (!(xml_data->common.action > ZMAPWINDOW_REMOTE_INVALID
+	    && xml_data->common.action < ZMAPWINDOW_REMOTE_UNKNOWN))
+        {
+          zMapLogWarning("action='%s' is unknown", g_quark_to_string(action));
+          xml_data->common.action = ZMAPWINDOW_REMOTE_UNKNOWN;
+
+	  result = FALSE ;
+        }
+    }
+  else
+    {
+      zMapXMLParserRaiseParsingError(parser, "action is a required attribute for zmap.");
+      xml_data->common.action = ZMAPWINDOW_REMOTE_INVALID;
+
+      result = FALSE ;
+    }
+
+  if (result)
+    {
+      RequestData request_data = (RequestData)(xml_data->user_data);
+
+      switch (xml_data->common.action)
+	{
+	case ZMAPWINDOW_REMOTE_ZOOM_TO:
+	  {
+	    populate_request_data(request_data);
+
+	    break;
+	  }
+	case ZMAPWINDOW_REMOTE_LOAD_FEATURES:
+	  {
+	    if ((attr = zMapXMLElementGetAttributeByName(zmap_element, "load")))
+	      {
+		GQuark load_id ;
+
+		load_id = zMapXMLAttributeGetValue(attr) ;
+
+		if (zMapLogQuarkIsStr(load_id, "mark"))
+		  request_data->use_mark = TRUE ;
+		else if (zMapLogQuarkIsStr(load_id, "full"))
+		  request_data->use_mark = FALSE ;
+		else
+		  {
+		    zMapLogWarning("Value \"%s\" for \"load\" attr is unknown.", g_quark_to_string(load_id));
+		    xml_data->common.action = ZMAPWINDOW_REMOTE_UNKNOWN;
+
+		    result = FALSE ;
+		  }
+	      }
+
+	    break;
+	  }
+
+	case ZMAPWINDOW_REMOTE_REGISTER_CLIENT:
+
+	  printf("got register_client\n") ;
+
+	case ZMAPWINDOW_REMOTE_GET_MARK:
+	default:
+	  break;
+	}
+
+      if (result)
+	request_data->action = xml_data->common.action ;
+    }
+
+
+
+  return result ;
 }
 
 static gboolean xml_featureset_start_cb(gpointer user_data, ZMapXMLElement set_element,
@@ -390,7 +575,7 @@ static gboolean xml_featureset_start_cb(gpointer user_data, ZMapXMLElement set_e
   char *align_name, *block_seq, *set_name;
 
   /* Isn't this fun... */
-  if((attr = zMapXMLElementGetAttributeByName(set_element, "align")))
+  if ((attr = zMapXMLElementGetAttributeByName(set_element, "align")))
     {
       align_id   = zMapXMLAttributeGetValue(attr);
       align_name = (char *)g_quark_to_string(align_id);
@@ -413,7 +598,7 @@ static gboolean xml_featureset_start_cb(gpointer user_data, ZMapXMLElement set_e
 
 
 
-  if((attr = zMapXMLElementGetAttributeByName(set_element, "block")))
+  if ((attr = zMapXMLElementGetAttributeByName(set_element, "block")))
     {
       int ref_start, ref_end, non_start, non_end;
       ZMapStrand ref_strand, non_strand;
@@ -447,14 +632,13 @@ static gboolean xml_featureset_start_cb(gpointer user_data, ZMapXMLElement set_e
   zMapFeatureAlignmentAddBlock(request_data->align, request_data->block);
 
 
-
-  if((attr = zMapXMLElementGetAttributeByName(set_element, "set")))
+  if ((attr = zMapXMLElementGetAttributeByName(set_element, "set")))
     {
       set_id   = zMapXMLAttributeGetValue(attr);
       set_name = (char *)g_quark_to_string(set_id);
       set_id   = zMapFeatureSetCreateID(set_name);
 
-      if(!(feature_set = zMapFeatureBlockGetSetByID(request_data->block, set_id)))
+      if (!(feature_set = zMapFeatureBlockGetSetByID(request_data->block, set_id)))
         {
           feature_set = zMapFeatureSetCreate(set_name, NULL);
           zMapFeatureBlockAddFeatureSet(request_data->block, feature_set);
@@ -463,7 +647,19 @@ static gboolean xml_featureset_start_cb(gpointer user_data, ZMapXMLElement set_e
 
 
       request_data->edit_context->feature_set_names = g_list_append(request_data->edit_context->feature_set_names,
-							   GINT_TO_POINTER(set_id)) ;
+								    GINT_TO_POINTER(set_id)) ;
+
+      switch (request_data->action)
+	{
+	case ZMAPWINDOW_REMOTE_LOAD_FEATURES:
+	  {
+	    request_data->feature_sets = g_list_append(request_data->feature_sets, GINT_TO_POINTER(set_id)) ;
+
+	    break;
+	  }
+	default:
+	  break ;
+	}
 
     }
   else
@@ -472,9 +668,11 @@ static gboolean xml_featureset_start_cb(gpointer user_data, ZMapXMLElement set_e
       request_data->feature_set = NULL;
     }
 
+
   return FALSE;
 }
 
+
 static gboolean xml_feature_start_cb(gpointer user_data, ZMapXMLElement feature_element,
                                      ZMapXMLParser parser)
 {