diff --git a/.gitattributes b/.gitattributes
index bfd0c26b16374f812cbeaf7c0a339da608a006e9..14ce7d747b58b352fa71d04e97e6ebf0e7eb4a13 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -3,6 +3,7 @@
 /SDK_VERSION -text
 include/memory_space.h -text
 include/range.h -text
+include/zipr.h -text
 include/zipr_options.h -text
 include/zipr_plugin.h -text
 include/zipr_sdk.h -text
diff --git a/include/zipr.h b/include/zipr.h
new file mode 100644
index 0000000000000000000000000000000000000000..c8a7e8657e5c24fa0a31b28305fee200fdb6d510
--- /dev/null
+++ b/include/zipr.h
@@ -0,0 +1,69 @@
+/***************************************************************************
+ * Copyright (c)  2014  Zephyr Software LLC. All rights reserved.
+ *
+ * This software is furnished under a license and/or other restrictive
+ * terms and may be used and copied only in accordance with such terms
+ * and the inclusion of the above copyright notice. This software or
+ * any other copies thereof may not be provided or otherwise made
+ * available to any other person without the express written consent
+ * of an authorized representative of Zephyr Software LCC. Title to,
+ * ownership of, and all rights in the software is retained by
+ * Zephyr Software LCC.
+ *
+ * Zephyr Software LLC. Proprietary Information
+ *
+ * Unless otherwise specified, the information contained in this
+ * directory, following this legend, and/or referenced herein is
+ * Zephyr Software LLC. (Zephyr) Proprietary Information. 
+ *
+ * CONTACT
+ *
+ * For technical assistance, contact Zephyr Software LCC. at:
+ *      
+ *
+ * Zephyr Software, LLC
+ * 2040 Tremont Rd
+ * Charlottesville, VA 22911
+ *
+ * E-mail: jwd@zephyr-software.com
+ **************************************************************************/
+
+#ifndef zipr_h
+#define zipr_h
+
+class Zipr_t
+{
+	public:
+		Zipr_t() {}; 
+
+	protected:
+		/*
+		 * Private, but listing them here so that SDK users
+		 * can get a sense of the overall flow of the rewriter.
+		 */
+		virtual void FindFreeRanges(const std::string &name) = 0;
+		virtual void AddPinnedInstructions() = 0;
+		virtual void ReservePinnedInstructions() = 0;
+		virtual void PreReserve2ByteJumpTargets() = 0;
+		virtual void ExpandPinnedInstructions() = 0;
+		virtual void Fix2BytePinnedInstructions() = 0;
+		virtual void OptimizePinnedInstructions() = 0;
+		virtual void OptimizePinnedFallthroughs() = 0;
+		virtual void AskPluginsAboutPlopping() = 0;
+		virtual void PlopTheUnpinnedInstructions() = 0;
+		virtual void UpdateCallbacks() = 0;
+		virtual void PrintStats() = 0;
+		virtual void RecordPinnedInsnAddrs() = 0;
+	
+	public:
+		/*
+		 * These are public functions that the SDK user
+		 * way want to use.
+		 */
+		virtual int DetermineWorstCaseInsnSize(libIRDB::Instruction_t*) = 0;
+		virtual Zipr_SDK::RangeAddress_t PlopInstruction(libIRDB::Instruction_t* insn, Zipr_SDK::RangeAddress_t addr) = 0;
+		virtual Zipr_SDK::RangeAddress_t PlopWithTarget(libIRDB::Instruction_t* insn, Zipr_SDK::RangeAddress_t at) = 0;
+		virtual Zipr_SDK::RangeAddress_t PlopWithCallback(libIRDB::Instruction_t* insn, Zipr_SDK::RangeAddress_t at) = 0;
+};
+
+#endif
diff --git a/include/zipr_plugin.h b/include/zipr_plugin.h
index 534c7ab37f89c9a3968a923345ef44579aa0474d..1cc84b0c882e6b520708dd1b031ed3ca16c06a6b 100644
--- a/include/zipr_plugin.h
+++ b/include/zipr_plugin.h
@@ -1,8 +1,6 @@
 
-
 namespace Zipr_SDK
 {
-
 typedef std::map<libIRDB::Instruction_t*,Zipr_SDK::RangeAddress_t> InstructionLocationMap_t;
 
 class ZiprPluginInterface_t
@@ -15,6 +13,26 @@ class ZiprPluginInterface_t
 		virtual void CallbackLinkingBegin()=0;
 		virtual void CallbackLinkingEnd()=0;
 
+		virtual bool WillPluginPlop(libIRDB::Instruction_t*)
+		{
+			return false;
+		}
+		virtual int WorstCaseInsnSize(libIRDB::Instruction_t*, Zipr_t *)
+		{
+			return 0;
+		}
+		virtual RangeAddress_t PlopInstruction(libIRDB::Instruction_t*,
+			RangeAddress_t,
+			RangeAddress_t &,
+			Zipr_t *)
+		{
+			return 0;
+		}
+
+		virtual std::string ToString()
+		{
+			return "NamelessPlugin";
+		}
 };
 
 }
diff --git a/include/zipr_sdk.h b/include/zipr_sdk.h
index 13944cfcface63ba1b6dbfd598e14ee94630eced..e9ca4ca0961d26eb29b84054dcc8576c5a77ca8b 100644
--- a/include/zipr_sdk.h
+++ b/include/zipr_sdk.h
@@ -48,6 +48,7 @@
 
 // SDK internals
 #include <range.h>
+#include <zipr.h>
 #include <memory_space.h>
 #include <zipr_options.h>
 #include <zipr_plugin.h>