diff --git a/src/encode.c b/src/encode.c
index 3d69cecf30dea11a8b52fc87536085e9fea014ad..87e03cb9eff9fa11b85cdd0fc42e90a78a392611 100644
--- a/src/encode.c
+++ b/src/encode.c
@@ -21,8 +21,9 @@
 #include "fsort.h"
 #include "threads.h"
 #include "stuff.h"
+#include "version.h"
 
-RCSID("$Id: encode.c,v 1.22 1998/05/01 16:20:27 grubba Exp $");
+RCSID("$Id: encode.c,v 1.23 1998/05/16 08:23:44 hubbe Exp $");
 
 #ifdef _AIX
 #include <net/nh.h>
@@ -404,6 +405,9 @@ static void encode_value2(struct svalue *val, struct encode_data *data)
 	if(p->init || p->exit || p->gc_marked || p->gc_check ||
 	   (p->flags & PROGRAM_HAS_C_METHODS))
 	  error("Cannot encode C programs.\n");
+	f_version(0);
+	encode_value2(sp-1,data);
+	pop_stack();
 	code_entry(val->type, 1,data);
 	code_number(p->flags,data);
 	code_number(p->storage_needed,data);
@@ -911,6 +915,12 @@ static void decode_value2(struct decode_data *data)
 	  data->counter.u.integer++;
 	  p->refs--;
 	  
+	  decode_value2(data);
+	  f_version(0);
+	  if(!is_eq(sp-1,sp-2))
+	    error("Cannot decode programs encoded with other driver version.\n");
+	  pop_n_elems(2);
+
 	  decode_number(p->flags,data);
 	  p->flags &= ~(PROGRAM_FINISHED | PROGRAM_OPTIMIZED);
 	  decode_number(p->storage_needed,data);