AUTH     => $::auth,
                  FLASH    => $::form->{FLASH},
                  FORM     => $::form,
+                 INSTANCE_CONF => $::instance_conf,
                  LOCALE   => $::locale,
                  LXCONFIG => \%::lx_office_conf,
                  LXDEBUG  => $::lxdebug,
 
 use SL::Common;
 use SL::Form;
 use SL::Helper::DateTime;
+use SL::InstanceConfiguration;
 use SL::Template::Plugin::HTMLFixes;
 
 # Trailing new line is added so that Perl will not add the line
   $::locale      = Locale->new($::lx_office_conf{system}->{language});
   $::form        = Form->new;
   %::called_subs = ();
+  $::instance_conf = SL::InstanceConfiguration->new;
 
   my $session_result = $::auth->restore_session;
   $::auth->create_or_refresh_session;
       delete $::form->{password};
 
       if ($action) {
+        $::instance_conf->init;
+
         map { $::form->{$_} = $::myconfig{$_} } qw(stylesheet charset)
           unless $action eq 'save' && $::form->{type} eq 'preferences';
 
 
   $additional_params->{"conf_parts_image_css"}        = $::lx_office_conf{features}->{parts_image_css};
   $additional_params->{"conf_parts_listing_images"}   = $::lx_office_conf{features}->{parts_listing_images};
   $additional_params->{"conf_parts_show_image"}       = $::lx_office_conf{features}->{parts_show_image};
+  $additional_params->{"INSTANCE_CONF"}               = $::instance_conf;
 
   if (%main::debug_options) {
     map { $additional_params->{'DEBUG_' . uc($_)} = $main::debug_options{$_} } keys %main::debug_options;
 
--- /dev/null
+package SL::InstanceConfiguration;
+
+use strict;
+
+use SL::DBUtils;
+
+sub new {
+  my ($class) = @_;
+
+  return bless {}, $class;
+}
+
+sub init {
+  my ($self) = @_;
+
+  $self->{data} = selectfirst_hashref_query($::form, $::form->get_standard_dbh, qq|SELECT * FROM defaults|);
+
+  my $curr            =  $self->{data}->{curr} || '';
+  $curr               =~ s/\s+//g;
+  $self->{currencies} =  [ split m/:/, $curr ];
+
+  return $self;
+}
+
+sub get_default_currency {
+  my ($self) = @_;
+
+  return ($self->get_currencies)[0];
+}
+
+sub get_currencies {
+  my ($self) = @_;
+
+  return $self->{currencies} ? @{ $self->{currencies} } : ();
+}
+
+1;
+
+__END__
+
+=pod
+
+=encoding utf8
+
+=head1 NAME
+
+SL::InstanceConfiguration - Provide instance-specific configuration data
+
+=head1 SYNOPSIS
+
+Lx-Office has two configuration levels: installation specific
+(provided by the global variable C<%::lxoffice_conf>) and instance
+specific. The latter is provided by a global instance of this class,
+C<$::instance_conf>.
+
+=head1 FUNCTIONS
+
+=over 4
+
+=item C<new>
+
+Creates a new instance. Does not read the configuration.
+
+=item C<init>
+
+Reads the configuration from the database. Returns C<$self>.
+
+=item C<get_currencies>
+
+Returns an array of configured currencies.
+
+=item C<get_default_currency>
+
+Returns the default currency or undef if no currency has been
+configured.
+
+=back
+
+=head1 BUGS
+
+Updates to the I<defaults> table require that the instance
+configuration is re-read. This has not been implemented yet.
+
+=head1 AUTHOR
+
+Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>
+
+=cut
 
 use SL::Auth;
 use SL::Form;
 use SL::Helper::DateTime;
+use SL::InstanceConfiguration;
 use SL::Locale;
 use SL::LXDebug;
 use Data::Dumper;
   $::cgi    = CGI->new qw();
   $::form   = Form->new;
   $::auth   = SL::Auth->new;
+  $::instance_conf = SL::InstanceConfiguration->new;
 
   die 'cannot reach auth db'               unless $::auth->session_tables_present;
 
 
   die "cannot find locale for user $login" unless $::locale   = Locale->new($::myconfig{countrycode});
 
+  $::instance_conf->init;
 
   return "logged in as $login";
 }