Syntax for PROGMEM in IDE 1.6.1

I am trying to figure out the correct syntax for an array of strings in Progmem that works on IDE version 1.6.1. I've searched the forums and found other people complaining of the 1.6 IDE breaking their code, and some work arounds, none of which seem to work for me.

Here is some sample code that won't compile, the problem lines are #46 and 108. The error is "ProgmemErr.ino:45:29: error: variable 'PATTERN_NAMES' must be const in order to be put into read-only section by means of 'attribute((progmem))'

Could someone please provide me with the correct syntax for these 2 lines?

#define FADE_STEPS    32                                  
// *****************
// **  HeartBeat  **
// *****************
#define       heartLED        13    // On-Board LED on Digital Pin 13
#define       heartRate       60    // Beats-Per-Minute
#define       heartTime       ((60000 / heartRate) / 8 )
unsigned long heartNextBeat = millis() + heartTime;
bool          heartState    = false;
byte          heartTic      = 0;
int		      beatCount = 0;

bool running = true;
unsigned long curMillis;

// ****************
// **  Patterns  **
// ****************
// 0-31 are reserved for the Effects List in menus
#define PATTERN_BASE  40 // Starting number for patterns, Equal to PAT_NONE
#define PAT_NONE      40
#define PAT_DOTS      41
#define PAT_GRADIENT  42
#define PAT_FADE      43
#define PAT_FWDCHASE  44
#define PAT_REVCHASE  45
#define PAT_SPARKLE   46
#define PAT_DISSOLVE  47
#define PAT_PAUSE     48
#define PATTERN_LAST  48 // Highest numbered pattern, should also be equal to PATTERN_BASE + PATTERN_COUNT
#define PATTERN_COUNT 8

#define PATTERN_NAME_SIZE 10  // 10 chars including the trailing zero, so really just 9 chars
//                                   "123456789"; Can't be longer than this!
const char NAME_NONE     [] PROGMEM = "None";
const char NAME_DOTS     [] PROGMEM = "Dots";
const char NAME_GRADIENT [] PROGMEM = "Gradient";
const char NAME_FADE     [] PROGMEM = "Fade";
const char NAME_FWDCHASE [] PROGMEM = "Fwd Chase";
const char NAME_REVCHASE [] PROGMEM = "Rev Chase";
const char NAME_SPARKLE  [] PROGMEM = "Sparkle";
const char NAME_DISSOLVE [] PROGMEM = "Dissolve";
const char NAME_PAUSE    [] PROGMEM = "Pause";

// ** PROBLEM IS HERE!  WHAT IS CORRECT SYNTAX? **
[color=red]const char *PATTERN_NAMES[] PROGMEM =
{   [/color]
  NAME_NONE,
  NAME_DOTS,
  NAME_GRADIENT,
  NAME_FADE,
  NAME_FWDCHASE,
  NAME_REVCHASE,
  NAME_SPARKLE,
  NAME_DISSOLVE,
  NAME_PAUSE,
};

#define EFFECT_SIZE  16  // Number of bytes used

// defined here, because they are used by the Effect class which follows
void fetchPatternName(byte patternIndex);
void fetchColorName(byte colorIndex);

// To avoid memory fragmentation, all color names (including custom colors) are fixed-length character arrays at a uniform 10 chars each
#define COLOR_NAME_SIZE 10  // 10 chars including the trailing zero, so really just 9 chars
//                                    "123456789"; Can't be longer than this!
const char NAME_BLACK_OFF [] PROGMEM = "Black-Off";
const char NAME_RED       [] PROGMEM = "Red";
const char NAME_GREEN     [] PROGMEM = "Green";
const char NAME_BLUE      [] PROGMEM = "Blue";
const char NAME_YELLOW    [] PROGMEM = "Yellow";
const char NAME_CYAN      [] PROGMEM = "Cyan";
const char NAME_MAGENTA   [] PROGMEM = "Magenta";
const char NAME_WHITE     [] PROGMEM = "White";
const char NAME_DK_RED    [] PROGMEM = "Dk Red";
const char NAME_DK_GREEN  [] PROGMEM = "Dk Green";
const char NAME_DK_BLUE   [] PROGMEM = "Dk Blue";
const char NAME_DK_YELLOW [] PROGMEM = "Mustard";
const char NAME_DK_CYAN   [] PROGMEM = "Teal";
const char NAME_DK_MAGENTA[] PROGMEM = "Fushia";
const char NAME_DIM_WHITE [] PROGMEM = "Dim White";
const char NAME_LT_RED    [] PROGMEM = "Lt Red";
const char NAME_LT_GREEN  [] PROGMEM = "Lt Green";
const char NAME_LT_BLUE   [] PROGMEM = "Lt Blue";
const char NAME_LT_YELLOW [] PROGMEM = "Lt Yellow";
const char NAME_LT_CYAN   [] PROGMEM = "Sea";
const char NAME_LT_MAGENTA[] PROGMEM = "Lavender";
const char NAME_BRT_WHITE [] PROGMEM = "Brt White";
const char NAME_PINK      [] PROGMEM = "Pink";
const char NAME_ORANGE    [] PROGMEM = "Orange";
const char NAME_PURPLE    [] PROGMEM = "Purple";
const char NAME_RANDOM    [] PROGMEM = "Random";
const char NAME_MEDIUM    [] PROGMEM = "Medium";
const char NAME_ANY       [] PROGMEM = "Any";
// Factory Default Names for Custom Colors 0-7, may end up being changed by user, stored in EEPROM
const char NAME_CORAL     [] PROGMEM = "Coral";
const char NAME_OLIVE     [] PROGMEM = "Olive";
const char NAME_WARM_WITE [] PROGMEM = "Warm Wite";
const char NAME_TURQUOISE [] PROGMEM = "Turquoise";
const char NAME_LIME      [] PROGMEM = "Lime";
const char NAME_GOLD      [] PROGMEM = "Gold";
const char NAME_INDIGO    [] PROGMEM = "Indigo";
const char NAME_CRIMSON   [] PROGMEM = "Crimson";


// ** PROBLEM IS HERE!  WHAT IS CORRECT SYNTAX? **
[color=red]const char const * COLOR_NAMES[] PROGMEM =
{   [/color]
  NAME_BLACK_OFF,
  NAME_RED,
  NAME_GREEN,
  NAME_BLUE,
  NAME_YELLOW,
  NAME_CYAN,
  NAME_MAGENTA,
  NAME_WHITE,
  NAME_DK_RED,
  NAME_DK_GREEN,
  NAME_DK_BLUE,
  NAME_DK_YELLOW,
  NAME_DK_CYAN,
  NAME_DK_MAGENTA,
  NAME_DIM_WHITE,
  NAME_LT_RED,
  NAME_LT_GREEN,
  NAME_LT_BLUE,
  NAME_LT_YELLOW,
  NAME_LT_CYAN,
  NAME_LT_MAGENTA,
  NAME_BRT_WHITE,
  NAME_PINK,
  NAME_ORANGE,
  NAME_PURPLE,
  NAME_RANDOM,
  NAME_MEDIUM,
  NAME_ANY
};

//CRGB   customColors[0];
#define NUM_CUSTOM_COLORS 8


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

}

void loop() {
  // put your main code here, to run repeatedly:

  while(running)
  {
    curMillis = millis();
    if (curMillis > heartNextBeat)
    {
      heartState = ((heartTic == 1) || (heartTic == 4));
      digitalWrite(heartLED, heartState);
      //DEBUG_Print_Info("*");
      heartTic++;
      heartTic &= 7;
      heartNextBeat = curMillis + heartTime;
    } // End if (curMillis > heartNextBeat)
  } // End while(running)
} // End void loop()
const char * const PATTERN_NAMES[] PROGMEM =