Index: QuantLib/ql/cashflows/fixedratecoupon.cpp
===================================================================
--- QuantLib/ql/cashflows/fixedratecoupon.cpp	(revision 16480)
+++ QuantLib/ql/cashflows/fixedratecoupon.cpp	(working copy)
@@ -89,16 +89,14 @@
                                         Compounding comp,
                                         Frequency freq) {
         couponRates_.resize(1);
-        couponRates_[0] = shared_ptr<InterestRate>(new
-            InterestRate(rate, paymentDayCounter, comp, freq));
+        couponRates_[0] = InterestRate(rate, paymentDayCounter, comp, freq);
         return *this;
     }
 
     FixedRateLeg& FixedRateLeg::withCouponRates(
                                             const InterestRate& interestRate) {
         couponRates_.resize(1);
-        couponRates_[0] = shared_ptr<InterestRate>(new
-            InterestRate(interestRate));
+        couponRates_[0] = interestRate;
         return *this;
     }
 
@@ -109,13 +107,12 @@
                                         Frequency freq) {
         couponRates_.resize(rates.size());
         for (Size i=0; i<rates.size(); ++i)
-            couponRates_[i] =  shared_ptr<InterestRate>(new
-            InterestRate(rates[i], paymentDayCounter, comp, freq));
+            couponRates_[i] = InterestRate(rates[i], paymentDayCounter, comp, freq);
         return *this;
     }
 
     FixedRateLeg& FixedRateLeg::withCouponRates(
-            const vector<shared_ptr<InterestRate> >& interestRates) {
+            const vector<InterestRate>& interestRates) {
         couponRates_ = interestRates;
         return *this;
     }
@@ -145,23 +142,23 @@
         // first period might be short or long
         Date start = schedule_.date(0), end = schedule_.date(1);
         Date paymentDate = calendar.adjust(end, paymentAdjustment_);
-        shared_ptr<InterestRate> rate = couponRates_[0];
+        InterestRate rate = couponRates_[0];
         Real nominal = notionals_[0];
         if (schedule_.isRegular(1)) {
             QL_REQUIRE(firstPeriodDC_.empty() ||
-                       firstPeriodDC_ == rate->dayCounter(),
+                       firstPeriodDC_ == rate.dayCounter(),
                        "regular first coupon "
                        "does not allow a first-period day count");
             leg.push_back(shared_ptr<CashFlow>(new
-                FixedRateCoupon(paymentDate, nominal, *rate,
+                FixedRateCoupon(paymentDate, nominal, rate,
                                 start, end, start, end)));
         } else {
             Date ref = end - schedule_.tenor();
             ref = calendar.adjust(ref, schedule_.businessDayConvention());
-            InterestRate r(rate->rate(),
-                           firstPeriodDC_.empty() ? rate->dayCounter()
+            InterestRate r(rate.rate(),
+                           firstPeriodDC_.empty() ? rate.dayCounter()
                                                   : firstPeriodDC_,
-                           rate->compounding(), rate->frequency());
+                           rate.compounding(), rate.frequency());
             leg.push_back(shared_ptr<CashFlow>(new
                 FixedRateCoupon(paymentDate, nominal, r,
                                 start, end, ref, end)));
@@ -179,7 +176,7 @@
             else
                 nominal = notionals_.back();
             leg.push_back(shared_ptr<CashFlow>(new
-                FixedRateCoupon(paymentDate, nominal, *rate,
+                FixedRateCoupon(paymentDate, nominal, rate,
                                 start, end, start, end)));
         }
         if (schedule_.size() > 2) {
@@ -197,13 +194,13 @@
                 nominal = notionals_.back();
             if (schedule_.isRegular(N-1)) {
                 leg.push_back(shared_ptr<CashFlow>(new
-                    FixedRateCoupon(paymentDate, nominal, *rate,
+                    FixedRateCoupon(paymentDate, nominal, rate,
                                     start, end, start, end)));
             } else {
                 Date ref = start + schedule_.tenor();
                 ref = calendar.adjust(ref, schedule_.businessDayConvention());
                 leg.push_back(shared_ptr<CashFlow>(new
-                    FixedRateCoupon(paymentDate, nominal, *rate,
+                    FixedRateCoupon(paymentDate, nominal, rate,
                                     start, end, start, ref)));
             }
         }
Index: QuantLib/ql/cashflows/fixedratecoupon.hpp
===================================================================
--- QuantLib/ql/cashflows/fixedratecoupon.hpp	(revision 16480)
+++ QuantLib/ql/cashflows/fixedratecoupon.hpp	(working copy)
@@ -90,14 +90,14 @@
                                       Compounding comp = Simple,
                                       Frequency freq = Annual);
         FixedRateLeg& withCouponRates(const InterestRate&);
-        FixedRateLeg& withCouponRates(const std::vector<boost::shared_ptr<InterestRate> >&);
+        FixedRateLeg& withCouponRates(const std::vector<InterestRate>&);
         FixedRateLeg& withPaymentAdjustment(BusinessDayConvention);
         FixedRateLeg& withFirstPeriodDayCounter(const DayCounter&);
         operator Leg() const;
       private:
         Schedule schedule_;
         std::vector<Real> notionals_;
-        std::vector<boost::shared_ptr<InterestRate> > couponRates_;
+        std::vector<InterestRate> couponRates_;
         DayCounter firstPeriodDC_;
         BusinessDayConvention paymentAdjustment_;
     };
Index: QuantLib/ql/instruments/bonds/fixedratebond.cpp
===================================================================
--- QuantLib/ql/instruments/bonds/fixedratebond.cpp	(revision 16480)
+++ QuantLib/ql/instruments/bonds/fixedratebond.cpp	(working copy)
@@ -108,4 +108,27 @@
         QL_ENSURE(redemptions_.size() == 1, "multiple redemptions created");
     }
 
+    FixedRateBond::FixedRateBond(Natural settlementDays,
+                                 Real faceAmount,
+                                 const Schedule& schedule,
+					             const std::vector<InterestRate>& coupons,
+                                 BusinessDayConvention paymentConvention,
+					             Real redemption,
+                                 const Date& issueDate)
+    : Bond(settlementDays, schedule.calendar(), issueDate),
+      frequency_(schedule.tenor().frequency()),
+      dayCounter_(coupons[0].dayCounter()) {
+
+        maturityDate_ = schedule.endDate();
+
+		cashflows_ = FixedRateLeg(schedule)
+            .withNotionals(faceAmount)
+            .withCouponRates(coupons)
+            .withPaymentAdjustment(paymentConvention);
+
+        addRedemptionsToCashflows(std::vector<Real>(1, redemption));
+
+        QL_ENSURE(!cashflows().empty(), "bond with no cashflows!");
+        QL_ENSURE(redemptions_.size() == 1, "multiple redemptions created");
+    }
 }
Index: QuantLib/ql/instruments/bonds/fixedratebond.hpp
===================================================================
--- QuantLib/ql/instruments/bonds/fixedratebond.hpp	(revision 16480)
+++ QuantLib/ql/instruments/bonds/fixedratebond.hpp	(working copy)
@@ -30,6 +30,7 @@
 #include <ql/instruments/bond.hpp>
 #include <ql/time/dategenerationrule.hpp>
 #include <ql/time/daycounter.hpp>
+#include <ql/interestrate.hpp>
 
 namespace QuantLib {
 
@@ -66,6 +67,13 @@
                       const Date& stubDate = Date(),
                       DateGeneration::Rule rule = DateGeneration::Backward,
                       bool endOfMonth = false);
+        FixedRateBond(Natural settlementDays,
+                      Real faceAmount,
+                      const Schedule& schedule,
+                      const std::vector<InterestRate>& coupons,
+                      BusinessDayConvention paymentConvention = Following,
+                      Real redemption = 100.0,
+                      const Date& issueDate = Date());
         Frequency frequency() const { return frequency_; }
         const DayCounter& dayCounter() const { return dayCounter_; }
       protected:
Index: QuantLib/QuantLib_vc9.vcproj
===================================================================
--- QuantLib/QuantLib_vc9.vcproj	(revision 16480)
+++ QuantLib/QuantLib_vc9.vcproj	(working copy)
@@ -9805,14 +9805,6 @@
 					>
 				</File>
 				<File
-					RelativePath=".\ql\experimental\overnightswap\eonia.cpp"
-					>
-				</File>
-				<File
-					RelativePath=".\ql\experimental\overnightswap\eonia.hpp"
-					>
-				</File>
-				<File
 					RelativePath=".\ql\experimental\overnightswap\eoniacoupon.cpp"
 					>
 				</File>
Index: QuantLib/test-suite/bonds.cpp
===================================================================
--- QuantLib/test-suite/bonds.cpp	(revision 16480)
+++ QuantLib/test-suite/bonds.cpp	(working copy)
@@ -861,14 +861,23 @@
 void BondTest::testBrazilianCached() {
 
     BOOST_MESSAGE(
-        "Testing Brazilian public bond prices against cached values...");
+        "Testing Brazilian public bond prices against Andima cached values...");
 
     CommonVars vars;
 
+    Natural settlementDays = 1;
+    Real faceAmount = 1000.0;
+    Real redemption = 100.0;
     Date today(6,June,2007);
+    Date issueDate(1,January,2007);
+
+    // The tolerance is high because Andima truncate yields
+    Real tolerance = 1.0e-4;
+
+	// Reset evaluation date
     Settings::instance().evaluationDate() = today;
 
-    // NTN-F maturity dates
+	// NTN-F maturity dates
     std::vector<Date> maturityDates(6);
     maturityDates[0] = Date(1,January,2008);
     maturityDates[1] = Date(1,January,2010);
@@ -877,7 +886,7 @@
     maturityDates[4] = Date(1,January,2014);
     maturityDates[5] = Date(1,January,2017);
 
-    // NTN-F yields
+    // Andima NTN-F yields
     std::vector<Rate> yields(6);
     yields[0] = 0.114614;
     yields[1] = 0.105726;
@@ -886,7 +895,7 @@
     yields[4] = 0.103218;
     yields[5] = 0.102948;
 
-    // NTN-F prices
+    // Andima NTN-F prices
     std::vector<Rate> prices(6);
     prices[0] = 1034.63031372;
     prices[1] = 1030.09919487;
@@ -895,19 +904,11 @@
     prices[4] = 1028.33383817;
     prices[5] = 1026.19716497;
 
-    Natural settlementDays = 1;
-    vars.faceAmount = 1000.0;
+    std::vector<InterestRate> couponRates(1);
+    couponRates[0] = InterestRate(0.1, Thirty360(), Compounded,Annual);
 
-    // The tolerance is high because Andima truncate yields
-    Real tolerance = 1.0e-4;
-
-    std::vector<boost::shared_ptr<InterestRate> > couponRates(1);
-    couponRates[0] = boost::shared_ptr<InterestRate>(new
-        InterestRate(0.1, Thirty360(), Compounded,Annual));
-
     for (Size bondIndex = 0; bondIndex < maturityDates.size(); bondIndex++) {
 
-        // plain
         InterestRate yield(yields[bondIndex],
                            Business252(Brazil()),
                            Compounded, Annual);
@@ -918,28 +919,27 @@
                           Unadjusted, Unadjusted,
                           DateGeneration::Backward, false);
 
-        // fixed coupons
-        Leg cashflows =
-            FixedRateLeg(schedule)
-            .withNotionals(vars.faceAmount)
-            .withCouponRates(couponRates)
-            .withPaymentAdjustment(ModifiedFollowing);
-        // redemption
-        cashflows.push_back(boost::shared_ptr<CashFlow>(
-              new SimpleCashFlow(vars.faceAmount, cashflows.back()->date())));
+        FixedRateBond bond(settlementDays,
+            faceAmount,
+			schedule,
+			couponRates,
+			Following,
+			redemption,
+            issueDate);
 
-        Bond bond(settlementDays, Brazil(Brazil::Settlement),
-                  vars.faceAmount, cashflows.back()->date(),
-                  Date(1,January,2007), cashflows);
+		Real cachedPrice = prices[bondIndex];
 
-        Real cachedPrice = prices[bondIndex];
+		BOOST_MESSAGE(maturityDates[bondIndex]);
+		BOOST_MESSAGE(faceAmount);
+		BOOST_MESSAGE(BondFunctions::cleanPrice(bond, yield.rate(), yield.dayCounter(), yield.compounding(), yield.frequency(), today));
+		BOOST_MESSAGE(bond.accruedAmount(today));
 
-        Real price = vars.faceAmount *
+        Real price = faceAmount *
             (BondFunctions::cleanPrice(bond, yield.rate(), yield.dayCounter(),
                                  yield.compounding(), yield.frequency(),
                                  today) + bond.accruedAmount(today)) / 100.0;
         if (std::fabs(price-cachedPrice) > tolerance) {
-            BOOST_ERROR("failed to reproduce cached price:\n"
+            BOOST_ERROR("failed to reproduce Andima cached price:\n"
                         << QL_FIXED
                         << "    calculated: " << price << "\n"
                         << "    expected:   " << cachedPrice << "\n"
@@ -949,18 +949,16 @@
     }
 }
 
-
-
 test_suite* BondTest::suite() {
     test_suite* suite = BOOST_TEST_SUITE("Bond tests");
 
-    suite->add(QUANTLIB_TEST_CASE(&BondTest::testYield));
+    /*suite->add(QUANTLIB_TEST_CASE(&BondTest::testYield));
     suite->add(QUANTLIB_TEST_CASE(&BondTest::testZspread));
     suite->add(QUANTLIB_TEST_CASE(&BondTest::testTheoretical));
     suite->add(QUANTLIB_TEST_CASE(&BondTest::testCached));
     suite->add(QUANTLIB_TEST_CASE(&BondTest::testCachedZero));
     suite->add(QUANTLIB_TEST_CASE(&BondTest::testCachedFixed));
-    suite->add(QUANTLIB_TEST_CASE(&BondTest::testCachedFloating));
+    suite->add(QUANTLIB_TEST_CASE(&BondTest::testCachedFloating));*/
     suite->add(QUANTLIB_TEST_CASE(&BondTest::testBrazilianCached));
     return suite;
 }
Index: QuantLib/test-suite/quantlibtestsuite.cpp
===================================================================
--- QuantLib/test-suite/quantlibtestsuite.cpp	(revision 16480)
+++ QuantLib/test-suite/quantlibtestsuite.cpp	(working copy)
@@ -210,16 +210,16 @@
     test->add(QUANTLIB_TEST_CASE(startTimer));
     test->add(QUANTLIB_TEST_CASE(configure));
 
-    test->add(AmericanOptionTest::suite());
+    /*test->add(AmericanOptionTest::suite());
     test->add(ArrayTest::suite());
     test->add(AsianOptionTest::suite());
     test->add(AssetSwapTest::suite()); // fails with QL_USE_INDEXED_COUPON
     test->add(BarrierOptionTest::suite());
     test->add(BasketOptionTest::suite());
     test->add(BatesModelTest::suite());
-    test->add(BermudanSwaptionTest::suite());
+    test->add(BermudanSwaptionTest::suite());*/
     test->add(BondTest::suite());
-    test->add(BrownianBridgeTest::suite());
+    /*test->add(BrownianBridgeTest::suite());
     test->add(CalendarTest::suite());
     test->add(CapFloorTest::suite());
     test->add(CapFlooredCouponTest::suite());
@@ -309,7 +309,7 @@
     //tests for deprecated classes
     test->add(CompoundForwardTest::suite()); // fails with QL_USE_INDEXED_COUPON
     test->add(LiborMarketModelTest::suite());
-    test->add(LiborMarketModelProcessTest::suite());
+    test->add(LiborMarketModelProcessTest::suite());*/
 
     test->add(QUANTLIB_TEST_CASE(stopTimer));
 
Index: QuantLibAddin/gensrc/metadata/functions/bonds.xml
===================================================================
--- QuantLibAddin/gensrc/metadata/functions/bonds.xml	(revision 16480)
+++ QuantLibAddin/gensrc/metadata/functions/bonds.xml	(working copy)
@@ -873,6 +873,65 @@
       </ParameterList>
     </Constructor>
 
+    <Constructor name='qlFixedRateBond2'>
+      <libraryFunction>FixedRateBond</libraryFunction>
+      <SupportedPlatforms>
+        <!--SupportedPlatform name='Excel' calcInWizard='false'/-->
+        <SupportedPlatform name='Excel'/>
+        <SupportedPlatform name='Cpp'/>
+      </SupportedPlatforms>
+      <ParameterList>
+        <Parameters>
+          <Parameter name='Description' default='"no description available"'>
+            <type>string</type>
+            <tensorRank>scalar</tensorRank>
+            <description>bond description string.</description>
+          </Parameter>
+          <Parameter name='Currency' examplevalue='EUR'>
+            <type>QuantLib::Currency</type>
+            <tensorRank>scalar</tensorRank>
+            <description>bond Currency.</description>
+          </Parameter>
+          <Parameter name='SettlementDays' exampleValue='3'>
+            <type>QuantLib::Size</type>
+            <tensorRank>scalar</tensorRank>
+            <description>settlement days.</description>
+          </Parameter>
+          <Parameter name='FaceAmount' default='100.0'>
+            <type>QuantLib::Real</type>
+            <tensorRank>scalar</tensorRank>
+            <description>Face nominal amount.</description>
+          </Parameter>
+          <Parameter name='ScheduleID'>
+            <type>QuantLib::Schedule</type>
+            <superType>libraryClass</superType>
+            <tensorRank>scalar</tensorRank>
+            <description>Schedule object ID.</description>
+          </Parameter>
+          <Parameter name='Coupons'>
+            <type>QuantLib::InterestRate</type>
+            <tensorRank>vector</tensorRank>
+            <description>coupon fixed rates.</description>
+          </Parameter>
+          <Parameter name='PaymentBDC' default='"Following"'>
+            <type>QuantLib::BusinessDayConvention</type>
+            <tensorRank>scalar</tensorRank>
+            <description>payment business day convention.</description>
+          </Parameter>
+          <Parameter name='Redemption' default='100.0'>
+            <type>QuantLib::Real</type>
+            <tensorRank>scalar</tensorRank>
+            <description>Redemption value.</description>
+          </Parameter>
+          <Parameter name='IssueDate' default='QuantLib::Date()'>
+            <type>QuantLib::Date</type>
+            <tensorRank>scalar</tensorRank>
+            <description>issue date: the bond can't be traded until then.</description>
+          </Parameter>
+        </Parameters>
+      </ParameterList>
+    </Constructor>
+
     <Constructor name='qlFloatingRateBond'>
       <libraryFunction>FloatingRateBond</libraryFunction>
       <SupportedPlatforms>
Index: QuantLibAddin/qlo/bonds.cpp
===================================================================
--- QuantLibAddin/qlo/bonds.cpp	(revision 16480)
+++ QuantLibAddin/qlo/bonds.cpp	(working copy)
@@ -35,6 +35,7 @@
 #include <ql/cashflows/couponpricer.hpp>
 #include <ql/pricingengines/bond/discountingbondengine.hpp>
 #include <ql/currency.hpp>
+#include <ql/interestrate.hpp>
 
 using std::vector;
 using boost::shared_ptr;
@@ -182,7 +183,35 @@
                                     rule));
     }
 
+    FixedRateBond::FixedRateBond(
+            const shared_ptr<ObjectHandler::ValueObject>& properties,
+            const std::string& des,
+            const QuantLib::Currency& cur,
+            QuantLib::Natural settlementDays,
+            QuantLib::Real faceAmount,
+            const shared_ptr<QuantLib::Schedule>& schedule,
+            const std::vector<boost::shared_ptr<QuantLib::InterestRate> >& coupons,
+            QuantLib::BusinessDayConvention paymentConvention,
+            QuantLib::Real redemption,
+            const QuantLib::Date& issueDate,
+            bool permanent) : Bond(properties, permanent)
+    {
+		vector<QuantLib::InterestRate> couponRate(coupons.size());
 
+		for(QuantLib::Size couponIndex = 0; couponIndex < coupons.size(); couponIndex++)
+		{
+			couponRate[couponIndex] = *coupons[couponIndex];
+		}
+
+        libraryObject_ = shared_ptr<QuantLib::Instrument>(new
+            QuantLib::FixedRateBond(settlementDays, faceAmount,
+                                    *schedule,
+                                    couponRate,
+                                    paymentConvention,
+									redemption,
+                                    issueDate));
+    }
+
     FloatingRateBond::FloatingRateBond(
             const shared_ptr<ObjectHandler::ValueObject>& properties,
             const std::string&,
Index: QuantLibAddin/qlo/bonds.hpp
===================================================================
--- QuantLibAddin/qlo/bonds.hpp	(revision 16480)
+++ QuantLibAddin/qlo/bonds.hpp	(working copy)
@@ -121,6 +121,18 @@
             const QuantLib::Date& stubDate,
             QuantLib::DateGeneration::Rule rule,
             bool permanent);
+        FixedRateBond(
+            const boost::shared_ptr<ObjectHandler::ValueObject>& properties,
+            const std::string& des,
+            const QuantLib::Currency& cur,
+            QuantLib::Natural settlementDays,
+            QuantLib::Real faceAmount,
+            const boost::shared_ptr<QuantLib::Schedule>& schedule,
+            const std::vector<boost::shared_ptr<QuantLib::InterestRate> >& coupons,
+            QuantLib::BusinessDayConvention paymentConvention,
+            QuantLib::Real redemption,
+            const QuantLib::Date& issueDate,
+            bool permanent);
     };
 
     class FloatingRateBond : public Bond {
Index: QuantLibAddin/qlo/couponvectors.cpp
===================================================================
--- QuantLibAddin/qlo/couponvectors.cpp	(revision 16480)
+++ QuantLibAddin/qlo/couponvectors.cpp	(working copy)
@@ -82,9 +82,16 @@
                     bool perm)
     : Leg(p, perm)
     {
-        leg_ = QuantLib::FixedRateLeg(*schedule)
+		vector<QuantLib::InterestRate> coupons(couponRates.size());
+
+		for(QuantLib::Size couponIndex = 0; couponIndex < couponRates.size(); couponIndex++)
+		{
+			coupons[couponIndex] = *couponRates[couponIndex];
+		}
+
+		leg_ = QuantLib::FixedRateLeg(*schedule)
             .withNotionals(nominals)
-            .withCouponRates(couponRates)
+            .withCouponRates(coupons)
             .withPaymentAdjustment(paymentConvention);
     }
 
