diff --git a/sql/database-create.sql b/sql/database-create.sql
index 5d96bdf6a2ba1d48822904f70882b7c3ab41d108..82a8fc6b05f53a7b0c19e83d7688675a6ea0404a 100644
--- a/sql/database-create.sql
+++ b/sql/database-create.sql
@@ -2112,6 +2112,34 @@ CREATE TABLE `last_reservation` (
   UNIQUE KEY `pid` (`node_id`,`pid`)
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
+---
+--- Table structure for table `lease_attributes`
+---
+
+DROP TABLE IF EXISTS `lease_attributes`;
+CREATE TABLE `lease_attributes` (
+  `lease_idx` int(10) unsigned NOT NULL default '0',
+  `attrkey` varchar(32) NOT NULL default '',
+  `attrval` tinytext NOT NULL,
+  `attrtype` enum('integer','float','boolean','string') default 'string',
+  PRIMARY KEY (`lease_idx`,`attrkey`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+---
+--- Table structure for table `lease_attributes`
+---
+
+DROP TABLE IF EXISTS `lease_permissions`;
+CREATE TABLE `lease_permissions` (
+  `lease_idx` int(10) unsigned NOT NULL default '0',
+  `lease_id` varchar(32) NOT NULL default '',
+  `permission_type` enum('user','group') NOT NULL default 'user',
+  `permission_id` varchar(128) NOT NULL default '',
+  `permission_idx` mediumint(8) unsigned NOT NULL default '0',
+  `allow_modify` tinyint(1) NOT NULL default '0',
+  PRIMARY KEY (`lease_idx`,`permission_type`,`permission_idx`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
 --
 -- Table structure for table `linkdelays`
 --
@@ -3506,6 +3534,45 @@ CREATE TABLE `proj_memb` (
   PRIMARY KEY  (`uid`,`pid`)
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
+--
+-- Table structure for table `project_leases`
+--
+
+DROP TABLE IF EXISTS `project_leases`;
+CREATE TABLE `project_leases` (
+  `lease_idx` int(10) unsigned NOT NULL default '0',
+  `lease_id` varchar(32) NOT NULL default '',
+  `owner_uid` varchar(8) NOT NULL default '',
+  `pid` varchar(48) NOT NULL default '',
+  `type` enum('stdataset','ltdataset','unknown') NOT NULL default 'unknown',
+  `inception` timestamp NOT NULL default CURRENT_TIMESTAMP,
+  `lease_end` timestamp NOT NULL default '2037-01-19 03:14:07',
+  `last_used` timestamp NOT NULL default '0000-00-00 00:00:00',
+  `state` enum('valid','unapproved','grace','locked','expired') NOT NULL default 'unapproved',
+  `statestamp` timestamp NOT NULL default '0000-00-00 00:00:00',
+  `locked` datetime default NULL, 
+  `locker_pid` int(11) default '0',
+  PRIMARY KEY (`lease_idx`),
+  UNIQUE KEY `plid` (`pid`,`lease_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
+--
+-- Table structure for table `project_quotas`
+--
+
+DROP TABLE IF EXISTS `project_quotas`;
+CREATE TABLE `project_quotas` (
+  `quota_idx` int(10) unsigned NOT NULL,
+  `quota_id` varchar(32) NOT NULL default '',
+  `pid` varchar(48) NOT NULL default '',
+  `type` enum('ltdataset','unknown') NOT NULL default 'unknown',
+  `size` int(10) unsigned NOT NULL default '0',
+  `last_update` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+  `notes` tinytext,
+  PRIMARY KEY (`quota_idx`),
+  UNIQUE KEY `qpid` (`pid`,`quota_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+
 --
 -- Table structure for table `project_stats`
 --
diff --git a/sql/updates/4/365 b/sql/updates/4/365
new file mode 100644
index 0000000000000000000000000000000000000000..578d30dadc29e4b3c68d1813429ca4ec48d2e1f3
--- /dev/null
+++ b/sql/updates/4/365
@@ -0,0 +1,83 @@
+#
+# Add tables for leases and quotas.
+#
+use strict;
+use libdb;
+
+sub DoUpdate($$$)
+{
+    my ($dbhandle, $dbname, $version) = @_;
+
+    if(!DBTableExists("project_quotas")) {
+	DBQueryFatal("CREATE TABLE `project_quotas` ( ".
+	    " `quota_idx` int(10) unsigned NOT NULL, ".
+	    " `quota_id` varchar(32) NOT NULL default '', ".
+	    " `pid` varchar(48) NOT NULL default '', ".
+	    " `type` enum ('ltdataset','unknown') NOT NULL default 'unknown', ".
+	    " `size` int(10) unsigned NOT NULL default '0', ".
+	    " `last_update` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, ".
+	    " `notes` tinytext,".
+	    "  PRIMARY KEY (`quota_idx`), ".
+	    "  UNIQUE KEY `qpid` (`pid`,`quota_id`) ".
+	    ") ENGINE=MyISAM DEFAULT CHARSET=latin1");
+    }
+
+    if(!DBTableExists("project_leases")) {
+	DBQueryFatal("CREATE TABLE `project_leases` ( ".
+	    " `lease_idx` int(10) unsigned NOT NULL default '0', ".
+	    " `lease_id` varchar(32) NOT NULL default '', ".
+	    " `owner_uid` varchar(8) NOT NULL default '', ".
+	    " `pid` varchar(48) NOT NULL default '', ".
+	    " `type` enum ('stdataset','ltdataset','unknown') NOT NULL default 'unknown', ".
+	    " `inception` timestamp NOT NULL default CURRENT_TIMESTAMP, ".
+	    " `lease_end` timestamp NOT NULL default '2037-01-19 03:14:07', ".
+	    " `last_used` timestamp NOT NULL default '0000-00-00 00:00:00', ".
+	    " `state` enum ('valid','unapproved','grace','locked','expired') NOT NULL default 'unapproved', ".
+	    " `statestamp` timestamp NOT NULL default '0000-00-00 00:00:00', ".
+	    " `locked` datetime default NULL, ".
+	    " `locker_pid` int(11) default '0', ".
+	    "  PRIMARY KEY (`lease_idx`), ".
+	    "  UNIQUE KEY `plid` (`pid`,`lease_id`) ".
+	    ") ENGINE=MyISAM DEFAULT CHARSET=latin1");
+    }
+
+    if(!DBTableExists("lease_attributes")) {
+	DBQueryFatal("CREATE TABLE `lease_attributes` ( ".
+	    " `lease_idx` int(10) unsigned NOT NULL default '0', ".
+	    " `attrkey` varchar(32) NOT NULL default '', ".
+	    " `attrval` tinytext NOT NULL, ".
+	    " `attrtype` enum ('integer','float','boolean','string') default 'string', ".
+	    "  PRIMARY KEY (`lease_idx`,`attrkey`) ".
+	    ") ENGINE=MyISAM DEFAULT CHARSET=latin1");
+    }
+
+    if(!DBTableExists("lease_permissions")) {
+	DBQueryFatal("CREATE TABLE `lease_permissions` ( ".
+	    " `lease_idx` int(10) unsigned NOT NULL default '0', ".
+	    " `lease_id` varchar(32) NOT NULL default '', ".
+	    " `permission_type` enum ('user','group') NOT NULL default 'user', ".
+	    " `permission_id` varchar(128) NOT NULL default '', ".
+	    " `permission_idx` mediumint(8) unsigned NOT NULL default '0', ".
+	    " `allow_modify` tinyint(1) NOT NULL default '0', ".
+	    "  PRIMARY KEY (`lease_idx`,`permission_type`,`permission_idx`) ".
+	    ") ENGINE=MyISAM DEFAULT CHARSET=latin1");
+    }
+
+    DBQueryFatal("REPLACE INTO table_regex VALUES ".
+		 "('project_leases','lease_id','text','redirect',".
+		 "'virt_nodes:vname',1,32,NULL)");
+
+    DBQueryFatal("REPLACE INTO table_regex VALUES ".
+		 "('project_quotas','quota_id','text','regex',".
+		 "'^[-_\\\\w\\\\.:+]+\$',1,128,NULL)");
+
+    DBQueryFatal("REPLACE INTO table_regex VALUES ".
+		 "('project_quotas','notes','text','redirect',".
+		 "'default:tinytext',0,256,NULL)");
+
+    return 0;
+}
+
+# Local Variables:
+# mode:perl
+# End: