diff --git a/examples/ModuleMaker/Makefile b/examples/ModuleMaker/Makefile
new file mode 100644
index 0000000..7c2d328
--- /dev/null
+++ b/examples/ModuleMaker/Makefile
@@ -0,0 +1,19 @@
+#
+# This is a sample Makefile for a project that uses LLVM.
+#
+
+#
+# Indicates our relative path to the top of the project's root directory.
+#
+LEVEL = .
+
+#
+# Directories that needs to be built.
+#
+DIRS = tools
+
+#
+# Include the Master Makefile that knows how to build all.
+#
+include $(LEVEL)/Makefile.common
+
diff --git a/examples/ModuleMaker/Makefile.common b/examples/ModuleMaker/Makefile.common
new file mode 100644
index 0000000..9b34d87
--- /dev/null
+++ b/examples/ModuleMaker/Makefile.common
@@ -0,0 +1,10 @@
+#
+# Set this variable to the top of the LLVM source tree.
+#
+LLVM_SRC_ROOT = $(LEVEL)/../..
+
+#
+# Include LLVM's Master Makefile.
+#
+include $(LLVM_SRC_ROOT)/Makefile.common
+
diff --git a/examples/ModuleMaker/ModuleMaker.cpp b/examples/ModuleMaker/ModuleMaker.cpp
new file mode 100644
index 0000000..1d06c2d
--- /dev/null
+++ b/examples/ModuleMaker/ModuleMaker.cpp
@@ -0,0 +1,52 @@
+//===- ModuleMaker.cpp - Example project which creates modules --*- C++ -*-===//
+//
+// This programs is a simple example that creates an LLVM module "from scratch",
+// emitting it as a bytecode file to standard out.  This is just to show how
+// LLVM projects work and to demonstrate some of the LLVM APIs.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Module.h"
+#include "llvm/DerivedTypes.h"
+#include "llvm/Constants.h"
+#include "llvm/Instructions.h"
+#include "llvm/Bytecode/Writer.h"
+
+int main() {
+  // Create the "module" or "program" or "translation unit" to hold the
+  // function
+  Module *M = new Module("test");
+  
+  // Create the main function: first create the type 'int ()'
+  FunctionType *FT = FunctionType::get(Type::IntTy, std::vector<const Type*>(),
+                                       /*not vararg*/false);
+  
+  // By passing a module as the last parameter to the Function constructor,
+  // it automatically gets appended to the Module.
+  Function *F = new Function(FT, Function::ExternalLinkage, "main", M);
+  
+  // Add a basic block to the function... again, it automatically inserts
+  // because of the last argument.
+  BasicBlock *BB = new BasicBlock("EntryBlock", F);
+  
+  // Get pointers to the constant integers...
+  Value *Two = ConstantSInt::get(Type::IntTy, 2);
+  Value *Three = ConstantSInt::get(Type::IntTy, 3);
+  
+  // Create the add instruction... does not insert...
+  Instruction *Add = BinaryOperator::create(Instruction::Add, Two, Three,
+                                            "addresult");
+  
+  // explicitly insert it into the basic block...
+  BB->getInstList().push_back(Add);
+  
+  // Create the return instruction and add it to the basic block
+  BB->getInstList().push_back(new ReturnInst(Add));
+  
+  // Output the bytecode file to stdout
+  WriteBytecodeToFile(M, std::cout);
+  
+  // Delete the module and all of its contents.
+  delete M;
+  return 0;
+}
diff --git a/examples/ModuleMaker/tools/Makefile b/examples/ModuleMaker/tools/Makefile
new file mode 100644
index 0000000..47997df
--- /dev/null
+++ b/examples/ModuleMaker/tools/Makefile
@@ -0,0 +1,11 @@
+#
+# Relative path to the top of the source tree.
+#
+LEVEL=..
+
+#
+# List all of the subdirectories that we will compile.
+#
+DIRS=ModuleMaker
+
+include $(LEVEL)/Makefile.common
diff --git a/examples/ModuleMaker/tools/ModuleMaker/Makefile b/examples/ModuleMaker/tools/ModuleMaker/Makefile
new file mode 100644
index 0000000..7f06b92
--- /dev/null
+++ b/examples/ModuleMaker/tools/ModuleMaker/Makefile
@@ -0,0 +1,25 @@
+#
+# LEVEL - Indicate where we are relative to the top of the source tree.
+#
+LEVEL=../..
+
+#
+# TOOLNAME = Give the name of the tool.
+#
+TOOLNAME=ModuleMaker
+
+#
+# LLVMLIBS - List LLVM libraries that we'll need
+#
+LLVMLIBS= bcwriter vmcore support.a
+
+# 
+# USEDLIBS - List all project local libraries here
+#
+#USEDLIBS=
+
+#
+# Include Makefile.common so we know what to do.
+#
+include $(LEVEL)/Makefile.common
+
diff --git a/examples/ModuleMaker/tools/ModuleMaker/ModuleMaker.cpp b/examples/ModuleMaker/tools/ModuleMaker/ModuleMaker.cpp
new file mode 100644
index 0000000..1d06c2d
--- /dev/null
+++ b/examples/ModuleMaker/tools/ModuleMaker/ModuleMaker.cpp
@@ -0,0 +1,52 @@
+//===- ModuleMaker.cpp - Example project which creates modules --*- C++ -*-===//
+//
+// This programs is a simple example that creates an LLVM module "from scratch",
+// emitting it as a bytecode file to standard out.  This is just to show how
+// LLVM projects work and to demonstrate some of the LLVM APIs.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Module.h"
+#include "llvm/DerivedTypes.h"
+#include "llvm/Constants.h"
+#include "llvm/Instructions.h"
+#include "llvm/Bytecode/Writer.h"
+
+int main() {
+  // Create the "module" or "program" or "translation unit" to hold the
+  // function
+  Module *M = new Module("test");
+  
+  // Create the main function: first create the type 'int ()'
+  FunctionType *FT = FunctionType::get(Type::IntTy, std::vector<const Type*>(),
+                                       /*not vararg*/false);
+  
+  // By passing a module as the last parameter to the Function constructor,
+  // it automatically gets appended to the Module.
+  Function *F = new Function(FT, Function::ExternalLinkage, "main", M);
+  
+  // Add a basic block to the function... again, it automatically inserts
+  // because of the last argument.
+  BasicBlock *BB = new BasicBlock("EntryBlock", F);
+  
+  // Get pointers to the constant integers...
+  Value *Two = ConstantSInt::get(Type::IntTy, 2);
+  Value *Three = ConstantSInt::get(Type::IntTy, 3);
+  
+  // Create the add instruction... does not insert...
+  Instruction *Add = BinaryOperator::create(Instruction::Add, Two, Three,
+                                            "addresult");
+  
+  // explicitly insert it into the basic block...
+  BB->getInstList().push_back(Add);
+  
+  // Create the return instruction and add it to the basic block
+  BB->getInstList().push_back(new ReturnInst(Add));
+  
+  // Output the bytecode file to stdout
+  WriteBytecodeToFile(M, std::cout);
+  
+  // Delete the module and all of its contents.
+  delete M;
+  return 0;
+}
