diff --git a/src/include/ZMap/zmapServerProtocol.h b/src/include/ZMap/zmapServerProtocol.h
index 5d142a290166000ebfd3fec5ad46626c09fac0ab..d91870f520775aae0a6bfd13b67e8b4f7b8241cd 100755
--- a/src/include/ZMap/zmapServerProtocol.h
+++ b/src/include/ZMap/zmapServerProtocol.h
@@ -27,9 +27,9 @@
  *              structs that give all the information/fields for the request/reply.
  *              
  * HISTORY:
- * Last edited: Mar 23 11:36 2009 (edgrif)
+ * Last edited: Apr 14 12:22 2009 (edgrif)
  * Created: Wed Feb  2 11:47:16 2005 (edgrif)
- * CVS info:   $Id: zmapServerProtocol.h,v 1.21 2009-04-06 13:27:43 edgrif Exp $
+ * CVS info:   $Id: zmapServerProtocol.h,v 1.22 2009-04-16 09:11:27 edgrif Exp $
  *-------------------------------------------------------------------
  */
 #ifndef ZMAP_PROTOCOL_H
@@ -131,8 +131,13 @@ typedef struct
   GList *feature_sets_inout ;				    /* List of prespecified features sets or
 							       NULL to get all available sets. */
 
+  /* Is this still needed ????? */
   GList *required_styles_out ;				    /* May be derived from features. */
 
+
+  GHashTable *featureset_2_stylelist_out ;		    /* Mapping of each feature_set to all
+							       the styles it requires. */
+
 } ZMapServerReqFeatureSetsStruct, *ZMapServerReqFeatureSets ;
 
 
diff --git a/src/zmapServer/zmapServer.c b/src/zmapServer/zmapServer.c
index 75b47d6025beb8b2db43aefb9bfa9d1a787c1c38..f75ca3ee717027052eb83c3afa51ca168bdef42f 100755
--- a/src/zmapServer/zmapServer.c
+++ b/src/zmapServer/zmapServer.c
@@ -26,9 +26,9 @@
  * Description: 
  * Exported functions: See ZMap/zmapServer.h
  * HISTORY:
- * Last edited: Feb  4 15:15 2009 (edgrif)
+ * Last edited: Apr 14 14:53 2009 (edgrif)
  * Created: Wed Aug  6 15:46:38 2003 (edgrif)
- * CVS info:   $Id: zmapServer.c,v 1.35 2009-02-04 16:10:07 edgrif Exp $
+ * CVS info:   $Id: zmapServer.c,v 1.36 2009-04-16 09:11:27 edgrif Exp $
  *-------------------------------------------------------------------
  */
 
@@ -175,11 +175,21 @@ ZMapServerResponseType zMapServerOpenConnection(ZMapServer server)
 }
 
 
-ZMapServerResponseType zMapServerGetStyles(ZMapServer server, GData **styles_out)
+
+ZMapServerResponseType zMapServerFeatureSetNames(ZMapServer server,
+						 GList **feature_sets_inout,
+						 GList **required_styles_out,
+						 GHashTable **featureset_2_stylelist_out)
 {
   ZMapServerResponseType result = ZMAP_SERVERRESPONSE_REQFAIL ;
 
-  result = server->last_response = (server->funcs->get_styles)(server->server_conn, styles_out) ;
+  zMapAssert(server && *feature_sets_inout && !*required_styles_out) ;
+
+  result = server->last_response
+    = (server->funcs->feature_set_names)(server->server_conn,
+					 feature_sets_inout,
+					 required_styles_out,
+					 featureset_2_stylelist_out) ;
 
   if (result != ZMAP_SERVERRESPONSE_OK)
     server->last_error_msg = ZMAPSERVER_MAKEMESSAGE(server->url->protocol, 
@@ -190,11 +200,11 @@ ZMapServerResponseType zMapServerGetStyles(ZMapServer server, GData **styles_out
 }
 
 
-ZMapServerResponseType zMapServerStylesHaveMode(ZMapServer server, gboolean *have_mode)
+ZMapServerResponseType zMapServerGetStyles(ZMapServer server, GData **styles_out)
 {
   ZMapServerResponseType result = ZMAP_SERVERRESPONSE_REQFAIL ;
 
-  result = server->last_response = (server->funcs->have_modes)(server->server_conn, have_mode) ;
+  result = server->last_response = (server->funcs->get_styles)(server->server_conn, styles_out) ;
 
   if (result != ZMAP_SERVERRESPONSE_OK)
     server->last_error_msg = ZMAPSERVER_MAKEMESSAGE(server->url->protocol, 
@@ -205,12 +215,11 @@ ZMapServerResponseType zMapServerStylesHaveMode(ZMapServer server, gboolean *hav
 }
 
 
-
-ZMapServerResponseType zMapServerGetSequence(ZMapServer server, GList *sequences_inout)
+ZMapServerResponseType zMapServerStylesHaveMode(ZMapServer server, gboolean *have_mode)
 {
   ZMapServerResponseType result = ZMAP_SERVERRESPONSE_REQFAIL ;
 
-  result = server->last_response = (server->funcs->get_sequence)(server->server_conn, sequences_inout) ;
+  result = server->last_response = (server->funcs->have_modes)(server->server_conn, have_mode) ;
 
   if (result != ZMAP_SERVERRESPONSE_OK)
     server->last_error_msg = ZMAPSERVER_MAKEMESSAGE(server->url->protocol, 
@@ -221,12 +230,12 @@ ZMapServerResponseType zMapServerGetSequence(ZMapServer server, GList *sequences
 }
 
 
-ZMapServerResponseType zMapServerGetServerInfo(ZMapServer server, char **database_path)
+
+ZMapServerResponseType zMapServerGetSequence(ZMapServer server, GList *sequences_inout)
 {
   ZMapServerResponseType result = ZMAP_SERVERRESPONSE_REQFAIL ;
 
-
-  result = server->last_response = (server->funcs->get_info)(server->server_conn, database_path) ;
+  result = server->last_response = (server->funcs->get_sequence)(server->server_conn, sequences_inout) ;
 
   if (result != ZMAP_SERVERRESPONSE_OK)
     server->last_error_msg = ZMAPSERVER_MAKEMESSAGE(server->url->protocol, 
@@ -237,15 +246,12 @@ ZMapServerResponseType zMapServerGetServerInfo(ZMapServer server, char **databas
 }
 
 
-ZMapServerResponseType zMapServerFeatureSetNames(ZMapServer server,
-						 GList **feature_sets_inout, GList **required_styles_out)
+ZMapServerResponseType zMapServerGetServerInfo(ZMapServer server, char **database_path)
 {
   ZMapServerResponseType result = ZMAP_SERVERRESPONSE_REQFAIL ;
 
-  zMapAssert(server && *feature_sets_inout && !*required_styles_out) ;
 
-  result = server->last_response
-    = (server->funcs->feature_set_names)(server->server_conn, feature_sets_inout, required_styles_out) ;
+  result = server->last_response = (server->funcs->get_info)(server->server_conn, database_path) ;
 
   if (result != ZMAP_SERVERRESPONSE_OK)
     server->last_error_msg = ZMAPSERVER_MAKEMESSAGE(server->url->protocol, 
diff --git a/src/zmapServer/zmapServer.h b/src/zmapServer/zmapServer.h
index 8119549bb1b101b71dc629fa1bfe9be2f20c527a..9aeb2c23dda41928d0257ec77805fab1784a5cc8 100755
--- a/src/zmapServer/zmapServer.h
+++ b/src/zmapServer/zmapServer.h
@@ -26,9 +26,9 @@
  *              details from caller.
  *
  * HISTORY:
- * Last edited: Feb  4 15:22 2009 (edgrif)
+ * Last edited: Apr 14 12:22 2009 (edgrif)
  * Created: Wed Aug  6 15:48:47 2003 (edgrif)
- * CVS info:   $Id: zmapServer.h,v 1.11 2009-02-04 16:10:07 edgrif Exp $
+ * CVS info:   $Id: zmapServer.h,v 1.12 2009-04-16 09:11:27 edgrif Exp $
  *-------------------------------------------------------------------
  */
 #ifndef ZMAP_SERVER_H
@@ -57,7 +57,10 @@ ZMapServerResponseType zMapServerCreateConnection(ZMapServer *server_out, void *
 						  int timeout, char *version_str);
 ZMapServerResponseType zMapServerOpenConnection(ZMapServer server) ;
 ZMapServerResponseType zMapServerGetServerInfo(ZMapServer server, char **database_path) ;
-ZMapServerResponseType zMapServerFeatureSetNames(ZMapServer server, GList **feature_sets_inout, GList **required_styles) ;
+ZMapServerResponseType zMapServerFeatureSetNames(ZMapServer server,
+						 GList **feature_sets_inout,
+						 GList **required_styles,
+						 GHashTable **featureset_2_stylelist_out) ;
 ZMapServerResponseType zMapServerGetStyles(ZMapServer server, GData **types_out) ;
 ZMapServerResponseType zMapServerStylesHaveMode(ZMapServer server, gboolean *have_mode) ;
 ZMapServerResponseType zMapServerGetSequence(ZMapServer server, GList *sequences_inout) ;
diff --git a/src/zmapServer/zmapServerProtocolHandler.c b/src/zmapServer/zmapServerProtocolHandler.c
index dbd55c4816b9532219e87be97b80a922310385a9..8ad963e14d9c6b68deb3834af3f14740af2b8365 100755
--- a/src/zmapServer/zmapServerProtocolHandler.c
+++ b/src/zmapServer/zmapServerProtocolHandler.c
@@ -25,9 +25,9 @@
  * Description: 
  * Exported functions: See ZMap/zmapServerProtocol.h
  * HISTORY:
- * Last edited: Mar 20 11:59 2009 (edgrif)
+ * Last edited: Apr 16 10:09 2009 (edgrif)
  * Created: Thu Jan 27 13:17:43 2005 (edgrif)
- * CVS info:   $Id: zmapServerProtocolHandler.c,v 1.40 2009-03-20 12:40:44 edgrif Exp $
+ * CVS info:   $Id: zmapServerProtocolHandler.c,v 1.41 2009-04-16 09:11:27 edgrif Exp $
  *-------------------------------------------------------------------
  */
 
@@ -92,10 +92,6 @@ static void findStyleCB(gpointer data, gpointer user_data) ;
 static gboolean getStylesFromFile(char *styles_list, char *styles_file, GData **styles_out) ;
 ZMapThreadReturnCode getStyles(ZMapServer server, ZMapServerReqStyles styles, char **err_msg_out) ;
 
-static gboolean makeStylesDrawable(GData *styles, char **missing_styles_out) ;
-static void drawableCB(GQuark key_id, gpointer data, gpointer user_data) ;
-
-
 
 /* Set up the list, note the special pthread macro that makes sure mutex is set up before
  * any threads can use it. */
@@ -392,7 +388,8 @@ ZMapThreadReturnCode zMapServerRequestHandler(void **slave_data,
 
 	request->response = zMapServerFeatureSetNames(server,
 						      &(feature_sets->feature_sets_inout),
-						      &(feature_sets->required_styles_out)) ;
+						      &(feature_sets->required_styles_out),
+						      &(feature_sets->featureset_2_stylelist_out)) ;
 
 
 	if (request->response != ZMAP_SERVERRESPONSE_OK && request->response != ZMAP_SERVERRESPONSE_UNSUPPORTED)
@@ -747,49 +744,6 @@ static gboolean getStylesFromFile(char *styles_list, char *styles_file, GData **
 
 
 
-static gboolean makeStylesDrawable(GData *styles, char **missing_styles_out)
-{
-  gboolean result = FALSE ;
-  DrawableStruct drawable_data = {FALSE} ;
-
-  g_datalist_foreach(&styles, drawableCB, &drawable_data) ;
-
-  if (drawable_data.missing_styles)
-    *missing_styles_out = g_string_free(drawable_data.missing_styles, FALSE) ;
-
-  result = drawable_data.found_style ;
-
-  return result ;
-}
-
-
-
-/* A GDataForeachFunc() to make the given style drawable. */
-static void drawableCB(GQuark key_id, gpointer data, gpointer user_data)
-{
-  ZMapFeatureTypeStyle style = (ZMapFeatureTypeStyle)data ;
-  Drawable drawable_data = (Drawable)user_data ;
-
-  if (zMapStyleIsDisplayable(style))
-    {
-      if (zMapStyleMakeDrawable(style))
-	{
-	  drawable_data->found_style = TRUE ;
-	}
-      else
-	{
-	  if (!(drawable_data->missing_styles))
-	    drawable_data->missing_styles = g_string_sized_new(1000) ;
-
-	  g_string_append_printf(drawable_data->missing_styles, "%s ", g_quark_to_string(key_id)) ;
-	}
-    }
-
-  return ;
-}
-
-
-
 ZMapThreadReturnCode getStyles(ZMapServer server, ZMapServerReqStyles styles, char **err_msg_out)
 {
   ZMapThreadReturnCode thread_rc = ZMAPTHREAD_RETURNCODE_OK ;
diff --git a/src/zmapServer/zmapServerPrototype.h b/src/zmapServer/zmapServerPrototype.h
index 75881d0823293d1903fb5fe4cff6087cbdd5fb05..46047775a5da05c592e54a5f917f44efea1d432a 100755
--- a/src/zmapServer/zmapServerPrototype.h
+++ b/src/zmapServer/zmapServerPrototype.h
@@ -28,9 +28,9 @@
  *              include this header, its not really for general consumption.
  *              
  * HISTORY:
- * Last edited: Feb  4 15:01 2009 (edgrif)
+ * Last edited: Apr 14 14:50 2009 (edgrif)
  * Created: Wed Aug  6 15:48:47 2003 (edgrif)
- * CVS info:   $Id: zmapServerPrototype.h,v 1.24 2009-02-04 16:11:19 edgrif Exp $
+ * CVS info:   $Id: zmapServerPrototype.h,v 1.25 2009-04-16 09:11:27 edgrif Exp $
  *-------------------------------------------------------------------
  */
 #ifndef ZMAP_SERVER_PROTOTYPEP_H
@@ -57,7 +57,9 @@ typedef ZMapServerResponseType (*ZMapServerOpenFunc)(void *server_conn) ;
 typedef ZMapServerResponseType (*ZMapServerGetServerInfo)(void *server_in, char **database_path_out) ;
 
 typedef ZMapServerResponseType (*ZMapServerGetFeatureSets)(void *server_in,
-							   GList **feature_sets_inout, GList **required_styles) ;
+							   GList **feature_sets_inout,
+							   GList **required_styles_out,
+							   GHashTable **featureset_2_stylelist_out) ;
 
 typedef ZMapServerResponseType (*ZMapServerGetStyles)(void *server_in,
 						      GData **styles_out) ;