The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Changes 220
MANIFEST 42
META.json 22
META.yml 22
Makefile.PL 22
README 22
lib/Finance/Quote/AEX.pm 11
lib/Finance/Quote/AIAHK.pm 11
lib/Finance/Quote/ASEGR.pm 11
lib/Finance/Quote/ASX.pm 11
lib/Finance/Quote/BMONesbittBurns.pm 11
lib/Finance/Quote/BSERO.pm 11
lib/Finance/Quote/Bourso.pm 234189
lib/Finance/Quote/CSE.pm 1720
lib/Finance/Quote/Cdnfundlibrary.pm 11
lib/Finance/Quote/Citywire.pm 11
lib/Finance/Quote/Cominvest.pm 11
lib/Finance/Quote/Currencies.pm 11
lib/Finance/Quote/DWS.pm 11
lib/Finance/Quote/Deka.pm 11
lib/Finance/Quote/FTPortfolios.pm 11
lib/Finance/Quote/FTfunds.pm 11
lib/Finance/Quote/Fidelity.pm 11
lib/Finance/Quote/FinanceCanada.pm 11
lib/Finance/Quote/Finanzpartner.pm 11
lib/Finance/Quote/Fool.pm 11
lib/Finance/Quote/GoldMoney.pm 11
lib/Finance/Quote/HEX.pm 11
lib/Finance/Quote/HU.pm 11
lib/Finance/Quote/IndiaMutual.pm 11
lib/Finance/Quote/LeRevenu.pm 11
lib/Finance/Quote/MStaruk.pm 11
lib/Finance/Quote/ManInvestments.pm 11
lib/Finance/Quote/Morningstar.pm 11
lib/Finance/Quote/MorningstarJP.pm 11
lib/Finance/Quote/MtGox.pm 11
lib/Finance/Quote/NZX.pm 11
lib/Finance/Quote/Platinum.pm 11
lib/Finance/Quote/SEB.pm 11
lib/Finance/Quote/SIXfunds.pm 11
lib/Finance/Quote/SIXshares.pm 11
lib/Finance/Quote/StockHouseCanada.pm 11
lib/Finance/Quote/TNetuk.pm 11
lib/Finance/Quote/TSP.pm 11
lib/Finance/Quote/TSX.pm 11
lib/Finance/Quote/Tdefunds.pm 11
lib/Finance/Quote/Tdwaterhouse.pm 11
lib/Finance/Quote/Tiaacref.pm 11
lib/Finance/Quote/Troweprice.pm 11
lib/Finance/Quote/Trustnet.pm 11
lib/Finance/Quote/USFedBonds.pm 11
lib/Finance/Quote/Union.pm 11
lib/Finance/Quote/UserAgent.pm 11
lib/Finance/Quote/VWD.pm 2321
lib/Finance/Quote/Yahoo/Asia.pm 11
lib/Finance/Quote/Yahoo/Australia.pm 11
lib/Finance/Quote/Yahoo/Base.pm 11
lib/Finance/Quote/Yahoo/Brasil.pm 11
lib/Finance/Quote/Yahoo/Europe.pm 11
lib/Finance/Quote/Yahoo/NZ.pm 11
lib/Finance/Quote/Yahoo/USA.pm 11
lib/Finance/Quote/YahooJSON.pm 1218
lib/Finance/Quote/ZA.pm 11
lib/Finance/Quote/ZA_UnitTrusts.pm 1640
lib/Finance/Quote/za_unittrusts.pm 0162
lib/Finance/Quote.pm 33
t/bourso.t 4935
t/cse.t 390
t/vwd.t 222
t/yahoojson.t 14
70 files changed (This is a version diff) 806497
@@ -1,25 +1,3 @@
-1.35      2014-06-17 08:06:14+02:00 Europe/Brussels
-        * BUGFIX: VWD - currency returned.
-
-1.34      2014-06-15 21:30:03+02:00 Europe/Brussels
-        * VWD adapted to recent website change.
-
-1.33      2014-06-01 11:24:24+02:00 Europe/Brussels
-        * BUGFIX: yahoo_json never returns currency. so don't set a default.
-                  yahoo_json returned current timestamp instead of quote date.
-
-1.32      2014-05-18 21:55:12+02:00 Europe/Brussels
-        * return "symbol" for yahoo_json module
-        * allow to retrieve ISIN codes with VWD module
-
-1.31      2014-05-04 22:56:45+02:00 Europe/Brussels
-        * Case mismatch in ZA_UnitTrusts pod
-
-1.30      2014-05-04 21:56:34+02:00 Europe/Brussels
-        * Bourso.pm works on current website changes. Thanks to Guillaume
-        * New module CSE.pm by Hiranya Samarasekera. Covers Colombo Stock
-          Exchange (CSE) in Sri Lanka.
-
 1.29      2014-04-08 08:28:25+02:00 Europe/Brussels
         * New module za_unittrusts. kudos to Rolf Endres.
 	* Indiamutual patched to current website. kudos to Vinay S Shastry.
@@ -1,4 +1,4 @@
-# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.016.
+# This file was automatically generated by Dist::Zilla::Plugin::Manifest v5.013.
 ChangeLog.1
 Changes
 Documentation/FAQ
@@ -44,7 +44,6 @@ lib/Finance/Quote/ASX.pm
 lib/Finance/Quote/BMONesbittBurns.pm
 lib/Finance/Quote/BSERO.pm
 lib/Finance/Quote/Bourso.pm
-lib/Finance/Quote/CSE.pm
 lib/Finance/Quote/Cdnfundlibrary.pm
 lib/Finance/Quote/Citywire.pm
 lib/Finance/Quote/Cominvest.pm
@@ -94,7 +93,7 @@ lib/Finance/Quote/Yahoo/NZ.pm
 lib/Finance/Quote/Yahoo/USA.pm
 lib/Finance/Quote/YahooJSON.pm
 lib/Finance/Quote/ZA.pm
-lib/Finance/Quote/ZA_UnitTrusts.pm
+lib/Finance/Quote/za_unittrusts.pm
 t/00-use.t
 t/01-pod.t
 t/02-pod-coverage.t
@@ -111,7 +110,6 @@ t/bsero.t
 t/cdnfundlibrary.t
 t/citywire.t
 t/cominvest.t
-t/cse.t
 t/currencies.t
 t/currency.t
 t/currency_lookup.t
@@ -16,7 +16,7 @@
       "Erik Colson <eco@ecocode.net>"
    ],
    "dynamic_config" : 0,
-   "generated_by" : "Dist::Zilla version 5.016, CPAN::Meta::Converter version 2.141170",
+   "generated_by" : "Dist::Zilla version 5.013, CPAN::Meta::Converter version 2.133380",
    "license" : [
       "gpl_2"
    ],
@@ -92,6 +92,6 @@
          "web" : "https://github.com/finance-quote/finance-quote"
       }
    },
-   "version" : "1.35"
+   "version" : "1.29"
 }
 
@@ -22,7 +22,7 @@ build_requires:
 configure_requires:
   ExtUtils::MakeMaker: '6.30'
 dynamic_config: 0
-generated_by: 'Dist::Zilla version 5.016, CPAN::Meta::Converter version 2.141170'
+generated_by: 'Dist::Zilla version 5.013, CPAN::Meta::Converter version 2.133380'
 license: gpl
 meta-spec:
   url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -64,4 +64,4 @@ resources:
   bugtracker: https://rt.cpan.org/Dist/Display.html?Name=Finance-Quote
   homepage: http://finance-quote.sourceforge.net/
   repository: git://github.com/finance-quote/finance-quote
-version: '1.35'
+version: '1.29'
@@ -1,5 +1,5 @@
 
-# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v5.016.
+# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v5.013.
 use strict;
 use warnings;
 
@@ -58,7 +58,7 @@ my %WriteMakefileArgs = (
     "Test" => 0,
     "Test::More" => 0
   },
-  "VERSION" => "1.35",
+  "VERSION" => "1.29",
   "test" => {
     "TESTS" => "t/*.t"
   }
@@ -1,7 +1,7 @@
 
 
 This archive contains the distribution Finance-Quote,
-version 1.35:
+version 1.29:
 
   Get stock and mutual fund quotes from various exchanges
 
@@ -12,5 +12,5 @@ This is free software, licensed under:
   The GNU General Public License, Version 2, June 1991
 
 
-This README file was generated by Dist::Zilla::Plugin::Readme v5.016.
+This README file was generated by Dist::Zilla::Plugin::Readme v5.013.
 
@@ -44,7 +44,7 @@ use HTTP::Request::Common qw(POST);
 use HTML::TableExtract;
 use CGI;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information
 
@@ -34,7 +34,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use HTML::TableExtract;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 $AIAHK_URL = 'http://www.aia.com.hk/daily/fund_mst_rightb.asp?cat=BR_AC';
 
 
@@ -30,7 +30,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use HTML::TableExtract;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 my $ASEGR_URL = 'http://www.ase.gr/content/en/MarketData/Stocks/Prices/Share_SearchResults.asp?';
 
@@ -42,7 +42,7 @@ use Encode;
 
 use vars qw/$ASX_URL /;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 $ASX_URL = 'http://www.asx.com.au/asx/markets/priceLookup.do?by=asxCodes&asxCodes=';
 
@@ -35,7 +35,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use HTML::TableExtract;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information
 my $BMO_URL = 'http://bmonesbittburns.com/QuickQuote/QuickQuote.asp?Symbol=';
@@ -30,7 +30,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use HTML::TableExtract;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 my $BSERO_URL = 'http://www.bvb.ro/mobile/m_SecurityDetails.aspx?';
 
@@ -62,6 +62,7 @@
 #     * (1.0) iniial release
 #
 
+
 require 5.005;
 
 use strict;
@@ -72,251 +73,205 @@ use vars qw( $Bourso_URL);
 
 use LWP::UserAgent;
 use HTTP::Request::Common;
-use HTML::TreeBuilder
-    ;    # Boursorama doesn't put data in table elements anymore but uses <div>
+use HTML::TreeBuilder; # Boursorama doesn't put data in table elements anymore but uses <div>
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 my $Bourso_URL = 'http://www.boursorama.com/recherche/index.phtml';
 
-sub methods {
-    return ( france => \&bourso,
-             bourso => \&bourso,
-             europe => \&bourso
-    );
-}
+
+sub methods { return ( france => \&bourso,
+                       bourso => \&bourso,
+                       europe => \&bourso); }
 {
-    my @labels =
-        qw/name last date isodate p_change open high low close volume currency method exchange/;
-
-    sub labels {
-        return ( france => \@labels,
-                 bourso => \@labels,
-                 europe => \@labels
-        );
-    }
+  my @labels = qw/name last date isodate p_change open high low close volume currency method exchange/;
+
+  sub labels { return (france => \@labels,
+                       bourso => \@labels,
+                       europe => \@labels); }
 }
 
 sub bourso_to_number {
-    my $x = shift(@_);
-    $x =~ s/\s//g;    # remove spaces etc in number
-    return $x;
+  my $x = shift(@_);
+  $x =~ s/\s//g ; # remove spaces etc in number
+  return $x;
 }
 
+
 sub bourso {
-    my $quoter = shift;
-    my @stocks = @_;
-    my ( %info, $reply, $url, $te, $ts, $row, $style );
-    my $ua = $quoter->user_agent();
-
-    $url = $Bourso_URL;
-
-    foreach my $stocks (@stocks) {
-        my $queryUrl =
-              $url
-            . join( '', "?q=", $stocks )
-            . "&search[type]=rapide&search[categorie]=STK&search[bourse]=country:33";
-        $reply = $ua->request( GET $queryUrl);
-
-        # print "URL=".$queryUrl."\n";
-
-        if ( $reply->is_success ) {
-
-            # print $reply->content;
-            $info{ $stocks, "success" } = 1;
-
-            my $tree = HTML::TreeBuilder->new_from_content( $reply->content );
-
-            # retrieve SYMBOL
-            my @symbolline = $tree->look_down( 'class', 'fv-isin ellipsis' );
-
-            unless (@symbolline) {
-                $info{ $stocks, "success" }  = 0;
-                $info{ $stocks, "errormsg" } = "Stock name $stocks not found";
-                next;
-            }
-
-            my $symbol = ( $symbolline[0]->content_list )[0];
-            ($symbol) = ( $symbol =~ m/(\w+)/ );
-            $info{ $stocks, "symbol" } = $symbol;
-
-            # retrieve NAME
-            my @nameline = $tree->look_down( 'class', 'fv-name' );
-
-            unless (@nameline) {
-                $info{ $stocks, "success" } = 0;
-                $info{ $stocks, "errormsg" } =
-                    "Stock name $stocks not retrievable";
-                next;
-            }
-
-            my $name = $nameline[0]->as_text;
-            $info{ $stocks, "name" } = $name;
-
-            # set method
-            $info{ $stocks, "method" } = "bourso";
-
-            #holds table data
-            my %tempinfo;
-
-            # retrieve other data
-            my $infoclass = ( $tree->look_down( 'class', 'fv-extras' ) )[0];
-            unless ($infoclass) {
-                my $opcvm =
-                    ( $tree->look_down( 'class', 'opcvm-partners block' ) )[0];
-                unless ($opcvm) {
-                    $info{ $stocks, "success" } = 0;
-                    $info{ $stocks, "errormsg" } =
-                        "$stocks retrieval not supported.";
-                    next;
-                }
-
-                # the stock is a delayed OPCVM
-
-                my $infoelem =
-                    ( $tree->look_down( 'id', 'quote-infos-page' ) )[0];
-                $infoelem =
-                    ( $infoelem->look_down( 'class', 'q-details span-1-2' ) )
-                    [0];
-
-                my @rows = $infoelem->look_down( '_tag', 'tr' );
-                foreach my $i ( 0 .. $#rows ) {
-                    my $row = $rows[$i];
-                    unless ( $row->attr('class') ) {
-                        next;
-                    }
-
-                    my @cells     = $row->look_down( '_tag', 'td' );
-                    my $keytext   = ( $cells[0] )->as_text;
-                    my $valuetext = ( $cells[2] )->as_text;
-
-                    $tempinfo{$keytext} = $valuetext;
-                }
-            }
-            else {
-                # regular stock
-
-                my $infoelem;
-                my $quote_infos_page =
-                    ( $tree->look_down( 'id', 'quote-infos-page' ) )[0];
-                $infoelem = ( $quote_infos_page->look_down(
-                                                   'class', 'q-details span-1-2'
-                              )
-                )[0];
-                $infoelem = ( $quote_infos_page->look_down( 'class', 'bd' ) )[0]
-                    if ( !defined $infoelem );    # needed for warrants
-
-                my @rows = $infoelem->look_down( '_tag', 'tr' );
-                foreach my $i ( 0 .. $#rows ) {
-                    my $row   = $rows[$i];
-                    my @cells = $row->look_down( '_tag', 'td' );
-                    my $j     = 0;
-                    if ( $cells[0]->attr('rowspan') ) {
-                        $j = 1;
-                    }
-                    if ( $cells[0]->attr('colspan') ) {
-                        next;
-                    }
-
-                    my $keytext   = ( $cells[$j] )->as_text;
-                    my $valuetext = ( $cells[ $j + 1 ] )->as_text;
-
-                    $tempinfo{$keytext} = $valuetext;
-                }
-            }
-
-            foreach my $key ( keys %tempinfo ) {
-
-                # print "$key -> $tempinfo{$key}\n";
-
-            ASSIGN: for ($key) {
-
-                    # OPCVM
-                    /Valeur liquidative/ && do {
-                        my ( $last, $currency ) =
-                            ( $tempinfo{$key}
-                            =~ m/(\d+(?:\s\d+)*(?:\.\d+)?)(?:\(c\))?(?:\s+(\w+))?/
-                            );
-                        $last = bourso_to_number($last);
-                        $info{ $stocks, "last" }     = $last;
-                        $info{ $stocks, "currency" } = $currency;
-                    };
-                    /Date/ && do {
-                        $info{ $stocks, "date" } = $tempinfo{$key};
-                        $quoter->store_date( \%info, $stocks,
-                                     { eurodate => $info{ $stocks, "date" } } );
-                    };
-                    /Variation Veille/ && do {
-                        $info{ $stocks, "p_change" } = $tempinfo{$key};
-                    };
-
-                    # REGULAR STOCK
-                    /Cours/ && do {
-                        my ( $last, $currency ) =
-                            ( $tempinfo{$key}
-                            =~ m/(\d+(?:\s\d+)*(?:\.\d+)?)(?:\(c\))?(?:\s+(\w+))?/
-                            );
-                        $last = bourso_to_number($last);
-                        $info{ $stocks, "last" } = $last;
-                        $info{ $stocks, "currency" } =
-                            $currency || "EUR";    # defaults to EUR
-                        my $exchange = $key;
-                        $exchange =~ s/.*Cours\s*(\w.*\w)\s*/$1/
-                            ;    # the exchange is in the $key here
-                        $info{ $stocks, "exchange" } = $exchange;
-                    };
-                    /Variation/ && do {
-                        $info{ $stocks, "p_change" } = $tempinfo{$key};
-                    };
-                    /Dernier .change/ && do {
-                        my ( $day, $month, $year ) =
-                            ( $tempinfo{$key} =~ m|(\d\d)/(\d\d)/(\d\d)| );
-                        $year += 2000;
-                        $info{ $stocks, "date" } = sprintf "%02d/%02d/%04d",
-                            $day, $month, $year;
-                        $quoter->store_date( \%info, $stocks,
-                                     { eurodate => $info{ $stocks, "date" } } );
-                    };
-                    /Volume/ && do {
-                        $info{ $stocks, "volume" } =
-                            bourso_to_number( $tempinfo{$key} );
-                    };
-                    /Ouverture/ && do {
-                        $info{ $stocks, "open" } =
-                            bourso_to_number( $tempinfo{$key} );
-                    };
-                    /Haut/ && do {
-                        $info{ $stocks, "high" } =
-                            bourso_to_number( $tempinfo{$key} );
-                    };
-                    /Bas/ && do {
-                        $info{ $stocks, "low" } =
-                            bourso_to_number( $tempinfo{$key} );
-                    };
-                    /Cl.ture veille/ && do {
-                        $info{ $stocks, "previous" } =
-                            bourso_to_number( $tempinfo{$key} );
-                    };
-                    /Valorisation/ && do {
-                        $info{ $stocks, "cap" } = $tempinfo{$key};
-                        $info{ $stocks, "cap" } =~ s/[A-Z\s]//g
-                            ; # remove spaces and 'M' (millions) and currency (when not EUR)
-                        $info{ $stocks, "cap" }
-                            =~ tr/,/./;    # point instead of comma
-                        $info{ $stocks, "cap" }
-                            *= 1000000;    # valorisation is in millions
-                    };
-                }
-            }
-            $tree->delete;
-        }
-        else {
-            $info{ $stocks, "success" }  = 0;
-            $info{ $stocks, "errormsg" } = "Error retreiving $stocks ";
-        }
-    }
-    return wantarray() ? %info : \%info;
-    return \%info;
+  my $quoter = shift;
+  my @stocks = @_;
+  my (%info,$reply,$url,$te,$ts,$row,$style);
+  my $ua = $quoter->user_agent();
+
+  $url=$Bourso_URL;
+
+  foreach my $stocks (@stocks)
+	{
+	  my $queryUrl = $url.join('',"?q=", $stocks).
+		"&search[type]=rapide&search[categorie]=STK&search[bourse]=country:33";
+	  $reply = $ua->request(GET $queryUrl);
+
+	  # print "URL=".$queryUrl."\n";
+
+	  if ($reply->is_success) {
+		# print $reply->content;
+		$info{$stocks,"success"} = 1;
+
+		my $tree = HTML::TreeBuilder->new_from_content($reply->content);
+
+		# retrieve SYMBOL
+		my @symbolline = $tree->look_down('class','fv-isin ellipsis');
+
+		unless (@symbolline) {
+		  $info {$stocks,"success"} = 0;
+		  $info {$stocks,"errormsg"} = "Stock name $stocks not found";
+		  next ;
+		};
+
+		my $symbol = ($symbolline[0]->content_list)[0];
+		($symbol) = ($symbol=~m/(\w+)/);
+		$info{$stocks,"symbol"}=$symbol;
+
+		# retrieve NAME
+		my @nameline = $tree->look_down('class','fv-name');
+
+		unless (@nameline) {
+		  $info {$stocks,"success"} = 0;
+		  $info {$stocks,"errormsg"} = "Stock name $stocks not retrievable";
+		  next ;
+		};
+
+		my $name = $nameline[0]->as_text;
+		$info{$stocks,"name"}=$name;
+        # set method
+        $info{$stocks,"method"} = "bourso" ;
+
+		#holds table data
+		my %tempinfo;
+
+		# retrieve other data
+		my $infoclass = ($tree->look_down('class','fv-extras'))[0];
+		unless ($infoclass) {
+		  my $opcvm = ($tree->look_down('class','opcvm-partners block'))[0];
+		  unless ($opcvm) {
+			$info {$stocks,"success"} = 0;
+			$info {$stocks,"errormsg"} = "$stocks retrieval not supported.";
+			next ;
+		  }
+
+		  # the stock is a delayed OPCVM
+
+		  my $infoelem = ($tree->look_down('id','quote-infos-page'))[0];
+		  $infoelem = ($infoelem->look_down('class','q-details'))[0];
+
+		  my @rows = $infoelem->look_down('_tag','tr');
+		  foreach my $i (0..$#rows) {
+			my $row = $rows[$i];
+			unless($row->attr('class')) {
+			  next;
+			}
+
+			my @cells = $row->look_down('_tag','td');
+			my $keytext = ($cells[0])->as_text;
+			my $valuetext = ($cells[2])->as_text;
+
+			$tempinfo{$keytext} = $valuetext;
+		  }
+		}
+		else {
+		  # regular stock
+
+		  my $infoelem = ($tree->look_down('id','quote-infos-page'))[0];
+		  $infoelem = ($infoelem->look_down('class','q-details'))[0];
+
+		  my @rows = $infoelem->look_down('_tag','tr');
+		  foreach my $i (0..$#rows) {
+			my $row = $rows[$i];
+			my @cells = $row->look_down('_tag','td');
+			my $j = 0;
+			if ($cells[0]->attr('rowspan')) {
+			  $j = 1;
+			}
+			if ($cells[0]->attr('colspan')) {
+			  next;
+			}
+
+			my $keytext = ($cells[$j])->as_text;
+			my $valuetext = ($cells[$j + 1])->as_text;
+
+			$tempinfo{$keytext} = $valuetext;
+		  }
+		}
+
+		foreach my $key (keys %tempinfo) {
+		  # print "$key -> $tempinfo{$key}\n";
+
+		ASSIGN:	for ( $key ) {
+			# OPCVM
+			/Valeur liquidative/ && do {
+			  my ($last, $currency) = ($tempinfo{$key} =~ m/(\d+(?:\s\d+)*(?:\.\d+)?)(?:\(c\))?(?:\s+(\w+))?/);
+			  $last = bourso_to_number($last);
+			  $info{$stocks,"last"} = $last;
+			  $info{$stocks,"currency"} = $currency;
+			};
+			/Date/ && do {
+			  $info{$stocks,"date"} = $tempinfo{$key};
+			  $quoter->store_date(\%info, $stocks, {eurodate => $info{$stocks,"date"}});
+			};
+			/Variation Veille/ && do {
+			  $info{$stocks,"p_change"}=$tempinfo{$key}
+			};
+			# REGULAR STOCK
+			/Cours/ && do {
+			  my ($last, $currency) = ($tempinfo{$key} =~ m/(\d+(?:\s\d+)*(?:\.\d+)?)(?:\(c\))?(?:\s+(\w+))?/);
+			  $last = bourso_to_number($last);
+			  $info{$stocks,"last"} = $last;
+			  $info{$stocks,"currency"} = $currency||"EUR"; # defaults to EUR
+              my $exchange = $key;
+              $exchange =~ s/.*Cours\s*(\w.*\w)\s*/$1/; # the exchange is in the $key here
+              $info{$stocks,"exchange"} = $exchange ;
+			};
+			/Variation/ && do {
+			  $info{$stocks,"p_change"}=$tempinfo{$key}
+			};
+			/Dernier .change/ && do {
+			  my ($day,$month,$year) = ( $tempinfo{$key} =~ m|(\d\d)/(\d\d)/(\d\d)| );
+			  $year+=2000;
+			  $info{$stocks,"date"}= sprintf "%02d/%02d/%04d",$day,$month,$year;
+			  $quoter->store_date(\%info, $stocks, {eurodate => $info{$stocks,"date"}});
+			};
+			/Volume/ && do {
+			  $info{$stocks,"volume"}=bourso_to_number($tempinfo{$key});
+			};
+			/Ouverture/ && do {
+			  $info{$stocks,"open"}=bourso_to_number($tempinfo{$key});
+			};
+			/Haut/ && do {
+			  $info{$stocks,"high"}=bourso_to_number($tempinfo{$key});
+			};
+			/Bas/ && do {
+			  $info{$stocks,"low"}=bourso_to_number($tempinfo{$key});
+			};
+			/Cl.ture veille/ && do {
+			 $info{$stocks,"previous"}=bourso_to_number($tempinfo{$key});
+			};
+			/Valorisation/ && do {
+			  $info{$stocks,"cap"}=$tempinfo{$key} ;
+			  $info{$stocks,"cap"} =~ s/[A-Z\s]//g ; # remove spaces and 'M' (millions) and currency (when not EUR)
+			  $info{$stocks,"cap"} =~ tr/,/./ ; # point instead of comma
+			  $info{$stocks,"cap"} *= 1000000 ; # valorisation is in millions
+			};
+		  }
+		}
+		$tree->delete ;
+	  } else {
+		$info{$stocks, "success"}=0;
+		$info{$stocks, "errormsg"}="Error retreiving $stocks ";
+	  }
+	}
+  return wantarray() ? %info : \%info;
+  return \%info;
 }
 1;
 
@@ -1,172 +0,0 @@
-#!/usr/bin/perl -w
-#
-#    This modules is based on the AEX module. The code has been modified by
-#    Hiranya Samarasekera <hiranyas@gmail.com> to be able to retrieve stock
-#    information from the Colombo Stock Exchange (CSE) in Sri Lanka.
-#    ----------------------------------------------------------------------
-#
-#    This program is free software; you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation; either version 2 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program; if not, write to the Free Software
-#    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-#    02111-1307, USA
-#
-
-require 5.005;
-
-use strict;
-
-package Finance::Quote::CSE;
-
-use vars qw($CSE_URL);
-
-use LWP::UserAgent;
-use HTTP::Request::Common qw(POST);
-use HTML::TableExtract;
-use CGI;
-
-our $VERSION = '1.35'; # VERSION
-
-my $CSE_URL = "http://www.cse.lk/trade_summary_report.do?reportType=CSV";
-
-sub methods { return (cse       => \&cse) }
-
-{
-  my @labels = qw/ID SYMBOL NAME LAST_TRADE_QUANTITY TRADE_DATE PRICE SHAREVOLUME TRADEVOLUME TURNOVER HI_TRADE LO_TRADE CHANGE CHANGE_PERCENTAGE ISSUE_DATE CLOSING_PRICE PREVIOUS_CLOSE MARKET_CAP MARKET_CAP_PERCENTAGE OPEN currency method exchange/;
-
-  sub labels { return (cse       => \@labels) }
-}
-
-# Colombo Stock Exchange (CSE), Sri Lanka
-
-sub cse {
-  my $quoter = shift;
-  my @symbols = @_;
-  return unless @symbols;
-
-  my (%info,$url,$reply,$te);
-  my ($row, $datarow, $matches);
-  my ($time);
-
-  $url = $CSE_URL;    		# base url
-
-  # Create a user agent object and HTTP headers
-  my $ua  = new LWP::UserAgent(agent => 'Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)');
-
-  # Compose POST request
-  my $request = new HTTP::Request("GET", $url);
-
-  $reply = $ua->request( $request );
-
-  #print Dumper $reply;
-  if ($reply->is_success) {
-
-    # Write retreived data to temp file for debugging
-    use POSIX;
-    my $filename = tmpnam();
-    open my $fw, ">", $filename or die "$filename: $!";
-    print $fw $reply->content;
-    close $fw;
-
-    # Open reply to read lines
-    open FP, "<", \$reply->content or die "Unable to read data: $!";
-
-    # Open temp file instead while debugging
-    #open FP, "<", $filename or die "Unable to read data: $!";
-
-    while (my $line = <FP>) {
-      my @row_data = $quoter->parse_csv($line);
-      #print Dumper \@row_data;
-      my $row = \@row_data;
-      #print Dumper $row;
-      next unless @row_data;
-
-      foreach my $symbol (@symbols) {
-
-        my $found = 0;
-
-        # Match stock symbol (e.g. JKH.N0000, HNB.X0000)
-        if ( @$row[1] eq uc($symbol) ) {
-          $info {$symbol, "exchange"} = "Colombo Stock Exchange, Sri Lanka";
-          $info {$symbol, "method"} = "cse";
-          $info {$symbol, "symbol"} = @$row[1];
-          $info {$symbol, "name"} = @$row[2];
-          ($info {$symbol, "last"} = @$row[5]) =~ s/\s*//g;
-          $info {$symbol, "bid"} = undef;
-          $info {$symbol, "offer"} = undef;
-          $info {$symbol, "open"} = @$row[18];
-          $info {$symbol, "nav"} = undef;
-          $info {$symbol, "price"} = @$row[5];
-          $info {$symbol, "low"} = @$row[10];
-          $info {$symbol, "close"} = @$row[15];
-          $info {$symbol, "p_change"} = @$row[12];
-          ($info {$symbol, "high"} = @$row[9]) =~ s/\s*//g;
-          ($info {$symbol, "volume"} = @$row[6]) =~ s/,//g;;
-
-          $quoter->store_date(\%info, $symbol, {today => 1});
-
-          $info {$symbol, "currency"} = "LKR";
-          $info {$symbol, "success"} = 1;
-        }
-      }
-    }
-  }
-
-  foreach my $symbol (@symbols) {
-    unless ( !defined($info {$symbol, "success"}) || $info {$symbol, "success"} == 1 )
-      {
-        $info {$symbol,"success"} = 0;
-        $info {$symbol,"errormsg"} = "Fund name $symbol not found";
-        next;
-      }
-  }
-
-  #print Dumper \%info;
-  return %info if wantarray;
-  return \%info;
-}
-
-
-1;
-
-=head1 NAME
-
-Finance::Quote::CSE Obtain quotes from Colombo Stock Exchange in Sri Lanka
-
-=head1 SYNOPSIS
-
-    use Finance::Quote;
-
-    $q = Finance::Quote->new;
-	@stocks = ("JKH.N0000", "HPWR.N0000", "HNB.X0000");
-    %info = Finance::Quote->fetch("cse", @stocks);
-
-=head1 DESCRIPTION
-
-This module retrieves information from the Colombo Stock Exchange (CSE)
-in Sri Lanka http://www.cse.lk.
-
-This module is loaded by default on a Finance::Quote object. It's
-also possible to load it explicity by placing "cse" in the argument
-list to Finance::Quote->new().
-
-=head1 LABELS RETURNED
-
-The following labels may be returned by Finance::Quote::CSE :
-symbol, name, last, open, price, low, close, p_change,
-high, volume, exchange, method
-
-=head1 SEE ALSO
-
-Colombo Stock Exchange (CSE), Sri Lanka, http://www.cse.lk
-
-=cut
@@ -21,7 +21,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use HTML::TableExtract;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information.
 
@@ -46,7 +46,7 @@ use HTTP::Cookies;
 use HTML::TokeParser;
 # use Data::Dumper;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 $CITYWIRE_MAIN_URL   =   "http://citywire.co.uk";
 $CITYWIRE_LOOK_UP    =   "http://citywire.co.uk/money/search.aspx?phrase=";
@@ -41,7 +41,7 @@ use vars qw/$COMINVEST_URL /;
 use LWP::UserAgent;
 use HTTP::Request::Common;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 $COMINVEST_URL = ('http://www.cominvest.de/_applications/fonds_application/FondsInfos/FondsInfos_PreiseAktuell_CSVFile.asp?b2b=0&noindex=1&noindex=1&lang=49');
 
@@ -21,7 +21,7 @@ use base 'Exporter';
 use vars qw/@EXPORT_OK  $YAHOO_CURRENCY_CONV_URL/;
 
 @EXPORT_OK = qw( known_currencies fetch_live_currencies );
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 use HTTP::Request::Common;
 use LWP::UserAgent;
@@ -42,7 +42,7 @@ use LWP::Simple;
 use strict;
 use warnings;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 sub methods {
 	return(dwsfunds => \&dwsfunds);
@@ -22,7 +22,7 @@ use HTML::TableExtract;
 
 require Crypt::SSLeay;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 my $DEKA_URL = "https://www.deka.de/dn/useCases/fundsearch/UCFundsSearch.shtml?ACTION_FIELD=quickSearch";
 
 sub methods {return (deka        => \&deka);}
@@ -39,7 +39,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use HTML::TableExtract;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information.
 
@@ -59,7 +59,7 @@ use HTTP::Cookies;
 use HTML::TokeParser;
 # use Data::Dumper;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 $FTFUNDS_MAIN_URL   =   "http://funds.ft.com";
 $FTFUNDS_LOOK_LD    =   "http://funds.ft.com/UK/Tearsheet/Summary?s=";
@@ -36,7 +36,7 @@ use vars qw/$FIDELITY_URL /;
 use LWP::UserAgent;
 use HTTP::Request::Common;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 $FIDELITY_URL = ("http://activequote.fidelity.com/nav/fulllist.csv");
 
@@ -17,7 +17,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use HTML::TableExtract;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 my $FINANCECANADA_MAINURL = ("http://finance.canada.com/");
 my $FINANCECANADA_URL = "http://stockgroup.canada.com/sn_overview.asp?symbol=T.";
 
@@ -20,7 +20,7 @@ package Finance::Quote::Finanzpartner;
 use strict;
 use HTML::TableExtract;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 my $FINANZPARTNER_URL = "http://www.finanzpartner.de/fi/";
 
@@ -40,7 +40,7 @@ use Exporter;
 
 use vars qw/$FOOL_URL  @FIELDS $MAX_REQUEST_SIZE @ISA/;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 $FOOL_URL = 'http://quote.fool.com/quotes.csv?symbols=';
 
@@ -36,7 +36,7 @@ use HTML::TableExtract;
 use strict;
 use warnings;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 sub methods {
 	return(goldmoney => \&goldmoney);
@@ -41,7 +41,7 @@ use HTML::TableExtract;
 
 use vars qw/$HEX_URL /;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 $HEX_URL = 'http://omxgroup.is-teledata.com/html/securitypricelistequities.html?language=fi';
 
@@ -26,7 +26,7 @@ use HTML::TableExtract;
 use Encode;
 use Storable qw(dclone);
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 my %MONTHS = (
 	"JAN","01","FEB","02","MAR","03","APR","04","MAY","05","JUN","06","JUL","07","AUG","08","SEP","09","OCT","10","NOV","11","DEC","12");
@@ -14,7 +14,7 @@ use HTTP::Request::Common;
 use HTTP::Status;
 use HTML::TableExtract;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information.
 
@@ -41,7 +41,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use HTML::TableExtract;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 my $LR_URL = 'http://bourse.lerevenu.com/recherchenom.hts';
 
@@ -40,7 +40,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use HTTP::Cookies;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 $MSTARUK_MAIN_URL   =   "http://www.morningstar.co.uk";
 $MSTARUK_LOOK_UP    =   "http://www.morningstar.co.uk/uk/funds/SecuritySearchResults.aspx?search=";
@@ -41,7 +41,7 @@ use HTML::TableExtract;
 
 use vars qw/$MANINV_URL /;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 $MANINV_URL = 'http://www.maninvestments.com.au/index.cfm?action=productprices&cat_id=5';
 $MANINV_URL = 'http://www.maninvestments.com.au/netassetvalues-print.cfm';
@@ -9,7 +9,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use HTML::TableExtract;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 $MORNINGSTAR_SE_FUNDS_URL = 'http://morningstar.se/funds/overview.asp?cid=';
 
 sub methods { return (morningstar => \&morningstar); }
@@ -28,7 +28,7 @@ use Date::Calc qw(Add_Delta_Days Today);
 use vars qw( $MORNINGSTAR_JP_URL);
 
 our @EXPORT_OK = qw(morningstarjp methods labels);
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # NAV information (basis price)
 $MORNINGSTAR_JP_URL =
@@ -25,7 +25,7 @@ use URI::Escape;
 
 require 5.010;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 my @markets =
     qw/USD EUR JPY CAD GBP CHF RUB AUD SEK DKK HKD PLN CNY SGD THB NZD NOK/;
@@ -37,7 +37,7 @@ use strict;
 use LWP::UserAgent;
 use HTTP::Request::Common;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 sub methods { return (nz => \&nzx, nzx => \&nzx); }
 sub labels {
@@ -41,7 +41,7 @@ use HTML::TableExtract;
 
 use vars qw/$PLATINUM_URL /;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 $PLATINUM_URL = 'http://www.platinum.com.au/Platinum_Trust_Unit_Prices.htm';
 
@@ -35,7 +35,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use utf8;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 $SEB_FUNDS_URL = 'http://taz.vv.sebank.se/cgi-bin/pts3/pow/fmk/2100/Senaste_fondkurserna.TXT';
 
 sub methods { return (seb_funds => \&seb_funds); }
@@ -9,7 +9,7 @@ package Finance::Quote::SIXfunds;
 
 use HTTP::Request::Common;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 my $url = 'http://www.six-swiss-exchange.com/funds/security_info_en.html?id=';
 
@@ -9,7 +9,7 @@ package Finance::Quote::SIXshares;
 
 use HTTP::Request::Common;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 my $url = 'http://www.six-swiss-exchange.com/shares/security_info_en.html?id=';
 
@@ -38,7 +38,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use HTML::TableExtract;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 $STOCKHOUSE_LOOKUP_URL="http://www.stockhouse.com/mutualFunds/index.asp?asp=1&lang=&item=searchresult&country=CAN&by=symbol&searchtext=";
 $STOCKHOUSE_URL="http://www.stockhouse.com/MutualFunds/index.asp?item=snapshot&page=1&Lang=EN&fundkey=%s&source=Fundata&Symbol=%s&FundName=&CompanyName=&asp=1";
@@ -46,7 +46,7 @@ use HTTP::Cookies;
 use HTML::TokeParser;
 # use Data::Dumper;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 $TNETUK_MAIN_URL   =   "http://www.trustnet.com";
 $TNETUK_LOOK_UP    =   "http://www.trustnet.com/Tools/Search.aspx?keyword=";
@@ -39,7 +39,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use HTML::TableExtract;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information
 
@@ -41,7 +41,7 @@ use HTML::TableExtract;
 use URI;
 use URI::QueryParam;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # This URL is able to accept up to 10 symbols at a time
 my $TSX_URL = URI->new('http://cxa.marketwatch.com/tsx/en/market/getquote.aspx');
@@ -33,7 +33,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use Carp;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information.
 
@@ -33,7 +33,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use Carp;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information.
 
@@ -42,7 +42,7 @@ use HTTP::Request::Common;
 use Carp;
 use Encode;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information.
 # This used to be different for the CREF and TIAA annuities, but this changed.
@@ -38,7 +38,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use Carp;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information.
 
@@ -39,7 +39,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use HTML::TableExtract;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information.
 
@@ -22,7 +22,7 @@ use HTTP::Request::Common;
 use HTML::TableExtract;
 use HTML::Parser;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 my $TREASURY_MAINURL = ("http://www.publicdebt.treas.gov/");
 my $TREASURY_URL = ($TREASURY_MAINURL."sav/");
 
@@ -38,7 +38,7 @@ use strict;
 use LWP::UserAgent;
 use HTTP::Request::Common;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 sub methods { return (unionfunds => \&unionfunds); }
 sub labels { return (unionfunds => [qw/exchange name date isodate price method/]); }
@@ -31,7 +31,7 @@ use HTTP::Headers;
 
 use vars qw/@ISA /;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 @ISA = qw/LWP::UserAgent/;
 
 # A very simple extension.  When we generate a LWP::UserAgent object,
@@ -8,7 +8,6 @@
 #    Copyright (C) 2000, Volker Stuerzl <volker.stuerzl@gmx.de>
 #    Copyright (C) 2003,2005,2006 Jörg Sommer <joerg@alea.gnuu.de>
 #    Copyright (C) 2008 Martin Kompf (skaringa at users.sourceforge.net)
-#    Copyright (C) 2014, Erik Colson <ecocode@cpan.org>
 #
 #    This program is free software; you can redistribute it and/or modify
 #    it under the terms of the GNU General Public License as published by
@@ -42,7 +41,7 @@ use HTTP::Request::Common;
 use HTML::TreeBuilder;
 use HTML::TableExtract;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 sub methods { return ( vwd => \&vwd ); }
 
@@ -102,7 +101,7 @@ sub vwd {
 
         my $request =
               "http://www.finanztreff.de/"
-            . "kurse_einzelkurs_suche.htn?suchbegriff="
+            . "kurse_einzelkurs_uebersicht.htn?s="
             . $fund;
         if ($logging) {
             print LOG "Request='$request'\n";
@@ -114,19 +113,15 @@ sub vwd {
             my $tree = HTML::TreeBuilder->new;
             $tree->parse($html);
 
-            # all other info below <div class=contentBox>
+            # all other info below <div class=contentContainer>
             my $content =
-                $tree->look_down( "_tag", "div", "class", "contentBox" );
+                $tree->look_down( "_tag", "div", "class", "contentContainer" );
             next if not $content;
 
             my $wpkurs =
                 $content->look_down( "_tag", "div", "class", qr/wpKurs/ );
             next if not $wpkurs;
 
-            my $wpfacts =
-                $content->look_down( "_tag", "div", "class", qr/wpFacts/ );
-            next if not $wpfacts;
-
             my $title = $wpkurs->find("h1");
             $title->find("span")->delete_content;
             $info{ $fund, "name" } = $title->as_trimmed_text;
@@ -135,10 +130,7 @@ sub vwd {
             $te->parse( $wpkurs->as_HTML );
             my $table = $te->first_table_found;
 
-            # class val contains data. hopefully order and quantity won't change
-            my @wpfacts_vals = $wpfacts->look_down( "_tag", "span","class", qr/val/);
-            my $datum = $wpfacts_vals[1]->as_trimmed_text;
-
+            my $datum = $table->cell( 0, 1 );
             if ($logging) {
                 print LOG "datum: $datum\n";
             }
@@ -155,24 +147,30 @@ sub vwd {
                 $quoter->store_date( \%info, $fund );
                 $info{ $fund, "time" } = $quoter->isoTime($1);
             }
-            my $kurs = $table->cell( 0, 1 );
+            my $kurs = $table->cell( 0, 2 );
             next if not $kurs;
             $info{ $fund, "price" } = $info{ $fund, "last" } = trimtr($kurs);
 
-            # Currency (Währung)
-            my $whrg =
-                $tree->look_down( "_tag", "div", "class", "whrg" );
-            if ($whrg) {
-                my $whrgtext = $whrg->as_trimmed_text();
-                $whrgtext =~ s/.*hrung: // ;
-                $info{ $fund, "currency" } = $whrgtext;
+            # Currency
+            my $portrait =
+                $tree->look_down( "_tag", "table", "class", "portraitKurse" );
+            if ($portrait) {
+                my @tds = $portrait->find('td');
+                $info{ $fund, "currency" } = $tds[2]->as_trimmed_text();
             }
             else {
                 $info{ $fund, "currency" } = "EUR";
             }
 
-            my $symbol = $wpfacts_vals[4]->as_trimmed_text;
-            $info{ $fund, "symbol" } = $symbol;
+            my $wpinfo = $wpkurs->look_down( "_tag", "h2" );
+            if ($wpinfo) {
+                if ($logging) {
+                    print LOG "wpinfo: " . $wpinfo->as_trimmed_text . "\n";
+                }
+                if ( $wpinfo->as_trimmed_text =~ /Symbol:([^ ]*)$/ ) {
+                    $info{ $fund, "symbol" } = trim($1);
+                }
+            }
 
             # fund ok
             $info{ $fund, "success" }  = 1;
@@ -38,7 +38,7 @@ use Finance::Quote::Yahoo::Base qw/yahoo_request base_yahoo_labels/;
 
 use vars qw( $YAHOO_ASIA_URL);
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information.
 
@@ -35,7 +35,7 @@ use Finance::Quote::Yahoo::Base qw/yahoo_request base_yahoo_labels/;
 
 use vars qw/ $YAHOO_AUSTRALIA_URL/;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information.
 
@@ -44,7 +44,7 @@ use vars qw/ @FIELDS @FIELD_ENCODING $MAX_REQUEST_SIZE @ISA
 @EXPORT = qw//;
 @EXPORT_OK = qw/yahoo_request base_yahoo_labels/;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # This is the maximum number of stocks we'll batch into one operation.
 # If this gets too big (>50 or thereabouts) things will break because
@@ -35,7 +35,7 @@ use Finance::Quote::Yahoo::Base qw/yahoo_request base_yahoo_labels/;
 
 use vars qw/ $YAHOO_BRASIL_URL/;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information.
 
@@ -36,7 +36,7 @@ use Finance::Quote::Yahoo::Base qw/yahoo_request base_yahoo_labels/;
 
 use vars qw( $YAHOO_EUROPE_URL);
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information.
 
@@ -34,7 +34,7 @@ use Finance::Quote::Yahoo::Base qw/yahoo_request base_yahoo_labels/;
 
 use vars qw/$YAHOO_NZ_URL/;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information.
 
@@ -37,7 +37,7 @@ use Finance::Quote::Yahoo::Base qw/yahoo_request base_yahoo_labels/;
 
 use vars qw/$YAHOO_URL/;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 # URLs of where to obtain information.
 
@@ -33,13 +33,15 @@ use HTTP::Request::Common;
 use HTML::TableExtract;
 use Time::Piece;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 my $YIND_URL_HEAD = 'http://finance.yahoo.com/webservice/v1/symbols/';
 my $YIND_URL_TAIL = '/quote?format=json';
 
 sub methods {
-    return ( yahoo_json => \&yahoo_json,
+    return ( india      => \&yahoo_json,
+             yahoo_json => \&yahoo_json,
+             ind        => \&yahoo_json
     );
 }
 {
@@ -47,7 +49,9 @@ sub methods {
         volume currency method exchange type/;
 
     sub labels {
-        return ( yahoo_json => \@labels,
+        return ( india => \@labels,
+                 yahoo_json => \@labels,
+                 ind   => \@labels
         );
     }
 }
@@ -77,8 +81,6 @@ sub yahoo_json {
         #HTTP Headers:				$headers
         #Response body				$body
 
-        $info{ $stocks, "symbol" } = $stocks;
-
         if ( $code == 200 ) {
 
             #HTTP_Response succeeded - parse the data
@@ -114,8 +116,8 @@ sub yahoo_json {
                 my $json_type = $json_resources->{'resource'}{'fields'}{'type'};
                 my $json_price =
                     $json_resources->{'resource'}{'fields'}{'price'};
-                my $json_utctime =
-                    $json_resources->{'resource'}{'fields'}{'utctime'};
+
+                $my_p_change = +0.0;
 
                 $info{ $stocks, "success" } = 1;
                 $info{ $stocks, "exchange" } =
@@ -124,17 +126,20 @@ sub yahoo_json {
                 $info{ $stocks, "name" }   = $stocks . ' (' . $json_name . ')';
                 $info{ $stocks, "type" }   = $json_type;
                 $info{ $stocks, "last" }   = $json_price;
+                $info{ $stocks, "close" }  = $json_price;
+                $info{ $stocks, "p_change" } = $my_p_change;
                 $info{ $stocks, "volume" }   = $json_volume;
-                $info{ $stocks, "isodate" } = ( $json_utctime =~ /dddd-dd-dd/ );
+                $info{ $stocks, "high" }     = $json_price;
+                $info{ $stocks, "low" }      = $json_price;
+                $info{ $stocks, "open" }     = $json_price;
 
                 $my_date = localtime($json_timestamp)->strftime('%d.%m.%Y %T');
-                if ( $json_utctime =~ /(\d\d\d\d)-(\d\d)-(\d\d)/ ) {
-                    $my_date = $3.".".$2.".".$1.".";
-                }
 
                 $quoter->store_date( \%info, $stocks,
                                      { eurodate => $my_date } );
 
+                $info{ $stocks, "currency" } = "INR";
+
             }
         }
 
@@ -178,7 +183,8 @@ This module provides the "yahoo_json" fetch method.
 =head1 LABELS RETURNED
 
 The following labels may be returned by Finance::Quote::YahooJSON :
-name, last, isodate, volume, method, exchange.
+name, last, date, p_change, open, high, low, close,
+volume, currency, method, exchange.
 
 =head1 SEE ALSO
 
@@ -28,7 +28,7 @@ use LWP::UserAgent;
 use HTTP::Request::Common;
 use HTML::TableExtract;
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 my $SHARENET_MAINURL = ("http://www.sharenet.co.za/");
 my $SHARENET_URL     = ( $SHARENET_MAINURL . "jse/" );
@@ -1,164 +0,0 @@
-#!/usr/bin/perl -w
-
-# This file is based purely on Stephen Langenhoven's original ZA.pm file.
-# In order to use this file, rather than using a stock code/number, the user
-# must look for the unit trust ID number in the path of the Equinox site that
-# profiles the relevant unit trust (or closest unit trust to). For instance,
-# http://www.equinox.co.za/unittrusts/funds/funddetails.asp?fundid=16200 is the
-# profile of the "Liberty Resources Fund (C)". As a result, the fundid to be used
-# to query that fund is 16200.
-# Rolf Endres
-# 2009.10.09
-
-package Finance::Quote::ZA_UnitTrusts;
-require 5.004;
-
-our $VERSION = '1.35'; # VERSION
-
-use strict;
-
-use LWP::UserAgent;
-use HTTP::Request::Common;
-use HTML::TableExtract;
-
-my $EQUINOX_MAINURL = ("http://www.equinox.co.za/");
-my $EQUINOX_URL =
-    ( $EQUINOX_MAINURL . "unittrusts/funds/funddetails.asp?fundid=" );
-
-sub methods {
-    return ( za_unittrusts => \&za_unittrusts );
-}
-
-sub labels {
-    my @labels =
-        qw/method source name symbol currency last date isodate high low p_change/;
-    return ( EQUINOX => \@labels );
-}
-
-sub za_unittrusts {
-
-    my $quoter  = shift;
-    my @symbols = @_;
-    my %info;
-    my ( $te, $ts, $row );
-    my @rows;
-
-    return unless @symbols;
-
-    my $ua = $quoter->user_agent;
-
-    foreach my $symbol (@symbols) {
-        my $url = $EQUINOX_URL . $symbol;
-
-        #print "[debug]: ", $url, "\n";
-        my $response = $ua->request( GET $url);
-
-        #print "[debug]: ", $response->content, "\n";
-
-        if ( !$response->is_success ) {
-            $info{ $symbol, "success" }  = 0;
-            $info{ $symbol, "errormsg" } = "Error contacting URL";
-            next;
-        }
-
-        $te = new HTML::TableExtract();
-
-        $te->parse( $response->content );
-
-        #print "[debug]: (parsed HTML)",$te, "\n";
-
-        unless ( $te->first_table_found() ) {
-
-            #print STDERR  "no tables on this page\n";
-            $info{ $symbol, "success" }  = 0;
-            $info{ $symbol, "errormsg" } = "Parse error";
-            next;
-        }
-
-        # GENERAL FIELDS
-        $info{ $symbol, "success" }  = 1;
-        $info{ $symbol, "method" }   = "Equinox";
-        $info{ $symbol, "symbol" }   = $symbol;
-        $info{ $symbol, "currency" } = "ZAR";
-        $info{ $symbol, "source" }   = $EQUINOX_MAINURL;
-
-        # NAME
-        $ts = $te->table_state( 0, 0 );
-        if ($ts) {
-            (@rows) = $ts->rows;
-            $info{ $symbol, "name" } = $rows[0][0];
-            $info{ $symbol, "name" } =~ s/Funds//;
-            $info{ $symbol, "name" } =~ s/Performances//;
-            $info{ $symbol, "name" } =~ s/Companies//;
-            $info{ $symbol, "name" } =~ s/Summary//;
-            $info{ $symbol, "name" } =~ s/Company//;
-            $info{ $symbol, "name" } =~ s/Management//;
-            $info{ $symbol, "name" } =~ s/A//;
-            $info{ $symbol, "name" } =~ s/Z//;
-            $info{ $symbol, "name" } =~ s/Risk//;
-            $info{ $symbol, "name" } =~ s/Funds//;
-            $info{ $symbol, "name" } =~ s/Sector//;
-            $info{ $symbol, "name" } =~ s/Funds//;
-            $info{ $symbol, "name" } =~ s/Domestic(.*)//s;
-            $info{ $symbol, "name" } =~ s/Foreign(.*)//s;
-            $info{ $symbol, "name" } =~ s/[^A-Za-z ()]//sg;
-            $info{ $symbol, "name" } =~ s/  //sg;
-            $info{ $symbol, "name" } =~ s/  //sg;
-            $info{ $symbol, "name" } =~ s/  //sg;
-            $info{ $symbol, "name" } =~ s/  //sg;
-
-        }
-
-        # LAST
-        $ts = $te->table_state( 1, 0 );
-        if ($ts) {
-            (@rows) = $ts->rows;
-            $info{ $symbol, "last" } = $rows[0][1];
-            $info{ $symbol, "last" } =~ tr/R //d;
-
-        }
-
-        # DATE
-        if ($ts) {
-            (@rows) = $ts->rows;
-
-            $quoter->store_date( \%info, $symbol, { eurodate => $rows[0][0] } );
-        }
-    }
-
-    return wantarray() ? %info : \%info;
-}
-
-1;
-
-=head1 NAME
-
-Finance::Quote::ZA_UnitTrusts - Obtain South African unit trust prices from
-www.equinox.co.za
-
-=head1 SYNOPSIS
-
-   use Finance::Quote;
-
-   $q = Finance::Quote->new;
-
-   # Don't know anything about failover yet...
-
-=head1 DESCRIPTION
-
-This module obtains information about South African Unit Trusts from
-www.equinox.co.za.
-
-=head1 LABELS RETURNED
-
-Information available from Equinox may include the following labels:
-
-method source name symbol currency date nav last price
-
-=head1 SEE ALSO
-
-Equinox website - http://www.equinox.co.za/
-
-Finance::Quote
-
-=cut
@@ -0,0 +1,162 @@
+#!/usr/bin/perl -w
+
+# This file is based purely on Stephen Langenhoven's original ZA.pm file.
+# In order to use this file, rather than using a stock code/number, the user
+# must look for the unit trust ID number in the path of the Equinox site that
+# profiles the relevant unit trust (or closest unit trust to). For instance,
+# http://www.equinox.co.za/unittrusts/funds/funddetails.asp?fundid=16200 is the
+# profile of the "Liberty Resources Fund (C)". As a result, the fundid to be used
+# to query that fund is 16200.
+# Rolf Endres
+# 2009.10.09
+
+package Finance::Quote::za_unittrusts;
+require 5.004;
+
+use strict;
+
+use LWP::UserAgent;
+use HTTP::Request::Common;
+use HTML::TableExtract;
+
+my $EQUINOX_MAINURL = ("http://www.equinox.co.za/");
+my $EQUINOX_URL =
+    ( $EQUINOX_MAINURL . "unittrusts/funds/funddetails.asp?fundid=" );
+
+sub methods {
+    return ( za_unittrusts => \&za_unittrusts );
+}
+
+sub labels {
+    my @labels =
+        qw/method source name symbol currency last date isodate high low p_change/;
+    return ( EQUINOX => \@labels );
+}
+
+sub za_unittrusts {
+
+    my $quoter  = shift;
+    my @symbols = @_;
+    my %info;
+    my ( $te, $ts, $row );
+    my @rows;
+
+    return unless @symbols;
+
+    my $ua = $quoter->user_agent;
+
+    foreach my $symbol (@symbols) {
+        my $url = $EQUINOX_URL . $symbol;
+
+        #print "[debug]: ", $url, "\n";
+        my $response = $ua->request( GET $url);
+
+        #print "[debug]: ", $response->content, "\n";
+
+        if ( !$response->is_success ) {
+            $info{ $symbol, "success" }  = 0;
+            $info{ $symbol, "errormsg" } = "Error contacting URL";
+            next;
+        }
+
+        $te = new HTML::TableExtract();
+
+        $te->parse( $response->content );
+
+        #print "[debug]: (parsed HTML)",$te, "\n";
+
+        unless ( $te->first_table_found() ) {
+
+            #print STDERR  "no tables on this page\n";
+            $info{ $symbol, "success" }  = 0;
+            $info{ $symbol, "errormsg" } = "Parse error";
+            next;
+        }
+
+        # GENERAL FIELDS
+        $info{ $symbol, "success" }  = 1;
+        $info{ $symbol, "method" }   = "Equinox";
+        $info{ $symbol, "symbol" }   = $symbol;
+        $info{ $symbol, "currency" } = "ZAR";
+        $info{ $symbol, "source" }   = $EQUINOX_MAINURL;
+
+        # NAME
+        $ts = $te->table_state( 0, 0 );
+        if ($ts) {
+            (@rows) = $ts->rows;
+            $info{ $symbol, "name" } = $rows[0][0];
+            $info{ $symbol, "name" } =~ s/Funds//;
+            $info{ $symbol, "name" } =~ s/Performances//;
+            $info{ $symbol, "name" } =~ s/Companies//;
+            $info{ $symbol, "name" } =~ s/Summary//;
+            $info{ $symbol, "name" } =~ s/Company//;
+            $info{ $symbol, "name" } =~ s/Management//;
+            $info{ $symbol, "name" } =~ s/A//;
+            $info{ $symbol, "name" } =~ s/Z//;
+            $info{ $symbol, "name" } =~ s/Risk//;
+            $info{ $symbol, "name" } =~ s/Funds//;
+            $info{ $symbol, "name" } =~ s/Sector//;
+            $info{ $symbol, "name" } =~ s/Funds//;
+            $info{ $symbol, "name" } =~ s/Domestic(.*)//s;
+            $info{ $symbol, "name" } =~ s/Foreign(.*)//s;
+            $info{ $symbol, "name" } =~ s/[^A-Za-z ()]//sg;
+            $info{ $symbol, "name" } =~ s/  //sg;
+            $info{ $symbol, "name" } =~ s/  //sg;
+            $info{ $symbol, "name" } =~ s/  //sg;
+            $info{ $symbol, "name" } =~ s/  //sg;
+
+        }
+
+        # LAST
+        $ts = $te->table_state( 1, 0 );
+        if ($ts) {
+            (@rows) = $ts->rows;
+            $info{ $symbol, "last" } = $rows[0][1];
+            $info{ $symbol, "last" } =~ tr/R //d;
+
+        }
+
+        # DATE
+        if ($ts) {
+            (@rows) = $ts->rows;
+
+            $quoter->store_date( \%info, $symbol, { eurodate => $rows[0][0] } );
+        }
+    }
+
+    return wantarray() ? %info : \%info;
+}
+
+1;
+
+=head1 NAME
+
+Finance::Quote::za_unittrusts - Obtain South African unit trust prices from
+www.equinox.co.za
+
+=head1 SYNOPSIS
+
+   use Finance::Quote;
+
+   $q = Finance::Quote->new;
+
+   # Don't know anything about failover yet...
+
+=head1 DESCRIPTION
+
+This module obtains information about South African Unit Trusts from
+www.equinox.co.za.
+
+=head1 LABELS RETURNED
+
+Information available from Equinox may include the following labels:
+
+method source name symbol currency date nav last price
+
+=head1 SEE ALSO
+
+Equinox website - http://www.equinox.co.za/
+
+Finance::Quote
+
+=cut
@@ -57,7 +57,7 @@ $YAHOO_CURRENCY_URL = "http://finance.yahoo.com/d/quotes.csv?e=.csv&f=l1&s=";
                 currency_lookup/;
 @EXPORT_TAGS = ( all => [@EXPORT_OK]);
 
-our $VERSION = '1.35'; # VERSION
+our $VERSION = '1.29'; # VERSION
 
 $USE_EXPERIMENTAL_UA = 0;
 
@@ -174,14 +174,14 @@ sub new {
     shift(@reqmodules) if (@reqmodules);
     # Default modules
     @modules = qw/AEX AIAHK ASEGR ASX BMONesbittBurns BSERO Bourso
-            Cdnfundlibrary Citywire CSE Currencies Deka DWS FTPortfolios Fidelity
+            Cdnfundlibrary Citywire Currencies Deka DWS FTPortfolios Fidelity
             FinanceCanada Fool FTfunds HU GoldMoney HEX IndiaMutual LeRevenu
             ManInvestments Morningstar MorningstarJP MStaruk MtGox NZX Platinum
             SEB SIXfunds SIXshares StockHouseCanada TSP TSX Tdefunds
             Tdwaterhouse Tiaacref TNetuk Troweprice Trustnet Union USFedBonds
             VWD ZA Cominvest Finanzpartner YahooJSON Yahoo::Asia
             Yahoo::Australia Yahoo::Brasil Yahoo::Europe Yahoo::NZ
-            Yahoo::USA ZA_UnitTrusts/; }
+            Yahoo::USA za_unittrusts/; }
 
   $this->_load_modules(@modules,@reqmodules);
 
@@ -3,7 +3,7 @@ use strict;
 use Test::More;
 use Finance::Quote;
 
-if ( not $ENV{ONLINE_TEST} ) {
+if (not $ENV{ONLINE_TEST}) {
     plan skip_all => 'Set $ENV{ONLINE_TEST} to run this test';
 }
 
@@ -11,19 +11,21 @@ plan tests => 65;
 
 # Test Bourso functions.
 
-my $q = Finance::Quote->new();
+my $q      = Finance::Quote->new();
 
 # my stocks = stock, fund, warrant, bond, indice
-my @stocks = ( "FR0000441677",    # Fund
-               "AF",              # Stock, EUR, Nyse Euronext
-               "MSFT",            # Stock, USD, NASDAQ
-               "SOLB",            # Stock, EUR, BRUXELLES
-               "CNP",             # Stock, EUR, Nyse Euronext
-               "FR0010371401",    # Bond
-               "FR0010707414",    # Warrant
-               "FR0003500008",    # Index
+my @stocks = (
+	"FR0000441677", # Fund
+	"AF", # Stock, EUR, Nyse Euronext
+	"MSFT", # Stock, USD, NASDAQ
+	"SOLB", # Stock, EUR, BRUXELLES
+	"CNP", # Stock, EUR, Nyse Euronext
+	"FR0010371401", # Bond
+	"FR0010707414", # Warrant
+	"FR0003500008", # Index
 );
 
+
 # Bourso tests need to cover all the possible cases:
 #
 #    Name		What		Test Case
@@ -34,54 +36,38 @@ my @stocks = ( "FR0000441677",    # Fund
 #    cours-warrant	Warrant		FR0010707414
 #    cours-indice	Index		FR0003500008
 
-my $year     = ( localtime() )[5] + 1900;
+my $year = (localtime())[5] + 1900;
 my $lastyear = $year - 1;
 
 my %quotes;
-
 #my %quotes = $q->fetch("bourso", @stocks);
 #ok(%quotes);
 
 # Check that the name, last, currency and date are defined for all of the stocks.
 foreach my $stock (@stocks) {
-    eval {
-        %quotes = $q->fetch( "bourso", $stock );
-        ok( %quotes, "$stock \%quotes defined" );
-
-        my $last = $quotes{ $stock, "last" };
-        ok( $last > 0, "$stock last ($last) > 0" );
-        ok( length( $quotes{ $stock, "name" } ),   "$stock name is defined" );
-        ok( length( $quotes{ $stock, "symbol" } ), "$stock symbol is defined" );
-        ok( $quotes{ $stock, "success" }, "$stock returned success" );
-        ok(    # indexes are quoted in percents
-            ( $stock eq "FR0003500008" )
-                || (    ( $stock eq "MSFT" )
-                     && ( $quotes{ $stock, "currency" } eq "USD" ) )
-                || ( $quotes{ $stock, "currency" } eq "EUR" ),
-            "Index is quoted in percents"
-        );
+  eval{
+  %quotes = $q->fetch("bourso", $stock);
+  ok(%quotes);
 
-    SKIP:
-        {
-            skip "date is not defined for warrants", 2
-                if ( $stock eq "FR0010707414" );
-            ok( substr( $quotes{ $stock, "isodate" }, 0, 4 ) == $year
-                    || substr( $quotes{ $stock, "isodate" }, 0, 4 )
-                    == $lastyear,
-                "$stock isodate defined"
-            );
-            ok( substr( $quotes{ $stock, "date" }, 6, 4 ) == $year
-                    || substr( $quotes{ $stock, "date" }, 6, 4 ) == $lastyear,
-                "$stock date defined"
-            );
-        }
-    };
-    if ($@) {
-        print STDERR "Error fetching stock ", $stock, "\n", $@;
-        ok( !1 );
-    }
+  ok($quotes{$stock,"last"} > 0);
+  ok(length($quotes{$stock,"name"}));
+  ok(length($quotes{$stock,"symbol"}));
+  ok($quotes{$stock,"success"});
+  ok( # indexes are quoted in percents
+	  ($stock eq "FR0003500008") ||
+	  (($stock eq "MSFT") && ($quotes{$stock, "currency"} eq "USD")) ||
+	  ($quotes{$stock, "currency"} eq "EUR") );
+  ok(substr($quotes{$stock,"isodate"},0,4) == $year ||
+       substr($quotes{$stock,"isodate"},0,4) == $lastyear);
+  ok(substr($quotes{$stock,"date"},6,4) == $year ||
+       substr($quotes{$stock,"date"},6,4) == $lastyear);
+  };
+  if ($@){
+    print STDERR "Error fetching stock ", $stock, "\n", $@;
+    ok(!1);
+  };
 }
 
 # Check that a bogus stock returns no-success.
-%quotes = $q->fetch( "bourso", "BOGUS" );
-ok( !$quotes{ "BOGUS", "success" }, "BOGUS failed correctly" );
+%quotes = $q->fetch("bourso", "BOGUS");
+ok(! $quotes{"BOGUS","success"});
@@ -1,39 +0,0 @@
-#!/usr/bin/perl -w
-use strict;
-use Test::More;
-use Finance::Quote;
-
-if (not $ENV{ONLINE_TEST}) {
-    plan skip_all => 'Set $ENV{ONLINE_TEST} to run this test';
-}
-
-plan tests => 12;
-
-# Test CSE functions.
-
-my $quoter = Finance::Quote->new();
-
-my %quotes = $quoter->cse("JKH.N0000");
-ok(%quotes);
-
-# Check that some values are defined.
-ok($quotes{"JKH.N0000","success"},"success");
-ok($quotes{"JKH.N0000","last"} > 0,"last > 0");
-ok($quotes{"JKH.N0000","volume"} > 0,"volume > 0");
-TODO: {
-    local $TODO = "No 'open' returned when market closed ?" ;
-    ok($quotes{"JKH.N0000","open"},"open is defined");
-}
-ok($quotes{"JKH.N0000","high"},"high is defined");
-ok($quotes{"JKH.N0000","low"},"low is defined");
-ok($quotes{"JKH.N0000","close"},"close is defined");
-
-# Exercise the fetch function
-%quotes = $quoter->fetch("cse", "JKH.N0000");
-ok(%quotes);
-ok($quotes{"JKH.N0000","success"});
-ok($quotes{"JKH.N0000","last"} > 0);
-
-# Check that a bogus fund returns no-success.
-%quotes = $quoter->cse("BOGUS");
-ok( ! $quotes{"BOGUS","success"});
@@ -7,7 +7,7 @@ if (not $ENV{ONLINE_TEST}) {
     plan skip_all => 'Set $ENV{ONLINE_TEST} to run this test';
 }
 
-plan tests => 1 + 3 * 6 + 2;
+plan tests => 9;
 
 # Test vwd functions.
 
@@ -15,7 +15,7 @@ my $year = (localtime())[5] + 1900;
 my $lastyear = $year - 1;
 my $q      = Finance::Quote->new("VWD");
 
-my %quotes = $q->vwd("847402","LU0309191491","971675","BOGUS");
+my %quotes = $q->vwd("847402","BOGUS");
 ok(%quotes);
 
 # Check that the last and date values are defined.
@@ -28,26 +28,6 @@ ok(substr($quotes{"847402","date"},6,4) == $year ||
    substr($quotes{"847402","date"},6,4) == $lastyear);
 ok($quotes{"847402","currency"} eq "EUR");
 
-# Check that the last and date values are defined.
-ok($quotes{"LU0309191491","success"});
-ok($quotes{"LU0309191491","last"} > 0);
-ok(length($quotes{"LU0309191491","date"}) > 0);
-ok(substr($quotes{"LU0309191491","isodate"},0,4) == $year ||
-   substr($quotes{"LU0309191491","isodate"},0,4) == $lastyear);
-ok(substr($quotes{"LU0309191491","date"},6,4) == $year ||
-   substr($quotes{"LU0309191491","date"},6,4) == $lastyear);
-ok($quotes{"LU0309191491","currency"} eq "EUR");
-
-# Check that the last and date values are defined. stock 971675
-ok($quotes{"971675","success"});
-ok($quotes{"971675","last"} > 0);
-ok(length($quotes{"971675","date"}) > 0);
-ok(substr($quotes{"971675","isodate"},0,4) == $year ||
-   substr($quotes{"971675","isodate"},0,4) == $lastyear);
-ok(substr($quotes{"971675","date"},6,4) == $year ||
-   substr($quotes{"971675","date"},6,4) == $lastyear);
-ok($quotes{"971675","currency"} eq "DKK","Currency for 971675 (".$quotes{"971675","currency"}.") = DKK");
-
 # Check that a bogus fund returns no-success.
 ok($quotes{"BOGUS","success"} == 0);
 ok($quotes{"BOGUS","errormsg"} eq "Parse error"); # invalid symbols not detected anymore
@@ -10,7 +10,7 @@ if (not $ENV{ONLINE_TEST}) {
     plan skip_all => 'Set $ENV{ONLINE_TEST} to run this test';
 }
 
-plan tests => 43;
+plan tests => 49;
 
 my $q = Finance::Quote->new();
 
@@ -44,6 +44,9 @@ foreach my $stock (@stocks) {
         my $volume = $quotes{ $stock, "volume" };
         ok( $volume > 0, "Volume $volume > 0" ) if ( $stock ne "BEL20.BR" );
 
+        my $currency = $quotes{ $stock, "currency" };
+        ok( $currency eq 'INR', "Currency ($currency) is INR" );
+
         my $type = $quotes{ $stock, "type" };
         ok( $type, "Symbol type $type" );