diff --git a/src/main/java/com/google/dexmaker/Code.java b/src/main/java/com/google/dexmaker/Code.java
index 9afe0af..5803cfa 100644
--- a/src/main/java/com/google/dexmaker/Code.java
+++ b/src/main/java/com/google/dexmaker/Code.java
@@ -43,6 +43,21 @@
 /**
  * Builds a sequence of instructions.
  */
+/*
+ * TODO: documentation:
+ * UnaryOp, BinaryOp
+ * Try/catch
+ * Arrays
+ * Comparisons
+ * Locals
+ * Fields
+ * Type: Instanceof, cast, typeCast, numericCast
+ * Invoke
+ * Jump
+ * Constants
+ * NewInstance
+ * Return
+ */
 public final class Code {
     private final MethodId<?, ?> method;
     /**
@@ -323,15 +338,12 @@
 
     // instructions: unary
 
-    public <T> void negate(Local<T> target, Local<T> source) {
-        unary(Rops.opNeg(source.type.ropType), target, source);
-    }
-
-    public <T> void not(Local<T> target, Local<T> source) {
-        unary(Rops.opNot(source.type.ropType), target, source);
+    public <T> void op(UnaryOp op, Local<T> target, Local<T> source) {
+        unary(op.rop(source.type), target, source);
     }
 
     public void numericCast(Local<?> target, Local<?> source) {
+        // TODO: overload the cast op?
         unary(getCastRop(source.type.ropType, target.type.ropType), target, source);
     }
 
diff --git a/src/main/java/com/google/dexmaker/DexMaker.java b/src/main/java/com/google/dexmaker/DexMaker.java
index f931df8..be33313 100644
--- a/src/main/java/com/google/dexmaker/DexMaker.java
+++ b/src/main/java/com/google/dexmaker/DexMaker.java
@@ -45,7 +45,7 @@
 
 /**
  * Generates a </i><strong>D</strong>alvik <strong>EX</strong>ecutable (dex)
- * file for execution on Android. dex files defines classes and interfaces,
+ * file for execution on Android. Dex files define classes and interfaces,
  * including their member methods and fields, executable code, and debugging
  * information. They also define annotations, though this API currently has no
  * facility to create a dex file that contains annotations.
@@ -153,7 +153,8 @@
  * add {@code @SuppressWarnings("unsafe")} on your calling code. This will yield
  * the same result but you won't get IDE support if you make a type error.
  *
- * <p>We're ready to start defining our method's instructions: <pre>   {@code
+ * <p>We're ready to start defining our method's instructions. The {@link Code}
+ * class catalogs the available instructions and their use. <pre>   {@code
  *
  *   code.loadConstant(constant1, 1);
  *   code.loadConstant(constant2, 2);
diff --git a/src/main/java/com/google/dexmaker/UnaryOp.java b/src/main/java/com/google/dexmaker/UnaryOp.java
new file mode 100644
index 0000000..9d6f32e
--- /dev/null
+++ b/src/main/java/com/google/dexmaker/UnaryOp.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.dexmaker;
+
+import com.android.dx.rop.code.Rop;
+import com.android.dx.rop.code.Rops;
+
+/**
+ * An operation on one value.
+ */
+public enum UnaryOp {
+
+    /** {@code ~a}. Supports int or long. */
+    NOT() {
+        @Override Rop rop(TypeId<?> type) {
+            return Rops.opNot(type.ropType);
+        }
+    },
+
+    /** {@code -a}. Supports int, long, float or double. */
+    NEGATE() {
+        @Override Rop rop(TypeId<?> type) {
+            return Rops.opNeg(type.ropType);
+        }
+    };
+
+    abstract Rop rop(TypeId<?> type);
+}
diff --git a/src/test/java/com/google/dexmaker/DexMakerTest.java b/src/test/java/com/google/dexmaker/DexMakerTest.java
index 9c347eb..f877373 100644
--- a/src/test/java/com/google/dexmaker/DexMakerTest.java
+++ b/src/test/java/com/google/dexmaker/DexMakerTest.java
@@ -656,7 +656,7 @@
         MethodId<?, T> methodId = GENERATED.getMethod(valueType, "call", valueType);
         Code code = dexMaker.declare(methodId, PUBLIC | STATIC);
         Local<T> localSource = code.getParameter(0, valueType);
-        code.not(localSource, localSource);
+        code.op(UnaryOp.NOT, localSource, localSource);
         code.returnValue(localSource);
         return getMethod();
     }
@@ -697,7 +697,7 @@
         MethodId<?, T> methodId = GENERATED.getMethod(valueType, "call", valueType);
         Code code = dexMaker.declare(methodId, PUBLIC | STATIC);
         Local<T> localSource = code.getParameter(0, valueType);
-        code.negate(localSource, localSource);
+        code.op(UnaryOp.NEGATE, localSource, localSource);
         code.returnValue(localSource);
         return getMethod();
     }
