Index: binary-improvements/AllocsCommands/AllocsCommands.csproj
===================================================================
--- binary-improvements/AllocsCommands/AllocsCommands.csproj	(revision 323)
+++ binary-improvements/AllocsCommands/AllocsCommands.csproj	(revision 324)
@@ -1,3 +1,3 @@
-<?xml version="1.0" encoding="utf-8"?>
+﻿<?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
@@ -43,4 +43,8 @@
       <Private>False</Private>
     </Reference>
+    <Reference Include="UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+      <HintPath>..\7dtd-binaries\UnityEngine.CoreModule.dll</HintPath>
+      <Private>False</Private>
+    </Reference>
   </ItemGroup>
   <ItemGroup>
Index: binary-improvements/AllocsCommands/Commands/Give.cs
===================================================================
--- binary-improvements/AllocsCommands/Commands/Give.cs	(revision 323)
+++ binary-improvements/AllocsCommands/Commands/Give.cs	(revision 324)
@@ -53,35 +53,21 @@
 				}
 
+				int quality = Constants.cItemMaxQuality;
+
 				if (_params.Count == 4) {
-					if (!iv.HasQuality && iv.Attachments == null && iv.Parts == null) {
-						SdtdConsole.Instance.Output ("Item " + _params [1] + " does not support quality.");
-						return;
-					}
-
-					int quality = int.MinValue;
-					if (!int.TryParse (_params [3], out quality) || quality <= 0) {
+					if(!int.TryParse(_params [1], out quality) || quality <= 0) {
 						SdtdConsole.Instance.Output ("Quality is not an integer or not greater than zero.");
 						return;
 					}
+				}
+
+				if (ItemClass.list [iv.type].HasSubItems) {
+					for (int i = 0; i < iv.Modifications.Length; i++) {
+						ItemValue tmp = iv.Modifications[i];
+						tmp.Quality = quality;
+						iv.Modifications[i] = tmp;
+					}
+				} else if (ItemClass.list [iv.type].HasQuality) {
 					iv.Quality = quality;
-
-					// Specific code for weapons with parts and attachmetns
-					if (iv.Attachments != null && iv.Attachments.Length != 0) {
-						for (int i = 0; i < iv.Attachments.Length; i++) {
-							ItemValue att = iv.Attachments[i];
-							if (att != null && att.HasQuality) {
-								att.Quality = quality;
-							}
-						}
-					}
-
-					if (iv.Parts != null && iv.Parts.Length != 0) {
-						for (int i = 0; i < iv.Parts.Length; i++) {
-							ItemValue part = iv.Parts[i];
-							if (part != null && part.HasQuality) {
-								part.Quality = quality;
-							}
-						}
-					}
 				}
 
Index: binary-improvements/AllocsCommands/PrivateMessageConnections.cs
===================================================================
--- binary-improvements/AllocsCommands/PrivateMessageConnections.cs	(revision 323)
+++ binary-improvements/AllocsCommands/PrivateMessageConnections.cs	(revision 324)
@@ -18,5 +18,5 @@
 			if (senderOfLastPM.ContainsKey (_player.steamId)) {
 				CSteamID recSteamId = senderOfLastPM [_player.steamId];
-				ClientInfo recInfo = ConnectionManager.Instance.GetClientInfoForSteamId (recSteamId);
+				ClientInfo recInfo = ConnectionManager.Instance.Clients.ForSteamId (recSteamId);
 				return recInfo;
 			}
