diff -Nru wmlaptop-1.4-orig/src/battery.c wmlaptop-1.4/src/battery.c
--- wmlaptop-1.4-orig/src/battery.c	2008-04-18 21:55:54.497550614 +0300
+++ wmlaptop-1.4/src/battery.c	2008-04-18 21:56:45.002550126 +0300
@@ -15,6 +15,8 @@
  */
 
 #include "battery.h"
+#include <dirent.h>
+
 
 bool mallocBatteryVector( )
 {
@@ -96,9 +98,10 @@
 	}
 	
 	powerState.type = SUPPORT_ACPI;
-	powerState.updater = ACPI_Update; 
+	powerState.updater = print_battery;
+
+	
 	
-	/* counting number of batteries */
 	powerState.nBatt = 0;
 	powerState.batteryVector = NULL;
 	
@@ -108,26 +111,23 @@
 		return ERROR;
 	}
 	
-	/* a cicle for creating as many battery_str structures 
-	 * as are the batteries on the laptop; everyone will be
-	 * filled with static informations */
+
 	while ((batt = readdir (battdir)))
 	{
 		
 		name = batt->d_name;
-		/* jump . and .. */
+
 		if (!strncmp (".", name, 1) || !strncmp ("..", name, 2))
 			continue;
 		
 		countBattery++;
 		
-		/* adding a battery to powerState vector */
+
 		if( mallocBatteryVector( ) == ERROR )
 			return ERROR;
 		
 		batPtr = powerState.batteryVector[ powerState.nBatt - 1 ];
 		
-		/* we can find 'status' or even 'state' */
 		snprintf( path, 52, "%s/%s/status", ACPI_BATTERY_DIR, name );
 		if (access(path, R_OK) == SUCCESS )
 			snprintf( batPtr -> stateFile, 52, "%s/%s/status",ACPI_BATTERY_DIR, name );
@@ -135,20 +135,17 @@
 			snprintf( batPtr -> stateFile, 52, "%s/%s/state", ACPI_BATTERY_DIR, name );
 		
 		
-		/* calculating maximum capacity of this battery
-		 * reading file infos */
+
 		batPtr -> useLFC = ACPI_lfcArgs_get( countBattery );
 		batPtr -> counter = countBattery;
 		snprintf( batPtr -> infoFile, 52, "%s/%s/info", ACPI_BATTERY_DIR, name );
 		batPtr -> present = ACPI_maxCapacity ( batPtr );
 		
-		/* THIS IS NOT A BATTERY ! set error field to true: don't use it */
 		if( batPtr -> capacity == ~0x00 && batPtr -> present == true )
 		{
 			batPtr -> error = true;
 		}
 		
-		/* filler selection :P */
 		batPtr -> filler = ACPI_Filler;
 	}
 	
@@ -166,8 +163,6 @@
 	u_int16 saltCounter = 0;
 	char *  errorMessage = "wmlaptop will ignore this battery. If you don't want to see\nthis message, use '-q' option as argument.\n";
 	
-	/* we control 'last full capacity' tag before, if this 
-	 * don't exists or it's value is 0, then we use 'design capacity' */
 	char *  lfcTagPointer = NULL;
 	char *  dcTagPointer  = NULL;
 	u_int32 lastFullCapacity = 0;
@@ -189,7 +184,7 @@
 	
 	if( !strcmp( presentString, "present:" ) && !strcmp( yesNoString, "no" ) )
 	{
-		/* to avoid division by 0 ? */
+
 		p -> capacity = 1;
 		return false;
 	}
@@ -207,11 +202,11 @@
 	}
 	
 	
-	/* naah.. */
+
 	if( saltCounter >= 492 && !dcTagPointer && !lfcTagPointer )
 	{
 		PRINTQ( stderr, "The info file (%s) has not \n'design capacity' and not event 'last full capacity' tag\n%s\n", p -> infoFile, errorMessage );
-		/* we treat 1111.1111.1111.1111 as error here */
+
 		p -> capacity =  ~0x00;
 	}
 	
@@ -340,66 +335,6 @@
 }
 
 
-void ACPI_Update ( )
-{
-	FILE * fp;
-	char *where = NULL;
-	char  buf[512];
-	
-	register int i;
-	register u_int32 capacitySum = 0;
-	register u_int32 actualStateSum = 0;
-	
-	for( i = 0; i < powerState.nBatt; i++ )
-	{
-		powerState.batteryVector[i] -> filler( powerState.batteryVector[i] );
-		if (powerState.batteryVector[i] -> present) {
-			capacitySum += powerState.batteryVector[i] -> capacity;
-			actualStateSum += powerState.batteryVector[i] -> actualState;
-		}
-	}
-
-	if (capacitySum > 0)
-		powerState.percentage = (actualStateSum * 100) / capacitySum;
-	else
-		powerState.percentage = 0;
-	
-	/* battery charger information reading
-	 * thanks to wmpower */
-	
-	if (!(fp = fopen ("/proc/acpi/ac_adapter/0/status", "r")))
-		if (!(fp = fopen ("/proc/acpi/ac_adapter/ACAD/state", "r")))
-			if (!(fp = fopen ("/proc/acpi/ac_adapter/AC/state", "r")))
-				if (!(fp = fopen ("/proc/acpi/ac_adapter/ADP1/state", "r")))
-					return;
-	
-	fread_unlocked (buf, 512, 1, fp);
-	fclose(fp);
-	
-	if (strncmp(buf, "state:",  6) == 0)
-		where = buf + 26;
-	if (strncmp(buf, "Status:", 7) == 0)
-		where = buf + 26;
-	
-	if (where)
-	{
-		if (where[0] == 'n')
-			powerState.isCharging = true;
-		if (where[0] == 'f')
-			powerState.isCharging = false;
-	}
-	
-    if( args_ttyMode )
-        return;
-
-
-	setNewBatteryState();
-	
-	
-	return;
-}
-
-
 /* this vector will contain in each position the number of the
  * battery the user wants to be used with 'last full capacity' */
 static u_int8 * lfcArgsVector = NULL;
@@ -571,7 +506,7 @@
 		}
 		else
 		{
-			estimatedTimeClock( );
+			print_battery( );
 		}	
 		draw_all();
 		lastChargingState = powerState.isCharging;
@@ -580,101 +515,177 @@
 	}
 }
 
+void read_power()
+{
+	DIR *dir;
+	struct dirent *dirent;
+	FILE *file;
+	extern double powerrate;
+	char filename[256];
 
 
-void estimatedTimeClock ( )
-{
-	/* we remember last 5 percent values changes.
-	 * for every value we record even the exact moment when this
-	 * value was recorded (reading global variable secondsCounter) */
-	static u_int32 values[5][2];
-	static u_int8  valueIndex = ~0;
+	dir = opendir("/proc/acpi/battery");
+	if (!dir)
+		return;
 	
-	static bool lastIsCharging = false;
+	while ((dirent = readdir(dir))) {
 	
-	register u_int8  diffPercentage = 0;
-	register u_int32 diffTime       = 0;
-	register int i;
+		char line[1024];
+				
+		sprintf(filename, "/proc/acpi/battery/%s/state", dirent->d_name);
+		file = fopen(filename, "r");
+		if (!file)
+			continue;
+		memset(line, 0, 1024);
+		while (fgets(line, 1024, file) != NULL) {
+			char *c;
+			if (strstr(line, "present:") && strstr(line, "no"))
+				break;
 	
+			c = strchr(line, ':');
+			if (!c)
+				continue;
+			c++;
 	
-	/* if battery charge is plugged in, values fetched before are
-	 * reset to zero and return (draw_all() function already called
-	 * by updater will draw TIME unlit, to indicate that we haven't
-	 * a time estimation */
-	if( lastIsCharging != powerState.isCharging )
-	{
-		lastIsCharging = powerState.isCharging;
-		valueIndex = ~0;
-		powerState.remainingTime = 0;
-		return;
+			if (strstr(line, "present rate") && strstr(c, "mW"))
+				powerrate = strtoull(c, NULL, 10) / 1000.0;
 	}
+		fclose(file);
 	
+	}
+	closedir(dir);
+//	fprintf(stdout,"powerrate = %3.1f\n", powerrate);
 	
-	for( i = 4; i > 0; i-- )
-	{
-		values[i][1] = values[i-1][1];
-		values[i][0] = values[i-1][0];
+}
+
+
+void battery_capacity()
+{
+	DIR *dir;
+	struct dirent *dirent;
+	FILE *file;
+	extern double capacity;
+	char filename[256];
+	
+	
+	dir = opendir("/proc/acpi/battery");
+	if (!dir)
+		return;
+	
+	while ((dirent = readdir(dir))) {
+		
+		char line[1024];
+				
+		sprintf(filename, "/proc/acpi/battery/%s/info", dirent->d_name);
+		file = fopen(filename, "r");
+		if (!file)
+			continue;
+		memset(line, 0, 1024);
+		while (fgets(line, 1024, file) != NULL) {
+			char *c;
+			if (strstr(line, "present:") && strstr(line, "no"))
+				break;
+
+			c = strchr(line, ':');
+			if (!c)
+				continue;
+			c++;
+			
+			if (strstr(line, "last full capacity") && strstr(c, "mWh"))
+				capacity = strtoull(c, NULL, 10) / 1000.0;
+		}
+		fclose(file);		
 	}
-	values[i][0] = powerState.percentage;
-	values[i][1] = secondsCounter;
+	closedir(dir);
+//	fprintf(stdout,"capacity = %3.1f\n", capacity);
 	
+}
 	
-	valueIndex += 1;
-	if( valueIndex > 4 )
-		valueIndex = 4;
+void print_battery(void)
+{
+	DIR *dir;
+	struct dirent *dirent;
+	FILE *file;
+	double rate = 0;
+	double cap = 0;
 	
-	/* if it's the first measure, jump the comparation */
-	if( valueIndex > 0 )
-	{
-		u_int32 remainingSeconds;
-		/* we have into values[0] the most recent value,
-		 * and in values[ valueIndex ] the less one  */
+	char filename[256];
 		
-		if( powerState.isCharging )
-			diffPercentage = values[0][0] - values[ valueIndex ][0];
-		else
-			diffPercentage = values[ valueIndex ][0] - values[0][0];
 		
-		diffTime       = values[0][1] - values[ valueIndex ][1];
+	dir = opendir("/proc/acpi/battery");
+	if (!dir)
+		return;
+
+	while ((dirent = readdir(dir))) {
+		double voltage = 0.0;
+		double amperes_drawn = 0.0;
+		double watts_drawn = 0.0;
+		double amperes_left = 0.0;
+		double watts_left = 0.0;		
+		char line[1024];
+		powerState.isCharging = false;
+
+		if (strlen(dirent->d_name) < 3)
+			continue;
+
+		sprintf(filename, "/proc/acpi/battery/%s/state", dirent->d_name);
+		file = fopen(filename, "r");
+		if (!file)
+			continue;
+		memset(line, 0, 1024);
+		while (fgets(line, 1024, file) != NULL) {
+			char *c;
+			if (strstr(line, "present:") && strstr(line, "no"))
+				break;
 		
-		/* this is the logic way: if diffTime is the number of seconds for
-		 * losing(gaining) diffPercentage percent battery charge, how many
-		 * seconds will it takes to lose(gain) remaining points ? in other words:
-		 * diffTime : diffPercentage = remainingSeconds : powerState.percentage
-		 * (or if we are charging    = remainingSeconds : (100-powerState.percentage))
-		 * it shouldn't be possible to have diffPercentage = 0
-		 * because this function is called everytime that percent changes */
-		if( diffPercentage == 0 )
-		{
-			/* sometime it happends that 'diffPercentage == 0': i recieved some bug
-			 * report about this. I don't know why this happends, and i didn't find
-			 * any way to correct this conceptually, so i have to put this condition
-			 * here and turn off the estimated remaining time */
-			PRINTQ( stderr, "There is no difference of percentage between the first\n");
-			PRINTQ( stderr, "relevation and the last one: i have to put remainingTime to 0\n");
-			remainingSeconds = 0;
+			if (strstr(line, "charging state:")
+			    && !strstr(line, "discharging")){
+				powerState.isCharging = true;
 		}
-		else
-		{
-			if( powerState.isCharging )
-				remainingSeconds = ( diffTime * (100-powerState.percentage) ) / diffPercentage;
-			else
-				remainingSeconds = ( diffTime * powerState.percentage ) / diffPercentage;
+			c = strchr(line, ':');
+			if (!c)
+				continue;
+			c++;
+
+			if (strstr(line, "present voltage")) 
+				voltage = strtoull(c, NULL, 10) / 1000.0;
+		
+			if (strstr(line, "remaining capacity") && strstr(c, "mW"))
+				watts_left = strtoull(c, NULL, 10) / 1000.0;
+
+			if (strstr(line, "remaining capacity") && strstr(c, "mAh"))
+				amperes_left = strtoull(c, NULL, 10) / 1000.0; 
+
+			if (strstr(line, "present rate") && strstr(c, "mW"))
+				watts_drawn = strtoull(c, NULL, 10) / 1000.0 ;
+
+			if (strstr(line, "present rate") && strstr(c, "mA"))
+				amperes_drawn = strtoull(c, NULL, 10) / 1000.0;
+
 		}
+		fclose(file);
+			
 		
-		/* value in minutes */
-		powerState.remainingTime = remainingSeconds / 60;
-	}
-	else
-		powerState.remainingTime = 0;
-	
+		if (!powerState.isCharging) {
+			rate += watts_drawn + voltage * amperes_drawn;
+			cap += watts_left + voltage * amperes_left;
+			powerState.remainingTime =  60*cap/rate;
+			powerrate = rate;
+//			fprintf(stdout,"taxa = %3.1fW horas=%3.1f \n", rate, cap/rate);
+		} 
+		if (powerState.isCharging){
+			rate += watts_drawn + voltage * amperes_drawn;
+//			fprintf(stdout,"watts left = %3.1f, watts drawn=%3.1f \n", watts_left, watts_drawn);
+			/* time to charge battery at 100% */ 
+			powerState.remainingTime = 60*(capacity - watts_left)/watts_drawn;
+	}
+	
+		powerrate = rate;
+		powerState.percentage = 100*(watts_left/capacity);
+//		fprintf(stdout, "capacidade = %3.1f \n", capacity);
+//		fprintf(stdout,"porcentagem = %d \n", powerState.percentage);
 	
-#ifdef DEBUG
-	printf("TEMPO TRASCORSO: %u:%02u   (%u secondi)\n",diffTime/60,diffTime%60,diffTime);
-	printf("PERCENTUALI: values[0] = %u,  values[%d] = %u\n", values[0][0], valueIndex, values[valueIndex][0] );
-	printf("TEMPIVALORI: values[0] = %u,  values[%d] = %u\n", values[0][1], valueIndex, values[valueIndex][1] );
-	printf("DIFFENREZA: %d\n", diffPercentage );
-	printf("TEMPOSTIMATO: %d\n\n\n", powerState.remainingTime );
-#endif
+	}
+	closedir(dir);
 }
 
diff -Nru wmlaptop-1.4-orig/src/battery.h wmlaptop-1.4/src/battery.h
--- wmlaptop-1.4-orig/src/battery.h	2008-04-18 21:55:54.497550614 +0300
+++ wmlaptop-1.4/src/battery.h	2008-04-18 21:56:45.002550126 +0300
@@ -109,11 +109,10 @@
  * state is changed. */
 void setNewBatteryState( );
 
+void read_power();
 
-/* function invoked every time that remaining battery percentage changes
- * and calculates estimated remaining time.
- * (if changed from previous updates the dockapp */
-void estimatedTimeClock ( );
+void battery_capacity();
 
+void print_battery();
 
 #endif
diff -Nru wmlaptop-1.4-orig/src/cpu.c wmlaptop-1.4/src/cpu.c
--- wmlaptop-1.4-orig/src/cpu.c	2008-04-18 21:55:54.497550614 +0300
+++ wmlaptop-1.4/src/cpu.c	2008-04-18 21:56:45.002550126 +0300
@@ -65,10 +65,9 @@
 	return loadline;
 }
 
-
 void manageCpuLoad( )
 {
-	static u_int8 lastCpuLoad = 100;
+//	static u_int8 lastCpuLoad = 100;
 #ifndef LONGRUN
 	static u_int32 lastFreqChange = 0;
 #endif
@@ -76,10 +75,10 @@
 	cpuLoad = getCpuLoad();
 
 	
-	if( cpuLoad != lastCpuLoad || cpuLoad == 100 )
-		draw_all();
+//	if( cpuLoad != lastCpuLoad || cpuLoad == 100 )
+//		draw_all();
 	
-	lastCpuLoad = cpuLoad;
+//	lastCpuLoad = cpuLoad;
 	
 	
         /* Longrun manages frequency automatically, so skip all this */
@@ -120,7 +119,7 @@
 	
 	/* let's read actual frequency to avoid a two seconds wait
 	 * dto now it */
-	cpuReadFreq();
+//	cpuReadFreq();
 #endif
 	
 	return;
@@ -130,10 +129,14 @@
 
 void cpuReadFreq( )
 {
+	
 #ifndef LONGRUN
 	FILE * fp;
 	char red[10];
 	
+	if (governor != 1)
+		cpuState.setFreqFile = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq";
+	
 	if( (fp = fopen( cpuState.setFreqFile, "r" )) == NULL )
 	{
 		fprintf(stderr, "Error reading the info file (%s):\n%s\n", cpuState.setFreqFile, strerror(errno) );
@@ -170,19 +173,50 @@
 }
 
 
+void cpuReadTemp( ){
+	DIR *dir;
+	struct dirent *dirent;
+	FILE *file;
+	int cpuTemp = 0;
+	char filename[256];
 
-void cpuCheckFreq()
-{
-	static u_int32 lastCpuFreq = 0;
+        dir = opendir("/proc/acpi/thermal_zone");
+	if (!dir){
+		return;
+	}
+	while ((dirent = readdir(dir))) {
+		char line[1024];
 	
-	cpuReadFreq();
+		if (strlen(dirent->d_name) < 3)
+			continue;
 	
-	if( lastCpuFreq != cpuState.actualFreq )
-		draw_all();
 	
-	lastCpuFreq = cpuState.actualFreq;
-}
+	sprintf(filename, "/proc/acpi/thermal_zone/%s/temperature", dirent->d_name);
+	file = fopen(filename, "r");
+	if (!file)
+		continue;
+	memset(line, 0, 1024);
+	while (fgets(line, 1024, file) != NULL) {
+		char *c;
+	//	if (strstr(line, "present:") && strstr(line, "no"))
+	//		break;
+
+		c = strchr(line, ':');
+		if (!c)
+			continue;
+		c++;
+		
+		if (strstr(line, "temperature") && strstr(c, "C"))
+			cpuTemp = strtoull(c, NULL, 10);
 
+	}
+		fclose(file);
+		
+		cpuState.Temp = cpuTemp;
+//		fprintf(stdout,"temperatura = %d\n", cpuState.Temp);
+	}
+	closedir(dir);
+}
 
 void cpuSetFreq( bool direction, bool speed )
 {
diff -Nru wmlaptop-1.4-orig/src/cpu.h wmlaptop-1.4/src/cpu.h
--- wmlaptop-1.4-orig/src/cpu.h	2008-04-18 21:55:54.497550614 +0300
+++ wmlaptop-1.4/src/cpu.h	2008-04-18 21:56:45.003550530 +0300
@@ -37,6 +37,8 @@
  * global variable cpuState */
 void cpuReadFreq( );
 
+/* read cpu temperature and puts into cpuState.Temp */
+void cpuReadTemp();
 
 /* invoked by events cycle  e time every 2 seconds, it reads actual
  * frequency (calling readCpuFreq) and it redraws the dockapp if it's
diff -Nru wmlaptop-1.4-orig/src/draw.c wmlaptop-1.4/src/draw.c
--- wmlaptop-1.4-orig/src/draw.c	2008-04-18 21:55:54.497550614 +0300
+++ wmlaptop-1.4/src/draw.c	2008-04-18 21:56:45.003550530 +0300
@@ -16,6 +16,7 @@
 
 #include "draw.h"
 
+extern double powerrate;
 
 void draw_area(int sx, int sy, int w, int h, int dx, int dy)
 {
@@ -37,9 +38,13 @@
 	
 	draw_cpuload ( );
 	
+	if (governor == 1){ // 1 means userspace
 	draw_auto_freq ( );
-	
 	draw_freq_arrows ( );
+	} else {
+		draw_cputemp();
+		draw_powerrate();
+	}
 	
 	draw_actual_freq ( );
 	
@@ -59,6 +64,18 @@
 	/* Mhz */
 	draw_area( 46, 119, 15, 9, 38, 51 );
 	
+	// colocar graus C e Watts se ondemand
+	/* C */
+	if (governor == 2){
+		/* draw C (Celsius) */
+		draw_area( 0, 117, 4, 7, 52, 36 );
+		/* draw W (Watts) */
+		if (powerState.isCharging)
+			draw_area( 70, 130, 9, 7, 25, 37 );
+		else
+			draw_area( 81, 130, 9, 7, 25, 37 );
+	}
+	
 	/* two gray lines */
 	draw_area( 66, 118, 55, 1, 4, 24 );
 	draw_area( 66, 118, 55, 1, 4, 48 );
@@ -87,10 +104,6 @@
 	
 	u_int8 numBars;
 	int i;
-	int j;
-	int battery = 0;
-	int batterySlot;
-	int presentBatteries = 0;
 	
 	if( powerState.percentage == 100 )
 		/* drawing the green <1> at first position*/
@@ -118,30 +131,15 @@
 	/* drawing <%> symbol of the right color */
 	draw_area( 40, baseY, 7, 7, 20, 5 );
 
-	
-	/* let's see, how many batteries are present */
-	for ( batterySlot = 0; batterySlot < powerState.nBatt; batterySlot ++ )
-		if (powerState.batteryVector[batterySlot] -> present)
-			presentBatteries ++;
-
-
-	for( batterySlot = 0; batterySlot < powerState.nBatt; batterySlot ++ ) {
-
-		if (powerState.batteryVector[batterySlot] -> present) {
-			battery ++;
-
 			/* battery drawing */
-			numBars = (22 * powerState.batteryVector[batterySlot] -> percentage) / 100;
+	numBars = (22 * powerState.percentage) / 100;
 
 			for( i = 0; i < numBars; i++ )
-				draw_area( 49 + ( i > 10 ? i - 11 : i ), 95 + ( i > 10 ? 7 : 0), 1, (7 / presentBatteries), 15+(i*2), 15 + (battery - 1) * (7 / presentBatteries + 1 ) );
+	draw_area( 49 + ( i > 10 ? i - 11 : i ), 95 + ( i > 10 ? 7 : 0), 1, (7 / 1), 15+(i*2), 15  );
 
 			/* unlit remaining battery */
-			for( j = i; j < 22; j++ )
-				draw_area( 60, 95, 1, (7 / presentBatteries), 15 + (j*2), 15 + (battery - 1) * (7 / presentBatteries + 1 ) );
-
-		}
-	}
+//	for( j = i; j < 22; j++ )
+//		draw_area( 60, 95, 1, (7 / 1), 15 + (j*2), 15 + (battery - 1) * (7 / 2 ) );
 
 	return;
 }
@@ -232,6 +230,60 @@
 	
 }
 
+void draw_cputemp ( )
+{
+	
+	u_int8 decine = cpuState.Temp == 100 ? 0 : (cpuState.Temp / 10);
+	u_int8 unita = cpuState.Temp % 10;
+
+	
+	/* tens drawing */
+	if( decine == 0 && cpuState.Temp != 100 )
+		draw_area( 57, 75, 4, 7, 49, 27 );
+	else
+		draw_area( decine*4, 71, 4, 7, 40, 36 );
+	
+	/* units drawing  */
+	draw_area( unita*4, 71, 4, 7, 45, 36 );		       	
+	
+	
+}
+
+void draw_powerrate ( )
+{
+	
+	u_int8 decine = 0;
+	u_int8 unita = 0;
+	u_int8 decimal = 0;
+	
+	if (powerrate > 10){		
+		decine = (powerrate / 10);		
+		unita = powerrate - decine*10;
+		decimal = powerrate*10 - decine*100 - unita*10;			
+	}
+	else { 
+		decine = 0;
+		unita = powerrate;
+		decimal = powerrate*10 - unita*10;
+	}
+	 
+	/* tens drawing */
+	if( decine == 0 )
+		draw_area( 57, 75, 4, 7, 5, 37 );
+	else
+		draw_area( decine*4, 78 - powerState.isCharging*14, 4, 7, 5, 37 );
+	
+	/* units drawing  */
+	draw_area( unita*4, 78 - powerState.isCharging*14, 4, 7, 10, 37 );
+	
+	/* decimal point */
+	draw_area( 0, 83 - powerState.isCharging*14, 2, 1, 15, 43 );
+	
+	/* decimals drawing  */
+	draw_area( decimal*4, 78 - powerState.isCharging*14, 4, 7, 18, 37 );
+}
+
+
 void draw_auto_freq ( )
 {
 	if ( cpuState.auto_freq_state ){
diff -Nru wmlaptop-1.4-orig/src/draw.h wmlaptop-1.4/src/draw.h
--- wmlaptop-1.4-orig/src/draw.h	2008-04-18 21:55:54.497550614 +0300
+++ wmlaptop-1.4/src/draw.h	2008-04-18 21:56:45.004550097 +0300
@@ -53,10 +53,19 @@
 void draw_auto_freq ( );
 
 /* it draws the arrows at left and right of the cpu frequency */
+
 void draw_freq_arrows ( );
 
-/* it draws actua cpu frequency */
+
+/* it draws the actual cpu frequency */
 void draw_actual_freq ( );
 
+/* it draws the cpu temperature */
+void draw_cputemp();
+
+/* it draws the rate at which the battery is 
+ * discharging/charging */
+void draw_powerrate();
+
 
 #endif
diff -Nru wmlaptop-1.4-orig/src/event.c wmlaptop-1.4/src/event.c
--- wmlaptop-1.4-orig/src/event.c	2008-04-18 21:55:54.497550614 +0300
+++ wmlaptop-1.4/src/event.c	2008-04-18 21:56:45.004550097 +0300
@@ -16,11 +16,10 @@
 
 #include "event.h"
 
-
-
 void event_handler ( )
 {
-	u_int32  update_seconds;
+	u_int32  update_seconds, update_seconds2, update_seconds3;
+	u_int32	 batteryUpdate, powerUpdate, tempUpdate;
 	u_int8   lastPercentage;
 	int j;
 
@@ -31,9 +30,11 @@
 	secondsCounter = time(NULL);
 	powerState.updater();
 	update_seconds = time(NULL);
+	update_seconds2 = update_seconds;
 	lastPercentage = powerState.percentage;
 	
-	if( powerState.percentage == 100 && powerState.isCharging && args_paradisiac == PARADISIAC_ON )
+
+	if( powerState.percentage == 100 && powerState.isCharging && args_paradisiac == PARADISIAC_ON && governor == 1)
     {
         if( args_ttyMode && args_beQuiet == false
 #ifndef LONGRUN
@@ -78,6 +79,7 @@
 				
 					switch ( j )
 					{
+						if (governor == 1){
 						/* auto-freq */
 						case MREGION_AUTOFREQ:
 							/* toggle auto-freqency "(c)2003 LdP" scaling mode */
@@ -112,7 +114,7 @@
 							cpuState.auto_freq_state = false;
 #endif
 							break;
-							
+						}
 					}
 					
 					/* if a cliccable region was clicked, the dockapp is redrawn */
@@ -134,17 +136,32 @@
 		}
 		
 		
-		/* update battery percentage and cpuFreq
-		 * once every batteryUpdate milliseconds; check for autoscripts
-		 * and cpuParadisiac too */
-		if( update_seconds <= secondsCounter - (args_batteryUpdate/1000) )
+		/* If cpuload is less than 90% then the system is 'idle', so we 
+		 * update battery percentage, temperature and power with 
+		 * defaults values (which are confortably big as to not 
+		 * overuse the acpi system and generate to many wakeups (detected
+		 * by Intel's powertop). 
+		 * If cpuload is bigger than 90% it makes sense to check these
+		 * values more often (especially the temperature), so we set
+		 * the update times to default small values.
+		 */
+		
+		if (cpuLoad < 90) {
+			batteryUpdate = args_batteryUpdate;
+			powerUpdate = args_powerUpdate;
+			tempUpdate = args_tempUpdate;
+		}
+		else {
+			batteryUpdate = 10;
+			powerUpdate = 2;
+			tempUpdate = 2;
+		}
+		       
+		
+		if( update_seconds <= secondsCounter - batteryUpdate )
 		{
 			update_seconds = secondsCounter;
-                        /* longrun adjusts so quickly that if you put the check
-                           after the succeeding line it consistently reads a
-                           higher MHz (in ACPI) */
-			cpuCheckFreq();
-			powerState.updater();
+			print_battery();
 			
 			if( args_autoShutdown != AUTOSHUTDOWN_OFF )
 				checkAutoShutdown ( );
@@ -152,13 +169,31 @@
 			if( args_autoAlarm != AUTOALARM_OFF )
 				checkAutoAlarm ( );
 
-			if( args_paradisiac == PARADISIAC_ON )
-				cpuSetParadisiac ( );
+//			if( args_paradisiac == PARADISIAC_ON && governor == 1)
+//				cpuSetParadisiac ( );
+		}
+		
+		if( update_seconds2 <= secondsCounter - tempUpdate ){
+			update_seconds2 = secondsCounter;
+			cpuReadTemp();
+//			fprintf(stdout,"executei temperatura \n");
+		}
+		
+		if( update_seconds3 <= secondsCounter - powerUpdate ){
+			update_seconds3 = secondsCounter;
+			read_power();
+//			fprintf(stdout,"executei power \n");
 		}
 		
 		/* check and redraw cpu load */
+		if (governor == 1)
 		manageCpuLoad();
-		usleep( 1000*args_cpuUpdate /*150000*/ );
+		if (governor == 2){
+			cpuLoad = getCpuLoad();			
+		}
+		cpuReadFreq();		
+		draw_all();
+		usleep( 1000*args_cpuUpdate  );
 		
 	}
 }
diff -Nru wmlaptop-1.4-orig/src/init.c wmlaptop-1.4/src/init.c
--- wmlaptop-1.4-orig/src/init.c	2008-04-18 21:55:54.497550614 +0300
+++ wmlaptop-1.4/src/init.c	2008-04-18 21:56:45.005550432 +0300
@@ -189,80 +189,6 @@
 }
 
 
-/* this chech for the string 'userspace' is in scaling_governor file under /sys/.. dir
- * (only in case we are going to use SYS's way to set cpufreq). If 'userspace' is not set
- * then we try to set it by ourself */
-void scalingGovernorHelper( )
-{
-    char * scaling_governor_path = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor";
-    char * scaling_governor_av_path = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors";
-    char * error_msg = "Unable to read <%s>:\n%s\nwmlaptop cannot help you in cpu scaling governor\n";
-    FILE * sysfp;
-    FILE * sysavfp;
-    char   littleBuffer[128];
-    
-    bool   printIt = false;
-    int    i;
-
-    if( ( sysfp = fopen( scaling_governor_path, "r" ) ) == NULL ) {
-        PRINTQ( stderr, error_msg, scaling_governor_path, strerror(errno) );
-        return;
-    }
-
-    fgets( littleBuffer, 127, sysfp );
-    fclose( sysfp );
-    
-    if( !strcmp( littleBuffer, "userspace\n" ) )
-        return;
-
-    if( ( sysavfp = fopen( scaling_governor_av_path, "r" ) ) == NULL ) {
-        PRINTQ( stderr, error_msg, scaling_governor_av_path, strerror(errno) );
-        return;
-    }
-    
-    fgets( littleBuffer, 127, sysavfp );
-    fclose( sysavfp );
-    
-    for( i = 0; i < strlen( littleBuffer ) - 9 ; i++ )
-        if( !strncmp( littleBuffer, "userspace", 9 ) )
-        {
-            /* ok, module is loaded */
-            printIt = true;
-            break;
-        }
-
-
-    if( printIt == false ) {
-        int s;
-        PRINTQ( stderr, "It seems that you do not have 'cpufreq_userspace' module loaded in your kernel\n");
-        PRINTQ( stderr, "I try to call \"/sbin/modprobe cpufreq_userspace\"\n");
-
-        /* ugly.. but very fast */
-        s = system( "/sbin/modprobe cpufreq_userspace" );
-
-        if( s == 0 )
-            PRINTQ( stderr, "..good.\n" );
-        else
-        {
-            PRINTQ( stderr, "you should do it by yourself (maybe you need to recompile kernel ?)\n");
-            return;
-        }
-    }
-    
-    /* All ok here */
-    if( ( sysfp = fopen( scaling_governor_path, "w" )) == NULL ) 
-        PRINTQ( stderr, error_msg, scaling_governor_path, strerror(errno));
-    else
-    {
-        PRINTQ( stderr, "echoing 'userspace' > '%s'\n", scaling_governor_path );
-        fprintf( sysfp, "userspace" );
-        fclose( sysfp );
-    }
-
-    return;
-}
-	
-
 
 /* riempe la struttura cpuState tenendo anche conto
  * degli argomenti passati da linea di comando */
@@ -293,7 +219,6 @@
 	/* auto_freq_state */
 	cpuState.auto_freq_state = ( args_autoFreq == AUTOFREQ_ON );
 	
-	
 	/* min freq */
 	if( (fp = fopen( paths[0][idx[0]], "r" )) == NULL ) {
 		fprintf( stderr, "Error reading the info file (%s):\n%s\n", paths[0][idx[0]], strerror(errno) );
@@ -313,21 +238,12 @@
 	
 	fgets ( red, 10, fp );
 	cpuState.maxFreq = atoi ( red );
-	
 	fclose ( fp );
 	
 	/* set freq file */
 	cpuState.setFreqFile = paths[2][idx[2]];
 
-        /* if we have to use the SYS's way to set cpufreq, then ensure that in
-         * scaling_governor there has been put 'userspace'; otherwise let's try
-         * to put it by ourself */
-        if( idx[2] == 0 )
-            scalingGovernorHelper( );
-
-	
-        cpuReadFreq( );
-	
+	cpuReadFreq();
 	
         /* set freq */
         cpuState.setFreq = cpuState.actualFreq;
@@ -336,6 +252,7 @@
         /* step freq */
         cpuState.stepFreq = args_incrementalStep;
 	
+	
 #else
         /* init and get first actual frequency */
         /* PENDING: get these files from config */
@@ -377,8 +294,7 @@
 		free_and_exit( ERROR );
 	}
 #endif
-	switch( args_startingFreq )
-	{
+	switch( args_startingFreq ){
 		case STARTINGFREQ_MIN:
 #ifndef LONGRUN	
 			/* frequence at min */
@@ -398,14 +314,16 @@
 #endif
 	}
 	
+	
 #ifndef LONGRUN	
 #ifdef DEBUG
 	fprintf ( stderr, "min freq: %d\nmax freq: %d\nactual freq: %d\n", cpuState.minFreq, cpuState.maxFreq, cpuState.actualFreq );
 #endif
 #else
 	fprintf ( stderr, "LongRun CPU starts at %d, with autoadjust = %d\n\n", cpuState.setLevelIdx, cpuState.auto_freq_state );
-        cpuEchoFreq();  /* set initial range */
+//        cpuEchoFreq();  /* set initial range */
 #endif
+
 	return;
 }
 
diff -Nru wmlaptop-1.4-orig/src/main.c wmlaptop-1.4/src/main.c
--- wmlaptop-1.4-orig/src/main.c	2008-04-18 21:55:54.497550614 +0300
+++ wmlaptop-1.4/src/main.c	2008-04-18 22:08:44.250548770 +0300
@@ -29,6 +29,8 @@
 
 /* command line's args */
        u_int32 args_cpuUpdate        = ARGSDEF_LEAVE;
+       u_int32 args_powerUpdate      = ARGSDEF_LEAVE;
+       u_int32 args_tempUpdate       = ARGSDEF_LEAVE;
        u_int32 args_batteryUpdate    = ARGSDEF_LEAVE;
        char *  args_XDisplayName     = NULL;
        bool    args_autoFreq         = ARGSDEF_LEAVE;
@@ -52,6 +54,9 @@
        bool    args_dontBlink100     = ARGSDEF_DONTBLINK100;
        bool    args_ttyMode          = ARGSDEF_LEAVE;
 	   bool    args_skin             = ARGSDEF_LEAVE;
+       int     governor              = 2; // 1=userspace 2=ondemand
+       double  powerrate             = 1;
+       double  capacity;
 
 /* X's stuff */
 struct mouseRegion mouse_region[MAX_MOUSE_REGION];
@@ -106,8 +111,13 @@
 		}
 	}
 	
-	init_cpuState (  );
-    powerState.updater();
+	if (governor == 1){
+		init_cpuState();
+	}
+	battery_capacity();
+	cpuReadTemp();
+	print_battery();
+	
 	
     if( args_ttyMode ) {
         fprintf( stdout, "\n" );
@@ -119,6 +129,7 @@
     }
     else
     {
+	    if (governor == 1){
         /* auto-freq mouse region */
         AddMouseRegion( MREGION_AUTOFREQ, 7, 36, 55, 46 );
         /* cpu frequency left arrow */
@@ -126,6 +137,9 @@
         /* cpu frequency right arrow */
         AddMouseRegion( MREGION_MAXFREQ, 55, 52, 58, 59 );
     }	
+
+    }
+
 	event_handler (  );
 
 	
@@ -204,9 +218,13 @@
 	fprintf( stderr, "                                v - victory jingle\n");
 	fprintf( stderr, "                                h - high-bell sounds\n");	
 	fprintf( stderr, "   --alarm-repeat=N           repeat the choosen alarm N times\n");
+	fprintf( stderr, "[KERNEL-related-options]:\n");
+	fprintf( stderr, "   --governor=ondemand|userspace choose cpu scaling governor\n");
 	fprintf( stderr, "[GENERAL-options]:\n");
 	fprintf( stderr, "   --cpu-update=N             how often, in milliseconds, to update CPU display\n");
-	fprintf( stderr, "   --battery-update=N         how often, in milliseconds, update battery state\n");
+	fprintf( stderr, "   --battery-update=N         how often, in seconds, to update battery state\n");
+	fprintf( stderr, "   --power-update=N           how often, in seconds, to update power state\n");
+	fprintf( stderr, "   --temperature-update=N     how often, in seconds, to update temperature state\n");
 	fprintf( stderr, "   -p   --play                play alarm and exit\n");
 	fprintf( stderr, "   -q   --quiet               do not print messages and warnings\n");
 	fprintf( stderr, "   -d   --default             show the default compiled settings and exit\n");
@@ -318,6 +336,14 @@
 			args_startingFreq = STARTINGFREQ_MAX;
 			continue;
 		}
+		if( !strcmp( argv[i], "--governor=ondemand" ) ) {
+			governor=2;
+			continue;
+		}
+		if( !strcmp( argv[i], "--governor=userspace" ) ) {
+			governor=1;
+			continue;
+		}
 		
 		if( !strncmp( argv[i], "--max-freq=", 11 ) ) {
 			EXIT_IF_ALREADY_SET( args_maxFreq, ARGSDEF_LEAVE, "maxFreq" );
@@ -465,7 +491,7 @@
 			ptr = strchr( argv[i], '=' );
 			ptr++;
 			args_cpuUpdate = atoi( ptr );
-			WARNING_IS_SET_TO_ZERO( args_maxFreq, "cpuUpdate" );
+			WARNING_IS_SET_TO_ZERO( args_cpuUpdate, "cpuUpdate" );
 			continue;
 		}
 		
@@ -474,7 +500,25 @@
 			ptr = strchr( argv[i], '=' );
 			ptr++;
 			args_batteryUpdate = atoi( ptr );
-			WARNING_IS_SET_TO_ZERO( args_maxFreq, "batteryUpdate" );
+			WARNING_IS_SET_TO_ZERO( args_batteryUpdate, "batteryUpdate" );
+			continue;
+		}
+		
+		if( !strncmp( argv[i], "--power-update=", 11 ) ) {
+			EXIT_IF_ALREADY_SET( args_powerUpdate, ARGSDEF_LEAVE, "powerUpdate" );
+			ptr = strchr( argv[i], '=' );
+			ptr++;
+			args_powerUpdate = atoi( ptr );
+			WARNING_IS_SET_TO_ZERO( args_powerUpdate, "powerUpdate" );
+			continue;
+		}
+		
+		if( !strncmp( argv[i], "--temperature-update=", 11 ) ) {
+			EXIT_IF_ALREADY_SET( args_tempUpdate, ARGSDEF_LEAVE, "tempUpdate" );
+			ptr = strchr( argv[i], '=' );
+			ptr++;
+			args_tempUpdate = atoi( ptr );
+			WARNING_IS_SET_TO_ZERO( args_tempUpdate, "tempUpdate" );
 			continue;
 		}
 		
@@ -511,6 +555,8 @@
 	/* setting default values not set by command line */
 	SET_DEFAULT( args_cpuUpdate,       ARGSDEF_LEAVE,      ARGSDEF_CPUUPDATE );
 	SET_DEFAULT( args_batteryUpdate,   ARGSDEF_LEAVE,      ARGSDEF_BATTERYUPDATE );
+	SET_DEFAULT( args_powerUpdate,     ARGSDEF_LEAVE,      ARGSDEF_POWERUPDATE );
+	SET_DEFAULT( args_tempUpdate,      ARGSDEF_LEAVE,      ARGSDEF_TEMPUPDATE );
 	SET_DEFAULT( args_XDisplayName,    NULL,               ARGSDEF_XDISPLAYNAME );
 	SET_DEFAULT( args_autoFreq,        ARGSDEF_LEAVE,      ARGSDEF_AUTOFREQ );
 	SET_DEFAULT( args_incrementalStep, ARGSDEF_LEAVE,      ARGSDEF_INCREMENTALSTEP );
@@ -566,6 +612,8 @@
 	fprintf( stdout, "   --skin=%d\n", ARGSDEF_SKIN );
 	fprintf( stdout, "[CPU-options]:\n");
 	fprintf( stdout, "   --cpu-update=%d\n", ARGSDEF_CPUUPDATE );
+	fprintf( stdout, "   --temperature-update=%d\n", ARGSDEF_TEMPUPDATE );
+	fprintf( stdout, "   --power-update=%d\n", ARGSDEF_POWERUPDATE );
 	fprintf( stdout, "   --auto-freq=%s\n", ARGSDEF_AUTOFREQ == AUTOFREQ_ON ? "on" : "off" );
 	fprintf( stdout, "   --incremental-step=%d\n", ARGSDEF_INCREMENTALSTEP );
 	if( ARGSDEF_STARTINGFREQ != ARGSDEF_LEAVE )
diff -Nru wmlaptop-1.4-orig/src/main.h wmlaptop-1.4/src/main.h
--- wmlaptop-1.4-orig/src/main.h	2008-04-18 21:55:54.497550614 +0300
+++ wmlaptop-1.4/src/main.h	2008-04-18 21:56:45.010548403 +0300
@@ -134,7 +134,7 @@
 	u_int8  counter;
 	char    stateFile[52];
 	char    infoFile[52];
-	u_int32 capacity;
+	double  capacity;
 	u_int32 actualState;
 	u_int16 percentage;
 	bool    useLFC;
@@ -175,9 +175,12 @@
 	u_int8        percentage;
 	u_int16       remainingTime;
 	bool          isCharging;
+//	double        rate;
 	void(*updater)();
 };
 
+extern double powerrate;
+extern double capacity;
 
 /*******************
  * CPUS' STUFF     *
@@ -192,6 +195,7 @@
  * events cycle.                                                 *
  *****************************************************************/
 extern        u_int8  cpuLoad;
+extern        int governor;
 
 /*****************************************************************
  * global variable cpuState is a structure of this type, it      *
@@ -224,6 +228,7 @@
 	char *  setFreqFile;
 	u_int32 setFreq;
 	u_int32 stepFreq;
+	int     Temp;
 #else
         u_int16 *longRunLevels;
         u_int16 nLongRunLevels;
@@ -337,14 +342,22 @@
 
 /* update frequencies, in milliseconds; cpu must < battery */
 #ifndef    ARGSDEF_CPUUPDATE
-# define    ARGSDEF_CPUUPDATE         80
+# define    ARGSDEF_CPUUPDATE         400
 #endif
 #ifndef    ARGSDEF_BATTERYUPDATE
-# define    ARGSDEF_BATTERYUPDATE     5000
+# define    ARGSDEF_BATTERYUPDATE     30 // seconds
+#endif
+#ifndef    ARGSDEF_POWERUPDATE
+# define    ARGSDEF_POWERUPDATE     5 // seconds
+#endif
+#ifndef    ARGSDEF_TEMPUPDATE
+# define    ARGSDEF_TEMPUPDATE     10 // seconds
 #endif
 
 extern u_int32 args_cpuUpdate;
 extern u_int32 args_batteryUpdate;
+extern u_int32 args_powerUpdate;
+extern u_int32 args_tempUpdate;
 
 /* name of diplay to open */
 #ifndef    ARGSDEF_XDISPLAYNAME
@@ -363,7 +376,7 @@
 
 /* incremental auto-scaling step */
 #ifndef    ARGSDEF_INCREMENTALSTEP
-# define    ARGSDEF_INCREMENTALSTEP   100000
+# define    ARGSDEF_INCREMENTALSTEP   200000
 #endif
 extern u_int32 args_incrementalStep;
 
@@ -395,7 +408,7 @@
 #define    PARADISIAC_OFF             2
 
 #ifndef    ARGSDEF_PARADISIAC
-# define    ARGSDEF_PARADISIAC        PARADISIAC_ON
+# define    ARGSDEF_PARADISIAC        PARADISIAC_OFF
 #endif
 extern bool    args_paradisiac;
 
diff -Nru wmlaptop-1.4-orig/src/pixmap.c wmlaptop-1.4/src/pixmap.c
--- wmlaptop-1.4-orig/src/pixmap.c	2008-04-18 21:55:54.497550614 +0300
+++ wmlaptop-1.4/src/pixmap.c	2008-04-18 21:56:45.012548584 +0300
@@ -18,9 +18,235 @@
 
 char ** wmlaptop_xpm = NULL;
 
+/* XPM */
+static char * wmlaptop_xpm_type0[] = {
+"123 140 81 1",
+" 	c None",
+".	c #FF0000",
+"+	c #000000",
+"@	c #00FF04",
+"#	c #968E8E",
+"$	c #FFFF00",
+"%	c #FF1700",
+"&	c #FF2F00",
+"*	c #FF4700",
+"=	c #FF5F00",
+"-	c #FF7700",
+";	c #FF8E00",
+">	c #FFA600",
+",	c #FFBE00",
+"'	c #FFD600",
+")	c #FFEE00",
+"!	c #FFF900",
+"~	c #F4FA00",
+"{	c #DFFA00",
+"]	c #C9FB00",
+"^	c #B4FB00",
+"/	c #9FFC00",
+"(	c #89FD00",
+"_	c #74FD00",
+":	c #5EFE00",
+"<	c #49FE00",
+"[	c #3FFF00",
+"}	c #050500",
+"|	c #EFEC19",
+"1	c #242303",
+"2	c #B1AF13",
+"3	c #262504",
+"4	c #ECE919",
+"5	c #060600",
+"6	c #94920F",
+"7	c #E7E418",
+"8	c #6F6D0B",
+"9	c #ABA912",
+"0	c #67660B",
+"a	c #020200",
+"b	c #F3F01A",
+"c	c #0F0F01",
+"d	c #6A690B",
+"e	c #A2A011",
+"f	c #86850E",
+"g	c #191902",
+"h	c #101001",
+"i	c #8C8B0F",
+"j	c #605F0A",
+"k	c #AAA812",
+"l	c #2A2904",
+"m	c #FBF81B",
+"n	c #383706",
+"o	c #AEAC12",
+"p	c #525108",
+"q	c #E0DD18",
+"r	c #222203",
+"s	c #161602",
+"t	c #E8E518",
+"u	c #5B5A09",
+"v	c #F5F21A",
+"w	c #63620A",
+"x	c #E5E218",
+"y	c #0B0B01",
+"z	c #F8F51A",
+"A	c #C6C415",
+"B	c #BCB914",
+"C	c #999710",
+"D	c #C1BF14",
+"E	c #AFAD12",
+"F	c #7C7A0D",
+"G	c #F7F41A",
+"H	c #272604",
+"I	c #5F5E0A",
+"J	c #181802",
+"K	c #0E0E01",
+"L	c #313005",
+"M	c #C4C215",
+"N	c #DCD917",
+"O	c #131302",
+"P	c #6D6B0B",
+"                                                                ...........................................................",
+"                                                                ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++.........+++....+++......+++.............",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++........+++++...+++......+++.............",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++.......+++.+++..+++......+++.............",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++.......+++.+++..+++......+++.............",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++.......+++.+++...+++....+++..............",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++.......+++.+++...+++....+++..............",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++.......+++.+++...+++....+++..............",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++.......+++.+++...+++....+++..............",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++.......+++.+++...+++.++.+++..............",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++.......+++.+++...+++.++.+++..............",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++.......+++.+++....++.++.++...............",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++.......+++.+++....++.++.++...............",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++.......+++.+++....++.++.++...............",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++.......+++.+++....++.++.++...............",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++++++...+++.+++.....++..++................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++++++....+++++......++..++................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...............+++++++.....+++.......++..++................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..+++++.....+++...+++++++.+++++++.+++++.+++++....+++.+++...",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..+++++....+++++..+++++++.+++++++.+++++.+++++++..+++.+++...",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..+++++++.+++++++.+++++++.+++++++.+++++.+++++++..+++.+++...",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..+++.+++.+++++++...+++.....+++...+++...+++.++++.+++.+++...",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..+++.+++.+++.+++...+++.....+++...+++...+++..+++.+++.+++...",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..+++.+++.+++.+++...+++.....+++...+++...+++.++++.+++.+++...",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..+++.+++.+++.+++...+++.....+++...+++...+++.+++..+++.+++...",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..+++++++.+++.+++...+++.....+++...++++..+++++++..+++.+++...",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..++++++..+++++++...+++.....+++...++++..+++++....+++++++...",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..+++++++.+++++++...+++.....+++...++++..+++++.....+++++....",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..+++.+++.+++++++...+++.....+++...+++...++++++....+++++....",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..+++.+++.+++.+++...+++.....+++...+++...++++++.....+++.....",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..+++.+++.+++.+++...+++.....+++...+++...+++++++....+++.....",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..+++.+++.+++.+++...+++.....+++...+++...+++.+++....+++.....",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..+++++++.+++.+++...+++.....+++...+++++.+++.++++...+++.....",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..+++++...+++.+++...+++.....+++...+++++.+++..+++...+++.....",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ..+++++...+++.+++...+++.....+++...+++++.+++..+++...+++.....",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   ...........................................................",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++   +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"                                                                +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"                                                                +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"                                                                +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+@@+++@++@@+@@@+@+++@@@++@@+@@@@+@@++@@++@++++@++++###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"@++@+@@+@++@+++@@+++@+++@++++++@@++@@++@@+@++@++++#++###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"@++@@+@+@++@+++@@+++@+++@++++++@@++@@++@+@++@++++#+++#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"@++@++@+++@++@@+@+++@@@+@@@++++@+@@++@@@+++@++++#+#++###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"@++@++@++@+++++@@+@++++@@++@++@+@++@+++@++@++@+#+++###+++++++++++++++++++++++++$$$+++++++++$$$++++$$$++++++$$$+++++++++++++",
+"@++@++@+@++++++@@@@@+++@@++@++@+@++@+++@+@++@+@#+++++++++++++++++++++++++++++++$$$++++++++$$$$$+++$$$++++++$$$+++++++++++++",
+"+@@+@@@@@@@@@@@+++@+@@@++@@+++@++@@++@@+@++++@+++++@@@+++......++++++++++++++++$$$+++++++$$$+$$$++$$$++++++$$$+++++++++++++",
+"+$$+++$++$$+$$$+$+++$$$++$$+$$$$+$$++$$++$++++$+++@++@@@+++++++++++++++++++++++$$$+++++++$$$+$$$++$$$++++++$$$+++++++++++++",
+"$++$+$$+$++$+++$$+++$+++$++++++$$++$$++$$+$++$+++@+++@+++++++++++++++++++++++++$$$+++++++$$$+$$$+++$$$++++$$$++++++++++++++",
+"$++$$+$+$++$+++$$+++$+++$++++++$$++$$++$+$++$+++@+@++@@@+++++++++++++++++++++++$$$+++++++$$$+$$$+++$$$++++$$$++++++++++++++",
+"$++$++$+++$++$$+$+++$$$+$$$++++$+$$++$$$+++$+++@+++@@@+++++++++++++++++++++++++$$$+++++++$$$+$$$+++$$$++++$$$++++++++++++++",
+"$++$++$++$+++++$$+$++++$$++$++$+$++$+++$++$++$+@+++++++++++++++++++++++++++++++$$$+++++++$$$+$$$+++$$$++++$$$++++++++++++++",
+"$++$++$+$++++++$$$$$+++$$++$++$+$++$+++$+$++$+$++++++++++++++++++++++++++++++++$$$+++++++$$$+$$$+++$$$+$$+$$$++++++++++++++",
+"+$$+$$$$$$$$$$$+++$+$$$++$$+++$++$$++$$+$++++$+++++$$++++++++++++++++++++++++++$$$+++++++$$$+$$$+++$$$+$$+$$$++++++++++++++",
+"+..+++.++..+...+.+++...++..+....+..++..++.++++.+++$$$$+++++++++++++++++++++++++$$$+++++++$$$+$$$++++$$+$$+$$+++++++++++++++",
+".++.+..+.++.+++..+++.+++.++++++..++..++..+.++.+++$$$$$$++++++++++++++++++++++++$$$+++++++$$$+$$$++++$$+$$+$$+++++++++++++++",
+".++..+.+.++.+++..+++.+++.++++++..++..++.+.++.+++$$$$$$$$+++++++++++++++++++++++$$$+++++++$$$+$$$++++$$+$$+$$+++++++++++++++",
+".++.++.+++.++..+.+++...+...++++.+..++...+++.+++++$$$$$$++++++++++++++++++++++++$$$+++++++$$$+$$$++++$$+$$+$$+++++++++++++++",
+".++.++.++.+++++..+.++++..++.++.+.++.+++.++.++.++++$$$$+++++++++++++++++++++++++$$$$$$$+++$$$+$$$+++++$$++$$++++++++++++++++",
+".++.++.+.++++++.....+++..++.++.+.++.+++.+.++.+.++++$$++++++++++++++++++++++++++$$$$$$$++++$$$$$++++++$$++$$++++++++++++++++",
+"+..+...........+++.+...++..+++.++..++..+.++++.+++++++++++++++++++++++++++++++++$$$$$$$+++++$$$+++++++$$++$$++++++++++++++++",
+"+@@@@++++@+++@@@@+@@@@+++++@++@@@@@++@@@@+@@@@@@+@@@@++@@@@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"@++++@++@@++@++++@++++@++++@++@+++++@+++++@++++@@++++@@++++@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"@++++@+@+@++@++++@+++++@++@+++@+++++@++++++++++@@++++@@++++@#.@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"@++++@@++@+++++++@+++++@++@+++@+++++@++++++++++@@++++@@++++@#.@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"@++++@+++@++++++@+++@@@++@++++@@@@++@@@@@+++++@++@@@@++@@@@@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"@++++@+++@+++++@++++++@++@++++++++@+@++++@++++@+@++++@+++++@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"@++++@+++@++++@++++++++@@++@+++++++@@++++@+++@++@++++@+++++@#.@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"@++++@+++@+++@+++++++++@@@@@@@+++++@@++++@+++@++@++++@+++++@#.@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"@++++@+++@++@+++++++++@++++@++++++@+@++++@+++@++@++++@+++++@++++++$$$$$+++++$$$+++$$$$$$$+$$$$$$$+$$$$$+$$$$$++++$$$+$$$+++",
+"+@@@@+@@@@@@@@@@@@@@@@+++++@++@@@@+++@@@@++++@+++@@@@++@@@@+++++++$$$$$++++$$$$$++$$$$$$$+$$$$$$$+$$$$$+$$$$$$$++$$$+$$$+++",
+"..................................................%&*=-;>,')++++++$$$$$$$+$$$$$$$+$$$$$$$+$$$$$$$+$$$$$+$$$$$$$++$$$+$$$+++",
+".+++++++++++++++++++++++++++++++++++++++++++++++..%&*=-;>,')++++++$$$+$$$+$$$$$$$+++$$$+++++$$$+++$$$+++$$$+$$$$+$$$+$$$+++",
+".+++.+++.++.+.....++..++++++....+...++....++..++..%&*=-;>,')++++++$$$+$$$+$$$+$$$+++$$$+++++$$$+++$$$+++$$$++$$$+$$$+$$$+++",
+".+++.+++.++.+++.+++.++.+++++.++++.++.+.++++.++.+..%&*=-;>,')++++++$$$+$$$+$$$+$$$+++$$$+++++$$$+++$$$+++$$$+$$$$+$$$+$$$+++",
+".++.+.++.++.+++.+++.++.+++++.++++.++.+.++++.++.+..%&*=-;>,')++++++$$$+$$$+$$$+$$$+++$$$+++++$$$+++$$$+++$$$+$$$++$$$+$$$+++",
+".++.+.++.++.+++.+++.++.+...+...++...++...++.++.+..%&*=-;>,')++++++$$$$$$$+$$$+$$$+++$$$+++++$$$+++$$$$++$$$$$$$++$$$+$$$+++",
+".+.....+.++.+++.+++.++.+++++.++++.++.+.++++..+.+..%&*=-;>,')++++++$$$$$$++$$$$$$$+++$$$+++++$$$+++$$$$++$$$$$++++$$$$$$$+++",
+".+.+++.+.++.+++.+++.++.+++++.++++.++.+.++++.+..+.!~{]^/(_:<[++++++$$$$$$$+$$$$$$$+++$$$+++++$$$+++$$$$++$$$$$+++++$$$$$++++",
+".+.+++.++..++++.++++..++++++.++++.++.+....++...+.!~{]^/(_:<[++++++$$$+$$$+$$$$$$$+++$$$+++++$$$+++$$$+++$$$$$$++++$$$$$++++",
+".+++++++++++++++++++++++++++++++++++++++++++++++.!~{]^/(_:<[++++++$$$+$$$+$$$+$$$+++$$$+++++$$$+++$$$+++$$$$$$+++++$$$+++++",
+".................................................!~{]^/(_:<[++++++$$$+$$$+$$$+$$$+++$$$+++++$$$+++$$$+++$$$$$$$++++$$$+++++",
+"#################################################!~{]^/(_:<[++++++$$$+$$$+$$$+$$$+++$$$+++++$$$+++$$$+++$$$+$$$++++$$$+++++",
+"#+++++++++++++++++++++++++++++++++++++++++++++++#!~{]^/(_:<[++++++$$$$$$$+$$$+$$$+++$$$+++++$$$+++$$$$$+$$$+$$$$+++$$$+++++",
+"#+++#+++#++#+#####++##++++++####+###++####++##++#!~{]^/(_:<[++++++$$$$$+++$$$+$$$+++$$$+++++$$$+++$$$$$+$$$++$$$+++$$$+++++",
+"#+++#+++#++#+++#+++#++#+++++#++++#++#+#++++#++#+#++++##+++++++++++$$$$$+++$$$+$$$+++$$$+++++$$$+++$$$$$+$$$++$$$+++$$$+++++",
+"#++#+#++#++#+++#+++#++#+++++#++++#++#+#++++#++#+#+++####+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"#++#+#++#++#+++#+++#++#+###+###++###++###++#++#+#++######++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"#+#####+#++#+++#+++#++#+++++#++++#++#+#++++##+#+#+########+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"#+#+++#+#++#+++#+++#++#+++++#++++#++#+#++++#+##+#++######++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"#+#+++#++##++++#++++##++++++#++++#++#+####++###+#+++####+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"#+++++++++++++++++++++++++++++++++++++++++++++++#++++##++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"#################################################++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+$$$+$$$++$++$++$+++++$$$++++$+++$$$+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"$++++$++$+$++$++$++++$+++$+++$+++$++$++####+++++++++++++++++++++  #######################################################  ",
+"$++++$++$+$++$++$++++$+++$++$+$++$++$+#++++#++@+++@+@++@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"$++++$$$++$++$++$++++$+++$++$+$++$++$+#++++#++@@+@@+@++@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"$++++$++++$++$++$++++$+++$+$$$$$+$++$+#++++#++@@@@@+@++@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"$++++$++++$++$++$++++$+++$+$+++$+$++$+#++++#++@+@+@+@@@@+@@@@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+$$$+$+++++$$+++$$$$++$$$++$+++$+$$$++#++++#++@+++@+@@@@++++@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+...+...++.++.++.+++++...++++.+++...++#++++#++@+++@+@++@+++@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+".++++.++.+.++.++.++++.+++.+++.+++.++.+#++++#++@+++@+@++@+++@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+".++++.++.+.++.++.++++.+++.++.+.++.++.+#++++#++@+++@+@++@++@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+".++++...++.++.++.++++.+++.++.+.++.++.++####+++@+++@+@++@+@@@@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+".++++.++++.++.++.++++.+++.+.....+.++.++++++++++++++++++++++++++++}+++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+".++++.++++.++.++.++++.+++.+.+++.+.++.++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"+...+.+++++..+++....++...++.+++.+...++++++++++++++++++++++++++++++++++@+++++++@++.+++++++.+++++++++++++++++++++++++++++++++",
+"#############################################                   ++++++@+++++++@++.+++++++.+++++++++++++++++++++++++++++++++",
+"#+++++++++++++++++++++++++++++++++++++++++++#                   ++++++@+++++++@++.+++++++.+++++++++++++++++++++++++++++++++",
+"#+++++++++++++++++++++++++++++++++++++++++++#                   ++++++@+++++++@++.+++++++.+++++++++++++++++++++++++++++++++",
+"#+++++++++++++++++++++++++++++++++++++++++++#                   ++++++@+++@+++@++.+++.+++.+++++++++++++++++++++++++++++++++",
+"#+++++++++++++++++++++++++++++++++++++++++++#                   ++++++@@+@@@+@@++..+...+..+++++++++++++++++++++++++++++++++",
+"#+++++++++++++++++++++++++++++++++++++++++++#                   +++++++@@+++@@++++..+++..++++++++++++++++++++++++++++++++++",
+"#+++++++++++++++++++++++++++++++++++++++++++#                   +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"#+++++++++++++++++++++++++++++++++++++++++++#                   +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
+"#############################################                                                                              "};
+
+
 
 /* XPM */
-char * wmlaptop_xpm_type0[] = {
+/*char * wmlaptop_xpm_type0[] = {
 "123 140 27 1",
 " 	c None",
 ".	c #FF0000",
@@ -190,7 +416,7 @@
 "#+++++++++++++++++++++++++++++++++++++++++++#                   +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
 "#############################################                                                                              "};
 
-
+*/
 
 
 /* XPM */
diff -Nru wmlaptop-1.4-orig/src/version.h wmlaptop-1.4/src/version.h
--- wmlaptop-1.4-orig/src/version.h	2008-04-18 21:55:54.497550614 +0300
+++ wmlaptop-1.4/src/version.h	2008-04-18 21:56:45.012548584 +0300
@@ -1,7 +1,7 @@
 #ifndef __VERSION_H__
 #define __VERSION_H__
 
-#define    BUILD_NR       256
+#define    BUILD_NR       495
 #define    PROGNAME       "WmLaptop"
 #define    VERSION        "1.4"
 
