Index: branches/release-30/lib/MT/ObjectDriverFactory.pm
===================================================================
--- branches/release-30/lib/MT/ObjectDriverFactory.pm (revision 1174)
+++ branches/release-30/lib/MT/ObjectDriverFactory.pm (revision 1413)
@@ -60,5 +60,5 @@
     );
 
-    require Data::ObjectDriver::Driver::Cache::RAM;
+    require MT::ObjectDriver::Driver::Cache::RAM;
     require MT::Memcached;
 
@@ -66,5 +66,5 @@
     if (MT::Memcached->is_available) {
         require Data::ObjectDriver::Driver::Cache::Memcached;
-        $driver = Data::ObjectDriver::Driver::Cache::RAM->new(
+        $driver = MT::ObjectDriver::Driver::Cache::RAM->new(
             fallback => Data::ObjectDriver::Driver::Cache::Memcached->new(
                 cache => MT::Memcached->instance,
@@ -73,5 +73,5 @@
         );
     } else {
-        $driver = Data::ObjectDriver::Driver::Cache::RAM->new(
+        $driver = MT::ObjectDriver::Driver::Cache::RAM->new(
             fallback => $dbi_driver,
         );
Index: branches/release-30/lib/MT/ObjectDriver/Driver/Cache/RAM.pm
===================================================================
--- branches/release-30/lib/MT/ObjectDriver/Driver/Cache/RAM.pm (revision 1413)
+++ branches/release-30/lib/MT/ObjectDriver/Driver/Cache/RAM.pm (revision 1413)
@@ -0,0 +1,79 @@
+# $Id$
+
+package MT::ObjectDriver::Driver::Cache::RAM;
+
+use strict;
+use warnings;
+
+use base qw( Data::ObjectDriver::Driver::BaseCache );
+
+use constant MAX_CACHE_SIZE => 1000;
+
+my %Cache;
+
+sub init {
+    my $driver = shift;
+    my %param  = @_;
+    $param{cache} ||= 1; # hack
+    $driver->SUPER::init(%param);
+}
+
+sub get_from_cache {
+    my $driver = shift;
+
+    $driver->start_query('RAMCACHE_GET ?', \@_);
+    my $ret = $Cache{$_[0]};
+    $driver->end_query(undef);
+
+    return if !defined $ret;
+    return $ret;
+}
+
+sub add_to_cache {
+    my $driver = shift;
+
+    if (scalar keys %Cache > MAX_CACHE_SIZE) {
+        %Cache = ();
+    }
+
+    $driver->start_query('RAMCACHE_ADD ?', \@_);
+    my $ret = $Cache{$_[0]} = $_[1];
+    $driver->end_query(undef);
+
+    return if !defined $ret;
+    return $ret;
+}
+
+sub update_cache {
+    my $driver = shift;
+
+    $driver->start_query('RAMCACHE_SET ?', \@_);
+    my $ret = $Cache{$_[0]} = $_[1];
+    $driver->end_query(undef);
+
+    return if !defined $ret;
+    return $ret;
+}
+
+sub remove_from_cache {
+    my $driver = shift;
+
+    $driver->start_query('RAMCACHE_DELETE ?', \@_);
+    my $ret = delete $Cache{$_[0]};
+    $driver->end_query(undef);
+
+    return if !defined $ret;
+    return $ret;
+}
+
+sub clear_cache {
+    my $driver = shift;
+
+    $driver->start_query('RAMCACHE_CLEAR');
+    %Cache = ();
+    $driver->end_query(undef);
+
+    return;
+}
+
+1;
