package_dirs = [
     'sfa', 
     'sfa/trust',
+    'sfa/storage',
     'sfa/util', 
     'sfa/client',
     'sfa/server',
 
 from types import StringTypes, ListType
 from optparse import OptionParser
 
+from sfa.util.sfalogging import logger
+
 from sfa.trust.certificate import Certificate
 from sfa.trust.credential import Credential
 from sfa.trust.gid import GID
-from sfa.util.record import SfaRecord
-from sfa.util.sfalogging import logger
+
+from sfa.storage.record import SfaRecord
 
 def determine_sfa_filekind(fn):
 
 
 from sfa.util.config import Config
 from sfa.util.version import version_core
 from sfa.util.cache import Cache
-from sfa.util.record import SfaRecord, UserRecord, SliceRecord, NodeRecord, AuthorityRecord
+
+from sfa.storage.record import SfaRecord, UserRecord, SliceRecord, NodeRecord, AuthorityRecord
 
 from sfa.rspecs.rspec import RSpec
 from sfa.rspecs.rspec_converter import RSpecConverter
 from sfa.rspecs.version_manager import VersionManager
-from sfa.client.return_value import ReturnValue
 
 import sfa.client.xmlrpcprotocol as xmlrpcprotocol
+from sfa.client.return_value import ReturnValue
 from sfa.client.client_helper import pg_users_arg, sfa_users_arg
 
 AGGREGATE_PORT=12346
 
 import getopt
 import sys
 
-from sfa.util.table import SfaTable
 from sfa.util.xrn import get_leaf, get_authority
 from sfa.util.plxrn import hostname_to_hrn, slicename_to_hrn, email_to_hrn, hrn_to_pl_slicename
 from sfa.util.config import Config
 from sfa.util.xrn import Xrn
 
+from sfa.storage.table import SfaTable
+
 from sfa.importer.sfaImport import sfaImport
 
 def process_options():
 
 import os
 from optparse import OptionParser
 
-from sfa.util.table import SfaTable
 from sfa.util.sfalogging import logger
 
+from sfa.storage.table import SfaTable
+
 def main():
    usage="%prog: trash the registry DB (the 'sfa' table in the 'planetlab5' database)"
    parser = OptionParser(usage=usage)
 
 ##
 
 from sfa.util.sfalogging import _SfaLogger
-
-from sfa.util.record import SfaRecord
-from sfa.util.table import SfaTable
 from sfa.util.xrn import get_authority, hrn_to_urn
 from sfa.util.plxrn import email_to_hrn
 from sfa.util.config import Config
+
 from sfa.trust.certificate import convert_public_key, Keypair
 from sfa.trust.trustedroots import TrustedRoots
 from sfa.trust.hierarchy import Hierarchy
 from sfa.trust.gid import create_uuid
 
+from sfa.storage.record import SfaRecord
+from sfa.storage.table import SfaTable
+
 
 def _un_unicode(str):
    if isinstance(str, unicode):
 
 from sfa.util.faults import RecordNotFound, AccountNotEnabled, PermissionError, MissingAuthority, \
     UnknownSfaType, ExistingRecord, NonExistingRecord
 from sfa.util.prefixTree import prefixTree
-from sfa.util.record import SfaRecord
-from sfa.util.table import SfaTable
 from sfa.util.xrn import Xrn, get_authority, hrn_to_urn, urn_to_hrn
 from sfa.util.plxrn import hrn_to_pl_login_base
 from sfa.util.version import version_core
 from sfa.trust.certificate import Certificate, Keypair, convert_public_key
 from sfa.trust.gid import create_uuid
 
+from sfa.storage.record import SfaRecord
+from sfa.storage.table import SfaTable
+
 class RegistryManager:
 
     def __init__ (self): pass
 
 
 from sfa.util.xrn import urn_to_hrn
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
+
+from sfa.storage.parameter import Parameter, Mixed
 from sfa.trust.credential import Credential
 
 class CreateGid(Method):
 
 from sfa.util.faults import SfaInvalidArgument
 from sfa.util.xrn import urn_to_hrn
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
 from sfa.util.sfatablesRuntime import run_sfatables
+
 from sfa.trust.credential import Credential
+
+from sfa.storage.parameter import Parameter, Mixed
+
 from sfa.rspecs.rspec import RSpec
 
 class CreateSliver(Method):
 
 from sfa.util.xrn import urn_to_hrn
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
+from sfa.storage.parameter import Parameter, Mixed
 from sfa.trust.auth import Auth
 from sfa.trust.credential import Credential
 
 
 from sfa.util.xrn import urn_to_hrn
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
+
 from sfa.trust.credential import Credential
 
+from sfa.storage.parameter import Parameter, Mixed
+
 class GetCredential(Method):
     """
     Retrive a credential for an object
 
 from sfa.util.faults import RecordNotFound
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
+
 from sfa.trust.credential import Credential
 
+from sfa.storage.parameter import Parameter, Mixed
+
 class GetGids(Method):
     """
     Get a list of record information (hrn, gid and type) for 
 
 from sfa.util.faults import RecordNotFound, ConnectionKeyGIDMismatch
 from sfa.util.xrn import urn_to_hrn
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
-from sfa.util.record import SfaRecord
+
 from sfa.trust.certificate import Certificate
 
+from sfa.storage.parameter import Parameter, Mixed
+from sfa.storage.record import SfaRecord
+
 class GetSelfCredential(Method):
     """
     Retrive a credential for an object
 
 from sfa.util.xrn import urn_to_hrn
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
 from sfa.util.sfatablesRuntime import run_sfatables
 
 from sfa.trust.credential import Credential
 
+from sfa.storage.parameter import Parameter, Mixed
+
 class GetTicket(Method):
     """
     Retrieve a ticket. This operation is currently implemented on PLC
 
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter
+
+from sfa.storage.parameter import Parameter
 
 
 class GetVersion(Method):
 
 
 from sfa.util.xrn import urn_to_hrn
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
-from sfa.util.record import SfaRecord
+
 from sfa.trust.credential import Credential
 
+from sfa.storage.parameter import Parameter, Mixed
+from sfa.storage.record import SfaRecord
+
 class List(Method):
     """
     List the records in an authority. 
 
 
 from sfa.util.xrn import urn_to_hrn
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
-from sfa.trust.credential import Credential
 from sfa.util.sfatablesRuntime import run_sfatables
 
+from sfa.trust.credential import Credential
+
+from sfa.storage.parameter import Parameter, Mixed
+
 class ListResources(Method):
     """
     Returns information about available resources or resources allocated to this slice
 
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
+
 from sfa.trust.credential import Credential
  
+from sfa.storage.parameter import Parameter, Mixed
+
 class ListSlices(Method):
     """
     List the slices instantiated at this interface       
 
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
+
+from sfa.storage.parameter import Parameter, Mixed
 
 class RedeemTicket(Method):
     """
 
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
+
 from sfa.trust.credential import Credential
 
+from sfa.storage.parameter import Parameter, Mixed
+
 class Register(Method):
     """
     Register an object with the registry. In addition to being stored in the
 
 from sfa.util.xrn import Xrn
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
+
 from sfa.trust.credential import Credential
 
+from sfa.storage.parameter import Parameter, Mixed
+
 class Remove(Method):
     """
     Remove an object from the registry. If the object represents a PLC object,
 
 from sfa.util.faults import InsufficientRights
 from sfa.util.xrn import urn_to_hrn
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter
-from sfa.trust.credential import Credential
 from sfa.util.sfatime import utcparse
 
+from sfa.trust.credential import Credential
+
+from sfa.storage.parameter import Parameter
+
 class RenewSliver(Method):
     """
     Renews the resources in a sliver, extending the lifetime of the slice.    
 
 
 from sfa.util.xrn import Xrn, urn_to_hrn
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
+
 from sfa.trust.credential import Credential
-from sfa.util.record import SfaRecord
+
+from sfa.storage.parameter import Parameter, Mixed
+from sfa.storage.record import SfaRecord
 
 class Resolve(Method):
     """
 
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter
+
+from sfa.storage.parameter import Parameter
 
 class ResolveGENI(Method):
     """
 
-from sfa.util.parameter import Parameter
+from sfa.storage.parameter import Parameter
+
 from sfa.methods.Stop import Stop
 
 class Shutdown(Stop):
 
 from sfa.util.xrn import urn_to_hrn
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
+
+from sfa.storage.parameter import Parameter, Mixed
 
 class SliverStatus(Method):
     """
 
 from sfa.util.xrn import urn_to_hrn
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
+
 from sfa.trust.credential import Credential
 
+from sfa.storage.parameter import Parameter, Mixed
+
 class Start(Method):
     """
     Start the specified slice      
 
 from sfa.util.xrn import urn_to_hrn
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
+
 from sfa.trust.credential import Credential
  
+from sfa.storage.parameter import Parameter, Mixed
+
 class Stop(Method):
     """
     Stop the specified slice      
 
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter
+
 from sfa.trust.credential import Credential
 
+from sfa.storage.parameter import Parameter
+
 class Update(Method):
     """
     Update an object in the registry. Currently, this only updates the
 
-from sfa.util.parameter import Parameter, Mixed
+from sfa.storage.parameter import Parameter, Mixed
+
 from sfa.methods.CreateSliver import CreateSliver
 
 class UpdateSliver(CreateSliver):
 
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter
 from sfa.util.sfalogging import logger
 
+from sfa.storage.parameter import Parameter
+
 class get_key_from_incoming_ip(Method):
     """
     Generate a new keypair and gid for requesting caller (component/node).     
 
-#from sfa.util.faults import *
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
+
 from sfa.trust.auth import Auth
 from sfa.trust.credential import Credential
 
+from sfa.storage.parameter import Parameter, Mixed
 
 class get_trusted_certs(Method):
     """
 
 from sfa.util.xrn import urn_to_hrn
 from sfa.util.method import Method
-from sfa.util.parameter import Parameter, Mixed
+
+from sfa.storage.parameter import Parameter, Mixed
 
 class reset_slice(Method):
     """
 
 #
 from sfa.util.faults import MissingSfaInfo, UnknownSfaType
 from sfa.util.sfalogging import logger
-from sfa.util.table import SfaTable
 from sfa.util.defaultdict import defaultdict
-
 from sfa.util.xrn import hrn_to_urn, get_leaf
 from sfa.util.plxrn import slicename_to_hrn, hostname_to_hrn, hrn_to_pl_slicename, hrn_to_pl_login_base
 
+# one would think the driver should not need to mess with the SFA db, but..
+from sfa.storage.table import SfaTable
+
 # the driver interface, mostly provides default behaviours
 from sfa.managers.driver import Driver
 
         # we obtain
         
         # get the sfa records
-        # xxx thgen fixme - use SfaTable hardwired for now 
-        # table = self.SfaTable()
         table = SfaTable()
         person_list, persons = [], {}
         person_list = table.find({'type': 'user', 'pointer': person_ids})
 
 from optparse import OptionParser
 
 from sfa.util.config import Config
-from sfa.util.table import SfaTable
 
 from sfa.trust.gid import GID, create_uuid
 from sfa.trust.hierarchy import Hierarchy
 
+from sfa.storage.table import SfaTable
+
 def main():
     args = sys.argv
     script_name = args[0]
 
 import traceback
 import socket
 
-import sfa.client.xmlrpcprotocol as xmlrpcprotocol 
-from sfa.util.table import SfaTable
 from sfa.util.prefixTree import prefixTree
 from sfa.util.config import Config
 
-from sfa.generic import Generic
-
 from sfa.trust.certificate import Keypair
 from sfa.trust.hierarchy import Hierarchy
 from sfa.server.registry import Registries
 
+from sfa.storage.table import SfaTable
+
+import sfa.client.xmlrpcprotocol as xmlrpcprotocol 
+
+from sfa.generic import Generic
+
 def main():
     config = Config()
     if not config.SFA_REGISTRY_ENABLED:
 
     Removes old records from the db.
     """
     # import SfaTable here so this module can be loaded by PlcComponentApi
-    from sfa.util.table import SfaTable
-    from sfa.util.record import SfaRecord
+    from sfa.storage.table import SfaTable
+    from sfa.storage.record import SfaRecord
     if not gids:
         return
     table = SfaTable()
 
 import datetime
 
 from sfa.util.faults import SfaFault, SfaAPIError
+from sfa.util.genicode import GENICODE
 from sfa.util.config import Config
 from sfa.util.cache import Cache
 from sfa.trust.auth import Auth
+
 from sfa.trust.certificate import Keypair, Certificate
 from sfa.trust.credential import Credential
 from sfa.trust.rights import determine_rights
+
 from sfa.server.xmlrpcapi import XmlrpcApi
-from sfa.util.genicode import GENICODE
+
 from sfa.client.return_value import ReturnValue
 
 # thgen xxx fixme this is wrong all right, but temporary, will use generic
-from sfa.util.table import SfaTable
+from sfa.storage.table import SfaTable
 
 ####################
 class SfaApi (XmlrpcApi): 
 
 from types import StringTypes
-try:
-    set
-except NameError:
-    from sets import Set
-    set = Set
-
-try: import pgdb
-except: pass
+import pgdb
  
 from sfa.util.faults import SfaInvalidArgument
-from sfa.util.parameter import Parameter, Mixed, python_type
 
+from sfa.storage.parameter import Parameter, Mixed, python_type
 
 class Filter(Parameter, dict):
     """
 
 
 from sfa.trust.gid import GID
 
-from sfa.util.parameter import Parameter
+from sfa.storage.parameter import Parameter
 from sfa.util.xrn import get_authority
-from sfa.util.row import Row
+from sfa.storage.row import Row
 from sfa.util.xml import XML 
 
 class SfaRecord(Row):
 
 from types import StringTypes
 
 from sfa.util.config import Config
-from sfa.util.parameter import Parameter
-from sfa.util.filter import Filter
-from sfa.util.PostgreSQL import PostgreSQL
-from sfa.util.record import SfaRecord, AuthorityRecord, NodeRecord, SliceRecord, UserRecord
+
+from sfa.storage.parameter import Parameter
+from sfa.storage.filter import Filter
+from sfa.storage.PostgreSQL import PostgreSQL
+from sfa.storage.record import SfaRecord, AuthorityRecord, NodeRecord, SliceRecord, UserRecord
 
 class SfaTable(list):
 
 
 from types import IntType, LongType, StringTypes
 import textwrap
 
-
 from sfa.util.sfalogging import logger
 from sfa.util.faults import SfaFault, SfaInvalidAPIMethod, SfaInvalidArgumentCount, SfaInvalidArgument
-from sfa.util.parameter import Parameter, Mixed, python_type, xmlrpc_type
+
+from sfa.storage.parameter import Parameter, Mixed, python_type, xmlrpc_type
 
 class Method:
     """
 
 import xmlrpclib
 from sfa.trust.gid import *
 from sfa.util.config import *
-from sfa.util.record import *
+from sfa.storage.record import *
 
 class TestRecord(unittest.TestCase):
     def setUp(self):
 
 from types import *
 from optparse import OptionParser
 
-from sfa.util.parameter import Parameter,Mixed
+from sfa.storage.parameter import Parameter,Mixed
 
 import globals