diff --git a/SleepLib/event.h b/SleepLib/event.h
index cc33db10..682aba62 100644
--- a/SleepLib/event.h
+++ b/SleepLib/event.h
@@ -55,6 +55,9 @@ public:
     inline const ChannelID & code() { return m_code; }
     inline const bool & update_minmax() { return m_update_minmax; }
 
+    QString dimension() { return m_dimension; }
+    void setDimension(QString dimension) { m_dimension=dimension; }
+
     QVector<EventStoreType> & getData() { return m_data; }
     QVector<quint32> & getTime() { return m_time; }
 protected:
@@ -70,6 +73,8 @@ protected:
     EventDataType m_max;
     EventDataType m_rate;     // Waveform sample rate
 
+    QString m_dimension;
+
     qint64 m_first,m_last;
     bool m_update_minmax;
 };
diff --git a/SleepLib/loader_plugins/resmed_loader.cpp b/SleepLib/loader_plugins/resmed_loader.cpp
index 11035b8d..f1ec23d6 100644
--- a/SleepLib/loader_plugins/resmed_loader.cpp
+++ b/SleepLib/loader_plugins/resmed_loader.cpp
@@ -387,7 +387,8 @@ int ResmedLoader::Open(QString & path,Profile *profile)
                 CPAP_Leak, CPAP_Snore, CPAP_EPAP,
                 CPAP_IPAP, CPAP_TidalVolume, CPAP_RespiratoryRate,
                 CPAP_PatientTriggeredBreaths,CPAP_MinuteVentilation,
-                CPAP_FlowLimitGraph, CPAP_PressureSupport,CPAP_Pressure
+                CPAP_FlowLimitGraph, CPAP_PressureSupport,CPAP_Pressure,CPAP_RespiratoryEvent,
+                CPAP_Te,CPAP_Ti,CPAP_IE
             };
             for (unsigned i=0;i<sizeof(a)/sizeof(ChannelID);i++) {
                 if (sess->eventlist.contains(a[i])) {
@@ -532,7 +533,7 @@ bool ResmedLoader::LoadEVE(Session *sess,EDFParser &edf)
                         EL[3]->AddEvent(tt,duration);
                     } else {
                         if (t!="recording starts") {
-                            qDebug() << "Unknown ResMed annotation field: " << t;
+                            qDebug() << "Unobserved ResMed annotation field: " << t;
                         }
                     }
                 }
@@ -564,18 +565,20 @@ bool ResmedLoader::LoadBRP(Session *sess,EDFParser &edf)
         ChannelID code;
         if (edf.edfsignals[s]->label=="Flow") {
             es.gain*=60;
+            es.physical_dimension="L/M";
             code=CPAP_FlowRate;
-        } else if (edf.edfsignals[s]->label=="Mask Pres") {
+        } else if (edf.edfsignals[s]->label.startsWith("Mask Pres")) {
             code=CPAP_MaskPressure;
-            //for (int i=0;i<recs;i++) edf.edfsignals[s]->data[i]/=50.0;
+        } else if (es.label.startsWith("Resp Event")) {
+            code=CPAP_RespiratoryEvent;
         } else {
-            qDebug() << "Unknown Signal " << edf.edfsignals[s]->label;
+            qDebug() << "Unobserved ResMed BRP Signal " << edf.edfsignals[s]->label;
             continue;
         }
         double rate=double(duration)/double(recs);
         //es.gain=1;
         EventList *a=new EventList(code,EVL_Waveform,es.gain,es.offset,0,0,rate);
-
+        a->setDimension(es.physical_dimension);
         a->AddWaveform(edf.startdate,es.data,recs,duration);
 
         if (code==CPAP_MaskPressure) {
@@ -641,7 +644,7 @@ bool ResmedLoader::LoadSAD(Session *sess,EDFParser &edf)
         } else if (edf.edfsignals[s]->label=="SpO2") {
             code=CPAP_SPO2;
         } else {
-            qDebug() << "Unknown SAD.edf Signal " << edf.edfsignals[s]->label;
+            qDebug() << "Unobserved ResMed SAD Signal " << edf.edfsignals[s]->label;
             continue;
         }
         bool hasdata=false;
@@ -699,7 +702,7 @@ bool ResmedLoader::LoadPLD(Session *sess,EDFParser &edf)
             //sess->eventlist[code].push_back(a);
             //a->AddWaveform(edf.startdate,es.data,recs,duration);
             a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
-        } else if (es.label=="Insp Pres") {
+        } else if (es.label=="Insp Pressure") {
             code=CPAP_IPAP; //TherapyPressure;
             sess->settings[CPAP_Mode]=MODE_BIPAP;
             //EventList *a=new EventList(code,EVL_Waveform,es.gain,es.offset,es.physical_minimum,es.physical_maximum,rate);
@@ -729,6 +732,7 @@ bool ResmedLoader::LoadPLD(Session *sess,EDFParser &edf)
         } else if (es.label=="Leak") {
             code=CPAP_Leak;
             es.gain*=60;
+            es.physical_dimension="L/M";
             //es.gain=1;//10.0;
             //es.offset=-0.5;
             a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
@@ -740,13 +744,31 @@ bool ResmedLoader::LoadPLD(Session *sess,EDFParser &edf)
             a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
             //a->setMax(1);
             //a->setMin(0);
-        } else if (es.label=="Mask Pres") {
+        } else if (es.label.startsWith("Mask Pres")) {
             code=CPAP_Pressure;
             //es.gain=1;
             a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
-        } else if (es.label=="Exp Press") {
+        } else if (es.label.startsWith("Exp Press")) {
             code=CPAP_EPAP;//ExpiratoryPressure;
             a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
+        } else if (es.label.startsWith("I:E")) {
+            code=CPAP_IE;//I:E;
+            a=new EventList(code,EVL_Waveform,es.gain,es.offset,0,0,rate);
+            sess->eventlist[code].push_back(a);
+            a->AddWaveform(edf.startdate,es.data,recs,duration);
+            //a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
+        } else if (es.label.startsWith("Ti")) {
+            code=CPAP_Ti;//Ti;
+            a=new EventList(code,EVL_Waveform,es.gain,es.offset,0,0,rate);
+            sess->eventlist[code].push_back(a);
+            a->AddWaveform(edf.startdate,es.data,recs,duration);
+            //a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
+        } else if (es.label.startsWith("Te")) {
+            code=CPAP_Te;//Te;
+            a=new EventList(code,EVL_Waveform,es.gain,es.offset,0,0,rate);
+            sess->eventlist[code].push_back(a);
+            a->AddWaveform(edf.startdate,es.data,recs,duration);
+            //a=ToTimeDelta(sess,edf,es, code,recs,duration,0,0);
         } else if (es.label=="") {
             if (emptycnt==0) {
                 code=RMS9_Empty1;
@@ -759,12 +781,13 @@ bool ResmedLoader::LoadPLD(Session *sess,EDFParser &edf)
             }
             emptycnt++;
         } else {
-            qDebug() << "Unobserved Signal " << es.label;
+            qDebug() << "Unobserved ResMed PLD Signal " << es.label;
             a=NULL;
         }
         if (a) {
             sess->setMin(code,a->min());
             sess->setMax(code,a->max());
+            a->setDimension(es.physical_dimension);
         }
     }
     return true;
diff --git a/SleepLib/machine.cpp b/SleepLib/machine.cpp
index c8f2fbdc..99e7b2e2 100644
--- a/SleepLib/machine.cpp
+++ b/SleepLib/machine.cpp
@@ -29,8 +29,9 @@ ChannelID CPAP_Obstructive,CPAP_Hypopnea,CPAP_Apnea, CPAP_ClearAirway, CPAP_RERA
 CPAP_CSR, CPAP_VSnore, CPAP_PressurePulse, CPAP_Mode, CPAP_FlowRate, CPAP_MaskPressure, CPAP_Pressure,
 CPAP_EPAP, CPAP_IPAP, CPAP_IPAP_Low, CPAP_IPAP_High, CPAP_PressureSupport, CPAP_Snore, CPAP_Leak,
 CPAP_RespiratoryRate, CPAP_TidalVolume, CPAP_MinuteVentilation, CPAP_PatientTriggeredBreaths,
-CPAP_FlowLimitGraph, CPAP_TherapyPressure, CPAP_ExpiratoryPressure, CPAP_AHI, CPAP_BrokenSummary,
-CPAP_BrokenWaveform, CPAP_Pulse, CPAP_SPO2, CPAP_Plethy;
+CPAP_FlowLimitGraph, CPAP_TherapyPressure, CPAP_ExpiratoryPressure, CPAP_AHI,CPAP_RespiratoryEvent,
+CPAP_IE,CPAP_Ti,CPAP_Te,
+CPAP_BrokenSummary,CPAP_BrokenWaveform, CPAP_Pulse, CPAP_SPO2, CPAP_Plethy;
 
 ChannelID RMS9_PressureReliefType, RMS9_PressureReliefSetting, RMS9_Empty1, RMS9_Empty2;
 ChannelID PRS1_PressureMin,PRS1_PressureMax, PRS1_PressureMinAchieved, PRS1_PressureMaxAchieved,
@@ -120,6 +121,10 @@ void InitMapsWithoutAwesomeInitializerLists()
         CPAP_FlowLimitGraph=CPAP_CODES.Get(CT_Graph,QObject::tr("Flow Limitation Graph"),QObject::tr("Flow Limitation"),"FLG"),
         CPAP_TherapyPressure=CPAP_CODES.Get(CT_Graph,QObject::tr("Therapy Pressure"),QObject::tr("Therapy Pressure"),"TP"),
         CPAP_ExpiratoryPressure=CPAP_CODES.Get(CT_Graph,QObject::tr("Expiratory Pressure"),QObject::tr("Expiratory Pressure"),"EXP"),
+        CPAP_RespiratoryEvent=CPAP_CODES.Get(CT_Graph,QObject::tr("Respiratory Event"),QObject::tr("Respiratory Event"),"RESPEv"),
+        CPAP_IE=CPAP_CODES.Get(CT_Graph,QObject::tr("I:E"),QObject::tr("I:E"),"IE"),
+        CPAP_Ti=CPAP_CODES.Get(CT_Graph,QObject::tr("Ti"),QObject::tr("Ti"),"Ti"),
+        CPAP_Te=CPAP_CODES.Get(CT_Graph,QObject::tr("Te"),QObject::tr("Te"),"Te"),
 
 
         CPAP_AHI=CPAP_CODES.Get(CT_Calculation,QObject::tr("Apnea-Hypopnea Index"),QObject::tr("AHI"),"AHI"),
diff --git a/SleepLib/machine_common.h b/SleepLib/machine_common.h
index 89651af0..c7b1034e 100644
--- a/SleepLib/machine_common.h
+++ b/SleepLib/machine_common.h
@@ -119,7 +119,7 @@ CPAP_CSR, CPAP_VSnore, CPAP_PressurePulse, CPAP_Mode, CPAP_FlowRate, CPAP_MaskPr
 CPAP_EPAP, CPAP_IPAP, CPAP_IPAP_Low, CPAP_IPAP_High, CPAP_PressureSupport, CPAP_Snore, CPAP_Leak,
 CPAP_RespiratoryRate, CPAP_TidalVolume, CPAP_MinuteVentilation, CPAP_PatientTriggeredBreaths,
 CPAP_FlowLimitGraph, CPAP_TherapyPressure, CPAP_ExpiratoryPressure, CPAP_AHI, CPAP_BrokenSummary,
-CPAP_BrokenWaveform, CPAP_Pulse, CPAP_SPO2, CPAP_Plethy;
+CPAP_BrokenWaveform, CPAP_Pulse, CPAP_SPO2, CPAP_Plethy,CPAP_RespiratoryEvent,CPAP_IE,CPAP_Ti,CPAP_Te;
 
 extern ChannelID RMS9_PressureReliefType, RMS9_PressureReliefSetting, RMS9_Empty1, RMS9_Empty2;
 extern ChannelID PRS1_PressureMin,PRS1_PressureMax, PRS1_PressureMinAchieved, PRS1_PressureMaxAchieved,
diff --git a/SleepLib/session.cpp b/SleepLib/session.cpp
index e40c8fe0..f83c3114 100644
--- a/SleepLib/session.cpp
+++ b/SleepLib/session.cpp
@@ -268,6 +268,7 @@ bool Session::StoreEvents(QString filename)
             out << e.offset();
             out << e.min();
             out << e.max();
+            out << e.dimension();
         }
     }
     for (i=eventlist.begin(); i!=eventlist.end(); i++) {
@@ -348,6 +349,7 @@ bool Session::LoadEvents(QString filename)
     qint16 size2;
     QVector<ChannelID> mcorder;
     QVector<qint16> sizevec;
+    QString dim;
     for (int i=0;i<mcsize;i++) {
         in >> t16;
         code=(ChannelID)t16;
@@ -365,7 +367,9 @@ bool Session::LoadEvents(QString filename)
             in >> offset;
             in >> mn;
             in >> mx;
+            in >> dim;
             EventList *elist=new EventList(code,elt,gain,offset,mn,mx,rate);
+            elist->setDimension(dim);
 
             eventlist[code].push_back(elist);
             elist->m_count=evcount;
diff --git a/daily.cpp b/daily.cpp
index 72cd20e5..1172f4d7 100644
--- a/daily.cpp
+++ b/daily.cpp
@@ -43,6 +43,7 @@ void MyScrollArea::scrollContentsBy(int dx, int dy)
 {
     QScrollArea::scrollContentsBy(dx,dy);
     m_daily->RedrawGraphs();
+    //gGraphWindow g;
 #ifdef Q_WS_MAC
     if (timer->isActive()) timer->stop();
     timer->setSingleShot(true);
@@ -127,6 +128,10 @@ Daily::Daily(QWidget *parent,QGLWidget * shared, MainWindow *mw)
     TV=new gGraphWindow(parental,tr("Tidal Volume"),SF);
     RR=new gGraphWindow(parental,tr("Respiratory Rate"),SF);
     PTB=new gGraphWindow(parental,tr("Patient Trig Breaths"),SF);
+    RE=new gGraphWindow(parental,tr("Respiratory Event"),SF);
+    IE=new gGraphWindow(parental,tr("I:E"),SF);
+    TI=new gGraphWindow(parental,tr("Ti"),SF);
+    TE=new gGraphWindow(parental,tr("Te"),SF);
     //OF=new gGraphWindow(parental,tr("Oxi-Flags"),SF);
     INTPULSE=new gGraphWindow(parental,tr("Pulse"),SF); // Integrated Pulse
     INTSPO2=new gGraphWindow(parental,tr("SPO2"),SF);   // Integrated Pulse
@@ -256,6 +261,28 @@ Daily::Daily(QWidget *parent,QGLWidget * shared, MainWindow *mw)
     RR->AddLayer(AddCPAP(new gLineChart(CPAP_RespiratoryRate,Qt::gray,true)));
     RR->setMinimumHeight(min_height);
 
+    RE->AddLayer(new gXAxis());
+    RE->AddLayer(new gYAxis());
+    RE->AddLayer(AddCPAP(new gLineChart(CPAP_RespiratoryEvent,Qt::darkYellow,false)));
+    RE->setMinimumHeight(min_height);
+
+    IE->AddLayer(new gXAxis());
+    IE->AddLayer(new gYAxis());
+    IE->AddLayer(AddCPAP(new gLineChart(CPAP_IE,Qt::darkMagenta,false)));
+    IE->setMinimumHeight(min_height);
+
+    TE->AddLayer(new gXAxis());
+    TE->AddLayer(new gYAxis());
+    TE->AddLayer(AddCPAP(new gLineChart(CPAP_Te,Qt::darkBlue,false)));
+    TE->setMinimumHeight(min_height);
+
+    TI->AddLayer(new gXAxis());
+    TI->AddLayer(new gYAxis());
+    TI->AddLayer(AddCPAP(new gLineChart(CPAP_Ti,Qt::darkRed,false)));
+    TI->setMinimumHeight(min_height);
+
+
+
     PTB->AddLayer(new gXAxis());
     PTB->AddLayer(new gYAxis());
     PTB->AddLayer(AddCPAP(new gLineChart(CPAP_PatientTriggeredBreaths,Qt::gray,true)));
@@ -346,7 +373,7 @@ Daily::Daily(QWidget *parent,QGLWidget * shared, MainWindow *mw)
     //int i=splitter->indexOf(NoData);
     splitter->setStretchFactor(NoData,1);
 
-    gGraphWindow * graphs[]={SF,FRW,MP,MV,TV,PTB,RR,PRD,THPR,LEAK,FLG,SNORE,INTPULSE,INTSPO2};
+    gGraphWindow * graphs[]={SF,FRW,MP,RE,MV,TV,PTB,RR,IE,TE,TI,PRD,THPR,LEAK,FLG,SNORE,INTPULSE,INTSPO2};
     int ss=sizeof(graphs)/sizeof(gGraphWindow *);
 
     for (int i=0;i<ss;i++) {
@@ -812,7 +839,12 @@ void Daily::Load(QDate date)
         //html+=("<tr><td colspan=4 align=center>&nbsp;</td></tr>\n");
 
         html+=("<tr><td> </td><td><b>Min</b></td><td><b>Avg</b></td><td><b>90%</b></td><td><b>Max</b></td></tr>");
-        ChannelID chans[]={CPAP_Pressure,CPAP_EPAP,CPAP_IPAP,CPAP_PressureSupport,CPAP_PatientTriggeredBreaths, CPAP_MinuteVentilation,CPAP_RespiratoryRate,CPAP_FlowLimitGraph,CPAP_Leak,CPAP_Snore,CPAP_TidalVolume,CPAP_Pulse,CPAP_SPO2,OXI_Pulse,OXI_SPO2};
+        ChannelID chans[]={
+            CPAP_Pressure,CPAP_EPAP,CPAP_IPAP,CPAP_PressureSupport,CPAP_PatientTriggeredBreaths,
+            CPAP_MinuteVentilation,CPAP_RespiratoryRate,CPAP_RespiratoryEvent,CPAP_FlowLimitGraph,
+            CPAP_Leak,CPAP_Snore,CPAP_IE,CPAP_Ti,CPAP_Te,CPAP_TidalVolume,
+            CPAP_Pulse,CPAP_SPO2,OXI_Pulse,OXI_SPO2
+        };
         int numchans=sizeof(chans)/sizeof(ChannelID);
         for (int i=0;i<numchans;i++) {
             ChannelID code=chans[i];
diff --git a/daily.h b/daily.h
index ab517d2a..d28e9752 100644
--- a/daily.h
+++ b/daily.h
@@ -89,7 +89,7 @@ private:
     gFlagsGroup *fg;
     gGraphWindow *PRD,*FRW,*G_AHI,*TAP,*LEAK,*SF,*TAP_EAP,*TAP_IAP,*PULSE,*SPO2,
                  *SNORE,*RR,*MP,*MV,*TV,*FLG,*PTB,*OF,*INTPULSE,*INTSPO2, *THPR,
-                 *PLETHY;
+                 *PLETHY,*TI,*TE, *RE, *IE;
 
     gLineChart *pressure, *epap, *ipap;