diff --git a/gerbview/dialogs/dialog_select_one_pcb_layer.cpp b/gerbview/dialogs/dialog_select_one_pcb_layer.cpp
index 4da2ad218a..dd22789103 100644
--- a/gerbview/dialogs/dialog_select_one_pcb_layer.cpp
+++ b/gerbview/dialogs/dialog_select_one_pcb_layer.cpp
@@ -61,7 +61,8 @@ END_EVENT_TABLE()
  * different radiobutton is clicked on) prior to then clicking on the "Deselect"
  * button provided within the "Layer selection:" dialog box).
  */
-LAYER_NUM GERBVIEW_FRAME::SelectPCBLayer( LAYER_NUM aDefaultLayer, int aCopperLayerCount, bool aShowDeselectOption )
+LAYER_NUM GERBVIEW_FRAME::SelectPCBLayer( LAYER_NUM aDefaultLayer, int aCopperLayerCount,
+                                          bool aShowDeselectOption )
 {
     LAYER_NUM layer;
     SELECT_LAYER_DIALOG* frame = new SELECT_LAYER_DIALOG( this, aDefaultLayer,
@@ -89,7 +90,7 @@ SELECT_LAYER_DIALOG::SELECT_LAYER_DIALOG( GERBVIEW_FRAME* parent,
 {
     wxButton* Button;
     LAYER_NUM ii;
-    wxString  LayerList[NB_LAYERS + 1]; // One extra element for "(Deselect)"
+    wxString  LayerList[NB_PCB_LAYERS + 1]; // One extra element for "(Deselect)"
                                         // radiobutton
     int       LayerCount, LayerSelect = -1;
 
@@ -112,8 +113,8 @@ SELECT_LAYER_DIALOG::SELECT_LAYER_DIALOG( GERBVIEW_FRAME* parent,
             LayerCount++;
         }
     }
-    // Build the layer list; build copper layers list
-    for( ; ii < NB_LAYERS; ++ii )
+    // Build the layer list; build non copper layers list
+    for( ; ii < NB_PCB_LAYERS; ++ii )
     {
         m_LayerId[ii] = FIRST_LAYER;
 
@@ -188,36 +189,36 @@ const wxString GetPCBDefaultLayerName( LAYER_NUM aLayerNumber )
     // Use a switch to explicitly show the mapping more clearly
     switch( aLayerNumber )
     {
-    case LAYER_N_FRONT:         txt = _( "Front" );         break;
-    case LAYER_N_2:             txt = _( "Inner1" );        break;
-    case LAYER_N_3:             txt = _( "Inner2" );        break;
-    case LAYER_N_4:             txt = _( "Inner3" );        break;
-    case LAYER_N_5:             txt = _( "Inner4" );        break;
-    case LAYER_N_6:             txt = _( "Inner5" );        break;
-    case LAYER_N_7:             txt = _( "Inner6" );        break;
-    case LAYER_N_8:             txt = _( "Inner7" );        break;
-    case LAYER_N_9:             txt = _( "Inner8" );        break;
-    case LAYER_N_10:            txt = _( "Inner9" );        break;
-    case LAYER_N_11:            txt = _( "Inner10" );       break;
-    case LAYER_N_12:            txt = _( "Inner11" );       break;
-    case LAYER_N_13:            txt = _( "Inner12" );       break;
-    case LAYER_N_14:            txt = _( "Inner13" );       break;
-    case LAYER_N_15:            txt = _( "Inner14" );       break;
-    case LAYER_N_BACK:          txt = _( "Back" );          break;
-    case ADHESIVE_N_BACK:       txt = _( "Adhes_Back" );    break;
-    case ADHESIVE_N_FRONT:      txt = _( "Adhes_Front" );   break;
-    case SOLDERPASTE_N_BACK:    txt = _( "SoldP_Back" );    break;
-    case SOLDERPASTE_N_FRONT:   txt = _( "SoldP_Front" );   break;
-    case SILKSCREEN_N_BACK:     txt = _( "SilkS_Back" );    break;
-    case SILKSCREEN_N_FRONT:    txt = _( "SilkS_Front" );   break;
-    case SOLDERMASK_N_BACK:     txt = _( "Mask_Back" );     break;
-    case SOLDERMASK_N_FRONT:    txt = _( "Mask_Front" );    break;
-    case DRAW_N:                txt = _( "Drawings" );      break;
-    case COMMENT_N:             txt = _( "Comments" );      break;
-    case ECO1_N:                txt = _( "Eco1" );          break;
-    case ECO2_N:                txt = _( "Eco2" );          break;
-    case EDGE_N:                txt = _( "PCB_Edges" );     break;
-    default:                    txt = wxT( "BAD INDEX" );   break;
+    case LAYER_N_FRONT:         txt = wxT( "F.Cu" );            break;
+    case LAYER_N_2:             txt = wxT( "Inner1.Cu" );       break;
+    case LAYER_N_3:             txt = wxT( "Inner2.Cu" );       break;
+    case LAYER_N_4:             txt = wxT( "Inner3.Cu" );       break;
+    case LAYER_N_5:             txt = wxT( "Inner4.Cu" );       break;
+    case LAYER_N_6:             txt = wxT( "Inner5.Cu" );       break;
+    case LAYER_N_7:             txt = wxT( "Inner6.Cu" );       break;
+    case LAYER_N_8:             txt = wxT( "Inner7.Cu" );       break;
+    case LAYER_N_9:             txt = wxT( "Inner8.Cu" );       break;
+    case LAYER_N_10:            txt = wxT( "Inner9.Cu" );       break;
+    case LAYER_N_11:            txt = wxT( "Inner10.Cu" );      break;
+    case LAYER_N_12:            txt = wxT( "Inner11.Cu" );      break;
+    case LAYER_N_13:            txt = wxT( "Inner12.Cu" );      break;
+    case LAYER_N_14:            txt = wxT( "Inner13.Cu" );      break;
+    case LAYER_N_15:            txt = wxT( "Inner14.Cu" );      break;
+    case LAYER_N_BACK:          txt = wxT( "B.Cu" );            break;
+    case ADHESIVE_N_BACK:       txt = wxT( "B.Adhes" );         break;
+    case ADHESIVE_N_FRONT:      txt = wxT( "F.Adhes" );         break;
+    case SOLDERPASTE_N_BACK:    txt = wxT( "B.Paste" );         break;
+    case SOLDERPASTE_N_FRONT:   txt = wxT( "F.Paste" );         break;
+    case SILKSCREEN_N_BACK:     txt = wxT( "B.SilkS" );         break;
+    case SILKSCREEN_N_FRONT:    txt = wxT( "F.SilkS" );         break;
+    case SOLDERMASK_N_BACK:     txt = wxT( "B.Mask" );          break;
+    case SOLDERMASK_N_FRONT:    txt = wxT( "F.Mask" );          break;
+    case DRAW_N:                txt = wxT( "Dwgs.User" );       break;
+    case COMMENT_N:             txt = wxT( "Cmts.User" );       break;
+    case ECO1_N:                txt = wxT( "Eco1.User" );       break;
+    case ECO2_N:                txt = wxT( "Eco2.User" );       break;
+    case EDGE_N:                txt = wxT( "Edge.Cuts" );       break;
+    default:                    txt = wxT( "BAD_INDEX" );       break;
     }
 
     return wxString( txt );
diff --git a/gerbview/export_to_pcbnew.cpp b/gerbview/export_to_pcbnew.cpp
index a1ada2d65f..a127b11fee 100644
--- a/gerbview/export_to_pcbnew.cpp
+++ b/gerbview/export_to_pcbnew.cpp
@@ -44,7 +44,7 @@ public:
      * Function ExportPcb
      * saves a board from a set of Gerber images.
      */
-    bool    ExportPcb( LAYER_NUM* LayerLookUpTable );
+    bool    ExportPcb( LAYER_NUM* LayerLookUpTable, int aCopperLayers );
 
 private:
     /**
@@ -166,11 +166,12 @@ void GERBVIEW_FRAME::ExportDataInPcbnewFormat( wxCommandEvent& event )
 
     GBR_TO_PCB_EXPORTER gbr_exporter( this, fileName );
 
-    gbr_exporter.ExportPcb( layerdlg->GetLayersLookUpTable() );
+    gbr_exporter.ExportPcb( layerdlg->GetLayersLookUpTable(),
+                            layerdlg->GetCopperLayersCount() );
 }
 
 
-bool GBR_TO_PCB_EXPORTER::ExportPcb( LAYER_NUM* LayerLookUpTable )
+bool GBR_TO_PCB_EXPORTER::ExportPcb( LAYER_NUM* LayerLookUpTable, int aCopperLayers )
 {
     m_fp = wxFopen( m_pcb_file_name, wxT( "wt" ) );
 
@@ -182,7 +183,7 @@ bool GBR_TO_PCB_EXPORTER::ExportPcb( LAYER_NUM* LayerLookUpTable )
         return false;
     }
 
-    m_pcbCopperLayersCount = LayerLookUpTable[NB_GERBER_LAYERS];
+    m_pcbCopperLayersCount = aCopperLayers;
 
     writePcbHeader();
 
diff --git a/gerbview/select_layers_to_pcb.cpp b/gerbview/select_layers_to_pcb.cpp
index b9f4158982..6583e578ae 100644
--- a/gerbview/select_layers_to_pcb.cpp
+++ b/gerbview/select_layers_to_pcb.cpp
@@ -423,7 +423,5 @@ void LAYERS_MAP_DIALOG::OnOkClick( wxCommandEvent& event )
         _("The exported board has not enough copper layers to handle selected inner layers") );
         return;
     }
-    // XXX EVIL usage of LAYER
-    m_layersLookUpTable[NB_GERBER_LAYERS] = m_exportBoardCopperLayersCount;
     EndModal( wxID_OK );
 }
diff --git a/gerbview/select_layers_to_pcb.h b/gerbview/select_layers_to_pcb.h
index c4ad9789b5..dd27ee28ea 100644
--- a/gerbview/select_layers_to_pcb.h
+++ b/gerbview/select_layers_to_pcb.h
@@ -20,16 +20,16 @@ private:
     static int m_exportBoardCopperLayersCount;
     wxFlexGridSizer* m_flexRightColumnBoxSizer;     // An extra wxFlexGridSizer used
                                                     // when we have more than 16 gerber files loaded
-    LAYER_NUM m_layersLookUpTable[int(NB_LAYERS)+1];   // Indexes Gerber layers to PCB file layers
+    LAYER_NUM m_layersLookUpTable[NB_GERBER_LAYERS]; // Indexes Gerber layers to PCB file layers
                                                     // the last value in table is the number of copper layers
-    int    m_buttonTable[32];                       // Indexes buttons to Gerber layers
-    wxStaticText* m_layersList[32];                 // Indexes text strings to buttons
+    int    m_buttonTable[int(NB_GERBER_LAYERS)+1];       // Indexes buttons to Gerber layers
+    wxStaticText* m_layersList[int(NB_GERBER_LAYERS)+1]; // Indexes text strings to buttons
 
 public: LAYERS_MAP_DIALOG( GERBVIEW_FRAME* parent );
     ~LAYERS_MAP_DIALOG() {};
 
     LAYER_NUM * GetLayersLookUpTable() { return m_layersLookUpTable; }
-    int GetCopperLayersCount() { return m_exportBoardCopperLayersCount; }
+    static int GetCopperLayersCount() { return m_exportBoardCopperLayersCount; }
 
 private:
     void initDialog();