diff --git a/src/address.ts b/src/address.ts
index b758a66..e657d24 100644
--- a/src/address.ts
+++ b/src/address.ts
@@ -9,18 +9,18 @@ const payments = require('./payments')
 import * as Networks from './networks'
 import { Network } from './networks'
 
-export declare type Base58CheckResult = {
+export type Base58CheckResult = {
   hash: Buffer;
   version: number;
 }
 
-export declare type Bech32Result = {
+export type Bech32Result = {
   version: number;
   prefix: string;
   data: Buffer;
 }
 
-function fromBase58Check (address: string): Base58CheckResult {
+export function fromBase58Check (address: string): Base58CheckResult {
   const payload = bs58check.decode(address)
 
   // TODO: 4.0.0, move to "toOutputScript"
@@ -33,7 +33,7 @@ function fromBase58Check (address: string): Base58CheckResult {
   return { version: version, hash: hash }
 }
 
-function fromBech32 (address: string): Bech32Result {
+export function fromBech32 (address: string): Bech32Result {
   const result = bech32.decode(address)
   const data = bech32.fromWords(result.words.slice(1))
 
@@ -44,7 +44,7 @@ function fromBech32 (address: string): Bech32Result {
   }
 }
 
-function toBase58Check (hash: Buffer, version: number): string {
+export function toBase58Check (hash: Buffer, version: number): string {
   typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments)
 
   const payload = Buffer.allocUnsafe(21)
@@ -54,14 +54,14 @@ function toBase58Check (hash: Buffer, version: number): string {
   return bs58check.encode(payload)
 }
 
-function toBech32 (data: Buffer, version: number, prefix: string): string {
+export function toBech32 (data: Buffer, version: number, prefix: string): string {
   const words = bech32.toWords(data)
   words.unshift(version)
 
   return bech32.encode(prefix, words)
 }
 
-function fromOutputScript (output: Buffer, network: Network): string { //TODO: Network
+export function fromOutputScript (output: Buffer, network: Network): string { //TODO: Network
   network = network || networks.bitcoin
 
   try { return payments.p2pkh({ output, network }).address } catch (e) {}
@@ -72,7 +72,7 @@ function fromOutputScript (output: Buffer, network: Network): string { //TODO: N
   throw new Error(bscript.toASM(output) + ' has no matching Address')
 }
 
-function toOutputScript (address: string, network: Network): Buffer {
+export function toOutputScript (address: string, network: Network): Buffer {
   network = network || networks.bitcoin
 
   let decodeBase58: Base58CheckResult
@@ -100,13 +100,3 @@ function toOutputScript (address: string, network: Network): Buffer {
 
   throw new Error(address + ' has no matching Script')
 }
-
-module.exports = {
-  fromBase58Check: fromBase58Check,
-  fromBech32: fromBech32,
-  fromOutputScript: fromOutputScript,
-  toBase58Check: toBase58Check,
-  toBech32: toBech32,
-  toOutputScript: toOutputScript
-}
-export {}
diff --git a/src/index.ts b/src/index.ts
index 967fddc..d1b897b 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,17 +1,26 @@
-const script = require('./script')
+const opcodes = require('bitcoin-ops')
 
-module.exports = {
-  Block: require('./block'),
-  ECPair: require('./ecpair'),
-  Transaction: require('./transaction'),
-  TransactionBuilder: require('./transaction_builder'),
+import * as Block from './block'
+import * as ECPair from './ecpair'
+import * as Transaction from './transaction'
+import * as TransactionBuilder from './transaction_builder'
+import * as address from './address'
+import * as bip32 from 'bip32'
+import * as crypto from './crypto'
+import * as networks from './networks'
+import * as payments from './payments'
+import * as script from './script'
 
-  address: require('./address'),
-  bip32: require('bip32'),
-  crypto: require('./crypto'),
-  networks: require('./networks'),
-  opcodes: require('bitcoin-ops'),
-  payments: require('./payments'),
-  script: script
+export {
+  Block,
+  ECPair,
+  Transaction,
+  TransactionBuilder,
+  address,
+  bip32,
+  crypto,
+  networks,
+  opcodes,
+  payments,
+  script,
 }
-export {}
diff --git a/src/networks.ts b/src/networks.ts
index f8ee1aa..11147af 100644
--- a/src/networks.ts
+++ b/src/networks.ts
@@ -1,6 +1,6 @@
 // https://en.bitcoin.it/wiki/List_of_address_prefixes
 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
-export declare type Network = {
+export type Network = {
   messagePrefix: string;
   bech32: string;
   bip32: bip32;
@@ -9,7 +9,7 @@ export declare type Network = {
   wif: number;
 }
 
-declare type bip32 = {
+type bip32 = {
   public: number;
   private: number;
 }