***************
*** 75,91 ****
  bootstrap Fuse $VERSION;
  
  sub main {
- 	my (@subs) = (undef,undef,undef,undef,undef,undef,undef,undef,undef,undef,
- 	              undef,undef,undef,undef,undef,undef,undef,undef,undef,undef,
- 	              undef,undef,undef,undef,undef);
- 	my (@names) = qw(getattr readlink getdir mknod mkdir unlink rmdir symlink
  			 rename link chmod chown truncate utime open read write statfs
  			 flush release fsync setxattr getxattr listxattr removexattr);
- 	my (@validOpts) = qw(allow_other);
- 	my ($tmp) = 0;
- 	my (%mapping) = map { $_ => $tmp++ } (@names);
- 	my (%optmap) = map { $_ => 1 } (@validOpts);
- 	my (%otherargs) = (debug=>0, threaded=>0, mountpoint=>"", mountopts=>"");
  	while(my $name = shift) {
  		my ($subref) = shift;
  		if(exists($otherargs{$name})) {
--- 75,90 ----
  bootstrap Fuse $VERSION;
  
  sub main {
+ 	my @names = qw(getattr readlink getdir mknod mkdir unlink rmdir symlink
  			 rename link chmod chown truncate utime open read write statfs
  			 flush release fsync setxattr getxattr listxattr removexattr);
+ 	my @subs = map {undef} @names;
+ 	my @validOpts = qw(ro allow_other default_permissions fsname use_ino);
+ 	my $tmp = 0;
+ 	my %mapping = map { $_ => $tmp++ } @names;
+ 	my %optmap  = map { $_ => 1 } @validOpts;
+ 	my @otherargs = qw(debug threaded mountpoint mountopts);
+ 	my %otherargs = (debug=>0, threaded=>0, mountpoint=>"", mountopts=>"");
  	while(my $name = shift) {
  		my ($subref) = shift;
  		if(exists($otherargs{$name})) {
***************
*** 96,105 ****
  			$subs[$mapping{$name}] = $subref;
  		}
  	}
- 	foreach my $opt ( split(/,/,$otherargs{mountopts}) ) {
- 		if ( ! exists($optmap{$opt}) ) {
- 			croak "Use of an invalid mountopt argument";
- 		}
  	}
  	if($otherargs{threaded}) {
  		# make sure threads are both available, and loaded.
--- 95,103 ----
  			$subs[$mapping{$name}] = $subref;
  		}
  	}
+ 	foreach my $opt ( map {m/^([^=]*)/; $1} split(/,/,$otherargs{mountopts}) ) {
+ 	  next if exists($optmap{$opt});
+ 	  croak "Fuse::main: invalid '$opt' argument in mountopts";
  	}
  	if($otherargs{threaded}) {
  		# make sure threads are both available, and loaded.
***************
*** 120,126 ****
  			$otherargs{threaded} = 0;
  		}
  	}
-  	perl_fuse_main($otherargs{debug},$otherargs{threaded},$otherargs{mountpoint},$otherargs{mountopts},@subs);
  }
  
  # Autoload methods go after =cut, and are processed by the autosplit program.
--- 118,124 ----
  			$otherargs{threaded} = 0;
  		}
  	}
+ 	perl_fuse_main(@otherargs{@otherargs},@subs);
  }
  
  # Autoload methods go after =cut, and are processed by the autosplit program.
