diff --git a/exec/load/cvslib.js b/exec/load/cvslib.js
index 2346853622acc59009f498340b736129d5369712..7aee8a273af356543c8452c3c117686ffd08fad8 100644
--- a/exec/load/cvslib.js
+++ b/exec/load/cvslib.js
@@ -10,13 +10,13 @@ CVS = new (function () {
 ////////////////////////////////// SETTINGS
 
 	/* connection defaults */
-	this.CVSHOME = argv[0];
 	this.CVSSERV = "cvs.synchro.net";
 	this.CVSROOT = "/cvsroot/sbbs";
 	this.CVSUSER = "anonymous";
 	this.CVSPASS = "";
 	this.CVSAUTH = "pserver";
 
+	/* Files which have been recieved via commands */
 	this.files={};
 
 	/* default accepted responses  */
@@ -60,6 +60,8 @@ CVS = new (function () {
 	
 	/* populated by response to valid-requests  */
 	this.validRequests = {
+		'valid-requests':		true,	// Better be.
+		'Valid-responses':		true,	// Better be.
 	};
 
 ////////////////////////////////// METHODS
@@ -159,6 +161,7 @@ CVS = new (function () {
 		this.protocol.Unchanged(file);
 		this.protocol.Argument(file);
 		this.protocol.update();
+		this.disconnect();
 		if(this.files[(dir.length?dir+'/':'')+file]) {
 			return this.files[(dir.length?dir+'/':'')+file].data;
 		}
@@ -324,6 +327,8 @@ CVS = new (function () {
 		//TODO ---> http://www.cvsnt.org/cvsclient/Requests.html
 	
 		rcmd:function(cmd, arg) {
+			if(!this.parent.validRequests[cmd])
+				throw(cmd+' command not supported by remote!');
 			this.parent.request(cmd+(arg?" "+arg:''));
 			var response=this.parent.response;
 			if(response != 'ok') {
@@ -361,71 +366,32 @@ CVS = new (function () {
 		'update-patches':function() { this.rcmd('update-patches'); },
 		'wrapper-sendme-rcsOptions':function() { this.rcmd('wrapper-sendme-rcsOptions'); },
 
+		cmd:function(cmd, arg1, arg2) {
+			if(!this.parent.validRequests[cmd])
+				throw(cmd+' command not supported by remote!');
+			this.parent.request(cmd+(arg1?" "+arg1:'')+(arg2?"\n"+arg2:''));
+		},
+
 		/* tell server what responses we can handle */
 		'Valid-responses':function() {
-			var str="Valid-responses";
+			var str="";
 			for(var r in this.parent.validResponses) {
 				if(this.parent.validResponses[r] == true)
 					str+=" "+r;
 			}
-			this.parent.request(str);
-		},
-		
-		/* specify CVSROOT on server */
-		'Root':function(pathname) {
-			this.parent.request("Root " + pathname);
-		},
-		
-		/* specify directory on server */
-		'Directory':function(dir,repository) {
-			this.parent.request("Directory " + dir + "\n" + repository);
-		},
-		
-		/* tell server local file revision */
-		'Entry':function(str) {
-			this.parent.request("Entry " + str);
-		},
-		
-		/* tell server that a file has not been modified since last update or checkout */
-		'Unchanged':function(filename) {
-			this.parent.request("Unchanged " + filename);
-		},
-		
-		/* send a pre-command-processing argument */
-		'Argument':function(str) {
-			this.parent.request("Argument " + str);
-		},
-
-		/* append a pre-command-processing argument */
-		'Argumentx':function(str) {
-			this.parent.request("Argumentx " + str);
-		},
-		
-		/* notify server that an edit/unedit command took place */
-		'Notify':function(filename) {
-			throw("Notify is not implemented!");
-			this.parent.request("Notify " + filename);
-			/*
-				notification-type \t time \t clienthost \t
-				working-dir \t watches \n
-			*/
-		},
-		
-		'Questionable':function(filename) {
-			this.parent.request("Questionable " + filename);
-		},
-		
-		'Case':function() {
-			this.parent.request("Case");
-		},
-		
-		'Utf8':function() {
-			this.parent.request("Utf8");
-		},
-		
-		'Global_option':function(option) {
-			this.parent.request("Global_option " + option);
+			this.cmd('Valid-responses', str);
 		},
+		Root:function(pathname) { this.cmd('Root', pathname); },
+		Directory:function(dir,repository) { this.cmd('Directory',dir,repository); },
+		Entry:function(str) { this.cmd("Entry", str); },
+		Unchanged:function(filename) { this.cmd("Unchanged", filename); },
+		Argument:function(str) { this.cmd("Argument", str); },
+		Argumentx:function(str) { this.cmd("Argumentx", str); },
+		Notify:function(filename) { throw("Notify is not implemented!"); },
+		Questionable:function(filename) { this.cmd("Questionable", filename); },
+		Case:function() { this.cmd("Case"); },
+		Utf8:function() { this.cmd("Utf8"); },
+		Global_option:function(option) { this.cmd("Global_option " + option); },
 	};
 	this.protocol.parent=this;