diff --git a/src/crypto/crypto.js b/src/crypto/crypto.js
index 03deaac3..912633ab 100644
--- a/src/crypto/crypto.js
+++ b/src/crypto/crypto.js
@@ -53,8 +53,8 @@ function createType(data, type) {
   }
 }
 
-function mapResult(result, types) {
-  for (var i=0; i < result.length; i++) {
+function constructParams(result, types) {
+  for (var i=0; i < types.length; i++) {
     result[i] = createType(result[i], types[i]);
   }
   return result;
@@ -81,7 +81,7 @@ export default {
           var n = publicParams[0].toBigInteger();
           var e = publicParams[1].toBigInteger();
           m = data.toBigInteger();
-          return mapResult([rsa.encrypt(m, e, n)], types);
+          return constructParams([rsa.encrypt(m, e, n)], types);
 
         case 'elgamal':
           var elgamal = new publicKey.elgamal();
@@ -89,7 +89,7 @@ export default {
           var g = publicParams[1].toBigInteger();
           var y = publicParams[2].toBigInteger();
           m = data.toBigInteger();
-          return mapResult(elgamal.encrypt(m, g, p, y), types);
+          return constructParams(elgamal.encrypt(m, g, p, y), types);
 
         case 'ecdh':
           var ecdh = publicKey.elliptic.ecdh;
@@ -97,7 +97,7 @@ export default {
           var kdf_params = publicParams[2];
           var R = publicParams[1].toBigInteger();
           var res = ecdh.encrypt(curve.oid, kdf_params.cipher, kdf_params.hash, data, R, fingerprint);
-          return mapResult([res.V, res.C], types);
+          return constructParams([res.V, res.C], types);
 
         default:
           return [];
@@ -258,7 +258,7 @@ export default {
 
       //    Algorithm-Specific Fields for ECDH encrypted session keys:
       //        - MPI containing the ephemeral key used to establish the shared secret
-      //        - EcdhSymmetricKey
+      //        - ECDHSymmetricKey
       case 'ecdh':
         return ['mpi', 'ecdh_symkey'];
 
@@ -280,17 +280,17 @@ export default {
         //remember "publicKey" refers to the crypto/public_key dir
         var rsa = new publicKey.rsa();
         return rsa.generate(bits, "10001").then(function(keyObject) {
-          return mapResult([keyObject.n, keyObject.ee, keyObject.d, keyObject.p, keyObject.q, keyObject.u], types);
+          return constructParams([keyObject.n, keyObject.ee, keyObject.d, keyObject.p, keyObject.q, keyObject.u], types);
         });
 
       case 'ecdsa':
         return publicKey.elliptic.generate(curve).then(function (keyObject) {
-          return mapResult([keyObject.oid, keyObject.R, keyObject.r], types);
+          return constructParams([keyObject.oid, keyObject.R, keyObject.r], types);
         });
 
       case 'ecdh':
         return publicKey.elliptic.generate(curve).then(function (keyObject) {
-          return mapResult([keyObject.oid, keyObject.R, [keyObject.hash, keyObject.cipher], keyObject.r], types);
+          return constructParams([keyObject.oid, keyObject.R, [keyObject.hash, keyObject.cipher], keyObject.r], types);
         });
 
       default:
@@ -316,5 +316,7 @@ export default {
    */
   generateSessionKey: function(algo) {
     return random.getRandomBytes(cipher[algo].keySize);
-  }
+  },
+
+  constructParams: constructParams
 };
diff --git a/src/crypto/public_key/elliptic/ecdh.js b/src/crypto/public_key/elliptic/ecdh.js
index af8ab3ff..8a19a378 100644
--- a/src/crypto/public_key/elliptic/ecdh.js
+++ b/src/crypto/public_key/elliptic/ecdh.js
@@ -69,7 +69,7 @@ function kdf(hash_algo, X, length, param) {
 /**
  * Encrypt and wrap a session key
  *
- * @param  {String}      oid          Oid of the curve to use
+ * @param  {String}      oid          OID of the curve to use
  * @param  {Enums}       cipher_algo  Symmetric cipher to use
  * @param  {Enums}       hash_algo    Hash to use
  * @param  {Uint8Array}  m            Value derived from session key (RFC 6637)
@@ -96,7 +96,7 @@ function encrypt(oid, cipher_algo, hash_algo, m, R, fingerprint) {
 /**
  * Decrypt and unwrap the value derived from session key
  *
- * @param  {String}      oid          Curve oid
+ * @param  {String}      oid          Curve OID
  * @param  {Enums}       cipher_algo  Symmetric cipher to use
  * @param  {Enums}       hash_algo    Hash algorithm to use
  * @param  {BigInteger}  V            Public part of ephemeral key
diff --git a/src/index.js b/src/index.js
index fd0e9de5..46bec340 100644
--- a/src/index.js
+++ b/src/index.js
@@ -79,21 +79,21 @@ export { default as Keyid } from './type/keyid';
 
 /**
  * @see module:type/ecdh_symkey
- * @name module:openpgp.EcdhSymmetricKey
+ * @name module:openpgp.ECDHSymmetricKey
  */
-export { default as EcdhSymmetricKey } from './type/ecdh_symkey';
+export { default as ECDHSymmetricKey } from './type/ecdh_symkey';
 
 /**
  * @see module:type/kdf_params
- * @name module:openpgp.KdfParams
+ * @name module:openpgp.KDFParams
  */
-export { default as KdfParams } from './type/kdf_params';
+export { default as KDFParams } from './type/kdf_params';
 
 /**
  * @see module:type/oid
- * @name module:openpgp.Oid
+ * @name module:openpgp.OID
  */
-export { default as Oid } from './type/oid';
+export { default as OID } from './type/oid';
 
 /**
  * @see module:encoding/armor
diff --git a/src/packet/public_key.js b/src/packet/public_key.js
index 57b4ca98..c9f6af1e 100644
--- a/src/packet/public_key.js
+++ b/src/packet/public_key.js
@@ -93,24 +93,15 @@ PublicKey.prototype.read = function (bytes) {
     // - A one-octet number denoting the public-key algorithm of this key.
     this.algorithm = enums.read(enums.publicKey, bytes[pos++]);
 
-    var param_count = crypto.getPubKeyParamCount(this.algorithm);
-    this.params = [];
+    var types = crypto.getPubKeyParamTypes(this.algorithm);
+    this.params = crypto.constructParams(new Array(types.length), types);
 
-    var bmpi = bytes.subarray(pos, bytes.length);
+    var b = bytes.subarray(pos, bytes.length);
     var p = 0;
 
-    for (var i = 0; i < param_count && p < bmpi.length; i++) {
-      if ((this.algorithm === 'ecdsa' || this.algorithm === 'ecdh') && i === 0) {
-        this.params[i] = new type_oid();
-      } else if (this.algorithm === 'ecdh' && i === 2) {
-        this.params[i] = new type_kdf_params();
-      } else {
-        this.params[i] = new type_mpi();
-      }
-
-      p += this.params[i].read(bmpi.subarray(p, bmpi.length));
-
-      if (p > bmpi.length) {
+    for (var i = 0; i < types.length && p < b.length; i++) {
+      p += this.params[i].read(b.subarray(p, b.length));
+      if (p > b.length) {
         throw new Error('Error reading MPI @:' + p);
       }
     }
diff --git a/src/packet/public_key_encrypted_session_key.js b/src/packet/public_key_encrypted_session_key.js
index 9678f479..a05ff206 100644
--- a/src/packet/public_key_encrypted_session_key.js
+++ b/src/packet/public_key_encrypted_session_key.js
@@ -78,20 +78,11 @@ PublicKeyEncryptedSessionKey.prototype.read = function (bytes) {
 
   var i = 10;
 
-  var integerCount = crypto.getEncSessionKeyParamCount(this.publicKeyAlgorithm);
+  var types = crypto.getEncSessionKeyParamTypes(this.publicKeyAlgorithm);
+  this.encrypted = crypto.constructParams(new Array(types.length), types);
 
-
-  this.encrypted = [];
-
-  for (var j = 0; j < integerCount; j++) {
-    var param;
-    if (this.publicKeyAlgorithm === 'ecdh' && j === 1) {
-      param = new type_ecdh_symkey();
-    } else {
-      param = new type_mpi();
-    }
-    i += param.read(bytes.subarray(i, bytes.length));
-    this.encrypted.push(param);
+  for (var j = 0; j < types.length; j++) {
+    i += this.encrypted[j].read(bytes.subarray(i, bytes.length));
   }
 };
 
diff --git a/src/type/ecdh_symkey.js b/src/type/ecdh_symkey.js
index ef32b68a..84b3be2d 100644
--- a/src/type/ecdh_symkey.js
+++ b/src/type/ecdh_symkey.js
@@ -26,12 +26,12 @@
 
 import util from '../util.js';
 
-module.exports = EcdhSymmetricKey;
+module.exports = ECDHSymmetricKey;
 
 /**
  * @constructor
  */
-function EcdhSymmetricKey(data) {
+function ECDHSymmetricKey(data) {
   if (typeof data === 'undefined') {
     data = new Uint8Array([]);
   } else if (typeof data === 'string') {
@@ -43,11 +43,11 @@ function EcdhSymmetricKey(data) {
 }
 
 /**
- * Read an EcdhSymmetricKey from an Uint8Array
+ * Read an ECDHSymmetricKey from an Uint8Array
  * @param  {Uint8Array}  input  Where to read the encoded symmetric key from
  * @return {Number}             Number of read bytes
  */
-EcdhSymmetricKey.prototype.read = function (input) {
+ECDHSymmetricKey.prototype.read = function (input) {
   if (input.length >= 1)
   {
     var length = input[0];
@@ -61,10 +61,10 @@ EcdhSymmetricKey.prototype.read = function (input) {
 };
 
 /**
- * Write an EcdhSymmetricKey as an Uint8Array
+ * Write an ECDHSymmetricKey as an Uint8Array
  * @return  {Uint8Array}  An array containing the value
  */
-EcdhSymmetricKey.prototype.write = function () {
+ECDHSymmetricKey.prototype.write = function () {
   return util.concatUint8Array([
     new Uint8Array([this.data.length]),
     this.data]);
diff --git a/src/type/kdf_params.js b/src/type/kdf_params.js
index 1a6d1371..4720c280 100644
--- a/src/type/kdf_params.js
+++ b/src/type/kdf_params.js
@@ -26,26 +26,26 @@
 
 import enums from '../enums.js';
 
-module.exports = KdfParams;
+module.exports = KDFParams;
 
 /**
  * @constructor
  * @param  {enums.hash}       hash    Hash algorithm
  * @param  {enums.symmetric}  cipher  Symmetric algorithm
  */
-function KdfParams(hash, cipher) {
+function KDFParams(hash, cipher) {
   this.hash = hash || enums.hash.sha1;
   this.cipher = cipher || enums.symmetric.aes128;
 }
 
 /**
- * Read KdfParams from an Uint8Array
- * @param  {Uint8Array}  input  Where to read the KdfParams from
+ * Read KDFParams from an Uint8Array
+ * @param  {Uint8Array}  input  Where to read the KDFParams from
  * @return {Number}             Number of read bytes
  */
-KdfParams.prototype.read = function (input) {
+KDFParams.prototype.read = function (input) {
   if (input.length < 4 || input[0] !== 3 || input[1] !== 1) {
-    throw new Error('Cannot read KdfParams');
+    throw new Error('Cannot read KDFParams');
   }
   this.hash = input[2];
   this.cipher = input[3];
@@ -53,9 +53,9 @@ KdfParams.prototype.read = function (input) {
 };
 
 /**
- * Write KdfParams to an Uint8Array
- * @return  {Uint8Array}  Array with the KdfParams value
+ * Write KDFParams to an Uint8Array
+ * @return  {Uint8Array}  Array with the KDFParams value
  */
-KdfParams.prototype.write = function () {
+KDFParams.prototype.write = function () {
   return new Uint8Array([3, 1, this.hash, this.cipher]);
 };
diff --git a/src/type/oid.js b/src/type/oid.js
index a8fd1899..c4253889 100644
--- a/src/type/oid.js
+++ b/src/type/oid.js
@@ -16,7 +16,7 @@
 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 
 /**
- * Wrapper to an Oid value<br/>
+ * Wrapper to an OID value<br/>
  * <br/>
  * An object identifier type from {@link https://tools.ietf.org/html/rfc6637#section-11|RFC6637, section 11}.
  * @requires util
@@ -27,12 +27,12 @@
 
 import util from '../util.js';
 
-module.exports = Oid;
+module.exports = OID;
 
 /**
  * @constructor
  */
-function Oid(oid) {
+function OID(oid) {
   if (typeof oid === 'undefined') {
     oid = '';
   } else if (util.isArray(oid)) {
@@ -44,11 +44,11 @@ function Oid(oid) {
 }
 
 /**
- * Method to read an Oid object
- * @param  {Uint8Array}  input  Where to read the Oid from
+ * Method to read an OID object
+ * @param  {Uint8Array}  input  Where to read the OID from
  * @return {Number}             Number of read bytes
  */
-Oid.prototype.read = function (input) {
+OID.prototype.read = function (input) {
   if (input.length >= 1) {
     var length = input[0];
     if (input.length >= 1+length) {
@@ -60,10 +60,10 @@ Oid.prototype.read = function (input) {
 };
 
 /**
- * Serialize an Oid object
- * @return {Uint8Array} Array with the serialized value the Oid
+ * Serialize an OID object
+ * @return {Uint8Array} Array with the serialized value the OID
  */
-Oid.prototype.write = function () {
+OID.prototype.write = function () {
   return util.str2Uint8Array(
     String.fromCharCode(this.oid.length)+this.oid);
 };
diff --git a/test/general/oid.js b/test/general/oid.js
index e093f407..b4f4e68a 100644
--- a/test/general/oid.js
+++ b/test/general/oid.js
@@ -5,14 +5,14 @@ var openpgp = typeof window !== 'undefined' && window.openpgp ? window.openpgp :
 var expect = require('chai').expect;
 
 describe('Oid tests', function() {
-  var Oid = openpgp.Oid;
+  var OID = openpgp.OID;
   var p256_oid = new Uint8Array([0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07]);
   var p384_oid = new Uint8Array([0x2B, 0x81, 0x04, 0x00, 0x22]);
   var p521_oid = new Uint8Array([0x2B, 0x81, 0x04, 0x00, 0x23]);
   it('Constructing', function() {
     var oids = [p256_oid, p384_oid, p521_oid];
     oids.forEach(function (data) {
-      var oid = new Oid(data);
+      var oid = new OID(data);
       expect(oid).to.exist;
       expect(oid.oid).to.exist;
       expect(oid.oid).to.have.length(data.length);
@@ -22,8 +22,8 @@ describe('Oid tests', function() {
   it('Reading and writing', function() {
     var oids = [p256_oid, p384_oid, p521_oid];
     oids.forEach(function (data) {
-      data = openpgp.util.concatUint8Array([new Uint8Array([data.length]), data]); 
-      var oid = new Oid();
+      data = openpgp.util.concatUint8Array([new Uint8Array([data.length]), data]);
+      var oid = new OID();
       expect(oid.read(data)).to.equal(data.length);
       expect(oid.oid).to.exist;
       expect(oid.oid).to.have.length(data.length-1);