diff --git a/src/modules/SANE/sane.c b/src/modules/SANE/sane.c
index 96184f7222bf0f15cd34e58fefb421bbe126d413..490a6402ce6c46af6703cde46243cf68bb0271cc 100644
--- a/src/modules/SANE/sane.c
+++ b/src/modules/SANE/sane.c
@@ -351,7 +351,7 @@ static void assert_image_program()
     push_text( "Image.Image" );
     APPLY_MASTER( "resolv", 1 );
     image_program = program_from_svalue( sp - 1  );
-    pop_stack();
+    sp--;/* Do not free image program.. */
   }
 }
 
@@ -363,6 +363,8 @@ static void f_scanner_simple_scan( INT32 args )
   rgb_group *r;
 
 
+  assert_image_program();
+
   pop_n_elems( args );
   if( sane_start( THIS->h ) )   error("Start failed\n");
   if( sane_get_parameters( THIS->h, &p ) )  error("Get parameters failed\n");
@@ -525,6 +527,8 @@ void pike_module_exit()
 {
   if( sane_is_inited )
     sane_exit();
+  if( image_program )
+    free_program( image_program );
 }
 
 #else