/// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            // credit: http://stackoverflow.com/a/263416/677735
            unchecked // Overflow is fine, just wrap
            {
                var hash = 41;
                // Suitable nullity checks etc, of course :)

                if (Units != null)
                {
                    hash = hash * 59 + Units.GetHashCode();
                }

                if (TimeFormat != null)
                {
                    hash = hash * 59 + TimeFormat.GetHashCode();
                }

                if (CustomTitle != null)
                {
                    hash = hash * 59 + CustomTitle.GetHashCode();
                }

                if (NightMode != null)
                {
                    hash = hash * 59 + NightMode.GetHashCode();
                }

                if (Theme != null)
                {
                    hash = hash * 59 + Theme.GetHashCode();
                }

                if (Language != null)
                {
                    hash = hash * 59 + Language.GetHashCode();
                }

                if (ShowPlugins != null)
                {
                    hash = hash * 59 + ShowPlugins.GetHashCode();
                }

                if (ShowRawbg != null)
                {
                    hash = hash * 59 + ShowRawbg.GetHashCode();
                }

                if (AlarmTypes != null)
                {
                    hash = hash * 59 + AlarmTypes.GetHashCode();
                }

                if (AlarmUrgentHigh != null)
                {
                    hash = hash * 59 + AlarmUrgentHigh.GetHashCode();
                }

                if (AlarmHigh != null)
                {
                    hash = hash * 59 + AlarmHigh.GetHashCode();
                }

                if (AlarmLow != null)
                {
                    hash = hash * 59 + AlarmLow.GetHashCode();
                }

                if (AlarmUrgentLow != null)
                {
                    hash = hash * 59 + AlarmUrgentLow.GetHashCode();
                }

                if (AlarmTimeagoWarn != null)
                {
                    hash = hash * 59 + AlarmTimeagoWarn.GetHashCode();
                }

                if (AlarmTimeagoWarnMins != null)
                {
                    hash = hash * 59 + AlarmTimeagoWarnMins.GetHashCode();
                }

                if (AlarmTimeagoUrgent != null)
                {
                    hash = hash * 59 + AlarmTimeagoUrgent.GetHashCode();
                }

                if (AlarmTimeagoUrgentMins != null)
                {
                    hash = hash * 59 + AlarmTimeagoUrgentMins.GetHashCode();
                }

                if (Enable != null)
                {
                    hash = hash * 59 + Enable.GetHashCode();
                }

                if (Thresholds != null)
                {
                    hash = hash * 59 + Thresholds.GetHashCode();
                }

                return(hash);
            }
        }
        /// <summary>
        /// Returns true if Settings instances are equal
        /// </summary>
        /// <param name="other">Instance of Settings to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(Settings other)
        {
            if (ReferenceEquals(null, other))
            {
                return(false);
            }
            if (ReferenceEquals(this, other))
            {
                return(true);
            }

            return
                ((
                     Units == other.Units ||
                     Units != null &&
                     Units.Equals(other.Units)
                     ) &&
                 (
                     TimeFormat == other.TimeFormat ||
                     TimeFormat != null &&
                     TimeFormat.Equals(other.TimeFormat)
                 ) &&
                 (
                     CustomTitle == other.CustomTitle ||
                     CustomTitle != null &&
                     CustomTitle.Equals(other.CustomTitle)
                 ) &&
                 (
                     NightMode == other.NightMode ||
                     NightMode != null &&
                     NightMode.Equals(other.NightMode)
                 ) &&
                 (
                     Theme == other.Theme ||
                     Theme != null &&
                     Theme.Equals(other.Theme)
                 ) &&
                 (
                     Language == other.Language ||
                     Language != null &&
                     Language.Equals(other.Language)
                 ) &&
                 (
                     ShowPlugins == other.ShowPlugins ||
                     ShowPlugins != null &&
                     ShowPlugins.Equals(other.ShowPlugins)
                 ) &&
                 (
                     ShowRawbg == other.ShowRawbg ||
                     ShowRawbg != null &&
                     ShowRawbg.Equals(other.ShowRawbg)
                 ) &&
                 (
                     AlarmTypes == other.AlarmTypes ||
                     AlarmTypes != null &&
                     AlarmTypes.SequenceEqual(other.AlarmTypes)
                 ) &&
                 (
                     AlarmUrgentHigh == other.AlarmUrgentHigh ||
                     AlarmUrgentHigh != null &&
                     AlarmUrgentHigh.Equals(other.AlarmUrgentHigh)
                 ) &&
                 (
                     AlarmHigh == other.AlarmHigh ||
                     AlarmHigh != null &&
                     AlarmHigh.Equals(other.AlarmHigh)
                 ) &&
                 (
                     AlarmLow == other.AlarmLow ||
                     AlarmLow != null &&
                     AlarmLow.Equals(other.AlarmLow)
                 ) &&
                 (
                     AlarmUrgentLow == other.AlarmUrgentLow ||
                     AlarmUrgentLow != null &&
                     AlarmUrgentLow.Equals(other.AlarmUrgentLow)
                 ) &&
                 (
                     AlarmTimeagoWarn == other.AlarmTimeagoWarn ||
                     AlarmTimeagoWarn != null &&
                     AlarmTimeagoWarn.Equals(other.AlarmTimeagoWarn)
                 ) &&
                 (
                     AlarmTimeagoWarnMins == other.AlarmTimeagoWarnMins ||
                     AlarmTimeagoWarnMins != null &&
                     AlarmTimeagoWarnMins.Equals(other.AlarmTimeagoWarnMins)
                 ) &&
                 (
                     AlarmTimeagoUrgent == other.AlarmTimeagoUrgent ||
                     AlarmTimeagoUrgent != null &&
                     AlarmTimeagoUrgent.Equals(other.AlarmTimeagoUrgent)
                 ) &&
                 (
                     AlarmTimeagoUrgentMins == other.AlarmTimeagoUrgentMins ||
                     AlarmTimeagoUrgentMins != null &&
                     AlarmTimeagoUrgentMins.Equals(other.AlarmTimeagoUrgentMins)
                 ) &&
                 (
                     Enable == other.Enable ||
                     Enable != null &&
                     Enable.SequenceEqual(other.Enable)
                 ) &&
                 (
                     Thresholds == other.Thresholds ||
                     Thresholds != null &&
                     Thresholds.Equals(other.Thresholds)
                 ));
        }