Re-read clock tree on "refresh"
diff --git a/clocks.c b/clocks.c
index 81da6c3..b6f1162 100644
--- a/clocks.c
+++ b/clocks.c
@@ -102,16 +102,23 @@
 int read_and_print_clock_info(int verbose, int hrow, int selected)
 {
 	print_one_clock(0, "Reading Clock Tree ...", 1, 1);
-	if (!old_clock_line_no)
+
+	if (!old_clock_line_no || selected == REFRESH_WINDOW) {
+		destroy_clocks_info();
 		read_clock_info(clk_dir_path);
+	}
 
 	if (!clocks_info->num_children) {
 		fprintf(stderr, "powerdebug: No clocks found. Exiting..\n");
 		exit(1);
 	}
 
+	if (selected == CLOCK_SELECTED)
+		selected = 1;
+	else
+		selected = 0;
+
 	print_clock_info(verbose, hrow, selected);
-	//destroy_clocks_info();
 	hrow = (hrow < old_clock_line_no) ? hrow : old_clock_line_no - 1;
 
 	return hrow;
@@ -221,6 +228,9 @@
 {
 	int i;
 
+	if (!clocks_info)
+		return;
+
 	if (clocks_info->num_children) {
 		for (i = (clocks_info->num_children - 1); i >= 0 ; i--) {
 			destroy_clocks_info_recur(clocks_info->children[i]);
@@ -230,6 +240,7 @@
 			}
 		}
 	}
+	clocks_info->num_children = 0;
 	free(clocks_info);
 	clocks_info = NULL;
 }
diff --git a/powerdebug.c b/powerdebug.c
index 5ebb01e..3be47e1 100644
--- a/powerdebug.c
+++ b/powerdebug.c
@@ -54,7 +54,7 @@
 {
 	int c, i;
 	int firsttime[TOTAL_FEATURE_WINS];
-	int enter_hit = 0, verbose = 0, findparent_ncurses = 0;
+	int enter_hit = 0, verbose = 0, findparent_ncurses = 0, refreshwin = 0;
 	int regulators = 0, sensors = 0, clocks = 0, findparent = 0;
 	char clkarg[64], clkname_str[64];
 
@@ -64,8 +64,8 @@
 	/*
 	 * Options:
 	 * -r, --regulator      : regulator
-	 * -s, --sensor	 : sensors
-	 * -c, --clock	  : clocks
+	 * -s, --sensor	 	: sensors
+	 * -c, --clock	  	: clocks
 	 * -p, --findparents    : clockname whose parents have to be found
 	 * -t, --time		: ticktime
 	 * -d, --dump		: dump
@@ -135,11 +135,18 @@
 			break;
 		}
 	}
-
+/*
 	if (!dump && (regulators || clocks || sensors)) {
 		fprintf(stderr, "Option supported only in dump mode (-d)\n");
 		usage(argv);
 	}
+*/
+
+	if (dump && !(regulators || clocks || sensors)) {
+		fprintf(stderr, "Dump mode (-d) supported only with -c, -r "
+				"or -s ..\n");
+		usage(argv);
+	}
 
 	if (findparent && (!clocks || !dump)) {
 		fprintf(stderr, "-p option passed without -c and -d."
@@ -147,7 +154,7 @@
 		usage(argv);
 	}
 
-	if (!dump)
+	if (!dump && selectedwindow == -1)
 		selectedwindow = REGULATOR;
 
 	init_regulator_ds();
@@ -188,10 +195,16 @@
 
 				create_selectedwindow();
 				if (!findparent_ncurses) {
+					int command = 0;
+
+					if (enter_hit)
+						command = CLOCK_SELECTED;
+					if (refreshwin)
+						command = REFRESH_WINDOW;
 					hrow = read_and_print_clock_info(
 								verbose,
 								highlighted_row,
-								enter_hit);
+								command);
 					highlighted_row = hrow;
 					enter_hit = 0;
 				} else
@@ -293,8 +306,11 @@
 
 			if (keychar == 'Q' && !findparent_ncurses)
 				exit(0);
-			if (keychar == 'R')
+			if (keychar == 'R') {
+				refreshwin = 1;
 				ticktime = 3;
+			} else
+				refreshwin = 0;
 		}
 	}
 	exit(0);
diff --git a/powerdebug.h b/powerdebug.h
index e2f7d65..bbd90fd 100644
--- a/powerdebug.h
+++ b/powerdebug.h
@@ -27,6 +27,7 @@
 
 #define TOTAL_FEATURE_WINS 3  /* Regulator, Clock and Sensor (for now) */
 enum {REGULATOR, CLOCK, SENSOR};
+enum {CLOCK_SELECTED = 1, REFRESH_WINDOW};
 
 extern struct regulator_info *regulators_info;