diff --git a/lib/classes/I18NString.php b/lib/classes/I18NString.php
index 4dc61560454ae268cbf12ecd67d4d587b8940141..da2b5007070ad5655708b44b10cb2a01c4623d1f 100644
--- a/lib/classes/I18NString.php
+++ b/lib/classes/I18NString.php
@@ -52,7 +52,8 @@ class I18NString
     {
         $this->base = $base;
         $this->lang = $lang;
-        $this->metadata = $metadata;
+
+        $this->setMetadata($metadata);
     }
 
     /**
@@ -151,6 +152,10 @@ class I18NString
      */
     public function setMetadata($metadata)
     {
+        if (isset($metadata['object_id']) && (is_array($metadata['object_id']) || is_object($metadata['object_id']))) {
+            throw new Exception('Can not use array or object as object id');
+        }
+
         $this->metadata = $metadata;
     }
 
diff --git a/lib/models/SimpleORMap.class.php b/lib/models/SimpleORMap.class.php
index de444aa7c54d1841fca6ad44d67055c322bcadf2..f17082722944ed8d23895ea546cf7959905b5c90 100644
--- a/lib/models/SimpleORMap.class.php
+++ b/lib/models/SimpleORMap.class.php
@@ -296,6 +296,10 @@ class SimpleORMap implements ArrayAccess, Countable, IteratorAggregate
 
         if (I18N::isEnabled()) {
             if (isset($config['i18n_fields']) && count($config['i18n_fields']) > 0) {
+                if (count($config['pk']) > 1) {
+                    throw new Exception('Can not define i18n fields on a composite primary key');
+                }
+
                 $config['registered_callbacks']['before_store'][] = 'cbI18N';
                 $config['registered_callbacks']['after_delete'][] = 'cbI18N';
             }