Index: source/class/pf/Application.js
===================================================================
--- source/class/pf/Application.js	(revision 282)
+++ source/class/pf/Application.js	(revision 295)
@@ -135,5 +135,5 @@
     this.gui_n_l.setMaximum(n_u - 1);
     
-    this.plasma.n_u = n_u;
+    this.plasma.r.setN_u(n_u);
     this.updateGUI();
 }
@@ -146,5 +146,5 @@
     this.gui_n_u.setMinimum(n_l + 1);
     
-    this.plasma.n_l = n_l;
+    this.plasma.r.setN_l(n_l);
     this.updateGUI();
 }
@@ -463,10 +463,10 @@
 
                 // Make sure n_u > n_l holds during update
-                if (this.gui_n_l.getValue() >= this.plasma.n_u) {
-                    this.gui_n_l.setValue(this.plasma.n_l);
-                    this.gui_n_u.setValue(this.plasma.n_u);
+                if (this.gui_n_l.getValue() >= this.plasma.r.getN_u()) {
+                    this.gui_n_l.setValue(this.plasma.r.getN_l());
+                    this.gui_n_u.setValue(this.plasma.r.getN_u());
                 } else {
-                    this.gui_n_u.setValue(this.plasma.n_u);
-                    this.gui_n_l.setValue(this.plasma.n_l);
+                    this.gui_n_u.setValue(this.plasma.r.getN_u());
+                    this.gui_n_l.setValue(this.plasma.r.getN_l());
                 }
 
@@ -1096,5 +1096,6 @@
             l.setRich(true);
             gl.add(l, {row: 1, column: 0});
-            e = new qx.ui.form.Spinner(this.plasma.n_l + 1, this.plasma.n_u, 1000);
+            e = new qx.ui.form.Spinner(this.plasma.r.getN_l() + 1,
+                this.plasma.r.getN_u(), 1000);
             gl.add(e, {row: 1, column: 1});
             e.addListener("changeValue", changeN_u, this);
@@ -1104,5 +1105,6 @@
             l.setRich(true);
             gl.add(l, {row: 2, column: 0});
-            e = new qx.ui.form.Spinner(1, this.plasma.n_l, this.plasma.n_u - 1);
+            e = new qx.ui.form.Spinner(1, this.plasma.r.getN_l(),
+                this.plasma.r.getN_u() - 1);
             gl.add(e, {row: 2, column: 1});
             e.addListener("changeValue", changeN_l, this);
@@ -2361,6 +2363,6 @@
             config.B   = this.plasma.B  ;
 
-            config.n_u = this.plasma.n_u;
-            config.n_l = this.plasma.n_l;
+            config.n_u = this.plasma.r.getN_u();
+            config.n_l = this.plasma.r.getN_l();
             
             if (this.prefs.saveFavsWithConfig) {
@@ -2426,6 +2428,6 @@
                 this.plasma.B   = config.B/au_fB;
 
-                this.plasma.n_u = config.n_u;
-                this.plasma.n_l = config.n_l;
+                this.plasma.r.setN_u(config.n_u);
+                this.plasma.r.setN_l(config.n_l);
                 
                 if (this.prefs.saveFavsWithConfig && config.favorites) {
Index: source/class/pf/Plasma.js
===================================================================
--- source/class/pf/Plasma.js	(revision 293)
+++ source/class/pf/Plasma.js	(revision 295)
@@ -12,74 +12,4 @@
         P_r: 0,
         B  : 0,
-        
-        getTransitionEnergy: function()
-        {
-            var n_u = this.n_u;
-            var n_l = this.n_l;
-            var Z_core = this.r.getQ() + 1;
-            var m_core = this.r.getM();
-            
-            return pf.base.Bohr.transitionEnergy(Z_core, m_core, n_u, n_l);
-        },
-        
-        getFineStructure: function()
-        {
-            var n_u = this.n_u;
-            var n_l = this.n_l;
-            var Z_core = this.r.getQ() + 1;
-            
-            return pf.base.Bohr.transitionFineStructure(Z_core, n_u, n_l);
-        },
-        
-        getMinEnergyDistance: function()
-        {
-            var n;
-            if (this.n_u < this.n_l) {
-                n = this.n_l;
-            } else {
-                n = this.n_u;
-            }
-            
-            var Z_core = this.r.getQ() + 1;
-            var m_core = this.r.getM();
-            
-            return pf.base.Bohr.transitionEnergy(Z_core, m_core, n + 1, n);
-        },
-        
-        getNaturalWidth: function()
-        {
-            var n_u = this.n_u;
-            var n_l = this.n_l;
-            var Z_core = this.r.getQ() + 1;
-            
-            return pf.base.Bohr.LymanA(Z_core, n_u) +
-                   pf.base.Bohr.LymanA(Z_core, n_l);
-        },
-        
-        getOscillatorStrength: function()
-        {
-            var n_u = this.n_u;
-            var n_l = this.n_l;
-            
-            return pf.base.Bohr.oscillatorStrength(n_u, n_l);
-        },
-        
-        getEinsteinA: function()
-        {
-            var n_u = this.n_u;
-            var n_l = this.n_l;
-            var Z_core = this.r.getQ() + 1;
-            var m_core = this.r.getM();
-            
-            return pf.base.Bohr.EinsteinA(Z_core, m_core, n_u, n_l);
-        },
-        
-        getDopplerHwhm: function()
-        {
-            var v   = this.r.getThermalVelocity();
-            var nu  = this.getTransitionEnergy();
-            
-            return Math.sqrt(2*Math.log(2))*nu*v/pf.base.Bohr.c;
-        },
         
         getMicrofieldFrequency: function(s)
@@ -143,7 +73,7 @@
         getDelta0: function(s)
         {
-            var n_u = this.n_u;
-            var n_l = this.n_l;
-            var Z_core = this.r.getQ() + 1;
+            var n_u = this.r.getN_u();
+            var n_l = this.r.getN_l();
+            var Z_core = this.r.getZcore();
             var ef = s.getHoltsmarkField();
             
@@ -153,6 +83,6 @@
         getQsHwhm: function(s)
         {
-            var n_u = this.n_u;
-            var n_l = this.n_l;
+            var n_u = this.r.getN_u();
+            var n_l = this.r.getN_l();
 
             var ppi = this.getPpiFactor(s);
@@ -227,5 +157,5 @@
             var s_hwhm = this.getStarkHwhm();
             var z_hwhm = this.getZeemanSplitting();
-            var d_hwhm = this.getDopplerHwhm();
+            var d_hwhm = this.r.getDopplerHwhm();
             return 2*Math.sqrt(s_hwhm*s_hwhm + z_hwhm*z_hwhm + d_hwhm*d_hwhm);
         },
@@ -243,5 +173,5 @@
         getBremsstrahlungSpectralDensity: function()
         {
-            var photon_en = this.getTransitionEnergy();
+            var photon_en = this.r.getTransitionEnergy();
             return this.getBremsstrahlungLosses()/this.e.getT()*
                 Math.exp(-photon_en/this.e.getT());
@@ -263,5 +193,5 @@
         getFreeBoundSpectralDensity: function()
         {
-            var photon_en = this.getTransitionEnergy();
+            var photon_en = this.r.getTransitionEnergy();
             return this.getFreeBoundLosses()/this.e.getT()*
                 Math.exp(-photon_en/this.e.getT());
@@ -355,20 +285,4 @@
             
             return 4*Math.PI*lambda*n_e/T_e;
-        },
-        
-        getClassicalIonizationField: function()
-        {
-            var Z_core = this.r.getQ() + 1;
-            
-            return pf.base.Bohr.classicalIonizationField(Z_core, this.n_u);
-        },
-        
-        getInglisTellerField: function()
-        {
-            var Z_core = this.r.getQ() + 1;
-            var n = this.n_u;
-            
-            return Math.pow(Z_core, 3)*
-                (2*n + 1)/(6*Math.pow(n, 4)*(n + 1)*(n + 1));
         },
         
@@ -425,14 +339,11 @@
         
         // Defaults: 1e16 1/cc, 1 eV
-        this.r = new pf.base.Species("r", m_p,  0,       0, 1.0/E0);
-        this.e = new pf.base.Species("e", 1.0, -1, 1e16*V0, 1.0/E0);
-        this.i = new pf.base.Species("i", m_p, +1, 1e16*V0, 1.0/E0);
+        this.e = new pf.base.Species ("e", 1.0, -1, 1e16*V0, 1.0/E0);
+        this.i = new pf.base.Species ("i", m_p, +1, 1e16*V0, 1.0/E0);
+        this.r = new pf.base.Radiator("r", m_p,  0,       0, 1.0/E0);
 
         this.P_r = 0;
 
         this.B   = 0;
-
-        this.n_u = 2;
-        this.n_l = 1;
     }
 });
Index: source/class/pf/base/Radiator.js
===================================================================
--- source/class/pf/base/Radiator.js	(revision 295)
+++ source/class/pf/base/Radiator.js	(revision 295)
@@ -0,0 +1,120 @@
+qx.Class.define("pf.base.Radiator",
+{
+    extend: pf.base.Species,
+    
+    members: {
+        _n_l: 1,
+        _n_u: 2,
+        
+        getZcore: function()
+        {
+            return this._q + 1;
+        },
+        
+        getN_u: function()
+        {
+            return this._n_u;
+        },
+        
+        getN_l: function()
+        {
+            return this._n_l;
+        },
+        
+        setN_u: function(n_u)
+        {
+            if (n_u < 2) {
+                return false;
+            } else {
+                this._n_u = n_u;
+                
+                if (this._n_l >= this._n_u) {
+                    this._n_l = this._n_u - 1;
+                }
+            }
+        },
+        
+        setN_l: function(n_l)
+        {
+            if (n_l < 1) {
+                return false;
+            } else {
+                this._n_l = n_l;
+                
+                if (this._n_l >= this._n_u) {
+                    this._n_u = this._n_l + 1;
+                }
+            }
+        },
+
+        getTransitionEnergy: function()
+        {
+            var Z_core = this.getZcore();
+            
+            return pf.base.Bohr.transitionEnergy(Z_core,
+                this._m, this._n_u, this._n_l);
+        },
+        
+        getFineStructure: function()
+        {
+            var Z_core = this.getZcore();
+            
+            return pf.base.Bohr.transitionFineStructure(Z_core,
+                this._n_u, this._n_l);
+        },
+        
+        getMinEnergyDistance: function()
+        {
+            var n = this._n_u;
+            var Z_core = this.getZcore();
+            
+            return pf.base.Bohr.transitionEnergy(Z_core, this._m, n + 1, n);
+        },
+
+        getNaturalWidth: function()
+        {
+            var Z_core = this.getZcore();
+            
+            return pf.base.Bohr.LymanA(Z_core, this._n_u) +
+                   pf.base.Bohr.LymanA(Z_core, this._n_l);
+        },
+        
+        getOscillatorStrength: function()
+        {
+            return pf.base.Bohr.oscillatorStrength(this._n_u, this._n_l);
+        },
+        
+        getEinsteinA: function()
+        {
+            var Z_core = this.getZcore();
+            
+            return pf.base.Bohr.EinsteinA(Z_core,
+                this._m, this._n_u, this._n_l);
+        },
+        
+        getDopplerHwhm: function()
+        {
+            var v   = this.getThermalVelocity();
+            var nu  = this.getTransitionEnergy();
+            
+            return Math.sqrt(2*Math.log(2))*nu*v/pf.base.Bohr.c;
+        },
+
+        getClassicalIonizationField: function()
+        {
+            var Z_core = this.getZcore();
+            
+            return pf.base.Bohr.classicalIonizationField(Z_core, this._n_u);
+        },
+        
+        getInglisTellerField: function()
+        {
+            var Z_core = this.getZcore();
+            var n = this._n_u;
+            
+            return Math.pow(Z_core, 3)*
+                (2*n + 1)/(6*Math.pow(n, 4)*(n + 1)*(n + 1));
+        }
+        
+    }
+});
Index: source/entities.js
===================================================================
--- source/entities.js	(revision 292)
+++ source/entities.js	(revision 295)
@@ -125,5 +125,5 @@
         nspecies  : 0,
         section   : "spectroscopy",
-        formula   : "this.plasma.getTransitionEnergy()"
+        formula   : "this.plasma.r.getTransitionEnergy()"
     },
     {
@@ -133,5 +133,5 @@
         nspecies  : 0,
         section   : "spectroscopy",
-        formula   : "this.plasma.getNaturalWidth()"
+        formula   : "this.plasma.r.getNaturalWidth()"
     },
     {
@@ -141,5 +141,5 @@
         nspecies  : 0,
         section   : "spectroscopy",
-        formula   : "this.plasma.getFineStructure()",
+        formula   : "this.plasma.r.getFineStructure()",
         wikiLink  : "Fine_structure"
     },
@@ -150,5 +150,5 @@
         nspecies  : 0,
         section   : "spectroscopy",
-        formula   : "2*this.plasma.getDopplerHwhm()",
+        formula   : "2*this.plasma.r.getDopplerHwhm()",
         wikiLink  : "Doppler_broadening"
     },
@@ -204,5 +204,5 @@
         nspecies  : 0,
         section   : "spectroscopy",
-        formula   : "this.plasma.getMinEnergyDistance()"
+        formula   : "this.plasma.r.getMinEnergyDistance()"
     },
     {
@@ -269,5 +269,5 @@
         nspecies  : 0,
         section   : "spectroscopy",
-        formula   : "this.plasma.getOscillatorStrength()",
+        formula   : "this.plasma.r.getOscillatorStrength()",
         wikiLink  : "Oscillator_strength"
     },
@@ -278,5 +278,5 @@
         nspecies  : 0,
         section   : "spectroscopy",
-        formula   : "this.plasma.getEinsteinA()",
+        formula   : "this.plasma.r.getEinsteinA()",
         wikiLink  : "Einstein_coefficients"
     },
@@ -305,5 +305,5 @@
         nspecies  : 0,
         section   : "spectroscopy",
-        formula   : "pf.base.Bohr.c/this.plasma.getTransitionEnergy()*(2*Math.PI)"
+        formula   : "pf.base.Bohr.c/this.plasma.r.getTransitionEnergy()*(2*Math.PI)"
     },
 
@@ -314,5 +314,5 @@
         nspecies  : 0,
         section   : "spectroscopy",
-        formula   : "this.plasma.getTransitionEnergy()/(2*Math.PI)"
+        formula   : "this.plasma.r.getTransitionEnergy()/(2*Math.PI)"
     },
 
@@ -447,5 +447,5 @@
         nspecies  : 0,
         section   : "spectroscopy",
-        formula   : "this.plasma.getClassicalIonizationField()"
+        formula   : "this.plasma.r.getClassicalIonizationField()"
     },
     {
@@ -455,5 +455,5 @@
         nspecies  : 0,
         section   : "spectroscopy",
-        formula   : "this.plasma.getInglisTellerField()",
+        formula   : "this.plasma.r.getInglisTellerField()",
         wikiLink  : "Inglis-Teller_equation"
     },
