diff --git a/SConscript b/SConscript
index ded65c966507d3c7d61fd925f63c4e8cb6e790f7..d36c37500131c3cd18b1877ef8fa24ebc23c4369 100644
--- a/SConscript
+++ b/SConscript
@@ -25,6 +25,7 @@ files=  '''
 	unpin.cpp
 	unpin_aarch64.cpp
 	unpin_arm32.cpp
+	unpin_mips32.cpp
 	unpin_x86.cpp
 	'''
 
diff --git a/unpin.cpp b/unpin.cpp
index 4e958e33840c64674784b566384845cac8b56383..3f30cb508e1324df6a32ad75ff7cc4b73fb1dcac 100644
--- a/unpin.cpp
+++ b/unpin.cpp
@@ -320,5 +320,6 @@ Zipr_SDK::ZiprPluginInterface_t* GetPluginInterface(
 		mt==admtI386    ? (Unpin_t*)new UnpinX86_t    (zipr_object) :
 		mt==admtAarch64 ? (Unpin_t*)new UnpinAarch64_t(zipr_object) :
 		mt==admtArm32   ? (Unpin_t*)new UnpinArm32_t  (zipr_object) :
+		mt==admtMips32  ? (Unpin_t*)new UnpinMips32_t (zipr_object) :
 		throw invalid_argument("Cannot determine machine type");
 }
diff --git a/unpin.h b/unpin.h
index 3ee0bf54035d7be41e6c6c1288b5956718a320a7..9659800dfaf3ef214ff8a34e641f6c4b5e6edd0f 100644
--- a/unpin.h
+++ b/unpin.h
@@ -168,5 +168,24 @@ class UnpinArm32_t : public Unpin_t
 		void HandleCallbackReloc(IRDB_SDK::Instruction_t* from_insn,IRDB_SDK::Relocation_t* reloc) override;
 
 
+};
+
+class UnpinMips32_t : public Unpin_t
+{
+	public:
+		UnpinMips32_t( Zipr_SDK::Zipr_t* zipr_object) 
+			: Unpin_t(zipr_object)
+
+		{ 
+		}
+	protected:
+		// designed for arch-specific override.
+		void HandleRetAddrReloc (IRDB_SDK::Instruction_t* from_insn, IRDB_SDK::Relocation_t* reloc) override;
+		void HandlePcrelReloc   (IRDB_SDK::Instruction_t* from_insn, IRDB_SDK::Relocation_t* reloc) override;
+		void HandleAbsptrReloc  (IRDB_SDK::Instruction_t* from_insn, IRDB_SDK::Relocation_t* reloc) override;
+		void HandleImmedptrReloc(IRDB_SDK::Instruction_t* from_insn, IRDB_SDK::Relocation_t* reloc) override;
+		void HandleCallbackReloc(IRDB_SDK::Instruction_t* from_insn, IRDB_SDK::Relocation_t* reloc) override;
+
+
 };
 #endif
diff --git a/unpin_mips32.cpp b/unpin_mips32.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..48c4facd193a832d50a452b8d92fe917cfcb4d7c
--- /dev/null
+++ b/unpin_mips32.cpp
@@ -0,0 +1,76 @@
+/***************************************************************************
+ * 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
+ **************************************************************************/
+
+
+#include <string>
+#include <algorithm>
+#include "unpin.h"
+#include <memory>
+#include <inttypes.h>
+#include <stdint.h>
+#include <limits.h>
+#include <irdb-util>
+
+
+using namespace IRDB_SDK;
+using namespace std;
+using namespace Zipr_SDK;
+
+static inline uint32_t rotr32 (uint32_t n, unsigned int c)
+{
+  const unsigned int mask = (CHAR_BIT*sizeof(n) - 1);
+
+  // assert ( (c<=mask) &&"rotate by type width or more");
+  c &= mask;
+  return (n>>c) | (n<<( (-c)&mask ));
+}
+
+
+#define ALLOF(a) begin(a),end(a)
+// per machine stuff
+void UnpinMips32_t::HandleRetAddrReloc(Instruction_t* from_insn, Relocation_t* reloc)
+{ assert(0); }
+
+void UnpinMips32_t::HandlePcrelReloc(Instruction_t* from_insn, Relocation_t* reloc)
+{ assert(0); }
+
+void UnpinMips32_t::HandleAbsptrReloc(Instruction_t* from_insn, Relocation_t* reloc)
+{ assert(0); } 
+
+
+void UnpinMips32_t::HandleImmedptrReloc(Instruction_t* from_insn, Relocation_t* reloc)
+{ assert(0); }
+
+void UnpinMips32_t::HandleCallbackReloc(Instruction_t* from_insn, Relocation_t* reloc)
+{ assert(0); }
+
+
+
+