changeset 10:b5d48e9b9aea

GUI Works fine. Small memory leaks.
author martinm_home <martin.morrell@eecs.qmul.ac.uk>
date Tue, 25 Sep 2012 21:35:17 +0100
parents 53f99cbc5dbd
children 76e2e62635b4
files Classic Ambisonics Decoder VST.xcodeproj/project.xcworkspace/xcuserdata/momont.xcuserdatad/UserInterfaceState.xcuserstate Classic Ambisonics Decoder VST.xcodeproj/xcuserdata/momont.xcuserdatad/xcschemes/Classic Ambisonics Decoder VST.xcscheme Resources/360_knob.knob Resources/360_knob.png Resources/blue_knob.knob Resources/blue_knob.png Resources/blue_red_knob.knob Resources/blue_red_knob.png Resources/red_blue_knob.knob Resources/red_blue_knob.png Resources/red_knob.knob Resources/red_knob.png Source/Decoder.cpp Source/GUI.cpp Source/GUI.h Source/MyPlot.h Source/SoundField.cpp Source/SoundField.h
diffstat 18 files changed, 759 insertions(+), 313 deletions(-) [+]
line wrap: on
line diff
Binary file Classic Ambisonics Decoder VST.xcodeproj/project.xcworkspace/xcuserdata/momont.xcuserdatad/UserInterfaceState.xcuserstate has changed
--- a/Classic Ambisonics Decoder VST.xcodeproj/xcuserdata/momont.xcuserdatad/xcschemes/Classic Ambisonics Decoder VST.xcscheme	Thu Sep 20 16:41:01 2012 +0100
+++ b/Classic Ambisonics Decoder VST.xcodeproj/xcuserdata/momont.xcuserdatad/xcschemes/Classic Ambisonics Decoder VST.xcscheme	Tue Sep 25 21:35:17 2012 +0100
@@ -35,7 +35,7 @@
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
       launchStyle = "0"
       useCustomWorkingDirectory = "NO"
-      buildConfiguration = "Debug"
+      buildConfiguration = "Release"
       ignoresPersistentStateOnLaunch = "NO"
       debugDocumentVersioning = "YES"
       allowLocationSimulation = "YES">
Binary file Resources/360_knob.knob has changed
Binary file Resources/360_knob.png has changed
Binary file Resources/blue_knob.knob has changed
Binary file Resources/blue_knob.png has changed
Binary file Resources/blue_red_knob.knob has changed
Binary file Resources/blue_red_knob.png has changed
Binary file Resources/red_blue_knob.knob has changed
Binary file Resources/red_blue_knob.png has changed
Binary file Resources/red_knob.knob has changed
Binary file Resources/red_knob.png has changed
--- a/Source/Decoder.cpp	Thu Sep 20 16:41:01 2012 +0100
+++ b/Source/Decoder.cpp	Tue Sep 25 21:35:17 2012 +0100
@@ -12,10 +12,10 @@
 #define _USE_MATH_DEFINES
 #include <cmath>
 #include <stdlib.h>
-#define RearVerbWidth 55
-#define RearVerbPattern 0.5
-#define HiVerbWidth 30
-#define HiVerbPattern 0.5
+#define RearVerbWidth 55    //Rear Verb Microphone Width
+#define RearVerbPattern 0.5 //Rear Verb Microphone Pattern
+#define HiVerbWidth 30      //Hi Verb Microphone Width
+#define HiVerbPattern 0.5   //Hi Verb Microphone Pattern
 
 
 double Decoder::degRad(double angle)
@@ -72,7 +72,7 @@
                 output[0]=outputC;
                 return 1;
             }
-            else if (channelOrder==1)
+            else if (channelOrder==1) {
                 output[0]=0;
                 output[1]=0;
                 output[2]=outputC;
@@ -80,6 +80,10 @@
                 output[4]=0;
                 output[5]=0;
                 return 6;
+            }
+            else {
+                return 0;
+            }
             break;
             
         case 2:
@@ -89,7 +93,7 @@
                 output[1]=outputR;
                 return 2;
             }
-            else if (channelOrder==1)
+            else if (channelOrder==1) {
                 output[0]=outputL;
                 output[1]=outputR;
                 output[2]=0;
@@ -98,6 +102,10 @@
                 output[5]=0;
                 return 6;
             break;
+            }
+            else {
+                return 0;
+            }
             
         case 3:
             twoOneDecoder(w, x, y, z);
@@ -107,7 +115,7 @@
                 output[2]=outputS;
                 return 3;
             }
-            else if (channelOrder==1)
+            else if (channelOrder==1) {
                 output[0]=outputL;
                 output[1]=outputR;
                 output[2]=0;
@@ -116,6 +124,10 @@
                 output[5]=0;
                 return 6;
             break;
+            }
+            else {
+                return 0;
+            }
             
         case 4:
             quadDecoder(w, x, y, z);
@@ -126,7 +138,7 @@
                 output[3]=outputSR;
                 return 4;
             }
-            else if (channelOrder==1)
+            else if (channelOrder==1) {
                 output[0]=outputL;
                 output[1]=outputR;
                 output[2]=0;
@@ -135,6 +147,10 @@
                 output[5]=outputSR;
                 return 6;
             break;
+            }
+            else {
+                return 0;
+            }
             
         case 5:
             fiveDecoder(w, x, y, z);
@@ -146,7 +162,7 @@
                 output[4]=outputSR;
                 return 5;
             }
-            else if (channelOrder==1)
+            else if (channelOrder==1) {
                 output[0]=outputL;
                 output[1]=outputR;
                 output[2]=outputC;
@@ -155,6 +171,10 @@
                 output[5]=outputSR;
                 return 6;
             break;
+            }
+            else {
+                return 0;
+            }
             
         case 6:
             fiveOneDecoder(w, x, y, z);
@@ -167,7 +187,7 @@
                 output[5]=outputSR;
                 return 6;
             }
-            else if (channelOrder==1)
+            else if (channelOrder==1) {
                 output[0]=outputL;
                 output[1]=outputR;
                 output[2]=outputC;
@@ -176,6 +196,10 @@
                 output[5]=outputSR;
                 return 6;
             break;
+            }
+            else {
+                return 0;
+            }
             
         default:
             return 0;
--- a/Source/GUI.cpp	Thu Sep 20 16:41:01 2012 +0100
+++ b/Source/GUI.cpp	Tue Sep 25 21:35:17 2012 +0100
@@ -71,7 +71,6 @@
 	knob_mode4 = new CBitmap ("mode4_knob.png");
     knob_mode5 = new CBitmap ("mode5_knob.png");
 	
-
 	//Create the main frame
 	frameSize (0, 0, 578, 502);
 	CFrame* newFrame = new CFrame (frameSize, ptr, this);
@@ -102,17 +101,6 @@
     //Info Display
     nameDisplay(newFrame);
     
-   
-	
-    
-	//-- remember our controls so that we can sync them with the state of the effect
-	controls[kRotate] = knobRotate;
-	controls[kTilt] = knobTilt;
-	controls[kTumble] = knobTumble;
-    controls[kZoom] = knobZoom;
-	controls[kZoomMethod] = knobZoomMethod;
-    controls[kDecoderMode] = knobDecoder;
-    controls[kChannelOrder] = knobChannel;
     
 	
     
@@ -120,14 +108,12 @@
 	frame = newFrame;
     
     
-    
 	//-- sync parameters
-    //syncParameters();
+    myPlot->decoder_mode5x = effect->getParameter(103); //Sync the hidden 5.x decoder mode first
     for (int i = 0; i <= 4; i++)    //Sync Transforms & Zoom
         setParameter (i, effect->getParameter (i));
     for (int i = 18; i <= 19; i++)    //Sync Decoder Mode & Output Type
         setParameter (i, effect->getParameter (i));
-    myPlot->decoder_mode5x = effect->getParameter(103); //Sync the hidden 5.x decoder mode
     
     
 	return true;
@@ -138,20 +124,28 @@
 //------------------------------------------------------------------------------------
 void MyEditor::close ()
 {
+    knob_360->forget();
+	knob_red->forget();
+	knob_blue->forget();
+	knob_red_blue->forget();
+    knob_blue_red->forget();
+	knob_mode2->forget();
+    knob_mode2b->forget();
+	knob_mode4->forget();
+    knob_mode5->forget();
+    
+    //myPlot->decoder_mode=-1;
+    //modeChange();
+    
+    
+    
+    
 	//-- on close we need to delete the frame object.
 	//-- once again we make sure that the member frame variable is set to zero before we delete it
 	//-- so that calls to setParameter won't crash.
-    
-    
-}
-
-
-
-//------------------------------------------------------------------------------------
-void MyEditor::syncParameters()
-{
-    for (int i = 0; i < kNumParameters; i++)
-        setParameter (i, effect->getParameter (i));    
+    CFrame* oldFrame = frame;
+	frame = 0;
+	oldFrame->forget();
 }
 
 
@@ -172,32 +166,30 @@
 	CView* transforms_view = new CView (transSize);
     transforms_view->setBackground (bTransforms);
     newFrame->addView (transforms_view);
+    newFrame->remember();
     
 	//Rotate
 	r (0, 0, knob_red_blue->getWidth (), knob_red_blue->getHeight () / IMAGE);
 	r.offset(hPos+cSep, ePos+kOffset);
-	knobRotate = new CAnimKnob (r, this, kRotate, IMAGE, knob_360->getHeight () / IMAGE, knob_360, CPoint (0, 0));//IMAGE, 64, 
+	knobRotate = new CAnimKnob (r, this, kRotate, IMAGE, knob_360->getHeight () / IMAGE, knob_360, CPoint (0, 0));
 	newFrame->addView (knobRotate);
-	//knobRotate->forget ();
+    newFrame->remember();
 	
 	//Tilt
 	r.offset(knob_red_blue->getWidth()+cSep, 0);
 	knobTilt = new CAnimKnob (r, this, kTilt, IMAGE, knob_360->getHeight () / IMAGE, knob_360, CPoint (0, 0));
 	newFrame->addView (knobTilt);
-	//knobTilt->forget ();
+    newFrame->remember();
 	
 	//Tumble
 	r.offset(knob_red_blue->getWidth()+cSep, 0);
 	knobTumble = new CAnimKnob (r, this, kTumble, IMAGE, knob_360->getHeight () / IMAGE, knob_360, CPoint (0, 0));
 	newFrame->addView (knobTumble);
-	//knobTumble->forget ();
+    newFrame->remember();
 	
 
 	
-	
-	
-	
-	
+
 	
     //--CTextLabel--------------------------------------
     //Label Rotate
@@ -210,6 +202,7 @@
     labelRotate->setFrameColor (kBlank);
     labelRotate->setText("Rotate");
     newFrame->addView (labelRotate);
+    newFrame->remember();
 	
 	//Label Tilt
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -220,6 +213,7 @@
     labelTilt->setFrameColor (kBlank);
     labelTilt->setText("Tilt");
     newFrame->addView (labelTilt);
+    newFrame->remember();
 	
 	//Label Tumble
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -230,6 +224,7 @@
     labelTumble->setFrameColor (kBlank);
     labelTumble->setText("Tumble");
     newFrame->addView (labelTumble);
+    newFrame->remember();
 	
 
 	//Label Section
@@ -242,6 +237,7 @@
     labelTransforms->setFrameColor (kBlank);
     labelTransforms->setText("Transforms");
     newFrame->addView (labelTransforms);
+    newFrame->remember();
 	
 	
 	
@@ -256,7 +252,8 @@
 	paramRotate->setFontColor (kDisplayText); 
 	paramRotate->setBackColor (kDisplayBackground); 
 	paramRotate->setFrameColor (kBlackCColor); 
-	newFrame->addView (paramRotate); 
+	newFrame->addView (paramRotate);
+    newFrame->remember();
 	
 	
 	//Tilt Value 
@@ -267,7 +264,8 @@
 	paramTilt->setFontColor (kDisplayText); 
 	paramTilt->setBackColor (kDisplayBackground); 
 	paramTilt->setFrameColor (kBlackCColor); 
-	newFrame->addView (paramTilt); 
+	newFrame->addView (paramTilt);
+    newFrame->remember();
 	
 	
 	//Tumble Value
@@ -278,7 +276,27 @@
 	paramTumble->setFontColor (kDisplayText); 
 	paramTumble->setBackColor (kDisplayBackground); 
 	paramTumble->setFrameColor (kBlackCColor); 
-	newFrame->addView (paramTumble); 
+	newFrame->addView (paramTumble);
+    newFrame->remember();
+    
+    
+    //-- remember our controls so that we can sync them with the state of the effect
+	controls[kRotate] = knobRotate;
+	controls[kTilt] = knobTilt;
+	controls[kTumble] = knobTumble;
+    
+    //Forget this section's Background, Knobs, Labels
+    bTransforms->forget();
+    knobRotate->forget ();
+    knobTilt->forget ();
+    knobTumble->forget ();
+    labelRotate->forget();
+    labelTilt->forget();
+    labelTumble->forget();
+    labelTransforms->forget();
+    paramRotate->forget();
+    paramTilt->forget();
+    paramTumble->forget();
 }
 
 
@@ -296,19 +314,20 @@
 	CView* zoom_view = new CView (zoomSize);
     zoom_view->setBackground (bZoom);
     newFrame->addView (zoom_view);
+    newFrame->remember();
     
 	//ZoomMethod
 	CRect r (0, 0, knob_red_blue->getWidth (), knob_red_blue->getHeight () / IMAGE);
 	r.offset(hPos+cSep, kOffset+cSep);
 	knobZoomMethod = new CHorizontalSwitch (r, this, kZoomMethod, 4, knob_mode4->getHeight () / 4, 4, knob_mode4, CPoint (0, 0));
 	newFrame->addView (knobZoomMethod);
-	//knobZoomMethod->forget ();
+    newFrame->remember();
 	
 	//Zoom
 	r.offset(knob_mode4->getWidth()+cSep, 0);
 	knobZoom = new CAnimKnob (r, this, kZoom, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_red_blue, CPoint (0, 0));
 	newFrame->addView (knobZoom);
-	//knobZoom->forget ();
+    newFrame->remember();
 	
 	
 	//--CTextLabel--------------------------------------
@@ -322,6 +341,7 @@
     labelZoomMethod->setFrameColor (kBlank);
     labelZoomMethod->setText("Zoom Type");
     newFrame->addView (labelZoomMethod);
+    newFrame->remember();
 	
 	//Label Zoom
 	LabelSize.offset (knob_mode4->getWidth()+cSep, 0);
@@ -332,17 +352,19 @@
     labelZoom->setFrameColor (kBlank);
     labelZoom->setText("Zoom");
     newFrame->addView (labelZoom);
+    newFrame->remember();
 	
 	//Label Section
     LabelSize (0, 0, bZoom->getWidth(), tDepthLarge);
     LabelSize.offset (hPos, ePos+tOffset);
-    CTextLabel* labelTransforms = new CTextLabel (LabelSize, 0, 0, kCenterText); 
-    labelTransforms->setFont (kNormalFontBig); 
-    labelTransforms->setFontColor (kLabelText); 
-    labelTransforms->setBackColor (kBlank); 
-    labelTransforms->setFrameColor (kBlank);
-    labelTransforms->setText("Zooming");
-    newFrame->addView (labelTransforms);
+    CTextLabel* labelZooming = new CTextLabel (LabelSize, 0, 0, kCenterText);
+    labelZooming->setFont (kNormalFontBig); 
+    labelZooming->setFontColor (kLabelText); 
+    labelZooming->setBackColor (kBlank); 
+    labelZooming->setFrameColor (kBlank);
+    labelZooming->setText("Zooming");
+    newFrame->addView (labelZooming);
+    newFrame->remember();
 	
 	
 	//--CTextLabel--------------------------------------
@@ -355,7 +377,8 @@
 	paramZoomMethod->setFontColor (kDisplayText); 
 	paramZoomMethod->setBackColor (kDisplayBackground); 
 	paramZoomMethod->setFrameColor (kBlackCColor); 
-	newFrame->addView (paramZoomMethod); 
+	newFrame->addView (paramZoomMethod);
+    newFrame->remember();
 	
 	//Zoom Value 
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -365,8 +388,23 @@
 	paramZoom->setFontColor (kDisplayText); 
 	paramZoom->setBackColor (kDisplayBackground); 
 	paramZoom->setFrameColor (kBlackCColor); 
-	newFrame->addView (paramZoom); 
+	newFrame->addView (paramZoom);
+    newFrame->remember();
 	
+    
+    //-- remember our controls so that we can sync them with the state of the effect
+    controls[kZoom] = knobZoom;
+	controls[kZoomMethod] = knobZoomMethod;
+    
+    //Forget this section's Background, Knobs, Labels
+    bZoom->forget();
+    knobZoomMethod->forget();
+    knobZoom->forget();
+    labelZoomMethod->forget();
+    labelZoom->forget();
+    labelZooming->forget();
+    paramZoomMethod->forget();
+    paramZoom->forget();
 }
 
 
@@ -386,7 +424,7 @@
 	control_view = new CView (controlSize);
     control_view->setBackground (bControls);
     getFrame()->addView (control_view);
-    
+    getFrame()->remember();
     
     
 
@@ -395,27 +433,31 @@
 	r.offset(hPos+cSep,ePos+kOffset);
 	knobMode = new CHorizontalSwitch (r, this, kMode, 2, knob_mode2->getHeight () / 2, 2, knob_mode2, CPoint (0, 0));
 	getFrame()->addView (knobMode);
+    getFrame()->remember();
 	
 	//Width
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobWidth = new CAnimKnob (r, this, kWidth, IMAGE, knob_red->getHeight () / IMAGE, knob_red, CPoint (0, 0));
 	getFrame()->addView (knobWidth);
+    getFrame()->remember();
 	
 	//Pattern
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobPattern = new CAnimKnob (r, this, kPattern, IMAGE, knob_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
 	getFrame()->addView (knobPattern);
+    getFrame()->remember();
 
 	//RearVerb
     r.offset(2*knob_mode2->getWidth()+2*cSep+10, 0);
     knobRearVerb = new CAnimKnob (r, this, kRearVerb, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_red, CPoint (0, 0));
 	getFrame()->addView (knobRearVerb);
+    getFrame()->remember();
 	
 	//HiVerb
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobHiVerb = new CAnimKnob (r, this, kHiVerb, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
 	getFrame()->addView (knobHiVerb);
-	
+	getFrame()->remember();
 	
 	
 
@@ -431,7 +473,8 @@
     labelMode->setBackColor (kBlank); 
     labelMode->setFrameColor (kBlank);
     labelMode->setText("Mode");
-    getFrame()->addView (labelMode);    
+    getFrame()->addView (labelMode);
+    getFrame()->remember();
 	
 	//Label Width
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -442,6 +485,7 @@
     labelWidth->setFrameColor (kBlank);
     labelWidth->setText("Width");
     getFrame()->addView (labelWidth);
+    getFrame()->remember();
 	
 	//Label Pattern
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -452,6 +496,7 @@
     labelPattern->setFrameColor (kBlank);
     labelPattern->setText("Pattern");
     getFrame()->addView (labelPattern);
+    getFrame()->remember();
 	
 	//Label RearVerb
 	LabelSize.offset (2*knob_mode2->getWidth()+2*cSep+10, 0);
@@ -462,6 +507,7 @@
     labelRearVerb->setFrameColor (kBlank);
     labelRearVerb->setText("RearVerb");
     getFrame()->addView (labelRearVerb);
+    getFrame()->remember();
 	
 	//Label HiVerb
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -472,7 +518,7 @@
     labelHiVerb->setFrameColor (kBlank);
     labelHiVerb->setText("HiVerb");
     getFrame()->addView (labelHiVerb);
-	
+	getFrame()->remember();
 	
 	
 	
@@ -488,7 +534,7 @@
     decoderLabel1->setFrameColor (kBlank);
     decoderLabel1->setText("Stereo Decoding & Reverb");
     getFrame()->addView (decoderLabel1);
-	
+	getFrame()->remember();
 	
 	
 
@@ -503,6 +549,7 @@
 	paramMode->setBackColor (kDisplayBackground); 
 	paramMode->setFrameColor (kBlackCColor); 
 	getFrame()->addView (paramMode);
+    getFrame()->remember();
 
 	
 	//Width Value 
@@ -514,7 +561,7 @@
 	paramWidth->setBackColor (kDisplayBackground); 
 	paramWidth->setFrameColor (kBlackCColor); 
 	getFrame()->addView (paramWidth);
-
+    getFrame()->remember();
 	
 	//Pattern Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -525,7 +572,7 @@
 	paramPattern->setBackColor (kDisplayBackground); 
 	paramPattern->setFrameColor (kBlackCColor); 
 	getFrame()->addView (paramPattern);
-
+    getFrame()->remember();
     
 	//RearVerb Value 
 	DisplaySize.offset (2*knob_mode2->getWidth()+2*cSep+10, 0);
@@ -536,7 +583,7 @@
 	paramRearVerb->setBackColor (kDisplayBackground); 
 	paramRearVerb->setFrameColor (kBlackCColor); 
 	getFrame()->addView (paramRearVerb);
-
+    getFrame()->remember();
 	
 	//HiVerb Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -547,6 +594,7 @@
 	paramHiVerb->setBackColor (kDisplayBackground); 
 	paramHiVerb->setFrameColor (kBlackCColor); 
 	getFrame()->addView (paramHiVerb);
+    getFrame()->remember();
 
     controls[kMode] = knobMode;
 	controls[kWidth] = knobWidth;
@@ -561,6 +609,10 @@
     //controls[kSurroundPattern] = knobSurroundPattern;
     //controls[kSurroundWidth] = knobSurroundWidth;
     //controls[kSurroundGain] = knobSurroundGain;
+    
+    
+    //Forget Label, Knobs etc.
+    bControls->forget();
 }
 
 
@@ -581,7 +633,8 @@
 	control_view = new CView (controlSize);
     control_view->setBackground (bControls);
     getFrame()->addView (control_view);
-
+    getFrame()->remember();
+    
     
     bControls2 = new CBitmap ("controls2.png");
     controlSize = CRect (0, 0, bControls2->getWidth (),bControls2->getHeight ());
@@ -589,7 +642,7 @@
 	control_view2 = new CView (controlSize);
     control_view2->setBackground (bControls2);
     getFrame()->addView (control_view2);
-    
+    getFrame()->remember();
     
     
 	//Mode
@@ -597,38 +650,44 @@
 	r.offset(hPos+cSep,ePos+kOffset);
 	knobMode = new CHorizontalSwitch (r, this, kMode, 2, knob_mode2->getHeight () / 2, 2, knob_mode2, CPoint (0, 0));
 	getFrame()->addView (knobMode);
+    getFrame()->remember();
 	
 	//Width
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobWidth = new CAnimKnob (r, this, kWidth, IMAGE, knob_red->getHeight () / IMAGE, knob_red, CPoint (0, 0));
 	getFrame()->addView (knobWidth);
+    getFrame()->remember();
 	
 	//Pattern
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobPattern = new CAnimKnob (r, this, kPattern, IMAGE, knob_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
 	getFrame()->addView (knobPattern);
+    getFrame()->remember();
     
 	//RearVerb
     r.offset(2*knob_mode2->getWidth()+2*cSep+10, 0);
     knobRearVerb = new CAnimKnob (r, this, kRearVerb, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_red, CPoint (0, 0));
 	getFrame()->addView (knobRearVerb);
+    getFrame()->remember();
 	
 	//HiVerb
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobHiVerb = new CAnimKnob (r, this, kHiVerb, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
 	getFrame()->addView (knobHiVerb);
+    getFrame()->remember();
     
     //SubGain
     r (0, 0, knob_mode2->getWidth (), knob_mode2->getHeight () / 2);
 	r.offset(hPos2+2*cSep+knob_mode2->getWidth (), ePos2+kOffset);
     knobSubGain = new CAnimKnob (r, this, kSubGain, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue_red, CPoint (0, 0));
 	getFrame()->addView (knobSubGain);
+    getFrame()->remember();
 	
 	//FC
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobFc = new CAnimKnob (r, this, kFc, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
 	getFrame()->addView (knobFc);
-	
+	getFrame()->remember();
 	
 	
     
@@ -645,6 +704,7 @@
     labelMode->setFrameColor (kBlank);
     labelMode->setText("Mode");
     getFrame()->addView (labelMode);
+    getFrame()->remember();
 	
 	//Label Width
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -655,6 +715,7 @@
     labelWidth->setFrameColor (kBlank);
     labelWidth->setText("Width");
     getFrame()->addView (labelWidth);
+    getFrame()->remember();
 	
 	//Label Pattern
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -665,6 +726,7 @@
     labelPattern->setFrameColor (kBlank);
     labelPattern->setText("Pattern");
     getFrame()->addView (labelPattern);
+    getFrame()->remember();
 	
 	//Label RearVerb
 	LabelSize.offset (2*knob_mode2->getWidth()+2*cSep+10, 0);
@@ -675,6 +737,7 @@
     labelRearVerb->setFrameColor (kBlank);
     labelRearVerb->setText("RearVerb");
     getFrame()->addView (labelRearVerb);
+    getFrame()->remember();
 	
 	//Label HiVerb
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -685,6 +748,7 @@
     labelHiVerb->setFrameColor (kBlank);
     labelHiVerb->setText("HiVerb");
     getFrame()->addView (labelHiVerb);
+    getFrame()->remember();
     
     //Label SubGain
     LabelSize(0, 0, knob_mode2->getWidth (), tDepth);
@@ -696,6 +760,7 @@
     labelSubGain->setFrameColor (kBlank);
     labelSubGain->setText("SubGain");
     getFrame()->addView (labelSubGain);
+    getFrame()->remember();
 	
 	//Label Fc
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -706,7 +771,7 @@
     labelFc->setFrameColor (kBlank);
     labelFc->setText("xOver");
     getFrame()->addView (labelFc);
-	
+	getFrame()->remember();
 	
 	
 	
@@ -722,7 +787,7 @@
     decoderLabel1->setFrameColor (kBlank);
     decoderLabel1->setText("2.1 Decoding & Reverb");
     getFrame()->addView (decoderLabel1);
-	
+	getFrame()->remember();
 	
 	
     
@@ -737,7 +802,7 @@
 	paramMode->setBackColor (kDisplayBackground);
 	paramMode->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramMode);
-    
+    getFrame()->remember();
 	
 	//Width Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -748,7 +813,7 @@
 	paramWidth->setBackColor (kDisplayBackground);
 	paramWidth->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramWidth);
-    
+    getFrame()->remember();
 	
 	//Pattern Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -759,7 +824,7 @@
 	paramPattern->setBackColor (kDisplayBackground);
 	paramPattern->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramPattern);
-    
+    getFrame()->remember();
     
 	//RearVerb Value
 	DisplaySize.offset (2*knob_mode2->getWidth()+2*cSep+10, 0);
@@ -770,7 +835,7 @@
 	paramRearVerb->setBackColor (kDisplayBackground);
 	paramRearVerb->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramRearVerb);
-    
+    getFrame()->remember();
 	
 	//HiVerb Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -781,7 +846,7 @@
 	paramHiVerb->setBackColor (kDisplayBackground);
 	paramHiVerb->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramHiVerb);
-    
+    getFrame()->remember();
     
     //SubGain Value
     DisplaySize(0, 0, knob_mode2->getWidth (), tDepth);
@@ -793,7 +858,7 @@
 	paramSubGain->setBackColor (kDisplayBackground);
 	paramSubGain->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramSubGain);
-    
+    getFrame()->remember();
 	
 	//Fc Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -804,6 +869,7 @@
 	paramFc->setBackColor (kDisplayBackground);
 	paramFc->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramFc);
+    getFrame()->remember();
     
     controls[kMode] = knobMode;
 	controls[kWidth] = knobWidth;
@@ -818,6 +884,10 @@
     //controls[kSurroundPattern] = knobSurroundPattern;
     //controls[kSurroundWidth] = knobSurroundWidth;
     //controls[kSurroundGain] = knobSurroundGain;
+    
+    //Forget Label, Knobs etc.
+    bControls->forget();
+    bControls2->forget();
 }
 
 
@@ -836,7 +906,7 @@
 	control_view = new CView (controlSize);
     control_view->setBackground (bControls);
     getFrame()->addView (control_view);
-    
+    getFrame()->remember();
     
     
     
@@ -845,38 +915,44 @@
 	r.offset(hPos+cSep,ePos+kOffset);
 	knobMode = new CHorizontalSwitch (r, this, kMode, 2, knob_mode2->getHeight () / 2, 2, knob_mode2, CPoint (0, 0));
 	getFrame()->addView (knobMode);
+    getFrame()->remember();
 	
 	//Width
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobWidth = new CAnimKnob (r, this, kWidth, IMAGE, knob_red->getHeight () / IMAGE, knob_red, CPoint (0, 0));
 	getFrame()->addView (knobWidth);
+    getFrame()->remember();
 	
 	//Pattern
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobPattern = new CAnimKnob (r, this, kPattern, IMAGE, knob_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
 	getFrame()->addView (knobPattern);
+    getFrame()->remember();
     
     
     //Surround Mode
 	r.offset(knob_mode2->getWidth()+cSep+10, 0);
 	knobSurroundMode = new CHorizontalSwitch (r, this, kSurroundMode, 2, knob_mode2->getHeight () / 2, 2, knob_mode2, CPoint (0, 0));
 	getFrame()->addView (knobSurroundMode);
+    getFrame()->remember();
     
 	//Surround Width
     r.offset(knob_mode2->getWidth()+cSep, 0);
     knobSurroundWidth = new CAnimKnob (r, this, kSurroundWidth, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_red, CPoint (0, 0));
 	getFrame()->addView (knobSurroundWidth);
+    getFrame()->remember();
 	
 	//Surround Pattern
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobSurroundPattern = new CAnimKnob (r, this, kSurroundPattern, IMAGE, knob_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
 	getFrame()->addView (knobSurroundPattern);
+    getFrame()->remember();
     
     //Surround Gain
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobSurroundGain = new CAnimKnob (r, this, kSurroundGain, IMAGE, knob_blue->getHeight () / IMAGE, knob_blue_red, CPoint (0, 0));
 	getFrame()->addView (knobSurroundGain);
-	
+	getFrame()->remember();
 	
 	
     
@@ -893,6 +969,7 @@
     labelMode->setFrameColor (kBlank);
     labelMode->setText("Mode");
     getFrame()->addView (labelMode);
+    getFrame()->remember();
 	
 	//Label Width
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -903,6 +980,7 @@
     labelWidth->setFrameColor (kBlank);
     labelWidth->setText("Width");
     getFrame()->addView (labelWidth);
+    getFrame()->remember();
 	
 	//Label Pattern
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -913,6 +991,7 @@
     labelPattern->setFrameColor (kBlank);
     labelPattern->setText("Pattern");
     getFrame()->addView (labelPattern);
+    getFrame()->remember();
 	
 	//Label Surround Mode
 	LabelSize.offset (knob_mode2->getWidth()+cSep+10, 0);
@@ -923,6 +1002,7 @@
     labelSurMode->setFrameColor (kBlank);
     labelSurMode->setText("SurMode");
     getFrame()->addView (labelSurMode);
+    getFrame()->remember();
 	
 	//Label Surround Width
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -933,6 +1013,7 @@
     labelSurWidth->setFrameColor (kBlank);
     labelSurWidth->setText("SurWidth");
     getFrame()->addView (labelSurWidth);
+    getFrame()->remember();
     
     //Label Surround Pattern
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -943,6 +1024,7 @@
     labelSurPattern->setFrameColor (kBlank);
     labelSurPattern->setText("SurPattern");
     getFrame()->addView (labelSurPattern);
+    getFrame()->remember();
     
     //Label Surround Gain
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -953,7 +1035,7 @@
     labelSurGain->setFrameColor (kBlank);
     labelSurGain->setText("SurGain");
     getFrame()->addView (labelSurGain);
-	
+	getFrame()->remember();
 	
 	
     
@@ -968,7 +1050,7 @@
     decoderLabel1->setFrameColor (kBlank);
     decoderLabel1->setText("4.0 Decoding");
     getFrame()->addView (decoderLabel1);
-	
+	getFrame()->remember();
 	
 	
     
@@ -983,7 +1065,7 @@
 	paramMode->setBackColor (kDisplayBackground);
 	paramMode->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramMode);
-    
+    getFrame()->remember();
 	
 	//Width Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -994,7 +1076,7 @@
 	paramWidth->setBackColor (kDisplayBackground);
 	paramWidth->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramWidth);
-    
+    getFrame()->remember();
 	
 	//Pattern Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1005,7 +1087,7 @@
 	paramPattern->setBackColor (kDisplayBackground);
 	paramPattern->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramPattern);
-    
+    getFrame()->remember();
     
 	//SurMode Value
 	DisplaySize.offset (knob_mode2->getWidth()+cSep+10, 0);
@@ -1016,7 +1098,7 @@
 	paramSurMode->setBackColor (kDisplayBackground);
 	paramSurMode->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramSurMode);
-    
+    getFrame()->remember();
 	
 	//SurWidth Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1027,6 +1109,7 @@
 	paramSurWidth->setBackColor (kDisplayBackground);
 	paramSurWidth->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramSurWidth);
+    getFrame()->remember();
     
     //SurPattern Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1037,6 +1120,7 @@
 	paramSurPattern->setBackColor (kDisplayBackground);
 	paramSurPattern->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramSurPattern);
+    getFrame()->remember();
     
     //SurWidth Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1047,6 +1131,7 @@
 	paramSurGain->setBackColor (kDisplayBackground);
 	paramSurGain->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramSurGain);
+    getFrame()->remember();
     
     controls[kMode] = knobMode;
 	controls[kWidth] = knobWidth;
@@ -1061,6 +1146,9 @@
     controls[kSurroundPattern] = knobSurroundPattern;
     controls[kSurroundWidth] = knobSurroundWidth;
     controls[kSurroundGain] = knobSurroundGain;
+    
+    //Forget Label, Knobs etc.
+    bControls->forget();
 }
 
 
@@ -1083,7 +1171,7 @@
 	control_view = new CView (controlSize);
     control_view->setBackground (bControls);
     getFrame()->addView (control_view);
-    
+    getFrame()->remember();
     
     bControls2 = new CBitmap ("controls2.png");
     controlSize = CRect (0, 0, bControls2->getWidth (),bControls2->getHeight ());
@@ -1091,7 +1179,7 @@
 	control_view2 = new CView (controlSize);
     control_view2->setBackground (bControls2);
     getFrame()->addView (control_view2);
-    
+    getFrame()->remember();
     
     
 	//Mode
@@ -1099,38 +1187,44 @@
 	r.offset(hPos+cSep,ePos+kOffset);
 	knobMode = new CHorizontalSwitch (r, this, kMode, 2, knob_mode2->getHeight () / 2, 2, knob_mode2, CPoint (0, 0));
 	getFrame()->addView (knobMode);
+    getFrame()->remember();
 	
 	//Width
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobWidth = new CAnimKnob (r, this, kWidth, IMAGE, knob_red->getHeight () / IMAGE, knob_red, CPoint (0, 0));
 	getFrame()->addView (knobWidth);
+    getFrame()->remember();
 	
 	//Pattern
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobPattern = new CAnimKnob (r, this, kPattern, IMAGE, knob_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
 	getFrame()->addView (knobPattern);
+    getFrame()->remember();
     
     
     //Surround Mode
 	r.offset(knob_mode2->getWidth()+cSep+10, 0);
 	knobSurroundMode = new CHorizontalSwitch (r, this, kSurroundMode, 2, knob_mode2->getHeight () / 2, 2, knob_mode2, CPoint (0, 0));
 	getFrame()->addView (knobSurroundMode);
+    getFrame()->remember();
     
 	//Surround Width
     r.offset(knob_mode2->getWidth()+cSep, 0);
     knobSurroundWidth = new CAnimKnob (r, this, kSurroundWidth, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_red, CPoint (0, 0));
 	getFrame()->addView (knobSurroundWidth);
+    getFrame()->remember();
 	
 	//Surround Pattern
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobSurroundPattern = new CAnimKnob (r, this, kSurroundPattern, IMAGE, knob_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
 	getFrame()->addView (knobSurroundPattern);
+    getFrame()->remember();
     
     //Surround Gain
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobSurroundGain = new CAnimKnob (r, this, kSurroundGain, IMAGE, knob_blue->getHeight () / IMAGE, knob_blue_red, CPoint (0, 0));
 	getFrame()->addView (knobSurroundGain);
-    
+    getFrame()->remember();
     
     
     
@@ -1140,12 +1234,13 @@
 	r.offset(hPos2+2*cSep+knob_mode2->getWidth (), ePos2+kOffset);
     knobCentrePattern = new CAnimKnob (r, this, kCentrePattern, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
 	getFrame()->addView (knobCentrePattern);
+    getFrame()->remember();
     
     //Centre Gain
 	r.offset(knob_mode2->getWidth()+cSep, 0);
     knobCentreGain = new CAnimKnob (r, this, kCentreGain, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue_red, CPoint (0, 0));
 	getFrame()->addView (knobCentreGain);
-    
+    getFrame()->remember();
 	
 	
 	
@@ -1163,6 +1258,7 @@
     labelMode->setFrameColor (kBlank);
     labelMode->setText("Mode");
     getFrame()->addView (labelMode);
+    getFrame()->remember();
 	
 	//Label Width
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1173,6 +1269,7 @@
     labelWidth->setFrameColor (kBlank);
     labelWidth->setText("Width");
     getFrame()->addView (labelWidth);
+    getFrame()->remember();
 	
 	//Label Pattern
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1183,6 +1280,7 @@
     labelPattern->setFrameColor (kBlank);
     labelPattern->setText("Pattern");
     getFrame()->addView (labelPattern);
+    getFrame()->remember();
 	
 	//Label Surround Mode
 	LabelSize.offset (knob_mode2->getWidth()+cSep+10, 0);
@@ -1193,6 +1291,7 @@
     labelSurMode->setFrameColor (kBlank);
     labelSurMode->setText("SurMode");
     getFrame()->addView (labelSurMode);
+    getFrame()->remember();
 	
 	//Label Surround Width
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1203,6 +1302,7 @@
     labelSurWidth->setFrameColor (kBlank);
     labelSurWidth->setText("SurWidth");
     getFrame()->addView (labelSurWidth);
+    getFrame()->remember();
     
     //Label Surround Pattern
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1213,6 +1313,7 @@
     labelSurPattern->setFrameColor (kBlank);
     labelSurPattern->setText("SurPattern");
     getFrame()->addView (labelSurPattern);
+    getFrame()->remember();
     
     //Label Surround Gain
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1223,7 +1324,7 @@
     labelSurGain->setFrameColor (kBlank);
     labelSurGain->setText("SurGain");
     getFrame()->addView (labelSurGain);
-    
+    getFrame()->remember();
     
     
     //Label Centre Pattern
@@ -1236,6 +1337,7 @@
     labelCtrPattern->setFrameColor (kBlank);
     labelCtrPattern->setText("CtrPattern");
     getFrame()->addView (labelCtrPattern);
+    getFrame()->remember();
     
     //Label Centre Gain
     LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1246,7 +1348,7 @@
     labelCtreGain->setFrameColor (kBlank);
     labelCtreGain->setText("CtrGain");
     getFrame()->addView (labelCtreGain);
-	
+	getFrame()->remember();
 	
 	
 	
@@ -1262,7 +1364,7 @@
     decoderLabel1->setFrameColor (kBlank);
     decoderLabel1->setText("5.0 Decoding");
     getFrame()->addView (decoderLabel1);
-	
+	getFrame()->remember();
 	
 	
     
@@ -1277,7 +1379,7 @@
 	paramMode->setBackColor (kDisplayBackground);
 	paramMode->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramMode);
-    
+    getFrame()->remember();
 	
 	//Width Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1288,7 +1390,7 @@
 	paramWidth->setBackColor (kDisplayBackground);
 	paramWidth->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramWidth);
-    
+    getFrame()->remember();
 	
 	//Pattern Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1299,7 +1401,7 @@
 	paramPattern->setBackColor (kDisplayBackground);
 	paramPattern->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramPattern);
-    
+    getFrame()->remember();
     
 	//SurMode Value
 	DisplaySize.offset (knob_mode2->getWidth()+cSep+10, 0);
@@ -1310,7 +1412,7 @@
 	paramSurMode->setBackColor (kDisplayBackground);
 	paramSurMode->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramSurMode);
-    
+    getFrame()->remember();
 	
 	//SurWidth Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1321,6 +1423,7 @@
 	paramSurWidth->setBackColor (kDisplayBackground);
 	paramSurWidth->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramSurWidth);
+    getFrame()->remember();
     
     //SurPattern Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1331,6 +1434,7 @@
 	paramSurPattern->setBackColor (kDisplayBackground);
 	paramSurPattern->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramSurPattern);
+    getFrame()->remember();
     
     //SurWidth Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1341,7 +1445,7 @@
 	paramSurGain->setBackColor (kDisplayBackground);
 	paramSurGain->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramSurGain);
-    
+    getFrame()->remember();
     
     
     //CtrPattern Value
@@ -1354,7 +1458,7 @@
 	paramCtrPattern->setBackColor (kDisplayBackground);
 	paramCtrPattern->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramCtrPattern);
-    
+    getFrame()->remember();
     
     //CtrGain Value
 	DisplaySize.offset(knob_red_blue->getWidth()+cSep, 0);
@@ -1365,7 +1469,7 @@
 	paramCtrGain->setBackColor (kDisplayBackground);
 	paramCtrGain->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramCtrGain);
-    
+    getFrame()->remember();
     
     controls[kMode] = knobMode;
 	controls[kWidth] = knobWidth;
@@ -1380,6 +1484,10 @@
     controls[kSurroundPattern] = knobSurroundPattern;
     controls[kSurroundWidth] = knobSurroundWidth;
     controls[kSurroundGain] = knobSurroundGain;
+    
+    //Forget Label, Knobs etc.
+    bControls->forget();
+    bControls2->forget();
 }
 
 
@@ -1403,7 +1511,7 @@
 	control_view = new CView (controlSize);
     control_view->setBackground (bControls);
     getFrame()->addView (control_view);
-    
+    getFrame()->remember();
     
     bControls2 = new CBitmap ("controls2.png");
     controlSize = CRect (0, 0, bControls2->getWidth (),bControls2->getHeight ());
@@ -1411,7 +1519,7 @@
 	control_view2 = new CView (controlSize);
     control_view2->setBackground (bControls2);
     getFrame()->addView (control_view2);
-    
+    getFrame()->remember();
     
     
 	//Mode
@@ -1419,37 +1527,44 @@
 	r.offset(hPos+cSep,ePos+kOffset);
 	knobMode = new CHorizontalSwitch (r, this, kMode, 2, knob_mode2->getHeight () / 2, 2, knob_mode2, CPoint (0, 0));
 	getFrame()->addView (knobMode);
+    getFrame()->remember();
 	
 	//Width
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobWidth = new CAnimKnob (r, this, kWidth, IMAGE, knob_red->getHeight () / IMAGE, knob_red, CPoint (0, 0));
 	getFrame()->addView (knobWidth);
+    getFrame()->remember();
 	
 	//Pattern
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobPattern = new CAnimKnob (r, this, kPattern, IMAGE, knob_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
 	getFrame()->addView (knobPattern);
+    getFrame()->remember();
     
     
     //Surround Mode
 	r.offset(knob_mode2->getWidth()+cSep+10, 0);
 	knobSurroundMode = new CHorizontalSwitch (r, this, kSurroundMode, 2, knob_mode2->getHeight () / 2, 2, knob_mode2, CPoint (0, 0));
 	getFrame()->addView (knobSurroundMode);
+    getFrame()->remember();
     
 	//Surround Width
     r.offset(knob_mode2->getWidth()+cSep, 0);
     knobSurroundWidth = new CAnimKnob (r, this, kSurroundWidth, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_red, CPoint (0, 0));
 	getFrame()->addView (knobSurroundWidth);
+    getFrame()->remember();
 	
 	//Surround Pattern
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobSurroundPattern = new CAnimKnob (r, this, kSurroundPattern, IMAGE, knob_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
 	getFrame()->addView (knobSurroundPattern);
+    getFrame()->remember();
     
     //Surround Gain
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobSurroundGain = new CAnimKnob (r, this, kSurroundGain, IMAGE, knob_blue->getHeight () / IMAGE, knob_blue_red, CPoint (0, 0));
 	getFrame()->addView (knobSurroundGain);
+    getFrame()->remember();
     
     
     
@@ -1460,21 +1575,25 @@
 	r.offset(hPos2+cSep, ePos2+kOffset);
     knobCentrePattern = new CAnimKnob (r, this, kCentrePattern, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
 	getFrame()->addView (knobCentrePattern);
+    getFrame()->remember();
     
     //Centre Gain
 	r.offset(knob_mode2->getWidth()+cSep, 0);
     knobCentreGain = new CAnimKnob (r, this, kCentreGain, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue_red, CPoint (0, 0));
 	getFrame()->addView (knobCentreGain);
+    getFrame()->remember();
     
     //SubGain
     r.offset(knob_mode2->getWidth()+cSep, 0);
     knobSubGain = new CAnimKnob (r, this, kSubGain, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue_red, CPoint (0, 0));
 	getFrame()->addView (knobSubGain);
-	
+    getFrame()->remember();
+
 	//FC
 	r.offset(knob_mode2->getWidth()+cSep, 0);
 	knobFc = new CAnimKnob (r, this, kFc, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
 	getFrame()->addView (knobFc);
+    getFrame()->remember();
 	
 	
 	
@@ -1492,6 +1611,7 @@
     labelMode->setFrameColor (kBlank);
     labelMode->setText("Mode");
     getFrame()->addView (labelMode);
+    getFrame()->remember();
 	
 	//Label Width
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1502,6 +1622,7 @@
     labelWidth->setFrameColor (kBlank);
     labelWidth->setText("Width");
     getFrame()->addView (labelWidth);
+    getFrame()->remember();
 	
 	//Label Pattern
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1512,6 +1633,7 @@
     labelPattern->setFrameColor (kBlank);
     labelPattern->setText("Pattern");
     getFrame()->addView (labelPattern);
+    getFrame()->remember();
 	
 	//Label Surround Mode
 	LabelSize.offset (knob_mode2->getWidth()+cSep+10, 0);
@@ -1522,6 +1644,7 @@
     labelSurMode->setFrameColor (kBlank);
     labelSurMode->setText("SurMode");
     getFrame()->addView (labelSurMode);
+    getFrame()->remember();
 	
 	//Label Surround Width
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1532,6 +1655,7 @@
     labelSurWidth->setFrameColor (kBlank);
     labelSurWidth->setText("SurWidth");
     getFrame()->addView (labelSurWidth);
+    getFrame()->remember();
     
     //Label Surround Pattern
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1542,6 +1666,7 @@
     labelSurPattern->setFrameColor (kBlank);
     labelSurPattern->setText("SurPattern");
     getFrame()->addView (labelSurPattern);
+    getFrame()->remember();
     
     //Label Surround Gain
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1552,7 +1677,7 @@
     labelSurGain->setFrameColor (kBlank);
     labelSurGain->setText("SurGain");
     getFrame()->addView (labelSurGain);
-    
+    getFrame()->remember();
     
     
     //Label Centre Pattern
@@ -1565,6 +1690,7 @@
     labelCtrPattern->setFrameColor (kBlank);
     labelCtrPattern->setText("CtrPattern");
     getFrame()->addView (labelCtrPattern);
+    getFrame()->remember();
     
     //Label Centre Gain
     LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1575,6 +1701,7 @@
     labelCtreGain->setFrameColor (kBlank);
     labelCtreGain->setText("CtrGain");
     getFrame()->addView (labelCtreGain);
+    getFrame()->remember();
     
     //Label SubGain
     LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1585,7 +1712,8 @@
     labelSubGain->setFrameColor (kBlank);
     labelSubGain->setText("SubGain");
     getFrame()->addView (labelSubGain);
-	
+    getFrame()->remember();
+
 	//Label Fc
 	LabelSize.offset (knob_red_blue->getWidth()+cSep, 0);
     labelFc = new CTextLabel (LabelSize, 0, 0, kCenterText);
@@ -1595,7 +1723,7 @@
     labelFc->setFrameColor (kBlank);
     labelFc->setText("xOver");
     getFrame()->addView (labelFc);
-	
+	getFrame()->remember();
 	
 	
 	
@@ -1611,7 +1739,7 @@
     decoderLabel1->setFrameColor (kBlank);
     decoderLabel1->setText("5.1 Decoding");
     getFrame()->addView (decoderLabel1);
-	
+	getFrame()->remember();
 	
 	
     
@@ -1626,7 +1754,7 @@
 	paramMode->setBackColor (kDisplayBackground);
 	paramMode->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramMode);
-    
+    getFrame()->remember();
 	
 	//Width Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1637,7 +1765,7 @@
 	paramWidth->setBackColor (kDisplayBackground);
 	paramWidth->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramWidth);
-    
+    getFrame()->remember();
 	
 	//Pattern Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1648,7 +1776,7 @@
 	paramPattern->setBackColor (kDisplayBackground);
 	paramPattern->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramPattern);
-    
+    getFrame()->remember();
     
 	//SurMode Value
 	DisplaySize.offset (knob_mode2->getWidth()+cSep+10, 0);
@@ -1659,7 +1787,7 @@
 	paramSurMode->setBackColor (kDisplayBackground);
 	paramSurMode->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramSurMode);
-    
+    getFrame()->remember();
 	
 	//SurWidth Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1670,6 +1798,7 @@
 	paramSurWidth->setBackColor (kDisplayBackground);
 	paramSurWidth->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramSurWidth);
+    getFrame()->remember();
     
     //SurPattern Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1680,6 +1809,7 @@
 	paramSurPattern->setBackColor (kDisplayBackground);
 	paramSurPattern->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramSurPattern);
+    getFrame()->remember();
     
     //SurWidth Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1690,7 +1820,7 @@
 	paramSurGain->setBackColor (kDisplayBackground);
 	paramSurGain->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramSurGain);
-    
+    getFrame()->remember();
     
     
     //CtrPattern Value
@@ -1703,7 +1833,7 @@
 	paramCtrPattern->setBackColor (kDisplayBackground);
 	paramCtrPattern->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramCtrPattern);
-    
+    getFrame()->remember();
     
     //CtrGain Value
 	DisplaySize.offset(knob_red_blue->getWidth()+cSep, 0);
@@ -1714,7 +1844,7 @@
 	paramCtrGain->setBackColor (kDisplayBackground);
 	paramCtrGain->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramCtrGain);
-    
+    getFrame()->remember();
     
     //SubGain Value
     DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1725,7 +1855,7 @@
 	paramSubGain->setBackColor (kDisplayBackground);
 	paramSubGain->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramSubGain);
-    
+    getFrame()->remember();
 	
 	//Fc Value
 	DisplaySize.offset (knob_red_blue->getWidth()+cSep, 0);
@@ -1736,6 +1866,8 @@
 	paramFc->setBackColor (kDisplayBackground);
 	paramFc->setFrameColor (kBlackCColor);
 	getFrame()->addView (paramFc);
+    getFrame()->remember();
+    
     
     controls[kMode] = knobMode;
 	controls[kWidth] = knobWidth;
@@ -1750,6 +1882,10 @@
     controls[kSurroundPattern] = knobSurroundPattern;
     controls[kSurroundWidth] = knobSurroundWidth;
     controls[kSurroundGain] = knobSurroundGain;
+    
+    //Forget Label, Knobs etc.
+    bControls->forget();
+    bControls2->forget();
 }
 
 
@@ -1768,12 +1904,14 @@
         heller1->setText("Heller 2 Decoder");
     }
     getFrame()->addView (heller1);
+    getFrame()->remember();
     
     heller2 = new CTextLabel(control_view2->getViewSize(), 0, 0, kCenterText);
 	heller2->setBackColor(CColor(23,25,26,200));
     heller2->setFont (kNormalFontVeryBig);
     heller2->setFontColor (CColor (255,255,255,255));
     getFrame()->addView (heller2);
+    getFrame()->remember();
 };
 
 
@@ -1794,10 +1932,12 @@
 	CView* name_view = new CView (nameSize);
     name_view->setBackground (bName);
     newFrame->addView (name_view);
+    newFrame->remember();
     
     LabelSize (0, 0, 160, tDepth);
     LabelSize.offset(hPos+cSep, ePos+cSep+tDepth+10);
     CTextLabel *vendor_version = new CTextLabel(LabelSize, 0, 0, kLeftText);
+    CTextLabel *bitMode = new CTextLabel(LabelSize, 0, 0, kLeftText);
     
     char text[100];
     int i1=(int)floor(VERSION/1000.0);
@@ -1812,20 +1952,23 @@
     vendor_version->setBackColor (kBlank); 
     vendor_version->setFrameColor (kBlank);
     newFrame->addView (vendor_version);
-    vendor_version->forget();
+    newFrame->remember();
     
     LabelSize.offset(0, -(tDepth+10));
     bitMode = new CTextLabel(LabelSize, 0, 0, kLeftText);
     sprintf(text,"Bit Mode: %d", (int)effect->getParameter(102));
     bitMode->setText(text);
     bitMode->setFont (kNormalFontSmall); 
-    bitMode->setFontColor (kLabelText); 
+    bitMode->setFontColor (kLabelText);
     bitMode->setHoriAlign(kLeftText);
     bitMode->setBackColor (kBlank); 
     bitMode->setFrameColor (kBlank);
+    
+    //Forget labels and background
+    bName->forget ();
+    vendor_version->forget();
     newFrame->addView (bitMode);
-    
-    bName->forget ();
+    newFrame->remember();
 }
 
 
@@ -1846,13 +1989,14 @@
     CView* plotBackground = new CView (plotArea);
     plotBackground->setBackground(bPlot);
     newFrame->addView (plotBackground);
+    newFrame->remember();
 	
     
     CRect plotSize (0, 0, bPlot->getWidth (), bPlot->getHeight ());
     plotSize.offset(hPos, ePos);
     myPlot = new polarPlot(plotSize);
     newFrame->addView (myPlot);
-    
+    newFrame->remember();
 }
 
 
@@ -1870,23 +2014,21 @@
     CView* settingsBackground = new CView (plotArea);
     settingsBackground->setBackground(bSettings);
     newFrame->addView (settingsBackground);
-
+    newFrame->remember();
+   
     
-   
     //Decoder Mode Knob
 	r (0, 0, knob_mode5->getWidth (), knob_mode5->getHeight () / 5);
 	r.offset(hPos+cSep, ePos+kOffset);
 	knobDecoder = new CHorizontalSwitch (r, this, kDecoderMode, 5, knob_mode5->getHeight () / 5, 5, knob_mode5, CPoint (0, 0));
 	newFrame->addView (knobDecoder);
-	knobDecoder->forget ();
-    
+    newFrame->remember();
     
     //Channel Order Knob
 	r.offset(knob_mode5->getWidth()+cSep, 0);
 	knobChannel = new CHorizontalSwitch (r, this, kChannelOrder, 2, knob_mode2b->getHeight () / 2, 2, knob_mode2b, CPoint (0, 0));
 	newFrame->addView (knobChannel);
-	knobChannel->forget ();
-    
+    newFrame->remember();
     
     
     
@@ -1900,6 +2042,7 @@
     labelDecoder->setFrameColor (kBlank);
     labelDecoder->setText("Decoding");
     newFrame->addView (labelDecoder);
+    newFrame->remember();
     
     //Label Channel Order
     LabelSize.offset (knob_mode5->getWidth ()+cSep, 0);
@@ -1910,7 +2053,7 @@
     labelChannel->setFrameColor (kBlank);
     labelChannel->setText("Channels");
     newFrame->addView (labelChannel);
-    
+    newFrame->remember();
     
     
     
@@ -1925,7 +2068,7 @@
 	paramDecoder->setBackColor (kDisplayBackground);
 	paramDecoder->setFrameColor (kBlackCColor);
 	newFrame->addView (paramDecoder);
-    
+    newFrame->remember();
     
     //Channel Order Value
 	DisplaySize.offset (knob_mode5->getWidth ()+cSep, 0);
@@ -1936,7 +2079,7 @@
 	paramChannel->setBackColor (kDisplayBackground);
 	paramChannel->setFrameColor (kBlackCColor);
 	newFrame->addView (paramChannel);
-    
+    newFrame->remember();
     
     
     //Label Section
@@ -1948,91 +2091,28 @@
     labelSettings->setBackColor (kBlank);
     labelSettings->setFrameColor (kBlank);
     labelSettings->setText("Settings");
-    newFrame->addView (labelSettings);    
+    newFrame->addView (labelSettings);
+    newFrame->remember();
+    
+    //-- remember our controls so that we can sync them with the state of the effect
+    controls[kDecoderMode] = knobDecoder;
+    controls[kChannelOrder] = knobChannel;
+    
+    //Forget this section's Background, Knobs, Labels
+    bSettings->forget();
+    settingsBackground->forget();
+    knobDecoder->forget();
+    knobChannel->forget();
+    labelDecoder->forget();
+    labelChannel->forget();
+    labelSettings->forget();
+    paramDecoder->forget();
+    paramChannel->forget();
 }
 
 
 
 //------------------------------------------------------------------------------------
-void MyEditor::setupKnobs(int &setupHoz, int &setupEl, int &setupSep)
-{
-    
-    //DEFAULT STEREO POSITIONS
-    
-    //Mode
-	r (0, 0, knob_mode2->getWidth (), knob_mode2->getHeight () / 2);
-	r.offset(setupHoz, setupEl);
-	knobMode = new CHorizontalSwitch (r, this, kMode, 2, knob_mode2->getHeight () / 2, 2, knob_mode2, CPoint (0, 0));
-	//newFrame->addView (knobMode);
-	//knobMode->forget ();
-	
-	//Width
-	r.offset(knob_mode2->getWidth()+setupSep, 0);
-	knobWidth = new CAnimKnob (r, this, kWidth, IMAGE, knob_red->getHeight () / IMAGE, knob_red, CPoint (0, 0));
-	//newFrame->addView (knobWidth);
-	//knobWidth->forget ();
-	
-	//Pattern
-	r.offset(knob_red_blue->getWidth()+setupSep, 0);
-	knobPattern = new CAnimKnob (r, this, kPattern, IMAGE, knob_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
-	//newFrame->addView (knobPattern);
-	//knobPattern->forget ();
-	
-	//RearVerb
-	r.offset(knob_mode2->getWidth()+setupSep*4, 0);
-	knobRearVerb = new CAnimKnob (r, this, kRearVerb, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_red, CPoint (0, 0));
-	//newFrame->addView (knobRearVerb);
-	//knobRearVerb->forget ();
-	
-	//HiVerb
-	r.offset(knob_red_blue->getWidth()+setupSep, 0);
-	knobHiVerb = new CAnimKnob (r, this, kHiVerb, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
-	//newFrame->addView (knobHiVerb);
-	//knobHiVerb->forget ();
-    
-    
-    
-    //DEFAULT SURROUND POSITIONS
-    
-    //CentrePattern
-	r (0, 0, knob_mode2->getWidth (), knob_mode2->getHeight () / 2);
-	r.offset(setupHoz+knob_mode2->getWidth ()*3+setupSep/2*3, setupEl);
-	knobCentrePattern = new CAnimKnob (r, this, kCentrePattern, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
-    
-    //CentreGain
-	r.offset(knob_red_blue->getWidth()+setupSep/2, 0);
-	knobCentreGain = new CAnimKnob (r, this, kCentreGain, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue_red, CPoint (0, 0));
-    
-    //SubGain
-	r.offset(knob_red_blue->getWidth()+setupSep/2, 0);
-	knobSubGain = new CAnimKnob (r, this, kSubGain, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue_red, CPoint (0, 0));
-    
-    //Fc
-	r.offset(knob_red_blue->getWidth()+setupSep, 0);
-	knobFc = new CAnimKnob (r, this, kFc, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
-    
-    //SurroundMode
-    knobSurroundMode = new CHorizontalSwitch (r, this, kSurroundMode, 2, knob_mode2->getHeight () / 2, 2, knob_mode2, CPoint (0, 0));
-    
-    //SurroundPattern
-	r.offset(knob_red_blue->getWidth()+setupSep, 0);
-	knobSurroundPattern = new CAnimKnob (r, this, kSurroundPattern, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
-    
-    //SurroundWidth
-	r.offset(knob_red_blue->getWidth()+setupSep, 0);
-	knobSurroundWidth = new CAnimKnob (r, this, kSurroundWidth, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue, CPoint (0, 0));
-    
-    //SurroundGain
-	r.offset(knob_red_blue->getWidth()+setupSep, 0);
-	knobSurroundGain = new CAnimKnob (r, this, kSurroundGain, IMAGE, knob_red_blue->getHeight () / IMAGE, knob_blue_red, CPoint (0, 0));
-    
-    
-}
-
-
-
-
-//------------------------------------------------------------------------------------
 void MyEditor::clearStereo()
 {
     //Section Title
@@ -2050,9 +2130,9 @@
     getFrame()->removeView(paramRearVerb);
     getFrame()->removeView(paramHiVerb);
     //Knobs
+    getFrame()->removeView(knobMode);
     getFrame()->removeView(knobWidth);
     getFrame()->removeView(knobPattern);
-    getFrame()->removeView(knobMode);
     getFrame()->removeView(knobRearVerb);
     getFrame()->removeView(knobHiVerb);
     //Section background
@@ -2244,16 +2324,16 @@
             clearFour();
             break;
         case 5:
+            if (myPlot->decoder_mode5x != 0) {
+                clearHeller();//Remove Heller Blank
+            }
             clearFive();
-            if (myPlot->decoder_mode5x != 0) {
-                clearHeller();//Blank Out Controls
-            }
             break;
         case 6:
+            if (myPlot->decoder_mode5x != 0) {
+                clearHeller();//Remove Heller Blank
+            }
             clearFiveOne();
-            if (myPlot->decoder_mode5x != 0) {
-                clearHeller();//Blank Out Controls
-            }
             break;
             
         default:
@@ -2315,7 +2395,8 @@
         default:
             break;
     }
-    
+ 
+    myPlot->decoder_prev = myPlot->decoder_mode;
 }
 
 
@@ -2329,6 +2410,8 @@
     suspend->setFontColor (CColor (255,255,255,255));
     suspend->setText("Currently Suspended");
     getFrame()->addView (suspend);
+    getFrame()->remember();
+    
 }
 
 //------------------------------------------------------------------------------------
@@ -2480,7 +2563,6 @@
                 }
                 break;
             case kDecoderMode:
-                myPlot->decoder_prev = myPlot->decoder_mode;
                 if (value<=0.2f) {
                     myPlot->decoder_mode = 2; //Stereo
                 }
@@ -2529,7 +2611,7 @@
         resumeDisplay();
     }
     else if (frame && index == 103){
-        myPlot->decoder_mode5x = (int)value;
+        myPlot->decoder_mode5x = (int)(value*2);
         myPlot->setDirty(); //ReDraw plot in next idle
         modeChange();
     }
--- a/Source/GUI.h	Thu Sep 20 16:41:01 2012 +0100
+++ b/Source/GUI.h	Tue Sep 25 21:35:17 2012 +0100
@@ -34,7 +34,7 @@
 #ifndef __MyEditor__
 #define __MyEditor__
 
-#define IMAGE 280
+#define IMAGE 281
 
 #define cSep 12
 #define tDepth 15
@@ -49,8 +49,6 @@
 #include "aeffguieditor.h"
 #include <vstgui.h>
 #include "SoundField.h"
-//#include <stream.h>
-//#include <stdio.h>
 #include "SoundFieldParameters.h"
 #include "MyPlot.h"
 
@@ -70,7 +68,6 @@
 	void    setParameter (VstInt32 index, float value);
     void    setParameterAutomated();
     void    getParameterDisplay (VstInt32 index, char *text);
-    void    syncParameters();
 
 	// from CControlListener
 	void valueChanged (CControl* pControl);
@@ -89,7 +86,6 @@
     void    plotDisplay(CFrame* newFrame);
     void    settingsDisplay(CFrame* newFrame);
     void    nameDisplay(CFrame* newFrame);
-    void    setupKnobs(int &setupHoz, int &setupEl, int &setupSep);//REMOVE
     void    modeChange();
     void    stereoDisplay();
     void    twooneDisplay();
@@ -107,13 +103,9 @@
     void    resumeDisplay();
 	
     
-    
-    
 private:
 
     
-    
-    
 protected:
 	//Parameters
 	CAnimKnob			*knobRotate;
@@ -179,7 +171,6 @@
     CTextLabel          *paramChannel;
     
     
-    
     //Main Controls Section Text
     CTextLabel          *decoderLabel1;
     
@@ -220,8 +211,6 @@
     CTextLabel* suspend;
     CTextLabel* heller1;
     CTextLabel* heller2;
-	CTextLabel* bitMode;
-    CTextLabel* vendor_version;
 };
 
 
--- a/Source/MyPlot.h	Thu Sep 20 16:41:01 2012 +0100
+++ b/Source/MyPlot.h	Tue Sep 25 21:35:17 2012 +0100
@@ -48,12 +48,5 @@
     void    heller1Pattern(CDrawContext* context);
     void    heller2Pattern(CDrawContext* context);
     
-
-    
-    
 protected:
-
 };
-
-
-
--- a/Source/SoundField.cpp	Thu Sep 20 16:41:01 2012 +0100
+++ b/Source/SoundField.cpp	Tue Sep 25 21:35:17 2012 +0100
@@ -24,25 +24,20 @@
 #include "aeffguieditor.h"
 
 
-
-//----------------------------------------------------------------------------- 
-SoundFieldProgram::SoundFieldProgram ()
+//-----------------------------------------------------------------------------
+SoundFieldProgram::SoundFieldProgram()
 {
-    //Define name if all programs are to be the same
     
 }
 
+
+
 //-----------------------------------------------------------------------------
 SoundField::SoundField (audioMasterCallback audioMaster)
-: AudioEffectX (audioMaster, 1, kNumParameters)
+: AudioEffectX (audioMaster, kNumPrograms, kNumParameters)
 {	
-	// init
-	programs = new SoundFieldProgram[numPrograms];
     
     
-    //	if (programs)
-    //		setProgram (0);
-	
     //Set the number of input and output channels
 	setNumInputs (4);	// 4 Channel Classic B-Format Input
 	setNumOutputs (6);	// MAX_CHANNELS 5.1 Outpu
@@ -61,19 +56,13 @@
     }
     
     
-    
 	//Load GUI
     extern AEffGUIEditor* createEditor (AudioEffectX*);
 	setEditor (createEditor (this));
     
-    
 	resume ();		// flush buffer
     
-	
-    //Default Program Names
-    vst_strncpy (programs[0].name, "Default",kVstMaxProgNameLen);
     
-    vst_strncpy (programName, "Default", kVstMaxProgNameLen);	// default program name
     
 
     //  Declare any variables to their default values
@@ -132,6 +121,256 @@
     myDecoder.outputS=0.0;
     myDecoder.outputSL=0.0;
     myDecoder.outputSR=0.0;
+    
+
+    // init
+    //Initailise all the programs
+    //Stereo Mode
+        //Name
+        vst_strncpy (programs[0][0].name, "Stereo XY Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs[0][1].name, "Stereo MS Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs[0][2].name, "Stereo Blumlein Fig8s",kVstMaxProgNameLen);
+        vst_strncpy (programs[0][3].name, "Stereo XY with 'Verb",kVstMaxProgNameLen);
+        vst_strncpy (programs[0][4].name, "Stereo MS with 'Verb",kVstMaxProgNameLen);
+        //Mode
+        programs[0][0].mode = 0.f;
+        programs[0][1].mode = 1.f;
+        programs[0][2].mode = 0.f;
+        programs[0][3].mode = 0.f;
+        programs[0][4].mode = 1.f;
+        //Width
+        programs[0][0].width = (1.f/3.f);
+        programs[0][1].width = (1.f/3.f);
+        programs[0][2].width = 0.5f;
+        programs[0][3].width = (1.f/3.f);
+        programs[0][4].width = (1.f/3.f);
+        //Pattern
+        programs[0][0].pattern = 0.5f;
+        programs[0][1].pattern = 0.5f;
+        programs[0][2].pattern = 0.f;
+        programs[0][3].pattern = 0.5f;
+        programs[0][4].pattern = 0.5f;
+        //RearVerb
+        programs[0][0].rearVerb = 0.f;
+        programs[0][1].rearVerb = 0.f;
+        programs[0][2].rearVerb = 0.f;
+        programs[0][3].rearVerb = 0.75f;
+        programs[0][4].rearVerb = 0.75f;
+        //HiVerb
+        programs[0][0].hiVerb = 0.f;
+        programs[0][1].hiVerb = 0.f;
+        programs[0][2].hiVerb = 0.f;
+        programs[0][3].hiVerb = 0.25f;
+        programs[0][4].hiVerb = 0.25f;
+    
+    
+    //2.1 Mode
+        //Name
+        vst_strncpy (programs[1][0].name, "2.1 XY Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs[1][1].name, "2.1 MS Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs[1][2].name, "2.1 Blumlein Fig8s",kVstMaxProgNameLen);
+        vst_strncpy (programs[1][3].name, "2.1 XY with 'Verb",kVstMaxProgNameLen);
+        vst_strncpy (programs[1][4].name, "2.1 MS with 'Verb",kVstMaxProgNameLen);
+        //Mode
+        programs[1][0].mode = 0.f;
+        programs[1][1].mode = 1.f;
+        programs[1][2].mode = 0.f;
+        programs[1][3].mode = 0.f;
+        programs[1][4].mode = 1.f;
+        //Width
+        programs[1][0].width = (1.f/3.f);
+        programs[1][1].width = (1.f/3.f);
+        programs[1][2].width = 0.5f;
+        programs[1][3].width = (1.f/3.f);
+        programs[1][4].width = (1.f/3.f);
+        //Pattern
+        programs[1][0].pattern = 0.5f;
+        programs[1][1].pattern = 0.5f;
+        programs[1][2].pattern = 0.f;
+        programs[1][3].pattern = 0.5f;
+        programs[1][4].pattern = 0.5f;
+        //RearVerb
+        programs[1][0].rearVerb = 0.f;
+        programs[1][1].rearVerb = 0.f;
+        programs[1][2].rearVerb = 0.f;
+        programs[1][3].rearVerb = 0.75f;
+        programs[1][4].rearVerb = 0.75f;
+        //HiVerb
+        programs[1][0].hiVerb = 0.f;
+        programs[1][1].hiVerb = 0.f;
+        programs[1][2].hiVerb = 0.f;
+        programs[1][3].hiVerb = 0.25f;
+        programs[1][4].hiVerb = 0.25f;
+        //SubGain
+        programs[1][0].subGain = 0.75f;
+        programs[1][1].subGain = 0.75f;
+        programs[1][2].subGain = 0.75f;
+        programs[1][3].subGain = 0.75f;
+        programs[1][4].subGain = 0.75f;
+        //FC
+        programs[1][0].fc = 5.0f/11.0f;
+        programs[1][1].fc = 5.0f/11.0f;
+        programs[1][2].fc = 5.0f/11.0f;
+        programs[1][3].fc = 5.0f/11.0f;
+        programs[1][4].fc = 5.0f/11.0f;
+    
+    
+    
+    //Quad Mode
+        //Name
+        vst_strncpy (programs[2][0].name, "Quad XY Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs[2][1].name, "Quad MS Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs[2][2].name, "Quad Blumlein Fig8s",kVstMaxProgNameLen);
+        vst_strncpy (programs[2][3].name, "Quad XY with MS",kVstMaxProgNameLen);
+        vst_strncpy (programs[2][4].name, "Quad MS with XY",kVstMaxProgNameLen);
+        //Mode
+        programs[2][0].mode = 0.f;
+        programs[2][1].mode = 1.f;
+        programs[2][2].mode = 0.f;
+        programs[2][3].mode = 0.f;
+        programs[2][4].mode = 1.f;
+        //Width
+        programs[2][0].width = (1.f/3.f);
+        programs[2][1].width = (1.f/3.f);
+        programs[2][2].width = 0.5f;
+        programs[2][3].width = (1.f/3.f);
+        programs[2][4].width = (1.f/3.f);
+        //Pattern
+        programs[2][0].pattern = 0.5f;
+        programs[2][1].pattern = 0.5f;
+        programs[2][2].pattern = 0.f;
+        programs[2][3].pattern = 0.5f;
+        programs[2][4].pattern = 0.5f;
+        //Surround Mode
+        programs[2][0].surroundMode = 0.f;
+        programs[2][1].surroundMode = 1.f;
+        programs[2][2].surroundMode = 0.f;
+        programs[2][3].surroundMode = 1.f;
+        programs[2][4].surroundMode = 0.f;
+        //Surround Width
+        programs[2][0].surroundWidth = (5.5f/9.f);
+        programs[2][1].surroundWidth = (5.5f/9.f);
+        programs[2][2].surroundWidth = 0.5f;
+        programs[2][3].surroundWidth = (5.5f/9.f);
+        programs[2][4].surroundWidth = (5.5f/9.f);
+        //Surround Pattern
+        programs[2][0].surroundPattern = 0.5;
+        programs[2][1].surroundPattern = 0.5;
+        programs[2][2].surroundPattern = 0.0;
+        programs[2][0].surroundPattern = 0.25;
+        programs[2][0].surroundPattern = 0.75;
+        //Surround Gain
+        programs[2][0].surroundGain = 0.75f;
+        programs[2][1].surroundGain = 0.75f;
+        programs[2][2].surroundGain = 0.75f;
+        programs[2][3].surroundGain = 0.75f;
+        programs[2][4].surroundGain = 0.75f;
+
+    
+    //5.0 Mode
+        //Name
+        vst_strncpy (programs[3][0].name, "5.0 XY Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs[3][1].name, "5.0 MS Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs[3][2].name, "5.0 Blumlein Fig8s",kVstMaxProgNameLen);
+        vst_strncpy (programs[3][3].name, "5.0 Heller et. al. 1",kVstMaxProgNameLen);
+        vst_strncpy (programs[3][4].name, "5.0 Heller et. al. 2",kVstMaxProgNameLen);
+        //Mode
+        programs[3][0].mode = 0.f;
+        programs[3][1].mode = 1.f;
+        programs[3][2].mode = 0.f;
+        //Width
+        programs[3][0].width = (1.f/3.f);
+        programs[3][1].width = (1.f/3.f);
+        programs[3][2].width = 0.5f;
+        //Pattern
+        programs[3][0].pattern = 0.5f;
+        programs[3][1].pattern = 0.5f;
+        programs[3][2].pattern = 0.f;
+        //Centre Pattern
+        programs[3][0].centrePattern = 0.5f;
+        programs[3][1].centrePattern = 0.5f;
+        programs[3][2].centrePattern = 0.0f;
+        //Centre Gain
+        programs[3][0].centreGain = 0.75f;
+        programs[3][1].centreGain = 0.75f;
+        programs[3][2].centreGain = 0.75f;
+        //Surround Mode
+        programs[3][0].surroundMode = 0.f;
+        programs[3][1].surroundMode = 1.f;
+        programs[3][2].surroundMode = 0.f;
+        //Surround Width
+        programs[3][0].surroundWidth = (5.5f/9.f);
+        programs[3][1].surroundWidth = (5.5f/9.f);
+        programs[3][2].surroundWidth = 0.5f;
+        //Surround Pattern
+        programs[3][0].surroundPattern = 0.5;
+        programs[3][1].surroundPattern = 0.5;
+        programs[3][2].surroundPattern = 0.0;
+        //Surround Gain
+        programs[3][0].surroundGain = 0.75f;
+        programs[3][1].surroundGain = 0.75f;
+        programs[3][2].surroundGain = 0.75f;
+    
+    
+    //5.1 Mode
+    //Name
+    vst_strncpy (programs[4][0].name, "5.1 XY Microphones",kVstMaxProgNameLen);
+    vst_strncpy (programs[4][1].name, "5.1 MS Microphones",kVstMaxProgNameLen);
+    vst_strncpy (programs[4][2].name, "5.1 Blumlein Fig8s",kVstMaxProgNameLen);
+    vst_strncpy (programs[4][3].name, "5.1 Heller et. al. 1",kVstMaxProgNameLen);
+    vst_strncpy (programs[4][4].name, "5.1 Heller et. al. 2",kVstMaxProgNameLen);
+    //Mode
+    programs[4][0].mode = 0.f;
+    programs[4][1].mode = 1.f;
+    programs[4][2].mode = 0.f;
+    //Width
+    programs[4][0].width = (1.f/3.f);
+    programs[4][1].width = (1.f/3.f);
+    programs[4][2].width = 0.5f;
+    //Pattern
+    programs[4][0].pattern = 0.5f;
+    programs[4][1].pattern = 0.5f;
+    programs[4][2].pattern = 0.f;
+    //Centre Pattern
+    programs[4][0].centrePattern = 0.5f;
+    programs[4][1].centrePattern = 0.5f;
+    programs[4][2].centrePattern = 0.0f;
+    //Centre Gain
+    programs[4][0].centreGain = 0.75f;
+    programs[4][1].centreGain = 0.75f;
+    programs[4][2].centreGain = 0.75f;
+    //SubGain
+    programs[4][0].subGain = 0.75f;
+    programs[4][1].subGain = 0.75f;
+    programs[4][2].subGain = 0.75f;
+    programs[4][3].subGain = 0.75f;
+    programs[4][4].subGain = 0.75f;
+    //FC
+    programs[4][0].fc = 5.0f/11.0f;
+    programs[4][1].fc = 5.0f/11.0f;
+    programs[4][2].fc = 5.0f/11.0f;
+    programs[4][3].fc = 5.0f/11.0f;
+    programs[4][4].fc = 5.0f/11.0f;
+    //Surround Mode
+    programs[4][0].surroundMode = 0.f;
+    programs[4][1].surroundMode = 1.f;
+    programs[4][2].surroundMode = 0.f;
+    //Surround Width
+    programs[4][0].surroundWidth = (5.5f/9.f);
+    programs[4][1].surroundWidth = (5.5f/9.f);
+    programs[4][2].surroundWidth = 0.5f;
+    //Surround Pattern
+    programs[4][0].surroundPattern = 0.5;
+    programs[4][1].surroundPattern = 0.5;
+    programs[4][2].surroundPattern = 0.0;
+    //Surround Gain
+    programs[4][0].surroundGain = 0.75f;
+    programs[4][1].surroundGain = 0.75f;
+    programs[4][2].surroundGain = 0.75f;
+
+    
+    //Load Program0 default
+    setProgram(0);
 }
 
 
@@ -166,45 +405,12 @@
 }
 
 
-//------------------------------------------------------------------------
-void SoundField::setProgram (VstInt32 program) //Host to SET the Program
-{
-    curProgram = program; //Change the curProgram value
-}
-
-
-//------------------------------------------------------------------------
-void	SoundField::setProgramName(char *name) //SET the Program name
-{ 
-	strcpy(programs[curProgram].name, name); //Host SETS the Program[].name
-}
-
-
-//------------------------------------------------------------------------
-void	SoundField::getProgramName(char *name) //GET the Program name
-{ 
-	strcpy(name, programs[curProgram].name); //Host GETS the Program[].name
-}
-
-
-//------------------------------------------------------------------------
-bool	SoundField::getProgramNameIndexed (VstInt32 category, VstInt32 which, char* name)
-{
-	if ((unsigned int)which < kNumPrograms) //Check the ProgramNameIndexed is within range
-	{
-	    strcpy(name, programs[which].name);	//Host GETS the programs[].name
-	    return true; //TRUE- ProgramNameIndexed does exits
-	}
-	return false; //FALSE- ProgramNameIndexed does not exits
-}
 
 
 //------------------------------------------------------------------------
 SoundField::~SoundField () //clears protected variables
 {
-	if (programs)
-		delete[] programs; 
-    
+	//if (programs)
 }
 
 
@@ -219,6 +425,151 @@
 
 
 //------------------------------------------------------------------------
+bool SoundField::getProgramNameIndexed(VstInt32 category, VstInt32 index, char *text)
+{
+    switch (myDecoder.decoderMode) {
+        case 2:
+            strcpy(text, programs[0][index].name);
+            break;
+        case 3:
+            strcpy(text, programs[1][index].name);
+            break;
+        case 4:
+            strcpy(text, programs[2][index].name);
+            break;
+        case 5:
+            strcpy(text, programs[3][index].name);
+            break;
+        case 6:
+            strcpy(text, programs[4][index].name);
+            break;
+            
+        default:
+            break;
+    }
+
+    
+
+    return true;
+}
+
+
+//------------------------------------------------------------------------
+void SoundField::setProgram(VstInt32 program)
+{
+    curProgram = program;
+    switch (myDecoder.decoderMode) {
+        case 2:
+            setParameter(kMode, programs[0][program].mode);
+            setParameter(kWidth, programs[0][program].width);
+            setParameter(kPattern, programs[0][program].pattern);
+            setParameter(kRearVerb, programs[0][program].rearVerb);
+            setParameter(kHiVerb, programs[0][program].hiVerb);
+            break;
+        case 3:
+            setParameter(kMode, programs[1][program].mode);
+            setParameter(kWidth, programs[1][program].width);
+            setParameter(kPattern, programs[1][program].pattern);
+            setParameter(kRearVerb, programs[1][program].rearVerb);
+            setParameter(kHiVerb, programs[1][program].hiVerb);
+            setParameter(kSubGain, programs[1][program].subGain);
+            setParameter(kFc, programs[1][program].fc);
+            break;
+        case 4:
+            setParameter(kMode, programs[2][program].mode);
+            setParameter(kWidth, programs[2][program].width);
+            setParameter(kSurroundMode, programs[2][program].surroundMode);
+            setParameter(kSurroundWidth, programs[2][program].surroundWidth);
+            setParameter(kSurroundPattern, programs[2][program].surroundPattern);
+            setParameter(kSurroundGain, programs[2][program].surroundGain);
+            break;
+        case 5:
+            if (program<3) {
+                myDecoder.mode5x=0;
+                
+                setParameter(kMode, programs[3][program].mode);
+                setParameter(kWidth, programs[3][program].width);
+                setParameter(kCentrePattern, programs[3][program].centrePattern);
+                setParameter(kCentreGain, programs[3][program].centreGain);
+                setParameter(kSurroundMode, programs[3][program].surroundMode);
+                setParameter(kSurroundWidth, programs[3][program].surroundWidth);
+                setParameter(kSurroundPattern, programs[3][program].surroundPattern);
+                setParameter(kSurroundGain, programs[3][program].surroundGain);
+                if (editor){
+                    ((AEffGUIEditor*)editor)->setParameter (103, 0.f);
+                }
+            }
+            else if (program==3) {
+                myDecoder.mode5x=1;
+                if (editor){
+                    ((AEffGUIEditor*)editor)->setParameter (103, 0.5f);
+                }
+            }
+            else if (program==4) {
+                myDecoder.mode5x=2;
+                if (editor){
+                    ((AEffGUIEditor*)editor)->setParameter (103, 1.f);
+                }
+            }
+            break;
+        case 6:
+            if (program<3) {
+                myDecoder.mode5x=0;
+                
+                setParameter(kMode, programs[4][program].mode);
+                setParameter(kWidth, programs[4][program].width);
+                setParameter(kCentrePattern, programs[4][program].centrePattern);
+                setParameter(kCentreGain, programs[4][program].centreGain);
+                setParameter(kSubGain, programs[4][program].subGain);
+                setParameter(kFc, programs[4][program].fc);
+                setParameter(kSurroundMode, programs[4][program].surroundMode);
+                setParameter(kSurroundWidth, programs[4][program].surroundWidth);
+                setParameter(kSurroundPattern, programs[4][program].surroundPattern);
+                setParameter(kSurroundGain, programs[4][program].surroundGain);
+                if (editor){
+                    ((AEffGUIEditor*)editor)->setParameter (103, 0.f);
+                }
+            }
+            else if (program==3) {
+                //Only set the sub
+                setParameter(kSubGain, programs[4][program].subGain);
+                setParameter(kFc, programs[4][program].fc);
+                myDecoder.mode5x=1;
+                if (editor){
+                    ((AEffGUIEditor*)editor)->setParameter (103, 0.5f);
+                }
+            }
+            else if (program==4) {
+                //Only set the sub
+                setParameter(kSubGain, programs[4][program].subGain);
+                setParameter(kFc, programs[4][program].fc);
+                myDecoder.mode5x=2;
+                if (editor){
+                    ((AEffGUIEditor*)editor)->setParameter (103, 1.f);
+                }
+            }
+            break;
+            
+        default:
+            break;
+    }
+}
+
+
+
+//------------------------------------------------------------------------
+VstInt32 SoundField::getProgram()
+{
+    return curProgram;
+}
+
+
+
+
+
+
+
+//------------------------------------------------------------------------
 void SoundField::setParameter (VstInt32 index, float value) // SET Parameter value from host
 {
 	switch (index)
@@ -360,8 +711,8 @@
             else if (value>0.8f && value<=1.0f) {
 				myDecoder.decoderMode = 6; //5.1
 			}
+            updateDisplay();
             break;
-            
         case kChannelOrder:
             fChannelOrder = value;
 			if (value<=0.5f) {
@@ -379,6 +730,9 @@
     if (editor){
         ((AEffGUIEditor*)editor)->setParameter (index, value);
     }
+    if (index==kDecoderMode) {
+        setProgram(curProgram);
+    }
 }
 
 
--- a/Source/SoundField.h	Thu Sep 20 16:41:01 2012 +0100
+++ b/Source/SoundField.h	Tue Sep 25 21:35:17 2012 +0100
@@ -10,7 +10,7 @@
 // © 2006, Steinberg Media Technologies, All Rights Reserved
 //-------------------------------------------------------------------------------------------------------
 
-#define kNumPrograms 1 //Number of Programs 
+#define kNumPrograms 5 //Number of Programs 
 #define MAX_CHANNELS 6 //Max Input/Output Count
 #define VERSION      1000 //Plugin Version
 
@@ -23,24 +23,38 @@
 
 //Parameters Header
 #include "SoundFieldParameters.h"
-
 #include "Decoder.h"
 
 
-
-
 //------------------------------------------------------------------------
 struct SoundFieldProgram
 {
-	//float param[kNumPrograms]; //Array of 
-    char name[20];
+	friend class SoundField;
+    
 public:
 	SoundFieldProgram ();
 	~SoundFieldProgram () {}
 	
-private:	
+private:
+    char name[kVstMaxProgNameLen];
+    float mode;
+    float width;
+    float pattern;
+    float rotate;
+	float rearVerb;
+	float hiVerb;
+    float centrePattern;
+    float centreGain;
+    float subGain;
+    float surroundMode;
+    float surroundPattern;
+    float surroundWidth;
+    float surroundGain;
+    float fc;
+};
 
-};
+
+
 
 
 //------------------------------------------------------------------------
@@ -62,10 +76,9 @@
 	virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
     virtual void processDoubleReplacing (double ** 	inputs, double ** 	outputs, VstInt32 sampleFrames);
     
-	virtual void setProgram (VstInt32 program);
-	virtual void setProgramName (char* name);
-	virtual void getProgramName (char* name);
-	virtual bool getProgramNameIndexed (VstInt32 category, VstInt32 index, char* text);
+    virtual bool getProgramNameIndexed (VstInt32 category, VstInt32 index, char *text);
+    virtual void setProgram(VstInt32 program);
+    virtual VstInt32 getProgram();
 	
 	virtual void setParameter (VstInt32 index, float value);
 	virtual float getParameter (VstInt32 index);
@@ -80,7 +93,6 @@
 	virtual bool getProductString (char* text);
 	virtual VstInt32 getVendorVersion ();
 
-	
 	virtual VstPlugCategory getPlugCategory () { return kPlugCategSpacializer; }
 	virtual bool setSpeakerArrangement (VstSpeakerArrangement* pluginInput, VstSpeakerArrangement* pluginOutput);
 
@@ -92,20 +104,12 @@
 	
     
     
-private:
-    //Variables/Functions for DSP i.e. private from the Host
-    SoundFieldProgram* programs;
-    
-    
-    //Private Variables
-    float* sBuffers[MAX_CHANNELS];
-	float* pBuffers[2];
-    
-    char programName[kVstMaxProgNameLen + 1];
-    
+private:       
     int     numberOutputs;
     int     numberInputs;
 
+    SoundFieldProgram programs[5][kNumPrograms];
+    
     //Parameter float values
     float fMode;
     float fWidth;