diff --git a/exec/load/tdfonts_lib.js b/exec/load/tdfonts_lib.js
index 676baf2022e9e1979ff232994fbf936549789ed9..52fb826c6a53fbfc6f8e1c0876e976ead5ba038a 100755
--- a/exec/load/tdfonts_lib.js
+++ b/exec/load/tdfonts_lib.js
@@ -36,7 +36,7 @@ function loadfont(fn_arg) {
 
     // Construct font file path
     if (fn_arg.indexOf('/') === -1) {
-        if (fn_arg.indexOf('.') !== -1) {
+        if (file_getext(fn_arg)) {
             fn = file_getcase(FONT_DIR + fn_arg);
         } else {
             fn = file_getcase(FONT_DIR + fn_arg + "." + FONT_EXT);
@@ -339,17 +339,19 @@ function reset_color()
 	return "\x1b[0m";
 }
 
+function getlist() {
+	return directory(FONT_DIR + "*." + FONT_EXT); // Get all .tdf files
+}
+
 function output(str, font) {
 	var orgfont = font;
 	while (true) {
 		try {
 			if (!font) { // Random font file selection
-				var fontDir = FONT_DIR;
-				var files = directory(fontDir + "/*.tdf"); // Get all .tdf files
+				var files = getlist();
 				if (files.length > 0) {
 					var randomIndex = random((files.length)+1);
-					var filename = file_getname(files[randomIndex]);
-					font = filename.replace(/\.tdf$/i, "");
+					font = file_getname(files[randomIndex]);
 				}
 			}
 			if (typeof font == "string")
diff --git a/exec/tdfiglet.js b/exec/tdfiglet.js
index 579edb9fbc9f4ab9279156799b1761537e0af135..3b3e36108e75317efb26a78a415e2e7f765fd3f4 100644
--- a/exec/tdfiglet.js
+++ b/exec/tdfiglet.js
@@ -22,6 +22,8 @@ function usage() {
 	writeln("    -n        No blank line between wrapped output lines");
 	writeln("    -W        Always word-wrap the output");
 	writeln("    -i        Print font details");
+	writeln("    -l        Loop through the available fonts");
+	writeln("    -p        Pause between fonts");
 	writeln("    -r        Use random font and/or index (if not specified with -x)");
 	writeln("    -R        Use random font and auto-retry upon exception");
 	writeln("    -h        Print usage");
@@ -30,7 +32,8 @@ function usage() {
 }
 
 var fontfile = null;
-
+var loopfonts = false;
+var pause = false;
 var input_string = "";
 for(i = 0; i < argv.length; ++i) {
 	var arg = argv[i];
@@ -69,6 +72,10 @@ for(i = 0; i < argv.length; ++i) {
 		tdf.opt.utf8 = true;
 	} else if (arg === "-i") {
 		tdf.opt.info = true;
+	} else if (arg === "-l") {
+		loopfonts = true;
+	} else if (arg === "-p") {
+		pause = true;
 	} else if (arg === "-r") {
 		tdf.opt.random = true;
 	} else if (arg === "-R") {
@@ -85,10 +92,23 @@ for(i = 0; i < argv.length; ++i) {
 	}
 }
 
-if (!fontfile && !tdf.opt.random)
+if (!fontfile && !tdf.opt.random && !loopfonts)
 	usage();
 
 if (!input_string)
 	usage();
 
-tdf.printstr(input_string, fontfile);
+if (loopfonts) {
+	var list = tdf.getlist();
+	for (var i in list) {
+		if (pause && i > 0)
+			prompt("Hit enter");
+		try {
+			tdf.printstr(input_string, list[i]);
+		} catch(e) {
+			if (tdf.opt.info)
+				print("exception: " + e);
+		}
+	}
+} else
+	tdf.printstr(input_string, fontfile);