diff --git a/src/zmapWindow/zmapWindow.c b/src/zmapWindow/zmapWindow.c
index d227ad2358e1b027b5d27ed9497100f6574b7dd8..308b0f120680997f789f51f95e75a90a01ebb720 100755
--- a/src/zmapWindow/zmapWindow.c
+++ b/src/zmapWindow/zmapWindow.c
@@ -26,9 +26,9 @@
  *              
  * Exported functions: See ZMap/zmapWindow.h
  * HISTORY:
- * Last edited: Feb 12 16:13 2009 (edgrif)
+ * Last edited: Feb 13 10:19 2009 (rds)
  * Created: Thu Jul 24 14:36:27 2003 (edgrif)
- * CVS info:   $Id: zmapWindow.c,v 1.270 2009-02-12 16:14:01 edgrif Exp $
+ * CVS info:   $Id: zmapWindow.c,v 1.271 2009-02-13 10:39:21 rds Exp $
  *-------------------------------------------------------------------
  */
 
@@ -3692,7 +3692,54 @@ static gboolean keyboardEvent(ZMapWindow window, GdkEventKey *key_event)
 	break ;
       }
 
+    case GDK_a:
+    case GDK_A:
+      {
+	ZMapWindowCallbackCommandAlignStruct align;
+	ZMapWindowCallbacks window_callbacks_G = zmapWindowGetCBs();
+	ZMapFeature feature;
+	gboolean column = FALSE;
+	FooCanvasItem *focus_item ;
+	
+	if ((focus_item = zmapWindowFocusGetHotItem(window->focus)))
+	  focus_item = zmapWindowItemGetTrueItem(focus_item) ;
+	else
+	  focus_item = FOO_CANVAS_ITEM(zmapWindowFocusGetHotColumn(window->focus)) ;
+
+	feature = g_object_get_data(G_OBJECT(focus_item), ITEM_FEATURE_DATA) ;
+	zMapAssert(feature) ;					    /* something badly wrong if no feature. */
+
+	if(feature->struct_type == ZMAPFEATURE_STRUCT_FEATURESET)
+	  {
+	    /*  need to fix implicit dec here! */
+	    feature = zMap_g_hash_table_nth(((ZMapFeatureSet)feature)->features, 0);
+	    column = TRUE;
+	  }
+
+	if(feature->type == ZMAPSTYLE_MODE_ALIGNMENT)
+	  {
+	    align.cmd                      = ZMAPWINDOW_CMD_SHOWALIGN ;
+	    align.feature                  = feature ;
+	    align.obey_protein_featuresets = FALSE;
+	    align.obey_dna_featuresets     = FALSE;
+	    align.single_feature           = FALSE;
+	    
+	    if(key_event->keyval == GDK_A)
+	      {
+		if(feature->feature.homol.type == ZMAPHOMOL_X_HOMOL ||
+		   feature->feature.homol.type == ZMAPHOMOL_TX_HOMOL)
+		  align.obey_protein_featuresets = TRUE;
+		else if(feature->feature.homol.type == ZMAPHOMOL_N_HOMOL)
+		  align.obey_dna_featuresets = TRUE;
+	      }
 
+	    if((!column) && (key_event->state & GDK_CONTROL_MASK))
+	      align.single_feature = TRUE;
+	  
+	    (*(window_callbacks_G->command))(window, window->app_data, &align) ;
+	  }
+      }
+      break;
     case GDK_b:
     case GDK_B:
       {
diff --git a/src/zmapWindow/zmapWindowFeature.c b/src/zmapWindow/zmapWindowFeature.c
index 1eff4f462c3589de492e68d574bd6a027cd9181d..e632e0726a5a2fa391d8ed1d376ee4864d4c2479 100755
--- a/src/zmapWindow/zmapWindowFeature.c
+++ b/src/zmapWindow/zmapWindowFeature.c
@@ -28,9 +28,9 @@
  *
  * Exported functions: See zmapWindow_P.h
  * HISTORY:
- * Last edited: Feb 11 11:41 2009 (rds)
+ * Last edited: Feb 13 09:23 2009 (rds)
  * Created: Mon Jan  9 10:25:40 2006 (edgrif)
- * CVS info:   $Id: zmapWindowFeature.c,v 1.154 2009-02-11 15:14:38 rds Exp $
+ * CVS info:   $Id: zmapWindowFeature.c,v 1.155 2009-02-13 10:39:21 rds Exp $
  *-------------------------------------------------------------------
  */
 
@@ -1690,9 +1690,15 @@ void zmapMakeItemMenu(GdkEventButton *button_event, ZMapWindow window, FooCanvas
       menu_sets = g_list_append(menu_sets, makeMenuPfetchOps(NULL, NULL, menu_data)) ;
 
       if (feature->feature.homol.type == ZMAPHOMOL_X_HOMOL)
-	menu_sets = g_list_append(menu_sets, zmapWindowMakeMenuProteinHomol(NULL, NULL, menu_data)) ;
+	{
+	  menu_sets = g_list_append(menu_sets, zmapWindowMakeMenuProteinHomolFeature(NULL, NULL, menu_data)) ;
+	  menu_sets = g_list_append(menu_sets, zmapWindowMakeMenuProteinHomol(NULL, NULL, menu_data)) ;
+	}
       else
-	menu_sets = g_list_append(menu_sets, zmapWindowMakeMenuDNAHomol(NULL, NULL, menu_data)) ;
+	{
+	  menu_sets = g_list_append(menu_sets, zmapWindowMakeMenuDNAHomolFeature(NULL, NULL, menu_data)) ;
+	  menu_sets = g_list_append(menu_sets, zmapWindowMakeMenuDNAHomol(NULL, NULL, menu_data)) ;
+	}
     }
 
   /* DNA/Peptide ops. */
diff --git a/src/zmapWindow/zmapWindowMenus.c b/src/zmapWindow/zmapWindowMenus.c
index 1ba73a2e50ae0e9eeac8c916597d65296b4da639..ec5a5885259659729b51e6043297604de629b126 100755
--- a/src/zmapWindow/zmapWindowMenus.c
+++ b/src/zmapWindow/zmapWindowMenus.c
@@ -27,9 +27,9 @@
  * Exported functions: ZMap/zmapWindows.h
  *              
  * HISTORY:
- * Last edited: Feb  9 12:27 2009 (rds)
+ * Last edited: Feb 13 10:35 2009 (rds)
  * Created: Thu Mar 10 07:56:27 2005 (edgrif)
- * CVS info:   $Id: zmapWindowMenus.c,v 1.55 2009-02-09 14:55:08 rds Exp $
+ * CVS info:   $Id: zmapWindowMenus.c,v 1.56 2009-02-13 10:39:21 rds Exp $
  *-------------------------------------------------------------------
  */
 
@@ -64,6 +64,12 @@
 #define DEVELOPER_STR              "Developer"
 
 
+#define BLIXEM_MENU_STR            "Blixem "
+#define BLIXEM_DNA_STR             "DNA Alignment"
+#define BLIXEM_DNAS_STR            BLIXEM_DNA_STR "s"
+#define BLIXEM_AA_STR              "Protein Alignment"
+#define BLIXEM_AAS_STR             BLIXEM_AA_STR "s"
+
 
 /* Choose which way a transcripts dna is dumped... */
 enum
@@ -986,7 +992,6 @@ static void developerMenuCB(int menu_item_id, gpointer callback_data)
 }
 
 
-
 /* JAMES HAS MADE THE POINT THAT ANNOTATORS ONLY EVER USE THE "JUST THIS TYPE" OPTION, SO
  * I'VE COMMENTED OUT THE TWO MENU OPTIONS AND REPLACED THEM WITH ONE.... */
 ZMapGUIMenuItem zmapWindowMakeMenuDNAHomol(int *start_index_inout,
@@ -995,9 +1000,9 @@ ZMapGUIMenuItem zmapWindowMakeMenuDNAHomol(int *start_index_inout,
 {
   static ZMapGUIMenuItemStruct menu[] =
     {
-      {ZMAPGUI_MENU_NORMAL, "Blixem (DNA alignments) [this column]", 2, blixemMenuCB, NULL},
-      {ZMAPGUI_MENU_NORMAL, "Blixem (DNA alignments) [all columns]", 1, blixemMenuCB, NULL},
-      {ZMAPGUI_MENU_NONE,   NULL,                                    0, NULL,         NULL}
+      {ZMAPGUI_MENU_NORMAL, BLIXEM_MENU_STR BLIXEM_DNAS_STR,                  1, blixemMenuCB, NULL, "a"},
+      {ZMAPGUI_MENU_NORMAL, BLIXEM_MENU_STR BLIXEM_DNAS_STR " - All Columns", 2, blixemMenuCB, NULL, "<shift>A"},
+      {ZMAPGUI_MENU_NONE,   NULL,                                             0, NULL,         NULL}
     } ;
 
 
@@ -1006,15 +1011,46 @@ ZMapGUIMenuItem zmapWindowMakeMenuDNAHomol(int *start_index_inout,
   return menu ;
 }
 
+ZMapGUIMenuItem zmapWindowMakeMenuDNAHomolFeature(int *start_index_inout,
+						  ZMapGUIMenuItemCallbackFunc callback_func,
+						  gpointer callback_data)
+{
+  static ZMapGUIMenuItemStruct menu[] =
+    {
+      {ZMAPGUI_MENU_NORMAL, BLIXEM_MENU_STR BLIXEM_DNA_STR " - Feature", 3, blixemMenuCB, NULL, "<Ctrl>A"},
+      {ZMAPGUI_MENU_NONE,   NULL,                                        0, NULL,         NULL}
+    } ;
+
+
+  zMapGUIPopulateMenu(menu, start_index_inout, callback_func, callback_data) ;
+
+  return menu ;
+}
+
+ZMapGUIMenuItem zmapWindowMakeMenuProteinHomolFeature(int *start_index_inout,
+						      ZMapGUIMenuItemCallbackFunc callback_func,
+						      gpointer callback_data)
+{
+  static ZMapGUIMenuItemStruct menu[] =
+    {
+      {ZMAPGUI_MENU_NORMAL, BLIXEM_MENU_STR BLIXEM_AA_STR "", 3, blixemMenuCB, NULL, "<Ctrl>A"},
+      {ZMAPGUI_MENU_NONE,   NULL,                             0, NULL,         NULL}
+    } ;
+
+  zMapGUIPopulateMenu(menu, start_index_inout, callback_func, callback_data) ;
+
+  return menu ;
+}
+
 ZMapGUIMenuItem zmapWindowMakeMenuProteinHomol(int *start_index_inout,
 					       ZMapGUIMenuItemCallbackFunc callback_func,
 					       gpointer callback_data)
 {
   static ZMapGUIMenuItemStruct menu[] =
     {
-      {ZMAPGUI_MENU_NORMAL, "Blixem (Protein alignments) [this column]", 4, blixemMenuCB, NULL},
-      {ZMAPGUI_MENU_NORMAL, "Blixem (Protein alignments) [all columns]", 3, blixemMenuCB, NULL},
-      {ZMAPGUI_MENU_NONE,   NULL,                                        0, NULL,         NULL}
+      {ZMAPGUI_MENU_NORMAL, BLIXEM_MENU_STR BLIXEM_AAS_STR,                  4, blixemMenuCB, NULL, "a"},
+      {ZMAPGUI_MENU_NORMAL, BLIXEM_MENU_STR BLIXEM_AAS_STR " - All Columns", 5, blixemMenuCB, NULL, "<shift>A"},
+      {ZMAPGUI_MENU_NONE,   NULL,                                            0, NULL,         NULL}
     } ;
 
   zMapGUIPopulateMenu(menu, start_index_inout, callback_func, callback_data) ;
@@ -1044,15 +1080,19 @@ static void blixemMenuCB(int menu_item_id, gpointer callback_data)
   align.feature                  = feature ;
   align.obey_protein_featuresets = FALSE;
   align.obey_dna_featuresets     = FALSE;
+  align.single_feature           = FALSE;
 
   switch(menu_item_id)
     {
-    case 1:
+    case 2:
       align.obey_dna_featuresets     = TRUE;
       break;
-    case 3:
+    case 5:
       align.obey_protein_featuresets = TRUE;
       break;
+    case 3:
+      align.single_feature = TRUE;
+      break;
     default:
       break;
     }