public function Set($Name, $Value, $Overwrite = TRUE, $Save = TRUE) {
      // Make sure the config settings are in the right format
      if (!is_array($this->Data))
         $this->Data = array();

      if (!is_array($Name)) {
         $Name = array(
            $Name => $Value
         );
      } else {
         $Overwrite = $Value;
      }
      
      $Data = $Name;
      foreach ($Data as $Name => $Value) {

         $Keys = explode('.', $Name);
         // If splitting is off, HANDLE IT
         if (!$this->Splitting) {
            $FirstKey = GetValue(0, $Keys);
            if ($FirstKey == $this->DefaultGroup)
               $Keys = array(array_shift($Keys), implode('.',$Keys));
            else
               $Keys = array($Name);
         }
         $KeyCount = count($Keys);
         $Settings = &$this->Data;

         for ($i = 0; $i < $KeyCount; ++$i) {
            $Key = $Keys[$i];
            
            if (!is_array($Settings)) $Settings = array();
            $KeyExists = array_key_exists($Key, $Settings);
   
            if ($i == $KeyCount - 1) {   
               // If we are on the last iteration of the key, then set the value.
               if ($KeyExists === FALSE || $Overwrite === TRUE) {
                  $Settings[$Key] = $Value;
               }
            } else {
               // Build the array as we loop over the key. Doucement.
               if ($KeyExists === FALSE)
                  $Settings[$Key] = array();
               
               // Advance the pointer
               $Settings = &$Settings[$Key];
            }
         }
      }
      
      if ($Save) {
         $this->Dynamic->Set($Name, $Value, $Overwrite);
      }
   }