diff --git a/src/modules/lexdict/rawld/rawld.cpp b/src/modules/lexdict/rawld/rawld.cpp
index 6f44c77..26eea3d 100644
--- a/src/modules/lexdict/rawld/rawld.cpp
+++ b/src/modules/lexdict/rawld/rawld.cpp
@@ -147,12 +147,26 @@ void RawLD::increment(int steps) {
 
 
 void RawLD::setEntry(const char *inbuf, long len) {
-	doSetText(*key, inbuf, len);
+	char *buf = new char [ strlen(*key) + 6 ];
+	strcpy(buf, *key);
+
+	if (strongsPadding) strongsPad(buf);
+
+	doSetText(buf, inbuf, len);
+
+	delete [] buf;
 }
 
 
 void RawLD::linkEntry(const SWKey *inkey) {
-	doLinkEntry(*key, *inkey);
+	char *buf = new char [ strlen(*key) + 6 ];
+	strcpy(buf, *key);
+
+	if (strongsPadding) strongsPad(buf);
+
+	doLinkEntry(buf, *inkey);
+
+	delete [] buf;
 }
 
 
@@ -163,7 +177,14 @@ void RawLD::linkEntry(const SWKey *inkey) {
  */
 
 void RawLD::deleteEntry() {
-	doSetText(*key, "");
+	char *buf = new char [ strlen(*key) + 6 ];
+	strcpy(buf, *key);
+
+	if (strongsPadding) strongsPad(buf);
+
+	doSetText(buf, "");
+
+	delete [] buf;
 }
 
 
diff --git a/src/modules/lexdict/rawld4/rawld4.cpp b/src/modules/lexdict/rawld4/rawld4.cpp
index 0cc49ae..51449ea 100644
--- a/src/modules/lexdict/rawld4/rawld4.cpp
+++ b/src/modules/lexdict/rawld4/rawld4.cpp
@@ -145,12 +145,26 @@ void RawLD4::increment(int steps) {
 
 
 void RawLD4::setEntry(const char *inbuf, long len) {
-	doSetText(*key, inbuf, len);
+	char *buf = new char [ strlen(*key) + 6 ];
+	strcpy(buf, *key);
+
+	if (strongsPadding) strongsPad(buf);
+
+	doSetText(buf, inbuf, len);
+
+	delete [] buf;
 }
 
 
 void RawLD4::linkEntry(const SWKey *inkey) {
-	doLinkEntry(*key, *inkey);
+	char *buf = new char [ strlen(*key) + 6 ];
+	strcpy(buf, *key);
+
+	if (strongsPadding) strongsPad(buf);
+
+	doLinkEntry(buf, *inkey);
+
+	delete [] buf;
 }
 
 
@@ -161,7 +175,14 @@ void RawLD4::linkEntry(const SWKey *inkey) {
  */
 
 void RawLD4::deleteEntry() {
-	doSetText(*key, "");
+	char *buf = new char [ strlen(*key) + 6 ];
+	strcpy(buf, *key);
+
+	if (strongsPadding) strongsPad(buf);
+
+	doSetText(buf, "");
+
+	delete [] buf;
 }
 
 
diff --git a/src/modules/lexdict/zld/zld.cpp b/src/modules/lexdict/zld/zld.cpp
index c9f4022..0bcd833 100644
--- a/src/modules/lexdict/zld/zld.cpp
+++ b/src/modules/lexdict/zld/zld.cpp
@@ -144,12 +144,26 @@ void zLD::increment(int steps) {
 
 
 void zLD::setEntry(const char *inbuf, long len) {
-	setText(*key, inbuf, len);
+	char *buf = new char [ strlen(*key) + 6 ];
+	strcpy(buf, *key);
+
+	if (strongsPadding) strongsPad(buf);
+
+    setText(buf, inbuf, len);
+
+	delete [] buf;
 }
 
 
 void zLD::linkEntry(const SWKey *inkey) {
-	zStr::linkEntry(*key, *inkey);
+	char *buf = new char [ strlen(*key) + 6 ];
+	strcpy(buf, *key);
+
+	if (strongsPadding) strongsPad(buf);
+
+    zStr::linkEntry(buf, *inkey);
+
+	delete [] buf;
 }
 
 
@@ -160,7 +174,14 @@ void zLD::linkEntry(const SWKey *inkey) {
  */
 
 void zLD::deleteEntry() {
-	setText(*key, "");
+	char *buf = new char [ strlen(*key) + 6 ];
+	strcpy(buf, *key);
+
+	if (strongsPadding) strongsPad(buf);
+
+    setText(buf, "");
+
+	delete [] buf;
 }
 
 
diff --git a/utilities/imp2ld.cpp b/utilities/imp2ld.cpp
index 55cb73b..3c1a59e 100644
--- a/utilities/imp2ld.cpp
+++ b/utilities/imp2ld.cpp
@@ -56,10 +56,11 @@ void usage(const char *progName, const char *error = 0) {
 	fprintf(stderr, "  -a\t\t\t augment module if exists (default is to create new)\n");
 	fprintf(stderr, "  -z <l|z|b|x>\t\t use compression (default: none)\n");
 	fprintf(stderr, "\t\t\t\t l - LZSS; z - ZIP; b - bzip2; x - xz\n");
-	fprintf(stderr, "  -o <output_path>\t where to write data files.\n");
+	fprintf(stderr, "  -o <output_path>\t\t where to write data files.\n");
 	fprintf(stderr, "  -4\t\t\t use 4 byte size entries (default: 2).\n");
 	fprintf(stderr, "  -b <entry_count>\t\t compression block size (default 30 entries)\n");
 	fprintf(stderr, "  -s\t\t\t case sensitive keys (default is not case sensitive)\n");
+	fprintf(stderr, "  -P\t\t\t disable key Strong's number padding (by defalut keys will be padded).");
 	fprintf(stderr, "\n");
 	fprintf(stderr, "'imp' format is a simple standard for importing data into SWORD modules.\n"
 		"Required is a plain text file containing $$$key lines followed by content.\n\n"
@@ -87,6 +88,7 @@ int main(int argc, char **argv) {
 	SWCompress *compressor = 0;
 	SWBuf compType         = "";
 	bool fourByteSize      = false;
+	bool strongsPadding    = true;
 
 	if (argc < 2) usage(*argv);
 
@@ -117,6 +119,9 @@ int main(int argc, char **argv) {
 		else if (!strcmp(argv[i], "-4")) {
 			fourByteSize = true;
 		}
+		else if (!strcmp(argv[i], "-P")) {
+			strongsPadding = false;
+		}
 		else if (!strcmp(argv[i], "-b")) {
 			if (i+1 < argc) {
 				blockCount = atoi(argv[++i]);
@@ -144,6 +149,10 @@ int main(int argc, char **argv) {
 
 	std::ifstream infile(inFileName);
 
+	if(!infile.is_open()) {
+		std::cout << "Unable to open file " << inFileName << std::endl;
+		return -1;
+	}
 
 	SWModule *mod = 0;
 	SWKey *key, *linkKey;
@@ -165,7 +174,7 @@ int main(int argc, char **argv) {
 		usage(*argv, "ERROR: SWORD library not compiled with bzip2 compression support.\n\tBe sure libbz2 is available when compiling SWORD library");
 #endif
 	}
-	else if (compType = "XZ") {
+	else if (compType == "XZ") {
 #ifndef EXCLUDEXZ
 		compressor = new XzCompress();
 #else
@@ -192,12 +201,12 @@ int main(int argc, char **argv) {
 	if (compressor) {
 		// Create a compressed text module allowing very large entries
 		// Taking defaults except for first, fourth, fifth and last argument
-		mod = new zLD(outPath, 0, 0, blockCount, compressor, 0, ENC_UNKNOWN, DIRECTION_LTR, FMT_UNKNOWN, 0, caseSensitive);
+		mod = new zLD(outPath, 0, 0, blockCount, compressor, 0, ENC_UNKNOWN, DIRECTION_LTR, FMT_UNKNOWN, 0, caseSensitive, strongsPadding);
 	}
 	else {
 		mod = (!fourByteSize)
-			? (SWModule *)new RawLD (outPath, 0, 0, 0, ENC_UNKNOWN, DIRECTION_LTR, FMT_UNKNOWN, 0, caseSensitive)
-			: (SWModule *)new RawLD4(outPath, 0, 0, 0, ENC_UNKNOWN, DIRECTION_LTR, FMT_UNKNOWN, 0, caseSensitive);
+			? (SWModule *)new RawLD (outPath, 0, 0, 0, ENC_UNKNOWN, DIRECTION_LTR, FMT_UNKNOWN, 0, caseSensitive, strongsPadding)
+			: (SWModule *)new RawLD4(outPath, 0, 0, 0, ENC_UNKNOWN, DIRECTION_LTR, FMT_UNKNOWN, 0, caseSensitive, strongsPadding);
 	}
 
 
@@ -254,7 +263,6 @@ int main(int argc, char **argv) {
 	infile.close();
 
 	delete linkKey;
-	delete key;
 	delete mod;
 
 	return 0;
