diff --git a/ChangeLog b/ChangeLog
index 0487932..86f5fda 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,7 @@
 = PolarSSL 1.3 branch
 Bugfix
    * Server does not send out extensions not advertised by client
+   * Prevent possible alignment warnings on casting from char * to 'aligned *'
 
 = PolarSSL 1.3.1 released on 2013-10-15
 Features
diff --git a/library/oid.c b/library/oid.c
index c9cfe48..a4f2c0c 100644
--- a/library/oid.c
+++ b/library/oid.c
@@ -47,9 +47,22 @@
  * Macro to generate an internal function for oid_XXX_from_asn1() (used by
  * the other functions)
  */
-#define FN_OID_TYPED_FROM_ASN1( TYPE_T, NAME, LIST )                              \
-static const TYPE_T * oid_ ## NAME ## _from_asn1( const asn1_buf *oid )           \
-{ return (const TYPE_T *) oid_descriptor_from_buf(LIST, sizeof(TYPE_T), oid->p, oid->len ); }
+#define FN_OID_TYPED_FROM_ASN1( TYPE_T, NAME, LIST )                        \
+static const TYPE_T * oid_ ## NAME ## _from_asn1( const asn1_buf *oid )     \
+{                                                                           \
+    const TYPE_T *p = LIST;                                                 \
+    const oid_descriptor_t *cur = (const oid_descriptor_t *) p;             \
+    if( p == NULL || oid == NULL ) return( NULL );                          \
+    while( cur->asn1 != NULL ) {                                            \
+        if( cur->asn1_len == oid->len &&                                    \
+            memcmp( cur->asn1, oid->p, oid->len ) == 0 ) {                  \
+            return( p );                                                    \
+        }                                                                   \
+        p++;                                                                \
+        cur = (const oid_descriptor_t *) p;                                 \
+    }                                                                       \
+    return( NULL );                                                         \
+}
 
 /*
  * Macro to generate a function for retrieving a single attribute from the
@@ -133,34 +146,6 @@
 }
 
 /*
- * Core generic function
- */
-static const oid_descriptor_t *oid_descriptor_from_buf( const void *struct_set,
-                size_t struct_size, const unsigned char *oid, size_t len )
-{
-    const unsigned char *p = (const unsigned char *) struct_set;
-    const oid_descriptor_t *cur;
-
-    if( struct_set == NULL || oid == NULL )
-        return( NULL );
-
-    cur = (const oid_descriptor_t *) p;
-    while( cur->asn1 != NULL )
-    {
-        if( cur->asn1_len == len &&
-            memcmp( cur->asn1, oid, len ) == 0 )
-        {
-            return( cur );
-        }
-
-        p += struct_size;
-        cur = (const oid_descriptor_t *) p;
-    }
-
-    return( NULL );
-}
-
-/*
  * For X520 attribute types
  */
 typedef struct {
diff --git a/library/ssl_srv.c b/library/ssl_srv.c
index 9d50175..42ff467 100644
--- a/library/ssl_srv.c
+++ b/library/ssl_srv.c
@@ -74,8 +74,6 @@
     left -= sizeof( ssl_session );
 
 #if defined(POLARSSL_X509_CRT_PARSE_C)
-    ((ssl_session *) buf)->peer_cert = NULL;
-
     if( session->peer_cert == NULL )
         cert_len = 0;
     else
