Thanks for your reply Alexis. I didn't know that you started from the version in #16 - this makes things clearer. I understand about Schema - I wrote a schema in #32 above (before I discovered, and extended, Schema module). Here's some more specific comments: -- Table structure for table 'lm_paypal_ipns' -- Table structure for table 'lm_paypal_ipns' CREATE TABLE lm_paypal_ipns ( CREATE TABLE lm_paypal_ipns ( id mediumint(9) NOT NULL auto_increment, | id int(11) NOT NULL auto_increment, # let's use serial/unsigned/notnull like {node}.nid `timestamp` int(11) unsigned NOT NULL, | `timestamp` int(10) unsigned NOT NULL, # let's use int/notnull like {node}.created txn_id varchar(20) NOT NULL default '', txn_id varchar(20) NOT NULL default '', processed int(1) default '0', | processed tinyint(4) default '0', test_ipn int(1) default NULL, | test_ipn tinyint(4) default NULL, verify_sign varchar(120) default NULL, verify_sign varchar(120) default NULL, parent_txn_id varchar(20) default NULL, parent_txn_id varchar(20) default NULL, payment_date varchar(28) default NULL, | payment_date varchar(20) default NULL, # BUG! needs to be length 28: 'HH:MM:SS DD Mmm YY, YYYY PST' payment_status varchar(20) default NULL, payment_status varchar(20) default NULL, payment_type varchar(20) default NULL, payment_type varchar(20) default NULL, pending_reason varchar(20) default NULL, pending_reason varchar(20) default NULL, reason_code varchar(20) default NULL, reason_code varchar(20) default NULL, payer_email varchar(127) default NULL, payer_email varchar(127) default NULL, first_name varchar(64) default NULL, first_name varchar(64) default NULL, last_name varchar(64) default NULL, last_name varchar(64) default NULL, payer_business_name varchar(127) default NULL, payer_business_name varchar(127) default NULL, address_name varchar(128) default NULL, address_name varchar(128) default NULL, address_street varchar(200) default NULL, address_street varchar(200) default NULL, address_city varchar(40) default NULL, address_city varchar(40) default NULL, address_zip varchar(20) default NULL, address_zip varchar(20) default NULL, address_country varchar(64) default NULL, address_country varchar(64) default NULL, address_country_code varchar(2) default NULL, address_country_code varchar(2) default NULL, address_state varchar(40) default NULL, address_state varchar(40) default NULL, address_status int(1) default NULL, | address_status tinyint(4) default NULL, payer_id varchar(13) default NULL, payer_id varchar(13) default NULL, payer_status varchar(40) default NULL, payer_status varchar(40) default NULL, residence_country varchar(2) default NULL, residence_country varchar(2) default NULL, business varchar(127) default NULL, business varchar(127) default NULL, item_name varchar(127) default NULL, item_name varchar(127) default NULL, quantity int(10) unsigned NOT NULL default '0', quantity int(10) unsigned NOT NULL default '0', shipping decimal(10,2) default NULL, shipping decimal(10,2) default NULL, item_number varchar(127) default NULL, item_number varchar(127) default NULL, receiver_email varchar(127) default NULL, receiver_email varchar(127) default NULL, receiver_id varchar(13) default NULL, receiver_id varchar(13) default NULL, custom varchar(255) default NULL, custom varchar(255) default NULL, invoice varchar(127) default NULL, invoice varchar(127) default NULL, memo varchar(255) default NULL, memo varchar(255) default NULL, option_name1 varchar(64) default NULL, option_name1 varchar(64) default NULL, option_name2 varchar(64) default NULL, option_name2 varchar(64) default NULL, option_selection1 varchar(200) default NULL, option_selection1 varchar(200) default NULL, option_selection2 varchar(200) default NULL, option_selection2 varchar(200) default NULL, tax varchar(20) default NULL, tax varchar(20) default NULL, mc_currency varchar(3) default NULL, mc_currency varchar(3) default NULL, payment_fee decimal(10,2) default NULL, payment_fee decimal(10,2) default NULL, payment_gross decimal(10,2) default NULL, payment_gross decimal(10,2) default NULL, mc_fee decimal(10,2) default NULL, mc_fee decimal(10,2) default NULL, mc_gross decimal(10,2) default NULL, mc_gross decimal(10,2) default NULL, settle_amount decimal(10,2) default NULL, settle_amount decimal(10,2) default NULL, settle_currency varchar(3) default NULL, settle_currency varchar(3) default NULL, exchange_rate decimal(12,6) default NULL, exchange_rate decimal(12,6) default NULL, txn_type varchar(20) default NULL, txn_type varchar(20) default NULL, subscr_date varchar(28) default NULL, subscr_date varchar(28) default NULL, subscr_effective varchar(28) default NULL, subscr_effective varchar(28) default NULL, period1 varchar(20) default NULL, period1 varchar(20) default NULL, period2 varchar(20) default NULL, period2 varchar(20) default NULL, period3 varchar(20) default NULL, period3 varchar(20) default NULL, amount1 decimal(10,2) default NULL, amount1 decimal(10,2) default NULL, amount2 decimal(10,2) default NULL, amount2 decimal(10,2) default NULL, amount3 decimal(10,2) default NULL, amount3 decimal(10,2) default NULL, mc_amount1 decimal(10,2) default NULL, mc_amount1 decimal(10,2) default NULL, mc_amount2 decimal(10,2) default NULL, mc_amount2 decimal(10,2) default NULL, mc_amount3 decimal(10,2) default NULL, mc_amount3 decimal(10,2) default NULL, recurring int(1) default NULL, | recurring tinyint(4) default NULL, reattempt int(1) default NULL, | reattempt tinyint(4) default NULL, retry_at varchar(28) default NULL, retry_at varchar(28) default NULL, recur_times int(11) default NULL, recur_times int(11) default NULL, subscr_id varchar(20) default NULL, subscr_id varchar(20) default NULL, PRIMARY KEY (id), PRIMARY KEY (id), KEY txn_id (txn_id) KEY txn_id (txn_id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -------------------------------------------------------- -- -- -- Table structure for table 'lm_paypal_subscribers' -- Table structure for table 'lm_paypal_subscribers' -- -- CREATE TABLE lm_paypal_subscribers ( CREATE TABLE lm_paypal_subscribers ( usid int(10) unsigned NOT NULL auto_increment, | usid bigint(20) NOT NULL auto_increment, # just int is enough kind int(10) unsigned NOT NULL default '0', kind int(10) unsigned NOT NULL default '0', uid int(10) unsigned NOT NULL, | uid bigint(20) unsigned NOT NULL, # let's use int/notnull like nid int(10) unsigned NOT NULL default '0', | nid bigint(20) unsigned NOT NULL default '0', # let's use subid mediumint(8) unsigned NOT NULL, | subid int(10) unsigned NOT NULL, started int(11) unsigned NOT NULL default '0', | started bigint(20) NOT NULL default '0', # let's use int/notnull like {node}.created `status` int(4) unsigned NOT NULL, | `status` int(11) NOT NULL, subscr_id varchar(20) default NULL, subscr_id varchar(20) default NULL, email_sent int(1) unsigned NOT NULL default '0', | email_sent tinyint(3) unsigned NOT NULL default '0', # {node} uses int/notnull for booleans. hmmm.... PRIMARY KEY (usid), PRIMARY KEY (usid), KEY uid (uid), KEY uid (uid), KEY subscr_id (subscr_id) KEY subscr_id (subscr_id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -------------------------------------------------------- -- -- -- Table structure for table 'lm_paypal_subscriptions' -- Table structure for table 'lm_paypal_subscriptions' -- -- CREATE TABLE lm_paypal_subscriptions ( CREATE TABLE lm_paypal_subscriptions ( subid mediumint(8) unsigned NOT NULL auto_increment, | subid bigint(20) NOT NULL auto_increment, # just int is enough kind int(10) unsigned NOT NULL default '0', | kind int(10) unsigned default '0', # missing notnull rid int(10) unsigned NOT NULL, | rid bigint(20) unsigned default NULL, # ?? item_name varchar(127) NOT NULL default '', | item_name varchar(127) default '', # missing notnull description varchar(200) default '', | description text, a1 decimal(10,2) default NULL, a1 decimal(10,2) default NULL, p1 mediumint(8) unsigned default NULL, | p1 int(10) unsigned default NULL, t1 char(1) default NULL, t1 char(1) default NULL, a2 decimal(10,2) default NULL, a2 decimal(10,2) default NULL, p2 mediumint(8) unsigned default NULL, | p2 int(10) unsigned default NULL, t2 char(1) default NULL, t2 char(1) default NULL, a3 decimal(10,2) default NULL, a3 decimal(10,2) default NULL, p3 mediumint(8) unsigned default NULL, | p3 int(10) unsigned default NULL, t3 char(1) default NULL, t3 char(1) default NULL, src int(1) default NULL, | src smallint(6) default NULL, srt mediumint(8) unsigned default NULL, | srt int(10) unsigned default NULL, currency_code varchar(3) default NULL, | currency_code varchar(4) default NULL, # length should be 3? `status` int(4) NOT NULL, | `status` int(11) default NULL, return_url varchar(200) default '', return_url varchar(200) default '', uid_admin int(10) unsigned NOT NULL, | uid_admin bigint(20) NOT NULL, send_admin_onsub int(1) unsigned NOT NULL default '0', | send_admin_onsub smallint(6) NOT NULL default '0', send_admin_onend int(1) unsigned NOT NULL default '0', | send_admin_onend smallint(6) NOT NULL default '0', send_user_onsub int(1) unsigned NOT NULL default '0', | send_user_onsub smallint(6) NOT NULL default '0', send_user_onsub_subject varchar(80) default '', send_user_onsub_subject varchar(80) default '', send_user_onsub_body text, send_user_onsub_body text, nearend_days int(10) unsigned NOT NULL default '0', nearend_days int(10) unsigned NOT NULL default '0', send_user_onnearend int(1) unsigned NOT NULL default '0', | send_user_onnearend smallint(6) NOT NULL default '0', send_user_onnearend_subject varchar(80) default '', send_user_onnearend_subject varchar(80) default '', send_user_onnearend_body text, send_user_onnearend_body text, send_user_onend int(1) unsigned NOT NULL default '0', | send_user_onend smallint(6) NOT NULL default '0', send_user_onend_subject varchar(80) default '', send_user_onend_subject varchar(80) default '', send_user_onend_body text, send_user_onend_body text, terms text, terms text, PRIMARY KEY (subid) PRIMARY KEY (subid) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; | ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;