diff --git a/lib/DBD/CSV.pm b/lib/DBD/CSV.pm
index b1fe6f7..d8c2ca0 100755
--- a/lib/DBD/CSV.pm
+++ b/lib/DBD/CSV.pm
@@ -105,20 +105,17 @@ sub set_versions
     return $this->SUPER::set_versions ();
     } # set_versions
 
-sub STORE
+sub init_valid_attributes
 {
-    my ($self, @attr) = @_;
-    @attr && $attr[0] eq "csv_tables" and $attr[0] = "f_meta";
-    $self->SUPER::STORE (@attr);
-    } # STORE
+    my $dbh = shift;
 
-sub FETCH
-{
-    my ($self, @attr) = @_;
-    use DP;
-    @attr && $attr[0] eq "csv_tables" and $attr[0] = "f_meta";
-    $self->SUPER::FETCH (@attr);
-    } # FETCH
+    # $dbh->{csv_valid_attrs} = {};
+    # $dbh->{csv_readonly_attrs} = {};
+
+    $dbh->{csv_meta} = "csv_tables";
+
+    return $dbh->SUPER::init_valid_attributes();
+    } # init_valid_attributes
 
 # --- STATEMENT ----------------------------------------------------------------
 
@@ -267,15 +264,15 @@ use Carp;
 
 @DBD::CSV::Table::ISA = qw(DBD::File::Table);
 
-sub bootstrap_table_meta
-{
-    my ($self, $dbh, $meta, $table) = @_;
-
-    my $fqfn;
-    exists $dbh->{f_meta}{$table} && ($fqfn = $dbh->{f_meta}{$table}{file}) and
-	$meta->{f_fqfn} = $fqfn;
-    $self->SUPER::bootstrap_table_meta ($dbh, $meta, $table);
-    } # bootstrap_table_meta
+#sub bootstrap_table_meta
+#{
+#    my ($self, $dbh, $meta, $table) = @_;
+#
+#    my $fqfn;
+#    exists $dbh->{f_meta}{$table} && ($fqfn = $dbh->{f_meta}{$table}{file}) and
+#	$meta->{f_fqfn} = $fqfn;
+#    $self->SUPER::bootstrap_table_meta ($dbh, $meta, $table);
+#    } # bootstrap_table_meta
 
 sub init_table_meta
 {
@@ -291,7 +288,7 @@ sub init_table_meta
 	foreach my $key (grep m/^csv_/ => keys %$dbh) {
 	    (my $attr = $key) =~ s/csv_//;
 	    $attr =~ m{^(?: eol | sep | quote | escape	# Handled below
-			  | tables | sql_parser_object	# Not for Text::CSV_XS
+			  | tables | meta		# Not for Text::CSV_XS
 			  | sponge_driver | version	# internal
 			  )$}x and next;
 	    $opts{$attr} = $dbh->{$key};
@@ -299,8 +296,8 @@ sub init_table_meta
 	delete $opts{null} and
 	    $opts{blank_is_undef} = $opts{always_quote} = 1;
 
-	my $class = $meta->{class} || $dbh->{csv_class} || "Text::CSV_XS";
-	my $eol   = $meta->{eol}   || $dbh->{csv_eol}   || "\r\n";
+	my $class = $meta->{csv_class} || $dbh->{csv_class} || "Text::CSV_XS";
+	my $eol   = $meta->{csv_eol}   || $dbh->{csv_eol}   || "\r\n";
 	$eol =~ m/^\A(?:[\r\n]|\r\n)\Z/ or $opts{eol} = $eol;
 	for ([ "sep",    ',' ],
 	     [ "quote",  '"' ],
@@ -322,6 +319,28 @@ sub init_table_meta
 	$meta->{csv_skip_first_row} = $dbh->{csv_skip_first_row};
     } # init_table_meta
 
+my %compat_map = (
+    file  => "f_file",
+    class => "csv_class",
+    eof   => "csv_eof",
+);
+
+sub get_table_meta_attr
+{
+    my ($class, $meta, $attrib) = @_;
+    defined $compat_map{$attrib} and
+        return $class->SUPER::get_table_meta_attr ($meta, $compat_map{$attrib});
+    return $class->SUPER::get_table_meta_attr ($meta, $attrib);
+    } # get_table_meta_attr
+
+sub set_table_meta_attr
+{
+    my ($class, $meta, $attrib, $value) = @_;
+    defined $compat_map{$attrib} and
+        return $class->SUPER::set_table_meta_attr ($meta, $compat_map{$attrib}, $value);
+    return $class->SUPER::set_table_meta_attr ($meta, $attrib, $value);
+    } # set_table_meta_attr
+
 $DBD::File::VERSION > 0.38 and *open_file = sub {
     my ($self, $meta, $attrs, $flags) = @_;
     $self->SUPER::open_file ($meta, $attrs, $flags);
