diff --git a/lib/steem/broadcast.rb b/lib/steem/broadcast.rb
index fca4184b7ec31074ef1c72ba2278775c93ff2a30..da1748b1bd9fd78178f96b843479393e6f9c26be 100644
--- a/lib/steem/broadcast.rb
+++ b/lib/steem/broadcast.rb
@@ -32,7 +32,7 @@ module Steem
   class Broadcast
     extend Retriable
     
-    DEFAULT_MAX_ACCEPTED_PAYOUT = Type::Amount.new(["1000000000", 3, "@@000000013"])
+    DEFAULT_MAX_ACCEPTED_PAYOUT = Type::Amount.new(amount: '1000000000', precision: 3, nai: '@@000000013')
     
     # This operation is used to cast a vote on a post/comment.
     # 
@@ -174,9 +174,9 @@ module Steem
       }]]
       
       max_accepted_payout = if params.keys.include? :max_accepted_payout
-        Type::Amount.to_nia(params[:max_accepted_payout])
+        normalize_amount(options.merge amount: params[:max_accepted_payout])
       else
-        DEFAULT_MAX_ACCEPTED_PAYOUT.to_nia
+        normalize_amount(options.merge amount: DEFAULT_MAX_ACCEPTED_PAYOUT)
       end
       
       allow_votes = if params.keys.include? :allow_votes
@@ -274,7 +274,7 @@ module Steem
       params = options[:params]
       check_required_fields(params, *required_fields)
       
-      params[:amount] = Type::Amount.to_nia(params[:amount])
+      params[:amount] = normalize_amount(options.merge amount: params[:amount])
       
       ops = [[:transfer, params]]
       
@@ -310,7 +310,7 @@ module Steem
       params = options[:params]
       check_required_fields(params, *required_fields)
       
-      params[:amount] = Type::Amount.to_nia(params[:amount])
+      params[:amount] = normalize_amount(options.merge amount: params[:amount])
       
       ops = [[:transfer_to_vesting, params]]
       
@@ -336,7 +336,7 @@ module Steem
       params = options[:params]
       check_required_fields(params, *required_fields)
       
-      params[:vesting_shares] = Type::Amount.to_nia(params[:vesting_shares])
+      params[:vesting_shares] = normalize_amount(options.merge amount: params[:vesting_shares])
       
       ops = [[:withdraw_vesting, params]]
       
@@ -363,8 +363,8 @@ module Steem
       params = options[:params]
       check_required_fields(params, *required_fields)
       
-      params[:amount_to_sell] = Type::Amount.to_nia(params[:amount_to_sell])
-      params[:min_to_receive] = Type::Amount.to_nia(params[:min_to_receive])
+      params[:amount_to_sell] = normalize_amount(options.merge amount: params[:amount_to_sell])
+      params[:min_to_receive] = normalize_amount(options.merge amount: params[:min_to_receive])
       
       if !!params[:expiration]
         params[:expiration] = Time.parse(params[:expiration].to_s)
@@ -414,8 +414,8 @@ module Steem
       exchange_rate = params[:exchange_rate] rescue nil || {}
       base = exchange_rate[:base]
       quote = exchange_rate[:quote]
-      params[:exchange_rate][:base] = Type::Amount.to_nia(base)
-      params[:exchange_rate][:quote] = Type::Amount.to_nia(quote)
+      params[:exchange_rate][:base] = normalize_amount(options.merge amount: base)
+      params[:exchange_rate][:quote] = normalize_amount(options.merge amount: quote)
       
       ops = [[:feed_publish, params]]
       
@@ -438,7 +438,7 @@ module Steem
       params = options[:params]
       check_required_fields(params, *required_fields)
       
-      params[:amount] = Type::Amount.to_nia(params[:amount])
+      params[:amount] = normalize_amount(options.merge amount: params[:amount])
       
       ops = [[:convert, params]]
       
@@ -502,7 +502,7 @@ module Steem
       
       check_required_fields(params, *required_fields)
       
-      params[:fee] = Type::Amount.to_nia(params[:fee])
+      params[:fee] = normalize_amount(options.merge amount: params[:fee])
       
       ops = [[:account_create, params]]
       
@@ -603,8 +603,8 @@ module Steem
       check_required_fields(params, *required_fields)
       
       account_creation_fee = params[:props][:account_creation_fee] rescue nil
-      params[:props][:account_creation_fee] = Type::Amount.to_nia(account_creation_fee)
-      params[:fee] = Type::Amount.to_nia(params[:fee])
+      params[:props][:account_creation_fee] = normalize_amount(options.merge amount: account_creation_fee)
+      params[:fee] = normalize_amount(options.merge amount: params[:fee])
       
       ops = [[:witness_update, params]]
       
@@ -844,9 +844,9 @@ module Steem
       
       check_required_fields(params, *required_fields)
       
-      params[:sbd_amount] = Type::Amount.to_nia(params[:sbd_amount])
-      params[:steem_amount] = Type::Amount.to_nia(params[:steem_amount])
-      params[:fee] = Type::Amount.to_nia(params[:fee])
+      params[:sbd_amount] = normalize_amount(options.merge amount: params[:sbd_amount])
+      params[:steem_amount] = normalize_amount(options.merge amount: params[:steem_amount])
+      params[:fee] = normalize_amount(options.merge amount: params[:fee])
       
       params[:ratification_deadline] = Time.parse(params[:ratification_deadline].to_s)
       params[:ratification_deadline] = params[:ratification_deadline].strftime('%Y-%m-%dT%H:%M:%S')
@@ -905,8 +905,8 @@ module Steem
       params = options[:params]
       check_required_fields(params, *required_fields)
       
-      params[:sbd_amount] = Type::Amount.to_nia(params[:sbd_amount])
-      params[:steem_amount] = Type::Amount.to_nia(params[:steem_amount])
+      params[:sbd_amount] = normalize_amount(options.merge amount: params[:sbd_amount])
+      params[:steem_amount] = normalize_amount(options.merge amount: params[:steem_amount])
 
       ops = [[:escrow_release, params]]
       
@@ -954,7 +954,7 @@ module Steem
       check_required_fields(params, *required_fields)
       
       params[:memo] ||= ''
-      params[:amount] = Type::Amount.to_nia(params[:amount])
+      params[:amount] = normalize_amount(options.merge amount: params[:amount])
 
       ops = [[:transfer_to_savings, params]]
       
@@ -977,7 +977,7 @@ module Steem
       check_required_fields(params, *required_fields)
       
       params[:memo] ||= ''
-      params[:amount] = Type::Amount.to_nia(params[:amount])
+      params[:amount] = normalize_amount(options.merge amount: params[:amount])
 
       ops = [[:transfer_from_savings, params]]
       
@@ -1039,7 +1039,7 @@ module Steem
       params = options[:params]
       check_required_fields(params, *required_fields)
       
-      params[:vesting_shares] = Type::Amount.to_nia(params[:vesting_shares])
+      params[:vesting_shares] = normalize_amount(options.merge amount: params[:vesting_shares])
       ops = [[:delegate_vesting_shares, params]]
       
       process(options.merge(ops: ops), &block)
@@ -1075,8 +1075,8 @@ module Steem
       
       check_required_fields(params, *required_fields)
       
-      params[:fee] = Type::Amount.to_nia(params[:fee])
-      params[:delegation] = Type::Amount.to_nia(params[:delegation])
+      params[:fee] = normalize_amount(options.merge amount: params[:fee])
+      params[:delegation] = normalize_amount(options.merge amount: params[:delegation])
       params[:extensions] ||= []
       
       ops = [[:account_create_with_delegation, params]]
@@ -1097,9 +1097,17 @@ module Steem
         trx = tx.transaction
         
         response = if !!options[:pretend]
-          database_api(options).verify_authority(trx: trx)
+          if !!options[:app_base] || !!options[:app_base]
+            database_api(options).verify_authority(trx: trx)
+          else
+            database_api(options).verify_authority(trx)
+          end
         else
-          network_broadcast_api(options).broadcast_transaction_synchronous(trx: trx)
+          if !!options[:app_base] || !!options[:app_base]
+            network_broadcast_api(options).broadcast_transaction(trx: trx)
+          else
+            network_broadcast_api(options).broadcast_transaction_synchronous(trx)
+          end
         end
         
         break
@@ -1120,13 +1128,30 @@ module Steem
     end
   private
     # @private
+    def self.normalize_amount(options)
+      if options[:app_base].nil? || !!options[:app_base]
+        Type::Amount.to_h(options[:amount])
+      else
+        Type::Amount.to_s(options[:amount])
+      end
+    end
+    
+    # @privats
     def self.database_api(options)
-      options[:database_api] ||= Steem::DatabaseApi.new(options)
+      options[:database_api] ||= if options[:app_base].nil? || !!options[:app_base]
+        Steem::DatabaseApi.new(options)
+      else
+        Steem::CondenserApi.new(options)
+      end
     end
     
     # @private
     def self.network_broadcast_api(options)
-      options[:network_broadcast_api] ||= Steem::NetworkBroadcastApi.new(options)
+      options[:network_broadcast_api] ||= if options[:app_base].nil? || !!options[:app_base]
+        Steem::NetworkBroadcaseApi.new(options)
+      else
+        Steem::CondenserApi.new(options)
+      end
     end
     
     # @private
diff --git a/lib/steem/transaction_builder.rb b/lib/steem/transaction_builder.rb
index c6c1125c9659fda63d2e69919196d1c6e773e0fb..19382705b0b717366c3f18d71cefedb2e2e1fd4f 100644
--- a/lib/steem/transaction_builder.rb
+++ b/lib/steem/transaction_builder.rb
@@ -26,13 +26,25 @@ module Steem
     include ChainConfig
     include Utils
     
-    attr_accessor :database_api, :block_api, :expiration, :operations
+    attr_accessor :app_base, :database_api, :block_api, :expiration, :operations
     attr_writer :wif
     attr_reader :signed
     
+    alias app_base? app_base
+    
     def initialize(options = {})
-      @database_api = options[:database_api] || Steem::DatabaseApi.new(options)
-      @block_api = options[:block_api] || Steem::BlockApi.new(options)
+      @app_base = options[:app_base].nil? || !!options[:app_base]
+      @database_api = options[:database_api]
+      @block_api = options[:block_api]
+      
+      if app_base?
+        @database_api ||= Steem::DatabaseApi.new(options)
+        @block_api ||= Steem::BlockApi.new(options)
+      else
+        @database_api ||= Steem::CondenserApi.new(options)
+        @block_api ||= Steem::CondenserApi.new(options)
+      end
+      
       @wif = [options[:wif]].flatten
       @signed = false
       
@@ -114,9 +126,18 @@ module Steem
         catch :prepare_header do; begin
           @database_api.get_dynamic_global_properties do |properties|
             block_number = properties.last_irreversible_block_num
+            block_header_args = if app_base?
+              {block_num: block_number}
+            else
+              block_number
+            end
           
-            @block_api.get_block_header(block_num: block_number) do |result|
-              header = result.header
+            @block_api.get_block_header(block_header_args) do |result|
+              header = if app_base?
+                result.header
+              else
+                result
+              end
               
               @ref_block_num = (block_number - 1) & 0xFFFF
               @ref_block_prefix = unhexlify(header.previous[8..-1]).unpack('V*')[0]
@@ -138,7 +159,7 @@ module Steem
     
     # Sets operations all at once, then prepares.
     def operations=(operations)
-      @operations = operations
+      @operations = operations.map{ |op| normalize_operation(op) }
       prepare
       @operations
     end
@@ -167,34 +188,8 @@ module Steem
     # @return {TransactionBuilder}
     def put(type, op = nil)
       @expiration = nil
-      
-      ## Saving this for later.  This block, or something like it, might replace
-      ## API broadcast operation structure.
-      # case type
-      # when Symbol, String
-      #   type_value = "#{type}_operation"
-      #   @operations << {type: type_value, value: op}
-      # when Hash
-      #   type_value = "#{type.keys.first}_operation"
-      #   @operations << {type: type_value, value: type.values.first}
-      # when Array
-      #   type_value = "#{type[0]}_operation"
-      #   @operations << {type: type_value, value: type[1]}
-      # else
-      #   # don't know what to do with it, skipped
-      # end
-      
-      case type
-      when Symbol then @operations << [type, op]
-      when String then @operations << [type.to_sym, op]
-      when Hash then @operations << [type.keys.first.to_sym, type.values.first]
-      when Array then @operations << type
-      else
-        # don't know what to do with it, skipped
-      end
-      
+      @operations << normalize_operation(type, op)
       prepare
-      
       self
     end
     
@@ -240,8 +235,20 @@ module Steem
       
       unless @signed
         catch :serialize do; begin
-          @database_api.get_transaction_hex(trx: trx) do |result|
-            hex = @chain_id + result.hex[0..-4] # Why do we have to chop the last two bytes?
+          transaction_hex_args = if app_base?
+            {trx: trx}
+          else
+            trx
+          end
+          
+          @database_api.get_transaction_hex(transaction_hex_args) do |result|
+            hex = if app_base?
+              result.hex
+            else
+              result
+            end
+            
+            hex = @chain_id + hex[0..-4] # Why do we have to chop the last two bytes?
             digest = unhexlify(hex)
             digest_hex = Digest::SHA256.digest(digest)
             private_keys = @wif.map{ |wif| Bitcoin::Key.from_base58 wif }
@@ -283,8 +290,18 @@ module Steem
     
     # @return [Array] All public keys that could possibly sign for a given transaction.
     def potential_signatures
-      @database_api.get_potential_signatures(trx: transaction) do |result|
-        result[:keys]
+      potential_signatures_args = if app_base?
+        {trx: transaction}
+      else
+        transaction
+      end
+      
+      @database_api.get_potential_signatures(potential_signatures_args) do |result|
+        if app_base?
+          result[:keys]
+        else
+          result
+        end
       end
     end
     
@@ -294,15 +311,35 @@ module Steem
     #
     # @return [Array] The minimal subset of public keys that should add signatures to the transaction.
     def required_signatures
-      @database_api.get_required_signatures(trx: transaction) do |result|
-        result[:keys]
+      required_signatures_args = if app_base?
+        {trx: transaction}
+      else
+        [transaction, []]
+      end
+      
+      @database_api.get_required_signatures(*required_signatures_args) do |result|
+        if app_base?
+          result[:keys]
+        else
+          result
+        end
       end
     end
     
     # @return [Boolean] True if the transaction has all of the required signatures.
     def valid?
-      @database_api.verify_authority(trx: transaction) do |result|
-        result.valid
+      verify_authority_args = if app_base?
+        {trx: transaction}
+      else
+        transaction
+      end
+      
+      @database_api.verify_authority(verify_authority_args) do |result|
+        if app_base?
+          result.valid
+        else
+          result
+        end
       end
     end
   private
@@ -318,5 +355,32 @@ module Steem
         ((sig[33] & 0x80 ) != 0)
       )
     end
+    
+    def normalize_operation(type, op = nil)
+      if app_base?
+        case type
+        when Symbol, String
+          type_value = "#{type}_operation"
+          {type: type_value, value: op}
+        when Hash
+          type_value = "#{type.keys.first}_operation"
+          {type: type_value, value: type.values.first}
+        when Array
+          type_value = "#{type[0]}_operation"
+          {type: type_value, value: type[1]}
+        else
+          raise Steem::ArgumentError, "Don't know what to do with operation type #{type.class}: #{type} (#{op})"
+        end
+      else
+        case type
+        when Symbol then [type, op]
+        when String then [type.to_sym, op]
+        when Hash then [type.keys.first.to_sym, type.values.first]
+        when Array then type
+        else
+          raise Steem::ArgumentError, "Don't know what to do with operation type #{type.class}: #{type} (#{op})"
+        end
+      end
+    end
   end
 end
diff --git a/lib/steem/type/amount.rb b/lib/steem/type/amount.rb
index 11ef3762ca75f9c7e3b1566adbe5d112aea45872..3caf2be711572e9b782f4a00730614ed370bca02 100644
--- a/lib/steem/type/amount.rb
+++ b/lib/steem/type/amount.rb
@@ -3,8 +3,10 @@ module Steem
     
     # See: https://github.com/xeroc/piston-lib/blob/34a7525cee119ec9b24a99577ede2d54466fca0e/steembase/operations.py
     class Amount < BaseType
-      def self.to_nia(amount)
-        new(amount).to_nia
+      attr_reader :amount, :precision, :nai, :asset
+      
+      def self.to_h(amount)
+        new(amount).to_h
       end
       
       def self.to_s(amount)
@@ -16,15 +18,33 @@ module Steem
         
         case value
         when Array
-          a, p, t = value
-          @asset = case t
+          @amount, @precision, @nai = value
+          @asset = case @nai
           when '@@000000013' then 'SBD'
           when '@@000000021' then 'STEEM'
           when '@@000000037' then 'VESTS'
-          else; raise TypeError, "Asset #{@asset} unknown."
+          else; raise TypeError, "Asset #{@nai} unknown."
+          end
+          
+          @amount = "%.#{@precision}f" % (@amount.to_f / 10 ** @precision)
+        when Hash
+          @amount, @precision, @nai = value.map do |k, v|
+            v if %i(amount precision nai).include? k.to_sym
+          end.compact
+          
+          @asset = case @nai
+          when '@@000000013' then 'SBD'
+          when '@@000000021' then 'STEEM'
+          when '@@000000037' then 'VESTS'
+          else; raise TypeError, "Asset #{@nai} unknown."
           end
-          @precision = p
-          @amount = "%.#{p}f" % (a.to_f / 10 ** p)
+          
+          @amount = "%.#{@precision}f" % (@amount.to_f / 10 ** @precision)
+        when Amount
+          @precision = value.precision
+          @nai = value.nai
+          @asset = value.asset
+          @amount = value.amount
         else
           @amount, @asset = value.strip.split(' ') rescue ['', '']
           @precision = case @asset
@@ -45,7 +65,7 @@ module Steem
         asset
       end
       
-      def to_nia
+      def to_a
         case @asset
         when 'STEEM' then [(@amount.to_f * 1000).to_i.to_s, 3, '@@000000021']
         when 'VESTS' then [(@amount.to_f * 1000000).to_i.to_s, 6, '@@000000037']
@@ -53,6 +73,26 @@ module Steem
         end
       end
       
+      def to_h
+        case @asset
+        when 'STEEM' then {
+          amount: (@amount.to_f * 1000).to_i.to_s,
+          precision: 3,
+          nai: '@@000000021'
+        }
+        when 'VESTS' then {
+          amount: (@amount.to_f * 1000000).to_i.to_s,
+          precision: 6,
+          nai: '@@000000037'
+        }
+        when 'SBD' then {
+          amount: (@amount.to_f * 1000).to_i.to_s,
+          precision: 3,
+          nai: '@@000000013'
+        }
+        end
+      end
+      
       def to_s
         "#{@amount} #{@asset}"
       end
diff --git a/test/steem/amount_test.rb b/test/steem/amount_test.rb
index e4055ea0694c01854d9caaaa21f0eae180a9b22a..fbda79fd6a65096205bb6dec17bc7f9b3500cbd4 100644
--- a/test/steem/amount_test.rb
+++ b/test/steem/amount_test.rb
@@ -16,13 +16,13 @@ module Steem
       end
     end
     
-    def test_to_nia
-      assert_equal ['0', 3, '@@000000013'], Steem::Type::Amount.to_nia('0.000 SBD')
-      assert_equal ['0', 3, '@@000000021'], Steem::Type::Amount.to_nia('0.000 STEEM')
-      assert_equal ['0', 6, '@@000000037'], Steem::Type::Amount.to_nia('0.000 VESTS')
+    def test_to_h
+      assert_equal({amount: '0', precision: 3, nai: '@@000000013'}, Steem::Type::Amount.to_h('0.000 SBD'))
+      assert_equal({amount: '0', precision: 3, nai: '@@000000021'}, Steem::Type::Amount.to_h('0.000 STEEM'))
+      assert_equal({amount: '0', precision: 6, nai: '@@000000037'}, Steem::Type::Amount.to_h('0.000000 VESTS'))
       
       assert_raises TypeError do
-        Steem::Type::Amount.to_nia('0.000 BOGUS')
+        Steem::Type::Amount.to_h('0.000 BOGUS')
       end
     end
     
diff --git a/test/steem/block_api_test.rb b/test/steem/block_api_test.rb
index f31c87db1358febd9b87edf1280b87b8546690b9..b901fb2339376e0d35cf1e0286062b32aa24f3d6 100644
--- a/test/steem/block_api_test.rb
+++ b/test/steem/block_api_test.rb
@@ -105,7 +105,7 @@ module Steem
                               fee1 = Type::Amount.new(op1[1][:fee])
                               fee2 = Type::Amount.new(op2[1][:fee])
                               
-                              assert_equal fee2.to_nia, fee1.to_nia, "expect the same fee"
+                              assert_equal fee2.to_h, fee1.to_h, "expect the same fee"
                             else
                               assert_equal op2[1][key], op1[1][key], "expect the same operation #{key}"
                             end
diff --git a/test/steem/broadcast_test.rb b/test/steem/broadcast_test.rb
index c0fab34e16d22f087b02197be342a3121fff7e43..abd06337dd6776d4bc4d9037c06841d0d301897c 100644
--- a/test/steem/broadcast_test.rb
+++ b/test/steem/broadcast_test.rb
@@ -10,16 +10,23 @@ module Steem
       transfer_to_vesting vote withdraw_vesting witness_update)
     
     def setup
-      @database_api = Steem::DatabaseApi.new(url: TEST_NODE)
-      @block_api = BlockApi.new(url: TEST_NODE)
-      @network_broadcast_api = Steem::NetworkBroadcastApi.new(url: TEST_NODE)
-      @jsonrpc = Jsonrpc.new(url: TEST_NODE)
+      app_base = true # TODO: Randomly set true or false to test differences.
+      
+      if app_base
+        @database_api = Steem::DatabaseApi.new(url: TEST_NODE)
+        @block_api = Steem::BlockApi.new(url: TEST_NODE)
+        @network_broadcast_api = Steem::NetworkBroadcastApi.new(url: TEST_NODE)
+      else
+        @database_api = @block_api = @network_broadcast_api = Steem::CondenserApi.new(url: TEST_NODE)
+      end
       
+      @jsonrpc = Jsonrpc.new(url: TEST_NODE)
       @account_name = ENV.fetch('TEST_ACCOUNT_NAME', 'social')
       @wif = ENV.fetch('TEST_WIF', '5JrvPrQeBBvCRdjv29iDvkwn3EQYZ9jqfAHzrCyUvfbEbRkrYFC')
       @pretend = true
       
       @broadcast_options = {
+        app_base: app_base,
         database_api: @database_api,
         block_api: @block_api,
         network_broadcast_api: @network_broadcast_api,
@@ -42,7 +49,11 @@ module Steem
       
       vcr_cassette('broadcast_vote') do
         Broadcast.vote(@broadcast_options.merge(options)) do |result|
-          assert result.valid
+          if result.respond_to? :valid
+            assert result.valid
+          else
+            assert result
+          end
         end
       end
     end
@@ -66,7 +77,11 @@ module Steem
       
       vcr_cassette('broadcast_vote_multisig') do
         Broadcast.vote(@broadcast_options.merge(options)) do |result|
-          assert result.valid
+          if result.respond_to? :valid
+            assert result.valid
+          else
+            assert result
+          end
         end
       end
     end
@@ -135,7 +150,12 @@ module Steem
       }
       
       vcr_cassette('broadcast_vote_no_closure') do
-        assert Broadcast.vote(@broadcast_options.merge(options)).valid
+        result = Broadcast.vote(@broadcast_options.merge(options))
+        if result.respond_to? :valid
+          assert result.valid
+        else
+          assert result
+        end
       end
     end
     
@@ -152,7 +172,11 @@ module Steem
       
       vcr_cassette('broadcast_comment') do
         Broadcast.comment(@broadcast_options.merge(options)) do |result|
-          assert result.valid
+          if result.respond_to? :valid
+            assert result.valid
+          else
+            assert result
+          end
         end
       end
     end
@@ -171,7 +195,11 @@ module Steem
       
       vcr_cassette('broadcast_comment_with_author_vote_weight') do
         Broadcast.comment(@broadcast_options.merge(options)) do |result|
-          assert result.valid
+          if result.respond_to? :valid
+            assert result.valid
+          else
+            assert result
+          end
         end
       end
     end
@@ -190,7 +218,11 @@ module Steem
       
       vcr_cassette('broadcast_comment') do
         Broadcast.comment(@broadcast_options.merge(options)) do |result|
-          assert result.valid
+          if result.respond_to? :valid
+            assert result.valid
+          else
+            assert result
+          end
         end
       end
     end
@@ -266,7 +298,11 @@ module Steem
       
       vcr_cassette('broadcast_delete_comment') do
         Broadcast.delete_comment(@broadcast_options.merge(options)) do |result|
-          assert result.valid
+          if result.respond_to? :valid
+            assert result.valid
+          else
+            assert result
+          end
         end
       end
     end
@@ -308,7 +344,7 @@ module Steem
       options = {
         params: {
           account: @account_name,
-          vesting_shares: '0.000 VESTS'
+          vesting_shares: '0.000000 VESTS'
         }
       }
       
@@ -365,7 +401,7 @@ module Steem
       }
     
       vcr_cassette('broadcast_feed_publish') do
-        assert_raises MissingActiveAuthorityError do
+        assert_raises Steem::ArgumentError do
           Broadcast.feed_publish(@broadcast_options.merge(options))
         end
       end
@@ -650,7 +686,11 @@ module Steem
     
       vcr_cassette('broadcast_custom_json') do
         Broadcast.custom_json(@broadcast_options.merge(options)) do |result|
-          assert result.valid
+          if result.respond_to? :valid
+            assert result.valid
+          else
+            assert result
+          end
         end
       end
     end
@@ -918,7 +958,7 @@ module Steem
         params: {
           delegator: @account_name,
           delegatee: 'alice',
-          vesting_shares: '0.000 VESTS'
+          vesting_shares: '0.000000 VESTS'
         }
       }
     
@@ -933,7 +973,7 @@ module Steem
       options = {
         params: {
           fee: '0.000 STEEM',
-          delegation: '0.000 VESTS',
+          delegation: '0.000000 VESTS',
           creator: @account_name,
           new_account_name: 'alice',
           owner: {
@@ -1008,7 +1048,7 @@ module Steem
       options[:params] = fields.map do |field|
         value = [
           field.to_s, 0, Time.now.utc, true, false, [1], {a: :b}, nil,
-          ["0", 3, "@@000000021"]
+          {amount: '0', precision: 3, nai: '@@000000021'}
         ].sample
         
         [field, value]
@@ -1018,7 +1058,11 @@ module Steem
         begin
           Broadcast.send(random_op, @broadcast_options.merge(options)) do |result|
             # :nocov:
-            assert result.valid
+            if result.respond_to? :valid
+              assert result.valid
+            else
+              assert result
+            end
             # :nocov:
           end
         rescue => e
diff --git a/test/steem/database_api_test.rb b/test/steem/database_api_test.rb
index e6d5db43d7e69fb5323551151c865fb8c0f6099d..8ae49c7030f87658984450dc5d9b11d3d88c16a3 100644
--- a/test/steem/database_api_test.rb
+++ b/test/steem/database_api_test.rb
@@ -280,9 +280,9 @@ module Steem
           ref_block_num: 19297,
           ref_block_prefix: 1608085982,
           expiration: "2016-03-23T22:41:21",
-          operations: [
-            [:account_create, {
-              fee: ['0', 3, '@@000000021'], # 0.000 STEEM
+          operations: [{
+            type: :account_create_operation, value: {
+              fee: {amount: '0', precision: 3, nai: '@@000000021'}, # 0.000 STEEM
               creator: "initminer",
               new_account_name: "scott",
               owner: {
@@ -303,7 +303,7 @@ module Steem
               memo_key: "STM6ppNVEFmvBW4jEkzxXnGKuKuwYjMUrhz2WX1kHeGSchGdWJEDQ",
               json_metadata: ""
             }
-          ]],
+          }],
           extensions: [],
           signatures: []
         }
diff --git a/test/steem/transaction_builder_test.rb b/test/steem/transaction_builder_test.rb
index 9638bb0fd78e0ffeeaeb253bda67d3558f6e9b1d..e7c80c1a5a0386dd29d08d705af784aa05155d87 100644
--- a/test/steem/transaction_builder_test.rb
+++ b/test/steem/transaction_builder_test.rb
@@ -4,6 +4,9 @@ module Steem
   class TransactionBuilderTest < Steem::Test
     def setup
       @wif = '5JrvPrQeBBvCRdjv29iDvkwn3EQYZ9jqfAHzrCyUvfbEbRkrYFC'
+      @options = {
+        app_base: false
+      }
     end
     
     def test_transaction_builder_initialize
@@ -17,7 +20,7 @@ module Steem
         chain: :test
       }
       
-      assert TransactionBuilder.new(options)
+      assert TransactionBuilder.new(@options.merge options)
     end
     
     def test_transaction_builder_initialize_unsupported_chain
@@ -27,21 +30,21 @@ module Steem
         chain: :bogus
       }
       assert_raises UnsupportedChainError do
-        TransactionBuilder.new(options)
+        TransactionBuilder.new(@options.merge options)
       end
     end
     
     def test_reset
-      assert TransactionBuilder.new.reset
+      assert TransactionBuilder.new(@options).reset
     end
     
     def test_inspect
-      assert TransactionBuilder.new.inspect
+      assert TransactionBuilder.new(@options).inspect
     end
     
     
     def test_valid
-      builder = TransactionBuilder.new(wif: @wif)
+      builder = TransactionBuilder.new(@options.merge wif: @wif)
       
       vcr_cassette 'transaction_builder_valid' do
         builder.put(vote: {
@@ -56,7 +59,7 @@ module Steem
     end
     
     def test_valid_irrelevant
-      builder = TransactionBuilder.new(wif: @wif)
+      builder = TransactionBuilder.new(@options.merge wif: @wif)
       
       vcr_cassette 'transaction_builder_valid_irrelevant' do
         assert_raises IrrelevantSignatureError, "did not expect valid transaction: #{builder.inspect}" do
@@ -77,7 +80,7 @@ module Steem
     end
       
     def test_sign
-      builder = TransactionBuilder.new(wif: @wif)
+      builder = TransactionBuilder.new(@options.merge wif: @wif)
       
       vcr_cassette 'transaction_builder_sign' do
         builder.put(vote: {
@@ -97,7 +100,7 @@ module Steem
         '5K2LA2ucS8b1GuFvVgZK6itKNE6fFMbDMX4GDtNHiczJESLGRd8',
         '5JRaypasxMx1L97ZUX7YuC5Psb5EAbF821kkAGtBj7xCJFQcbLg'
       ]
-      builder = TransactionBuilder.new(wif: wifs)
+      builder = TransactionBuilder.new(@options.merge wif: wifs)
       
       vcr_cassette 'transaction_builder_sign_multisig' do
         builder.put(vote: {
@@ -117,7 +120,7 @@ module Steem
     def test_sign_multisig_deferred
       initial_wif = '5K2LA2ucS8b1GuFvVgZK6itKNE6fFMbDMX4GDtNHiczJESLGRd8'
       deferred_wif = '5JRaypasxMx1L97ZUX7YuC5Psb5EAbF821kkAGtBj7xCJFQcbLg'
-      builder = TransactionBuilder.new(wif: initial_wif)
+      builder = TransactionBuilder.new(@options.merge wif: initial_wif)
       transaction = nil
       
       vcr_cassette 'transaction_builder_sign_multisig_deferred' do
@@ -133,7 +136,7 @@ module Steem
         assert_equal 1, signatures.size
       end
       
-      builder = TransactionBuilder.new(wif: deferred_wif, trx: transaction.to_json)
+      builder = TransactionBuilder.new(@options.merge wif: deferred_wif, trx: transaction.to_json)
       assert builder.sign
       signatures = builder.transaction.signatures
       assert_equal 2, signatures.size
@@ -141,7 +144,7 @@ module Steem
     end
     
     def test_put
-      builder = TransactionBuilder.new
+      builder = TransactionBuilder.new(@options)
       
       vcr_cassette 'transaction_builder_put' do
         builder.put(vote: {
@@ -156,7 +159,7 @@ module Steem
     end
     
     def test_put_array
-      builder = TransactionBuilder.new
+      builder = TransactionBuilder.new(@options)
       
       vcr_cassette 'transaction_builder_put_array' do
         builder.put([:vote, {
@@ -171,7 +174,7 @@ module Steem
     end
     
     def test_put_symbol
-      builder = TransactionBuilder.new
+      builder = TransactionBuilder.new(@options)
       
       vcr_cassette 'transaction_builder_put_symbol' do
         builder.put(:vote, {
@@ -186,7 +189,7 @@ module Steem
     end
     
     def test_put_string
-      builder = TransactionBuilder.new
+      builder = TransactionBuilder.new(@options)
       
       vcr_cassette 'transaction_builder_put_string' do
         builder.put('vote', {
@@ -201,7 +204,7 @@ module Steem
     end
     
     def test_potential_signatures
-      builder = TransactionBuilder.new(wif: @wif)
+      builder = TransactionBuilder.new(@options.merge wif: @wif)
       
       vcr_cassette 'transaction_builder_sign' do
         builder.put(vote: {
@@ -216,7 +219,7 @@ module Steem
     end
     
     def test_required_signatures
-      builder = TransactionBuilder.new(wif: @wif)
+      builder = TransactionBuilder.new(@options.merge wif: @wif)
       
       vcr_cassette 'transaction_builder_sign' do
         builder.put(vote: {
@@ -230,4 +233,4 @@ module Steem
       end
     end
   end
-end
\ No newline at end of file
+end